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