diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index 1f9036b..55d0fea 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -8460,9 +8460,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0483b263e22fc433caab31141efbe319, type: 3} m_Name: m_EditorClassIdentifier: - isDebugTest: 0 + isDebugAITest: 0 + isDebugPlayerTest: 0 diceRollHandler: {fileID: 1013177415} diceValue: 0 + botDiceRollDelay: 0.25 maxDiceSixRollCounter: 2 totalStepsForCharacter: 57 diceText: {fileID: 953941044} @@ -11557,7 +11559,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: diceView: {fileID: 1619592888} - diceTestValue: 1 + diceTestValue: 0 --- !u!4 &1039618837 stripped Transform: m_CorrespondingSourceObject: {fileID: 5672526856521419272, guid: 4dc45edb05c8f4268aebcd5e9cbac783, type: 3} @@ -15159,6 +15161,7 @@ MonoBehaviour: - {fileID: 1107252688} - {fileID: 1406544794} - {fileID: 884011400} + enableLogs: 0 --- !u!4 &1335794571 Transform: m_ObjectHideFlags: 0 @@ -27893,7 +27896,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 457192420, guid: c657b4c04be754166a725c1b25fbea7d, type: 3} + m_Sprite: {fileID: 652690593, guid: 1467c87c1b60f4707b78abdf2804ec02, type: 3} m_Type: 0 m_PreserveAspect: 1 m_FillCenter: 1 diff --git a/Assets/Scripts/Gameplay/GameModeHandler.cs b/Assets/Scripts/Gameplay/GameModeHandler.cs index b1890e6..5089897 100644 --- a/Assets/Scripts/Gameplay/GameModeHandler.cs +++ b/Assets/Scripts/Gameplay/GameModeHandler.cs @@ -24,7 +24,11 @@ public class BotModeData public class GameModeHandler : MonoBehaviour, IBase, IBootLoader, IDataLoader { - private GameplayManager gameplayManager; + public GameplayManager GameplayManager + { + get; private set; + } + private PVPModeData pvpModeData; private BotModeData botModeData; @@ -46,7 +50,7 @@ public class GameModeHandler : MonoBehaviour, IBase, IBootLoader, IDataLoader public void InitializeData() { GameManager = InterfaceManager.Instance.GetInterfaceInstance(); - gameplayManager = InterfaceManager.Instance.GetInterfaceInstance(); + GameplayManager = InterfaceManager.Instance.GetInterfaceInstance(); } public void InitPVPModeData(List types, List names) @@ -57,7 +61,7 @@ public class GameModeHandler : MonoBehaviour, IBase, IBootLoader, IDataLoader }; CurrentGameModeType = GameModeType.PVP; - gameplayManager.InitPlayerTypesForPVP(types, names); + GameplayManager.InitPlayerTypesForPVP(types, names); } public void InitBotModeData(PlayerData playerData, int botCount) @@ -69,7 +73,7 @@ public class GameModeHandler : MonoBehaviour, IBase, IBootLoader, IDataLoader }; CurrentGameModeType = GameModeType.Bot; - gameplayManager.InitPlayerTypesForBotMatch(playerData, botCount); + GameplayManager.InitPlayerTypesForBotMatch(playerData, botCount); } public void OnGameRestarted() diff --git a/Assets/Scripts/Gameplay/GameplayManager.cs b/Assets/Scripts/Gameplay/GameplayManager.cs index 2990490..ac6eceb 100644 --- a/Assets/Scripts/Gameplay/GameplayManager.cs +++ b/Assets/Scripts/Gameplay/GameplayManager.cs @@ -61,7 +61,11 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader get; private set; } private UIManager uIManager; - private GameManager gameManager; + public GameManager GameManager + { + get; private set; + } + private GameModeHandler gameModeHandler; private int diceRolledValue; @@ -70,7 +74,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader private int diceSixRollCounter = 0; private List availPlayers = new List(); - private bool canSwitchPlayer = false; + private bool canSwitchPlayer = true; public bool CanRollDiceForUser { @@ -85,6 +89,8 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader public List PlayerDatas => playerDatas; public List PlayerTypesCollection => allPlayerTypes; + public Action OnGameResumed = null; + public void Initialize() { InterfaceManager.Instance?.RegisterInterface(this); @@ -95,7 +101,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader { TilesManager = InterfaceManager.Instance.GetInterfaceInstance(); uIManager = InterfaceManager.Instance.GetInterfaceInstance(); - gameManager = InterfaceManager.Instance.GetInterfaceInstance(); + GameManager = InterfaceManager.Instance.GetInterfaceInstance(); gameModeHandler = InterfaceManager.Instance.GetInterfaceInstance(); } @@ -347,23 +353,18 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader UpdateActivePlayersAndSetDisplay(true); } - if (availPlayers.Count() < 1 && CanRollDiceAgain) // got a 6 roll value + if (CanRollDiceAgain) // got a 6 roll value { pawn = playerGameDatasDict[currentPlayerTypeTurn].playerPawnsDict.Values.FirstOrDefault(pawn => pawn.GetPlayerState() == PlayerState.InHome); - Debug.Log($"SelectedPawn: {pawn.name}"); - OnPawnSelected(pawn); - return; + if (pawn != null) + { + Debug.Log($"SelectedPawn: {pawn.name}"); + OnPawnSelected(pawn); + return; + } } - // TODO :: Double check - foreach (var key in botPawnsDictForCurrentPlayer.Keys) - { - Debug.Log($"b :: botPawnsDictForCurrentPlayer[key]: {key}, {botPawnsDictForCurrentPlayer[key]}"); - // botPawnsDictForCurrentPlayer[key] = BotMove.NoMoves; - } - - Debug.Log($"Before Iterating"); foreach (var playerPawn in availPlayers) { @@ -518,7 +519,13 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader availPlayers = new List(); if (!CanRollDiceAgain) + { UpdateActivePlayersAndSetDisplay(true); + } + else + { + InitActivePlayers(); + } if (rolledVal == Ludo_3D_Constants.Max_Dice_Rolls) { @@ -571,6 +578,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader { indexesToRemove.Add(i); availPlayers[i].SetPlayerSelectionState(false); + availPlayers[i].ShowPlayerCountCanvas(false); customAvailPlayers--; } @@ -594,14 +602,18 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader private void UpdateActivePlayersAndSetDisplay(bool state) { - availPlayers = playerGameDatasDict[currentPlayerTypeTurn].playerPawnsDict.Values.Select(pawn => pawn) - .Where(pawn => pawn.GetPlayerState() == PlayerState.InSafeZone || - pawn.GetPlayerState() == PlayerState.Moving || - pawn.GetPlayerState() == PlayerState.InFinishingPath).ToList(); - + InitActivePlayers(); SetDisplayCountForAllAvailPlayers(state); } + private void InitActivePlayers() + { + availPlayers = playerGameDatasDict[currentPlayerTypeTurn].playerPawnsDict.Values.Select(pawn => pawn) + .Where(pawn => pawn.GetPlayerState() == PlayerState.InSafeZone || + pawn.GetPlayerState() == PlayerState.Moving || + pawn.GetPlayerState() == PlayerState.InFinishingPath).ToList(); + } + private bool AreAllPawnsInFinishingPath() { bool areAllPawnsInFinishingPath = false; @@ -653,7 +665,6 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader PlayerGameData playerGameData = playerGameDatasDict[currentPlayerTypeTurn]; Debug.Log($"playerPawn.GetPlayerState(): {selectedPawn.GetPlayerState()}"); - if (selectedPawn.GetPlayerState() == PlayerState.InHome) { Tile targetTile = TilesManager.RetrieveTileBasedOnIndex(playerGameData.startIndex); @@ -721,6 +732,13 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader foreach (var pawn in playerPawnsTest) pawn.MoveToCustomTilePosition(currentSittingSafeTile.CenterPlacementPosition); } + + if (currentSittingSafeTile.ContainsPlayerType(currentPlayerTypeTurn)) + { + var playerPawns = currentSittingSafeTile.GetPlayerPawns(currentPlayerTypeTurn); + foreach (var pawn in playerPawns) + ShowUpdatedPlayerCountOnTile(pawn); + } } else { @@ -774,7 +792,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader Debug.LogError($"GAME IS OVER"); return; } - + currentPlayerTurnIndex = allPlayerTypes.FindIndex(type => type == currentPlayerTypeTurn); if (currentPlayerTypeTurn == allPlayerTypes[allPlayerTypes.Count - 1]) @@ -867,14 +885,14 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader { // MoveThroughTiles(playerPawn, index, targetIndex); Debug.Log($"TargetIdx: {targetIndex - index}"); - MoveThroughFinishingPath(playerPawn, 0, targetIndex - index); + CheckForGamePause(() => MoveThroughFinishingPath(playerPawn, 0, targetIndex - index)); } else if (nextTileIndex <= targetIndex) { if (nextTileIndex == 0) targetIndex = (targetIndex - playerPawn.CurrentTileIndex) - 1; - MoveThroughTiles(playerPawn, nextTileIndex, targetIndex); + CheckForGamePause(() => MoveThroughTiles(playerPawn, nextTileIndex, targetIndex)); } } else @@ -938,6 +956,20 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader index); } + public void CheckForGamePause(Action onComplete) + { + Debug.Log($"CheckForGamePause: {GameManager.CurrentGameState == GameState.IsPaused}"); + if (gameModeHandler.CurrentGameModeType == GameModeType.Bot && !botTypesInGame.Contains(currentPlayerTypeTurn) + && GameManager.CurrentGameState == GameState.IsPaused) + { + OnGameResumed = onComplete; + } + else + { + onComplete?.Invoke(); + } + } + private void MoveThroughFinishingPath(PlayerPawn playerPawn, int index, int targetIndex) { UpdatePlayerState(playerPawn, PlayerState.InFinishingPath); @@ -955,14 +987,14 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader Debug.Log($"tileIndex: {tileIndex}, targetIndex: {targetIndex}"); if (tileIndex <= targetIndex) { - // MoveThroughTiles(playerPawn, index, targetIndex); - MoveThroughFinishingPath(playerPawn, tileIndex, targetIndex); + CheckForGamePause(() => MoveThroughFinishingPath(playerPawn, tileIndex, targetIndex)); } } else { if (playerPawn.CurrentTileIndex == TilesManager.GetFinishingTileDataLength(currentPlayerTypeTurn) - 1) { + OnGameResumed = null; Tile tile = TilesManager.RetrieveFinishingTileBasedOnIndex(playerPawn.PlayerType, playerPawn.CurrentTileIndex); tile.InitPlayerPawn(playerPawn, playerPawn.PlayerType); // ShowUpdatedPlayerCountOnTile(playerPawn); @@ -995,7 +1027,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader playerDatas.FirstOrDefault(data => data.playerType == lastUnfinishingPlayerType).ranking = TotalPlayersInGame - allPlayerTypes.Count; // Show Game Over panel - gameManager.OnGameStateChanged(GameState.GameOver); + GameManager.OnGameStateChanged(GameState.GameOver); return; } @@ -1076,7 +1108,8 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader public void ResetData() { ResetGameRestartData(); - + + OnGameResumed = null; playerDatas = null; allPlayerTypes = null; @@ -1091,5 +1124,6 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader public void ResetGameRestartData() { currentPlayerTurnIndex = 0; + diceSixRollCounter = 0; } } diff --git a/Assets/Scripts/Gameplay/Player/PlayerPawn.cs b/Assets/Scripts/Gameplay/Player/PlayerPawn.cs index bd1e034..da17b42 100644 --- a/Assets/Scripts/Gameplay/Player/PlayerPawn.cs +++ b/Assets/Scripts/Gameplay/Player/PlayerPawn.cs @@ -149,9 +149,9 @@ public class PlayerPawn : MonoBehaviour private void OnMouseDown() { - if (IsBotPlayer || !CanSelectPlayer) return; - SetGameplayManager(); + if (gameplayManager.GameManager.CurrentGameState == GameState.IsPaused || IsBotPlayer || !CanSelectPlayer) return; + gameplayManager.OnPawnSelected(this); } diff --git a/Assets/Scripts/State/GameManager.cs b/Assets/Scripts/State/GameManager.cs index 9b9c7a7..f6227b9 100644 --- a/Assets/Scripts/State/GameManager.cs +++ b/Assets/Scripts/State/GameManager.cs @@ -4,6 +4,7 @@ public enum GameState { InMenu, InGame, + IsPaused, GameOver, } @@ -14,7 +15,7 @@ public class GameManager : MonoBehaviour, IBase, IBootLoader, IDataLoader private MusicManager musicManager; private GameplayManager gameplayManager; - public GameState GameState + public GameState CurrentGameState { get; private set; } @@ -36,10 +37,16 @@ public class GameManager : MonoBehaviour, IBase, IBootLoader, IDataLoader OnGameStateChanged(GameState.InMenu); } + public void SetGameState(GameState gameState) + { + Debug.Log($"### GameState: {gameState}"); + PrevGameState = CurrentGameState; + CurrentGameState = gameState; + } + public void OnGameStateChanged(GameState gameState) { - PrevGameState = GameState; - GameState = gameState; + SetGameState(gameState); Debug.Log($"OnGameStateChanged: {gameState}"); switch (gameState) { @@ -49,8 +56,12 @@ public class GameManager : MonoBehaviour, IBase, IBootLoader, IDataLoader uiManager.OnInMenuScreen(); break; case GameState.InGame: + Debug.Log($"Logging in-game state"); musicManager.PlayMusicClip(MusicType.GameMusic); uiManager.OnInGameScreen(); + break; + case GameState.IsPaused: + break; case GameState.GameOver: musicManager.PlayMusicClip(MusicType.GameOverMusic); diff --git a/Assets/Scripts/UI/Managers/UIManager.cs b/Assets/Scripts/UI/Managers/UIManager.cs index 924ce18..3081568 100644 --- a/Assets/Scripts/UI/Managers/UIManager.cs +++ b/Assets/Scripts/UI/Managers/UIManager.cs @@ -2,10 +2,16 @@ using UnityEngine; public class UIManager : MonoBehaviour, IBase, IBootLoader, IDataLoader { - private GameplayManager gameplayManager; private ScreenManager screenManager; private PopupManager popupManager; + private GameplayManager gameplayManager; + + public GameManager GameManager + { + get; private set; + } + public void Initialize() { InterfaceManager.Instance.RegisterInterface(this); @@ -13,8 +19,9 @@ public class UIManager : MonoBehaviour, IBase, IBootLoader, IDataLoader public void InitializeData() { - gameplayManager = InterfaceManager.Instance.GetInterfaceInstance(); + GameManager = InterfaceManager.Instance.GetInterfaceInstance(); popupManager = InterfaceManager.Instance.GetInterfaceInstance(); + gameplayManager = InterfaceManager.Instance.GetInterfaceInstance(); } public void OnDiceViewInteracted() diff --git a/Assets/Scripts/UI/Pages/PopUp/PauseMenuPopup.cs b/Assets/Scripts/UI/Pages/PopUp/PauseMenuPopup.cs index 0c1a171..a8901dd 100644 --- a/Assets/Scripts/UI/Pages/PopUp/PauseMenuPopup.cs +++ b/Assets/Scripts/UI/Pages/PopUp/PauseMenuPopup.cs @@ -8,7 +8,7 @@ public class PauseMenuPopup : PopupBase [SerializeField] private Button playBtn; [SerializeField] private Button restartBtn; - private GameManager gameManager; + private UIManager uiManager; private SoundManager soundManager; private GameModeHandler gameModeHandler; @@ -28,6 +28,9 @@ public class PauseMenuPopup : PopupBase private void OnClick_PlayButton() { + SetUIManager(); + uiManager.GameManager.SetGameState(GameState.InGame); + soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : soundManager; soundManager?.PlayGameSoundClip(SoundType.ButtonClick); @@ -35,6 +38,9 @@ public class PauseMenuPopup : PopupBase ScreenManager screenManager = InterfaceManager.Instance?.GetInterfaceInstance(); screenManager.ShowScreen(ScreenType.InGameHUDScreen); + + SetGameModeHandler(); + gameModeHandler.GameplayManager.OnGameResumed?.Invoke(); } private void OnClick_HomeButton() @@ -44,8 +50,13 @@ public class PauseMenuPopup : PopupBase popupManager.HidePopup(popupType); - gameManager = InterfaceManager.Instance?.GetInterfaceInstance(); - gameManager.OnGameStateChanged(GameState.InMenu); + SetUIManager(); + uiManager.GameManager.OnGameStateChanged(GameState.InMenu); + } + + private void SetUIManager() + { + uiManager = uiManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : uiManager; } private void OnClick_RestartButton() diff --git a/Assets/Scripts/UI/Pages/Screens/GameHUDS.cs b/Assets/Scripts/UI/Pages/Screens/GameHUDS.cs index b02d4f2..5332564 100644 --- a/Assets/Scripts/UI/Pages/Screens/GameHUDS.cs +++ b/Assets/Scripts/UI/Pages/Screens/GameHUDS.cs @@ -17,31 +17,40 @@ public class GameHUDS : ScreenBase private void OnEnable() { - pauseBtn.onClick.AddListener(OnClick_pauseBtn); - diceBtn.onClick.AddListener(OnClick_DiceBtn); + pauseBtn.onClick.AddListener(OnClick_PauseButton); + diceBtn.onClick.AddListener(OnClick_DiceButton); } private void OnDisable() { - pauseBtn.onClick.RemoveListener(OnClick_pauseBtn); - diceBtn.onClick.RemoveListener(OnClick_DiceBtn); + pauseBtn.onClick.RemoveListener(OnClick_PauseButton); + diceBtn.onClick.RemoveListener(OnClick_DiceButton); } - private void OnClick_pauseBtn() + private void OnClick_PauseButton() { - PopupManager popupManager = InterfaceManager.Instance?.GetInterfaceInstance(); - popupManager.ShowPopup(PopupType.PauseMenuPopup); - soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : soundManager; soundManager?.PlayGameSoundClip(SoundType.ButtonClick); - Hide(); + screenManager.HideScreen(screenType); + + PopupManager popupManager = InterfaceManager.Instance?.GetInterfaceInstance(); + popupManager.ShowPopup(PopupType.PauseMenuPopup); + + SetUIManager(); + uiManager.GameManager.SetGameState(GameState.IsPaused); } - private void OnClick_DiceBtn() + private void OnClick_DiceButton() + { + SetUIManager(); + + uiManager.OnDiceViewInteracted(); + } + + private void SetUIManager() { uiManager = uiManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : uiManager; - uiManager.OnDiceViewInteracted(); } public void UpdatePlayerTurnText(PlayerType playerType)