using UnityEngine; using DoorScript; // Namespace của gói Wood Door Pack namespace OnlyScove.Scripts { public class DoorInteractable : BaseInteractable { [Header("Door Component (Optional)")] [SerializeField] private Door woodDoorScript; [Header("Animator (Optional)")] [SerializeField] private Animator animator; [SerializeField] private string boolParameterName = "IsOpen"; private bool isOpen = false; // Ghi đè Prompt để hiện trạng thái Mở/Đóng tùy vào cửa đang như thế nào public override string InteractionPrompt { get { bool currentOpen = woodDoorScript != null ? woodDoorScript.open : isOpen; return (currentOpen ? "Đóng " : "Mở ") + (interactionData != null ? interactionData.promptText : "Cửa"); } } private void Awake() { Debug.Log($"[DoorInteractable] Initializing on {gameObject.name}"); // 1. Tìm Door script (Tìm mọi nơi: bản thân, con, cha) if (woodDoorScript == null) woodDoorScript = GetComponent(); if (woodDoorScript == null) woodDoorScript = GetComponentInChildren(true); if (woodDoorScript == null) woodDoorScript = GetComponentInParent(); if (woodDoorScript != null) { Debug.Log($"[DoorInteractable] SUCCESS: Found Door script on {woodDoorScript.gameObject.name}"); // Đảm bảo có AudioSource var source = woodDoorScript.GetComponent(); if (source == null) source = woodDoorScript.gameObject.AddComponent(); woodDoorScript.asource = source; isOpen = woodDoorScript.open; } // 2. Tìm Animator (Tìm mọi nơi) if (animator == null) animator = GetComponent(); if (animator == null) animator = GetComponentInChildren(true); if (animator == null) animator = GetComponentInParent(); // 3. TỰ ĐỘNG TẮT SCRIPT XUNG ĐỘT (CameraOpenDoor) nếu nó đang tồn tại trên Camera // Điều này giúp hệ thống của bạn chiếm quyền điều khiển hoàn toàn var conflictingScript = Object.FindFirstObjectByType(); if (conflictingScript != null) { Debug.Log("[DoorInteractable] Disabling conflicting CameraOpenDoor script to take full control."); conflictingScript.enabled = false; } } // protected override void PerformInteraction(PlayerStateMachine player) // { // Debug.Log($"[Interaction] PerformInteraction CALLED on {gameObject.name}!"); // // // 1. Ưu tiên script của Door Pack (Wood Door Script) // if (woodDoorScript != null) // { // Debug.Log($"[Interaction] Calling woodDoorScript.OpenDoor() on {gameObject.name}. Previous state: {woodDoorScript.open}"); // woodDoorScript.OpenDoor(); // isOpen = woodDoorScript.open; // Debug.Log($"[Interaction] New state: {woodDoorScript.open}"); // return; // } // // // 2. Nếu không có script Pack mới dùng Animator // if (animator != null) // { // isOpen = !isOpen; // animator.SetBool(boolParameterName, isOpen); // Debug.Log($"[Interaction] Triggered Animator: {boolParameterName} = {isOpen}"); // } // else // { // Debug.LogError($"[Interaction] FAILED: No woodDoorScript or animator found on {gameObject.name}"); // } // } } }