Implemented the functionality for monster rooms.
This commit is contained in:
parent
6a309804ad
commit
aa49815fb9
16 changed files with 1182 additions and 71 deletions
132
PuzzleGameProject/Assets/Scripts/Rooms/Room.cs
Normal file
132
PuzzleGameProject/Assets/Scripts/Rooms/Room.cs
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using Unity.VisualScripting;
|
||||
|
||||
public enum KeyType
|
||||
{
|
||||
Number,
|
||||
MatchingDice
|
||||
}
|
||||
|
||||
public abstract class Room : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private List<GameObject> adjacentRooms;
|
||||
[SerializeField] private bool isEntrance;
|
||||
[SerializeField] protected KeyType keyType;
|
||||
public event EventHandler<Room> ValidRoomClicked;
|
||||
private Color _roomNumberOriginalColor;
|
||||
|
||||
protected bool _isExplored = false;
|
||||
private bool _isClickable = true;
|
||||
|
||||
private void OnEnable() {
|
||||
GameManager.StateChanged += HandleStateChange;
|
||||
GameManager.DiceSelected += HandleDiceSelected;
|
||||
GameManager.DiceUnselected += HandDiceUnselected;
|
||||
}
|
||||
|
||||
private void OnDisable() {
|
||||
GameManager.StateChanged -= HandleStateChange;
|
||||
GameManager.DiceSelected -= HandleDiceSelected;
|
||||
GameManager.DiceUnselected -= HandDiceUnselected;
|
||||
}
|
||||
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start() {
|
||||
InitializeRoom();
|
||||
_roomNumberOriginalColor = gameObject.GetComponentInChildren<TextMeshProUGUI>().color;
|
||||
}
|
||||
|
||||
public abstract void SetRoomExplored();
|
||||
|
||||
protected virtual void InitializeRoom() {
|
||||
if (isEntrance) {
|
||||
SetPropertiesOfEntrance();
|
||||
}
|
||||
}
|
||||
|
||||
protected void HighlightRoomAsOption()
|
||||
{
|
||||
gameObject.GetComponentInChildren<TextMeshProUGUI>().color = Color.blue;
|
||||
}
|
||||
|
||||
protected void UnhighlightRoomAsOption()
|
||||
{
|
||||
gameObject.GetComponentInChildren<TextMeshProUGUI>().color = _roomNumberOriginalColor;
|
||||
}
|
||||
|
||||
void SetPropertiesOfEntrance() {
|
||||
gameObject.GetComponent<SpriteRenderer>().color = Color.green;
|
||||
isEntrance = true;
|
||||
}
|
||||
|
||||
void OnMouseDown() {
|
||||
if (!_isClickable) return;
|
||||
if (IsValidRoomToExplore()) {
|
||||
OnValidRoomClicked();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnValidRoomClicked() {
|
||||
ValidRoomClicked?.Invoke(this, this);
|
||||
}
|
||||
|
||||
// Check if the room is valid to be explored. If so trigger the event.
|
||||
private 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<Room>()._isExplored)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract bool TryUnlock(DicePair pair);
|
||||
|
||||
private void HandleStateChange(GameState state) {
|
||||
UnhighlightRoomAsOption();
|
||||
switch (state)
|
||||
{
|
||||
case GameState.PickDiceOne:
|
||||
case GameState.PickDiceTwo:
|
||||
case GameState.RollDice:
|
||||
_isClickable = false;
|
||||
break;
|
||||
case GameState.PickRoomTwo:
|
||||
case GameState.PickRoomOne:
|
||||
_isClickable = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleDiceSelected(DicePair pair) {
|
||||
if (TryUnlock(pair) && IsValidRoomToExplore())
|
||||
{
|
||||
HighlightRoomAsOption();
|
||||
}
|
||||
}
|
||||
|
||||
private void HandDiceUnselected() {
|
||||
UnhighlightRoomAsOption();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue