полнценая система прогресаа и конца уровне с началом и концом
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
extends Node
|
||||
|
||||
# Хранилище данных, которое живет между уровнями
|
||||
var saved_health: float = 100.0
|
||||
var saved_weapons: Array = []
|
||||
var saved_weapon_index: int = 0
|
||||
var saved_ammo_dict: Dictionary = {}
|
||||
|
||||
var is_transfer_ready: bool = false # Флаг, что у нас есть сохраненные данные
|
||||
|
||||
# --- ФУНКЦИЯ 1: СОХРАНЕНИЕ ДАННЫХ ПЕРЕД СМЕНОЙ СЦЕНЫ ---
|
||||
func save_player_data(player: Node) -> void:
|
||||
if player == null: return
|
||||
|
||||
# 1. Запоминаем Здоровье
|
||||
var health_comp = player.find_child("HealthComponent", true, false)
|
||||
if health_comp:
|
||||
saved_health = health_comp.current_health
|
||||
|
||||
# 2. Запоминаем Оружие и Патроны
|
||||
# Найди этот блок внутри save_player_data в GameTransfer.gd:
|
||||
var weapon_manager = player.find_child("WeaponManager", true, false)
|
||||
if weapon_manager:
|
||||
saved_weapons = weapon_manager.weaponStack.duplicate()
|
||||
saved_weapon_index = weapon_manager.weaponIndex
|
||||
|
||||
# ИСПРАВЛЕНО: Более глубокий поиск менеджера патронов, если автор спрятал его в детях
|
||||
var ammo_manager = weapon_manager.find_child("AmmoManager", true, false)
|
||||
if ammo_manager == null and "ammoManager" in weapon_manager:
|
||||
ammo_manager = weapon_manager.ammoManager
|
||||
|
||||
if ammo_manager and "ammoDict" in ammo_manager:
|
||||
saved_ammo_dict = ammo_manager.ammoDict.duplicate()
|
||||
|
||||
|
||||
is_transfer_ready = true
|
||||
print("[ПЕРЕНОС] Данные игрока успешно сохранены в кэш!")
|
||||
|
||||
# --- ФУНКЦИЯ 2: ВОССТАНОВЛЕНИЕ ДАННЫХ НА НОВОМ УРОВНЕ ---
|
||||
func load_player_data(player: Node) -> void:
|
||||
if player == null or not is_transfer_ready: return
|
||||
|
||||
# 1. Возвращаем Здоровье
|
||||
var health_comp = player.find_child("HealthComponent", true, false)
|
||||
if health_comp:
|
||||
health_comp.current_health = saved_health
|
||||
# Обновляем цифры на новом HUD
|
||||
var health_ui = player.find_child("PlayerHealthUI", true, false)
|
||||
if health_ui and health_ui.has_method("_process"):
|
||||
health_ui.notification(NOTIFICATION_PROCESS)
|
||||
|
||||
# 2. Возвращаем Оружие и Патроны
|
||||
var weapon_manager = player.find_child("WeaponManager", true, false)
|
||||
if weapon_manager:
|
||||
weapon_manager.weaponStack = saved_weapons.duplicate()
|
||||
weapon_manager.weaponIndex = saved_weapon_index
|
||||
|
||||
if "ammoManager" in weapon_manager and weapon_manager.ammoManager:
|
||||
weapon_manager.ammoManager.ammoDict = saved_ammo_dict.duplicate()
|
||||
|
||||
# Принудительно заставляем ассет достать правильное оружие из памяти
|
||||
if weapon_manager.has_method("changeWeapon"):
|
||||
weapon_manager.changeWeapon(saved_weapon_index)
|
||||
|
||||
print("[ПЕРЕНОС] Снаряжение и ХП успешно возвращены игроку на новом уровне!")
|
||||
Reference in New Issue
Block a user