using UnityEngine; public class Vault : MonoBehaviour { [Header("Vault Value")] [SerializeField] private int vaultCash = 1000; [Header("Interaction")] [SerializeField] private Transform interactionPoint; private SimpleTeamAI reservedBy; private bool isBeingOpened; private PlayerControllerNewRohan currentPlayer; private CashManager currentCashManager; private bool playerInside; private void OnTriggerEnter(Collider other) { if (isBeingOpened) return; PlayerControllerNewRohan player = other.GetComponent(); if (player == null) return; currentPlayer = player; currentCashManager = other.GetComponent(); // Player must deposit before opening another vault if (currentCashManager != null && currentCashManager.currentCash >= vaultCash) { UI_Manager.Instance?.ShowInteractionPrompt("Deposit your cash before opening another vault."); return; } playerInside = true; MobileInteractButton.Instance?.Show(); InteractionManager.CurrentInteraction = OpenVaultForPlayer; if (!isBeingOpened) { UI_Manager.Instance?.ShowInteractionPrompt("Press the interaction button to open vault."); } } private void OnTriggerExit(Collider other) { if (other.GetComponent() == currentPlayer) { playerInside = false; currentPlayer?.CancelVaultOpening(); currentPlayer = null; currentCashManager = null; UI_Manager.Instance?.HideActionTimer(); MobileInteractButton.Instance?.Hide(); InteractionManager.Clear(); } } private void Update() { if (!playerInside) return; //if (Input.GetKeyDown(KeyCode.F)) //{ // OpenVaultForPlayer(); //} } private void OpenVaultForPlayer() { //if (reservedBy != null) // return; if (currentPlayer == null || currentCashManager == null || isBeingOpened) return; if (currentCashManager.currentCash >= vaultCash) { UI_Manager.Instance?.ShowInteractionPrompt("Deposit your cash before opening another vault."); return; } UI_Manager.Instance?.HideActionTimer(); isBeingOpened = true; CharacterController cc = currentPlayer.GetComponent(); if (cc != null) cc.enabled = false; currentPlayer.transform.position = interactionPoint.position; if (cc != null) cc.enabled = true; Vector3 lookDir = transform.position - currentPlayer.transform.position; lookDir.y = 0; if (lookDir.sqrMagnitude > 0.01f) currentPlayer.transform.rotation = Quaternion.LookRotation(lookDir); currentPlayer.PlayVaultOpen(() => { currentCashManager.AddCash(vaultCash); VaultSpawner.Instance?.NotifyVaultDestroyed(); Debug.Log("VAULT OPENED: $" + vaultCash); Destroy(gameObject); }); } public Transform InteractionPoint => interactionPoint; public int GetVaultCash() { return vaultCash; } public bool IsReserved() { return reservedBy != null || playerInside; } public bool TryReserve(SimpleTeamAI ai) { if (isBeingOpened) return false; if (reservedBy != null && reservedBy != ai) return false; reservedBy = ai; return true; } public bool IsReservedBy(SimpleTeamAI ai) { return reservedBy == ai; } public void MarkBeingOpened(SimpleTeamAI ai) { if (reservedBy == ai) isBeingOpened = true; } public void Release(SimpleTeamAI ai) { if (reservedBy == ai) { reservedBy = null; isBeingOpened = false; } } public bool IsPlayerInside() { return playerInside; } }