Files
2026-07-21 08:58:18 +05:30

180 lines
4.2 KiB
C#

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<PlayerControllerNewRohan>();
if (player == null)
return;
currentPlayer = player;
currentCashManager = other.GetComponent<CashManager>();
// 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<PlayerControllerNewRohan>() == 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<CharacterController>();
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;
}
}