using System; using System.Collections; using TMPro; using UnityEngine; using System.Collections.Generic; public class Room : MonoBehaviour { public int number; public GameObject numberTextObject; public List adjacentRooms; public bool isEntrance; public event EventHandler ValidRoomClicked; bool _isExplored = false; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { if (isEntrance) { SetPropertiesOfEntrance(); } TextMeshProUGUI numberText = numberTextObject.GetComponent(); numberText.SetText(number.ToString()); } public void SetRoomExplored() { _isExplored = true; gameObject.GetComponent().color = ColorUtility.AddGreyShade(gameObject.GetComponent().color, 0.5f); } void SetPropertiesOfEntrance() { gameObject.GetComponent().color = Color.green; isEntrance = true; } IEnumerator OnMouseDown() { if (IsValidRoomToExplore()) { OnValidRoomClicked(); } yield return null; } protected virtual void OnValidRoomClicked() { ValidRoomClicked?.Invoke(this, this); } // Check if the room is valid to be explored. If so trigger the event. bool IsValidRoomToExplore() { if (_isExplored) { return false; } if (isEntrance) { // All entrance rooms are valid to be explored. return true; } else if (HasExploredAdjacentRooms()) { // Otherwise the room must have an adjacent room explored. return true; } return false; } bool HasExploredAdjacentRooms() { foreach (GameObject adjacentRoom in adjacentRooms) { if (adjacentRoom.GetComponent()._isExplored) { return true; } } return false; } }