using UnityEngine; /// /// Debug tool for testing the respawn system without dying naturally. /// Attach to any GameObject in your scene. /// public class RespawnSystemTester : MonoBehaviour { [Header("Debug Controls")] [Tooltip("Press this key to instantly kill all party members")] public KeyCode killPartyKey = KeyCode.K; [Tooltip("Press this key to save a checkpoint at current position")] public KeyCode saveCheckpointKey = KeyCode.P; [Tooltip("Press this key to respawn at last checkpoint")] public KeyCode respawnKey = KeyCode.R; [Tooltip("Press this key to damage all characters by 20 HP")] public KeyCode damagePartyKey = KeyCode.H; [Header("References (Auto-found if not assigned)")] public TeamCohesionManager cohesionManager; public CheckpointSystem checkpointSystem; public GameManager gameManager; private bool showDebugUI = true; private void Start() { // Auto-find references if not assigned if (cohesionManager == null) cohesionManager = FindFirstObjectByType(); if (checkpointSystem == null) checkpointSystem = FindFirstObjectByType(); if (gameManager == null) gameManager = FindFirstObjectByType(); Debug.Log("[RespawnTester] Press '" + killPartyKey + "' to test death system"); Debug.Log("[RespawnTester] Press '" + saveCheckpointKey + "' to save checkpoint"); Debug.Log("[RespawnTester] Press '" + damagePartyKey + "' to damage party"); } private void Update() { // Kill all party members instantly if (Input.GetKeyDown(killPartyKey)) { KillAllPartyMembers(); } // Save checkpoint if (Input.GetKeyDown(saveCheckpointKey)) { SaveCheckpoint(); } // Force respawn if (Input.GetKeyDown(respawnKey)) { ForceRespawn(); } // Damage party if (Input.GetKeyDown(damagePartyKey)) { DamageAllPartyMembers(20); } // Toggle debug UI if (Input.GetKeyDown(KeyCode.F1)) { showDebugUI = !showDebugUI; } } /// /// Instantly kill all party members to test death system /// public void KillAllPartyMembers() { if (cohesionManager == null || cohesionManager.groupMembers == null) { Debug.LogError("[RespawnTester] Cannot kill party: CohesionManager not found"); return; } Debug.Log("[RespawnTester] 💀 Killing all party members..."); // Set all characters to 0 HP foreach (var character in cohesionManager.groupMembers) { character.currentHP = 0; // Update UI to show 0 HP UIUpdater.Instance?.UpdateCharacterHP(character); // Trigger death on UI controller var uiController = UIUpdater.Instance?.GetUIForCharacter(character); if (uiController != null) { uiController.HandleCharacterDeath(); } } Debug.Log("[RespawnTester] All party members killed. Death system should trigger..."); } /// /// Damage all party members by a certain amount /// public void DamageAllPartyMembers(int damage) { if (cohesionManager == null || cohesionManager.groupMembers == null) { Debug.LogError("[RespawnTester] Cannot damage party: CohesionManager not found"); return; } Debug.Log($"[RespawnTester] ⚔️ Damaging all party members by {damage} HP"); foreach (var character in cohesionManager.groupMembers) { character.currentHP = Mathf.Max(0, character.currentHP - damage); UIUpdater.Instance?.UpdateCharacterHP(character); var uiController = UIUpdater.Instance?.GetUIForCharacter(character); if (uiController != null) { uiController.ShowDamageOnCard(damage); // Check if character died if (character.currentHP <= 0) { uiController.HandleCharacterDeath(); } } } } /// /// Save checkpoint at current position /// public void SaveCheckpoint() { if (checkpointSystem == null) { Debug.LogError("[RespawnTester] Cannot save checkpoint: CheckpointSystem not found"); return; } checkpointSystem.SaveCheckpoint(); Debug.Log("[RespawnTester] 💾 Checkpoint saved at current position"); } /// /// Force respawn without dying /// public void ForceRespawn() { if (gameManager == null) { Debug.LogError("[RespawnTester] Cannot respawn: GameManager not found"); return; } Debug.Log("[RespawnTester] 🔄 Forcing respawn..."); gameManager.RespawnParty(); } /// /// Heal all party members to full /// public void HealAllPartyMembers() { if (cohesionManager == null || cohesionManager.groupMembers == null) { Debug.LogError("[RespawnTester] Cannot heal party: CohesionManager not found"); return; } Debug.Log("[RespawnTester] ❤️ Healing all party members to full"); foreach (var character in cohesionManager.groupMembers) { character.currentHP = character.maxHP; character.currentFatigue = character.maxFatigue; character.currentMana = character.maxMana; UIUpdater.Instance?.UpdateCharacterHP(character); UIUpdater.Instance?.UpdateCharacterFatigue(character); } } private void OnGUI() { if (!showDebugUI) return; // Create debug UI panel GUILayout.BeginArea(new Rect(10, 10, 300, 300)); GUILayout.BeginVertical("box"); GUILayout.Label("=== RESPAWN SYSTEM TESTER ==="); GUILayout.Space(10); GUILayout.Label($"[{killPartyKey}] Kill Party"); GUILayout.Label($"[{damagePartyKey}] Damage Party (-20 HP)"); GUILayout.Label($"[{saveCheckpointKey}] Save Checkpoint"); GUILayout.Label($"[{respawnKey}] Force Respawn"); GUILayout.Label($"[F1] Toggle This UI"); GUILayout.Space(10); // Show party status if (cohesionManager != null && cohesionManager.groupMembers != null) { GUILayout.Label("--- Party Status ---"); foreach (var character in cohesionManager.groupMembers) { GUILayout.Label($"{character.characterName}: {character.currentHP}/{character.maxHP} HP"); } } GUILayout.Space(10); // Checkpoint status if (checkpointSystem != null) { bool hasCheckpoint = checkpointSystem.HasCheckpoint(); GUILayout.Label($"Checkpoint: {(hasCheckpoint ? "✓ Saved" : "✗ None")}"); if (hasCheckpoint) { Vector3 pos = checkpointSystem.GetCheckpointPosition(); GUILayout.Label($"Location: ({pos.x:F1}, {pos.y:F1}, {pos.z:F1})"); } } GUILayout.Space(10); // Manual buttons if (GUILayout.Button("Kill Party")) KillAllPartyMembers(); if (GUILayout.Button("Damage Party")) DamageAllPartyMembers(20); if (GUILayout.Button("Save Checkpoint")) SaveCheckpoint(); if (GUILayout.Button("Heal Party")) HealAllPartyMembers(); GUILayout.EndVertical(); GUILayout.EndArea(); } }