Files

66 lines
2.9 KiB
GDScript
Raw Permalink Normal View History

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("[ПЕРЕНОС] Снаряжение и ХП успешно возвращены игроку на новом уровне!")