Refactored clicking on dice and rooms so that logic is moved out of the game manager
This commit is contained in:
parent
ede5ef1533
commit
e7ea8302ad
8 changed files with 150 additions and 67 deletions
|
|
@ -1293,6 +1293,7 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
passButton: {fileID: 895359725}
|
||||
gameManager: {fileID: 126339304}
|
||||
--- !u!114 &895359725
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -1332,7 +1333,7 @@ MonoBehaviour:
|
|||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_Interactable: 0
|
||||
m_TargetGraphic: {fileID: 895359726}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
|
|
@ -1648,6 +1649,10 @@ PrefabInstance:
|
|||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 1820284206}
|
||||
m_Modifications:
|
||||
- target: {fileID: 1770509300873928573, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2435349004046080434, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Room (1)
|
||||
|
|
@ -1660,6 +1665,10 @@ PrefabInstance:
|
|||
propertyPath: keyType
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2727030095425591755, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2727030095425591755, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3}
|
||||
propertyPath: isEntrance
|
||||
value: 1
|
||||
|
|
@ -1684,6 +1693,14 @@ PrefabInstance:
|
|||
propertyPath: 'unexploredAdjacentRooms.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 794442986}
|
||||
- target: {fileID: 4019891345885281529, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4019891345885281529, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3}
|
||||
propertyPath: m_IsTrigger
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9187907134033443523, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: -3.647156
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ public class DicePair
|
|||
|
||||
public void SelectDie(Die die)
|
||||
{
|
||||
if (ContainsDie(die)) return;
|
||||
|
||||
if (_pair.Item1 == null && _pair.Item2 == null)
|
||||
{
|
||||
_pair.Item1 = die;
|
||||
|
|
|
|||
|
|
@ -15,11 +15,14 @@ public class Die : MonoBehaviour
|
|||
private int _result = 0;
|
||||
[SerializeField] private Button dieButton; // assign in the editor
|
||||
private Color originalColor;
|
||||
public event EventHandler<Die> DieClicked;
|
||||
private bool _isClickable = false;
|
||||
private bool _selected = false;
|
||||
public event Action<Die> DieSelected;
|
||||
public event Action<Die> DieUnselected;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
dieButton.onClick.AddListener(() => { DiePressed();});
|
||||
private void Start() {
|
||||
GameManager.Instance.StateChanged += HandleStateChange;
|
||||
dieButton.onClick.AddListener(DiePressed);
|
||||
|
||||
originalColor = gameObject.GetComponent<Image>().color;
|
||||
}
|
||||
|
|
@ -34,8 +37,8 @@ public class Die : MonoBehaviour
|
|||
return _result;
|
||||
}
|
||||
|
||||
public void ResetDie()
|
||||
{
|
||||
public void ResetDie() {
|
||||
_selected = false;
|
||||
gameObject.GetComponent<Image>().color = originalColor;
|
||||
gameObject.GetComponent<Outline>().enabled = false;
|
||||
}
|
||||
|
|
@ -56,18 +59,46 @@ public class Die : MonoBehaviour
|
|||
|
||||
private void DiePressed()
|
||||
{
|
||||
DieClicked?.Invoke(this, this);
|
||||
if (!_isClickable) return;
|
||||
|
||||
if (_selected)
|
||||
{
|
||||
DieUnselected?.Invoke(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
DieSelected?.Invoke(this);
|
||||
}
|
||||
}
|
||||
|
||||
private void DieSelectedButPairNotComplete()
|
||||
{
|
||||
_selected = true;
|
||||
gameObject.GetComponent<Outline>().enabled = true;
|
||||
}
|
||||
|
||||
private void DieSelectedAndPairComplete()
|
||||
{
|
||||
private void DieSelectedAndPairComplete() {
|
||||
_selected = true;
|
||||
gameObject.GetComponent<Outline>().enabled = false;
|
||||
gameObject.GetComponent<Image>().color =
|
||||
ColorHelper.AddColorTint(gameObject.GetComponent<Image>().color, ColorHelper.OkayGreen, 0.5f);
|
||||
}
|
||||
|
||||
private void HandleStateChange(GameState state) {
|
||||
switch (state)
|
||||
{
|
||||
case GameState.PickDiceOne:
|
||||
case GameState.PickDiceTwo:
|
||||
case GameState.PickRoomOne:
|
||||
case GameState.PickRoomTwo:
|
||||
_isClickable = true;
|
||||
break;
|
||||
case GameState.RollDice:
|
||||
_isClickable = false;
|
||||
break;
|
||||
default:
|
||||
_isClickable = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using UnityEngine;
|
|||
using Object = UnityEngine.Object;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using Unity.VisualScripting;
|
||||
|
||||
public enum GameState
|
||||
{
|
||||
|
|
@ -14,6 +15,8 @@ public enum GameState
|
|||
}
|
||||
public class GameManager : MonoBehaviour
|
||||
{
|
||||
public static GameManager Instance { get; private set; }
|
||||
|
||||
[SerializeField] public GameState state;
|
||||
[SerializeField] private GameObject rooms;
|
||||
[SerializeField] private DiceRoller diceRoller;
|
||||
|
|
@ -22,7 +25,15 @@ public class GameManager : MonoBehaviour
|
|||
|
||||
private DicePair _dicePairOne = new();
|
||||
private DicePair _dicePairTwo = new();
|
||||
public event EventHandler<GameState> StateChanged;
|
||||
public event Action<GameState> StateChanged;
|
||||
|
||||
private void Awake() {
|
||||
if (Instance != null && Instance != this) {
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
|
|
@ -35,14 +46,18 @@ public class GameManager : MonoBehaviour
|
|||
}
|
||||
foreach (Transform diceTransform in diceRoller.dice.transform)
|
||||
{
|
||||
diceTransform.gameObject.GetComponent<Die>().DieClicked += DieClicked;
|
||||
diceTransform.gameObject.GetComponent<Die>().DieSelected += HandleDieSelected;
|
||||
diceTransform.gameObject.GetComponent<Die>().DieUnselected += HandleDieUnselected;
|
||||
}
|
||||
StartNewTurn();
|
||||
}
|
||||
|
||||
private void ChangeState(GameState stateToChangeTo) {
|
||||
state = stateToChangeTo;
|
||||
StateChanged?.Invoke(this, state);
|
||||
if (state != stateToChangeTo)
|
||||
{
|
||||
state = stateToChangeTo;
|
||||
StateChanged?.Invoke(state);
|
||||
}
|
||||
}
|
||||
|
||||
private void StartNewTurn()
|
||||
|
|
@ -55,11 +70,6 @@ public class GameManager : MonoBehaviour
|
|||
}
|
||||
|
||||
void ValidRoomClicked(object sender, Room room) {
|
||||
if (state != GameState.PickRoomOne && state != GameState.PickRoomTwo)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case GameState.PickRoomOne when !room.TryUnlock(_dicePairOne):
|
||||
|
|
@ -78,63 +88,50 @@ public class GameManager : MonoBehaviour
|
|||
}
|
||||
}
|
||||
|
||||
void DieClicked(object sender, Die die)
|
||||
{
|
||||
private void HandleDieSelected(Die die) {
|
||||
switch (state)
|
||||
{
|
||||
case GameState.PickDiceOne:
|
||||
{
|
||||
if (!_dicePairOne.ContainsDie(die))
|
||||
_dicePairOne.SelectDie(die);
|
||||
if (_dicePairOne.AreBothDiceSelected())
|
||||
{
|
||||
_dicePairOne.SelectDie(die);
|
||||
|
||||
if (_dicePairOne.AreBothDiceSelected())
|
||||
{
|
||||
ChangeState(GameState.PickRoomOne);
|
||||
HighLightValidRoomsWithNumber(_dicePairOne);
|
||||
}
|
||||
ChangeState(GameState.PickRoomOne);
|
||||
HighLightValidRoomsWithNumber(_dicePairOne);
|
||||
}
|
||||
else
|
||||
{
|
||||
_dicePairOne.UnselectDie(die);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case GameState.PickDiceTwo:
|
||||
{
|
||||
if (!_dicePairTwo.ContainsDie(die) && !_dicePairOne.ContainsDie(die))
|
||||
_dicePairTwo.SelectDie(die);
|
||||
if (_dicePairTwo.AreBothDiceSelected())
|
||||
{
|
||||
_dicePairTwo.SelectDie(die);
|
||||
|
||||
if (_dicePairTwo.AreBothDiceSelected())
|
||||
{
|
||||
ChangeState(GameState.PickRoomTwo);
|
||||
HighLightValidRoomsWithNumber(_dicePairTwo);
|
||||
}
|
||||
ChangeState(GameState.PickRoomTwo);
|
||||
HighLightValidRoomsWithNumber(_dicePairTwo);
|
||||
}
|
||||
else if (_dicePairTwo.ContainsDie(die))
|
||||
{
|
||||
_dicePairTwo.UnselectDie(die);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleDieUnselected(Die die) {
|
||||
switch (state)
|
||||
{
|
||||
case GameState.PickDiceOne:
|
||||
case GameState.PickRoomOne:
|
||||
if (_dicePairOne.ContainsDie(die))
|
||||
if (state == GameState.PickRoomOne)
|
||||
{
|
||||
_dicePairOne.UnselectDie(die);
|
||||
UnhighLightRoomsAsOptions();
|
||||
ChangeState(GameState.PickDiceOne);
|
||||
}
|
||||
_dicePairOne.UnselectDie(die);
|
||||
UnhighLightRoomsAsOptions();
|
||||
break;
|
||||
case GameState.PickDiceTwo:
|
||||
case GameState.PickRoomTwo:
|
||||
if (_dicePairTwo.ContainsDie(die))
|
||||
if (state == GameState.PickRoomTwo)
|
||||
{
|
||||
_dicePairTwo.UnselectDie(die);
|
||||
UnhighLightRoomsAsOptions();
|
||||
ChangeState(GameState.PickDiceTwo);
|
||||
}
|
||||
_dicePairTwo.UnselectDie(die);
|
||||
UnhighLightRoomsAsOptions();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 85fe57d438ef1ec4fa8b36b9c17c11a4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 1
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@ public class PassManager : MonoBehaviour
|
|||
void Start()
|
||||
{
|
||||
passButton.onClick.AddListener(OnPassClicked);
|
||||
gameManager.StateChanged += OnGameStateChange;
|
||||
gameManager.StateChanged += HandleStateChange;
|
||||
}
|
||||
|
||||
private void OnGameStateChange(object sender, GameState state) {
|
||||
private void HandleStateChange(GameState state) {
|
||||
if (state == GameState.RollDice)
|
||||
{
|
||||
passButton.interactable = false;
|
||||
|
|
|
|||
|
|
@ -1,2 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 95487118287b4514fb9b9fb7018ae717
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
|
|||
|
|
@ -20,12 +20,12 @@ public class Room : MonoBehaviour
|
|||
public event EventHandler<Room> ValidRoomClicked;
|
||||
|
||||
bool _isExplored = false;
|
||||
|
||||
private bool _isClickable = true;
|
||||
private Color _roomNumberOriginalColor;
|
||||
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start() {
|
||||
|
||||
GameManager.Instance.StateChanged += HandleStateChange;
|
||||
|
||||
if (isEntrance) {
|
||||
SetPropertiesOfEntrance();
|
||||
|
|
@ -44,6 +44,10 @@ public class Room : MonoBehaviour
|
|||
}
|
||||
}
|
||||
|
||||
private void OnEnable() {
|
||||
|
||||
}
|
||||
|
||||
public void SetRoomExplored() {
|
||||
_isExplored = true;
|
||||
UnhighlightRoomAsOption();
|
||||
|
|
@ -66,12 +70,11 @@ public class Room : MonoBehaviour
|
|||
isEntrance = true;
|
||||
}
|
||||
|
||||
IEnumerator OnMouseDown()
|
||||
{
|
||||
void OnMouseDown() {
|
||||
if (!_isClickable) return;
|
||||
if (IsValidRoomToExplore()) {
|
||||
OnValidRoomClicked();
|
||||
}
|
||||
yield return null;
|
||||
}
|
||||
|
||||
protected virtual void OnValidRoomClicked() {
|
||||
|
|
@ -126,4 +129,19 @@ public class Room : MonoBehaviour
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void HandleStateChange(GameState state) {
|
||||
switch (state)
|
||||
{
|
||||
case GameState.PickDiceOne:
|
||||
case GameState.PickDiceTwo:
|
||||
case GameState.RollDice:
|
||||
_isClickable = false;
|
||||
break;
|
||||
case GameState.PickRoomTwo:
|
||||
case GameState.PickRoomOne:
|
||||
_isClickable = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue