using UnityEngine; [RequireComponent(typeof(SpriteRenderer))] public class Door : MonoBehaviour { private bool locked = false; private Animator animator; [SerializeField] Room parent; Vector2Int toOuter; BoxCollider2D boundingBox; BoxCollider2D triggerBox; // Use this for initialization void Awake() { BoxCollider2D[] colliders = GetComponents(); animator = GetComponent(); foreach ( BoxCollider2D collider in colliders ) { if ( collider.isTrigger ) { triggerBox = collider; //Debug.Log("Found Door trigger"); } else { boundingBox = collider; //Debug.Log("Found Door collider"); } } } /// /// Sets the parent Room Object reference. /// /// public void SetParent(Room room) { this.parent = room; } public void SetToOuter(Vector2Int v) { toOuter = v; } /// /// Locks the door. /// public void Lock() { animator.SetBool("open", false); locked = true; boundingBox.enabled = true; triggerBox.enabled = false; //GetComponent().enabled = true; } /// /// Unlocks the door. /// public void Unlock() { animator.SetBool("open", true); locked = false; boundingBox.enabled = false; triggerBox.enabled = true; //GetComponent().enabled = false; } /// /// Returns if the door is locked. /// /// public bool IsLocked() { return locked; } /// /// Check if a player moved inside of a room and notify the room. /// /// private void OnTriggerExit2D(Collider2D collision) { // TODO only works correct for entering a room! if ( collision.tag == "Player") { Player player = collision.gameObject.GetComponent(); Vector2 centerToCollider = (Vector2) gameObject.transform.position - parent.GetPosition() + parent.GetCenter(); Vector2 centerToPlayer = (Vector2) player.gameObject.transform.position - parent.GetPosition() + parent.GetCenter(); float angle = Vector2.Angle(( centerToPlayer - centerToCollider ), toOuter); if ( (angle > 90 && angle < 270) ) { Debug.Log("Player is on the outside! Angle: " + angle); return; } Debug.Log("Leaving Trigger"); if(parent == null) { Debug.Log("This door has no parent Room!"); return; } parent.OnPlayerEnter(player); } } }