using System; using Grid; using UnityEngine; public class Door : MonoBehaviour { private static readonly int open = Animator.StringToHash("IsOpen"); [SerializeField] private bool isOpen; private Animator animator; private Action onInteractComplete; private float timer; public bool IsActive { get; private set; } private GridPosition GridPosition { get; set; } private bool IsOpen { get => isOpen; set { isOpen = value; animator.SetBool(open, IsOpen); Pathfinding.Instance.SetWalkableGridPosition(GridPosition, isOpen); } } private void Awake() => animator = GetComponent(); private void Start() { GridPosition = LevelGrid.Instance.GetGridPosition(transform.position); LevelGrid.Instance.SetDoorAtGridPosition(GridPosition, this); IsOpen = isOpen; } private void Update() { if (!IsActive) return; timer -= Time.deltaTime; if (timer > 0f) return; IsActive = false; onInteractComplete(); } public void Interact(Action newOnInteractComplete) { onInteractComplete = newOnInteractComplete; IsActive = true; timer = .5f; IsOpen = !IsOpen; } }