Refactored changes along with flow updations/

This commit is contained in:
Ashby Issac 2026-01-30 09:35:31 +05:30
parent f8eed62a9f
commit 9af9ac09fb
24 changed files with 12694 additions and 15634 deletions

View File

@ -1,7 +1,7 @@
using System.Collections; using System.Collections;
using UnityEngine; using UnityEngine;
public class Dice : MonoBehaviour, IBase, IBootLoader public class DiceView : MonoBehaviour, IBase, IBootLoader
{ {
private Rigidbody rb; private Rigidbody rb;
private bool rolling; private bool rolling;
@ -22,7 +22,7 @@ public class Dice : MonoBehaviour, IBase, IBootLoader
} }
public void Initialize() public void Initialize()
{ {
InterfaceManager.Instance?.RegisterInterface<Dice>(this); InterfaceManager.Instance?.RegisterInterface<DiceView>(this);
transform.localPosition = new Vector3(0, 20, 0); transform.localPosition = new Vector3(0, 20, 0);
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -5,4 +5,9 @@ using UnityEngine;
public static class Ludo_3D_Constants public static class Ludo_3D_Constants
{ {
public const int Max_Dice_Rolls = 6; public const int Max_Dice_Rolls = 6;
public const string Player1_Name = "Player1";
public const string Player2_Name = "Player2";
public const string Player3_Name = "Player3";
public const string Player4_Name = "Player4";
} }

View File

@ -43,6 +43,8 @@ public enum BotMove
public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
{ {
[SerializeField] DiceRollHandler diceRollHandler;
[SerializeField] private int diceValue = 0; [SerializeField] private int diceValue = 0;
[SerializeField] private TextMeshProUGUI diceText; [SerializeField] private TextMeshProUGUI diceText;
@ -59,8 +61,8 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
private int currentPlayerTurnIndex = 0; private int currentPlayerTurnIndex = 0;
private List<PlayerType> allPlayerTypes = new List<PlayerType>(); private List<PlayerType> allPlayerTypes = new List<PlayerType>();
private List<PlayerType> botTypesInGame = new List<PlayerType>(); private List<PlayerType> botTypesInGame = new List<PlayerType>();
private List<PlayerType> playerRankings = new List<PlayerType>();
public List<PlayerType> PlayerTypesCollection => allPlayerTypes;
// private Dictionary<PlayerTypes, > playerPawnsDict = new Dictionary<PlayerTypes, List<PlayerPawn>>(); // private Dictionary<PlayerTypes, > playerPawnsDict = new Dictionary<PlayerTypes, List<PlayerPawn>>();
private Dictionary<PlayerType, PlayerGameData> playerGameDatasDict = new Dictionary<PlayerType, PlayerGameData>(); private Dictionary<PlayerType, PlayerGameData> playerGameDatasDict = new Dictionary<PlayerType, PlayerGameData>();
@ -71,13 +73,18 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
private TilesManager tilesManager; private TilesManager tilesManager;
private int diceRolledValue; private int diceRolledValue;
private bool CanRollDiceAgain = false; // used for when you get a 6 or when you reach the finish point
private int diceSixRollCounter = 0;
private List<PlayerPawn> availPlayers = new List<PlayerPawn>();
private bool canSwitchPlayer = false;
public bool CanRollDice public bool CanRollDice
{ {
get; private set; get; private set;
} }
public List<PlayerType> PlayerTypesCollection => allPlayerTypes;
private bool CanRollDiceAgain = false; // used for when you get a 6 or when you reach the finish point
private int diceSixRollCounter = 0;
public void Initialize() public void Initialize()
{ {
@ -223,10 +230,13 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
} }
} }
public void OnDiceInteracted()
{
diceRollHandler.HandleDiceView();
}
public void RollDiceForPlayer(int rolledVal) public void RollDiceForPlayer(int rolledVal)
{ {
if (botTypesInGame.Contains(currentPlayerTypeTurn)) return;
OnDiceRolled(rolledVal); OnDiceRolled(rolledVal);
OnNoMovesLeft(); OnNoMovesLeft();
} }
@ -420,9 +430,6 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
} }
} }
private List<PlayerPawn> availPlayers = new List<PlayerPawn>();
private bool canSwitchPlayer = false;
public void OnDiceRolled(int rolledVal) public void OnDiceRolled(int rolledVal)
{ {
SetCanRollDiceForUser(false); SetCanRollDiceForUser(false);
@ -890,7 +897,21 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
CanRollDiceAgain = false; CanRollDiceAgain = false;
if (allPlayerTypes.Contains(currentPlayerTypeTurn)) if (allPlayerTypes.Contains(currentPlayerTypeTurn))
{
playerRankings.Add(currentPlayerTypeTurn);
allPlayerTypes.Remove(currentPlayerTypeTurn); allPlayerTypes.Remove(currentPlayerTypeTurn);
}
if (allPlayerTypes.Count == 1)
{
// Game is over
playerRankings.Add(allPlayerTypes[0]);
allPlayerTypes.Remove(0);
// Show Game Over panel
return;
}
SwitchPlayer(); SwitchPlayer();

View File

@ -104,6 +104,7 @@ public class PlayerPawn : MonoBehaviour
// when he is defeated // when he is defeated
public void MoveBackToHome(Transform transformData) public void MoveBackToHome(Transform transformData)
{ {
Debug.Log($"MoveBackToHome");
transform.position = transformData.position; transform.position = transformData.position;
transform.rotation = transformData.rotation; transform.rotation = transformData.rotation;
SetPlayerState(PlayerState.InHome); SetPlayerState(PlayerState.InHome);

View File

@ -2,8 +2,9 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class DiceRoller : MonoBehaviour public class DiceRollHandler : MonoBehaviour
{ {
[SerializeField] private DiceView diceView;
[SerializeField] private int diceTestValue = 0; [SerializeField] private int diceTestValue = 0;
private InputManager inputManager; private InputManager inputManager;
@ -13,7 +14,7 @@ public class DiceRoller : MonoBehaviour
inputManager = inputManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<InputManager>() : inputManager; inputManager = inputManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<InputManager>() : inputManager;
if (!inputManager.GameplayManager.CanRollDice) return; if (!inputManager.GameplayManager.CanRollDice) return;
OnDiceRolled(); RollDiceOnClick();
} }
private void Update() private void Update()
@ -22,10 +23,10 @@ public class DiceRoller : MonoBehaviour
if (!inputManager.GameplayManager.CanRollDice) return; if (!inputManager.GameplayManager.CanRollDice) return;
if (Input.GetKeyDown(KeyCode.Space)) if (Input.GetKeyDown(KeyCode.Space))
OnDiceRolled(); RollDiceOnClick();
} }
private void OnDiceRolled() private void RollDiceOnClick()
{ {
SoundManager soundManager = InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>(); SoundManager soundManager = InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>();
soundManager?.PlayGameSoundClip(SoundType.Dice); soundManager?.PlayGameSoundClip(SoundType.Dice);
@ -34,4 +35,9 @@ public class DiceRoller : MonoBehaviour
diceTestValue != 0 ? diceTestValue : Random.Range(1, Ludo_3D_Constants.Max_Dice_Rolls + 1); diceTestValue != 0 ? diceTestValue : Random.Range(1, Ludo_3D_Constants.Max_Dice_Rolls + 1);
inputManager.SetDiceRollValue(currentRolledVal); inputManager.SetDiceRollValue(currentRolledVal);
} }
public void HandleDiceView()
{
diceView.Roll();
}
} }

View File

@ -1,6 +1,7 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a0f4457742bfd4c61bd436792af64064 guid: a7e3406fc0f8a4b3abf3913c7655f3f1
PrefabImporter: folderAsset: yes
DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:

View File

@ -0,0 +1,43 @@
using UnityEngine;
public enum GameState
{
InMenu,
InGame,
}
public class GameManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
{
private UIManager uiManager;
public GameState GameState
{
get; private set;
}
public void Initialize()
{
InterfaceManager.Instance.RegisterInterface<GameManager>(this);
}
public void InitializeData()
{
uiManager = InterfaceManager.Instance.GetInterfaceInstance<UIManager>();
GameState = GameState.InMenu;
OnGameStateChanged(GameState);
}
public void OnGameStateChanged(GameState gameState)
{
switch (gameState)
{
case GameState.InMenu:
uiManager.OnInMenuScreen();
break;
case GameState.InGame:
uiManager.OnInGameScreen();
break;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 39da8f399f9774587bd1d0c7977e556b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -57,6 +57,12 @@ public class ScreenManager : MonoBehaviour, IBase, IBootLoader
} }
} }
public void HideAllScreens()
{
foreach (var screenPair in screensDict)
if (screenPair.Value.isActiveAndEnabled) screenPair.Value.Hide();
}
// public void OnScreenEventExecute(ScreenResultEvent screenResultEvent) // public void OnScreenEventExecute(ScreenResultEvent screenResultEvent)
// { // {
// switch (screenResultEvent) // switch (screenResultEvent)

View File

@ -0,0 +1,45 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIManager : MonoBehaviour, IBase, IBootLoader, IDataLoader
{
private GameplayManager gameplayManager;
private PopupManager popupManager;
private ScreenManager screenManager;
public void Initialize()
{
InterfaceManager.Instance.RegisterInterface<UIManager>(this);
}
public void InitializeData()
{
gameplayManager = InterfaceManager.Instance.GetInterfaceInstance<GameplayManager>();
popupManager = InterfaceManager.Instance.GetInterfaceInstance<PopupManager>();
}
public void OnDiceViewInteracted()
{
gameplayManager.OnDiceInteracted();
}
public void OnInMenuScreen()
{
screenManager = screenManager == null ? InterfaceManager.Instance.GetInterfaceInstance<ScreenManager>() : screenManager;
screenManager.HideAllScreens();
screenManager.ShowScreen(ScreenType.MenuScreen);
}
public void OnInGameScreen()
{
screenManager.HideAllScreens();
screenManager.ShowScreen(ScreenType.InGameHUDScreen);
}
public void OnPlayButtonClicked()
{
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bebcbb45c745a4006be9ef5b25e12cd5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -10,8 +10,7 @@ public enum ScreenType
LoadingScreen, LoadingScreen,
LevelsScreen, LevelsScreen,
InGameHUDScreen, InGameHUDScreen,
MenuHUDScreen, MenuScreen,
GlobalHUDScreen
} }
public class ScreenBase : UIBase, IUIBase public class ScreenBase : UIBase, IUIBase

View File

@ -21,7 +21,7 @@ public class InstructionsPopup : PopupBase
private void OnClick_closeBtn() private void OnClick_closeBtn()
{ {
ScreenManager screenManager = InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>(); ScreenManager screenManager = InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>();
screenManager.ShowScreen(ScreenType.MenuHUDScreen); screenManager.ShowScreen(ScreenType.MenuScreen);
soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager; soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager;
soundManager?.PlayGameSoundClip(SoundType.ButtonClick); soundManager?.PlayGameSoundClip(SoundType.ButtonClick);

View File

@ -29,7 +29,7 @@ public class OptionsPopup : PopupBase
private void OnClick_closeBtn() private void OnClick_closeBtn()
{ {
ScreenManager screenManager = InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>(); ScreenManager screenManager = InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>();
screenManager.ShowScreen(ScreenType.MenuHUDScreen); screenManager.ShowScreen(ScreenType.MenuScreen);
Hide(); Hide();
} }

View File

@ -57,11 +57,13 @@ public class PvAIModePopup : PopupBase
Debug.Log($"Starting PVP Mode with {selectedPlayerCount} players:"); Debug.Log($"Starting PVP Mode with {selectedPlayerCount} players:");
Debug.Log($"Player 1: {playerName}"); Debug.Log($"Player 1: {playerName}");
} }
private void OnClick_closeBtn() private void OnClick_closeBtn()
{ {
screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>() : screenManager; screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>() : screenManager;
screenManager.ShowScreen(ScreenType.MenuHUDScreen); screenManager.ShowScreen(ScreenType.MenuScreen);
soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager; soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager;
soundManager?.PlayGameSoundClip(SoundType.ButtonClick); soundManager?.PlayGameSoundClip(SoundType.ButtonClick);

View File

@ -24,6 +24,7 @@ public class PvPModePopup : PopupBase
private string playerFourName; private string playerFourName;
private ScreenManager screenManager; private ScreenManager screenManager;
private GameManager gameManager;
private SoundManager soundManager; private SoundManager soundManager;
private int selectedPlayerCount; private int selectedPlayerCount;
public int SelectedPlayerCount => selectedPlayerCount; public int SelectedPlayerCount => selectedPlayerCount;
@ -54,17 +55,17 @@ public class PvPModePopup : PopupBase
private void UpdateInputFieldsVisibility() private void UpdateInputFieldsVisibility()
{ {
playerOneNameInput.transform.parent.gameObject.SetActive(true); playerOneNameInput.transform.parent.gameObject.SetActive(true);
playerTwoNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 2); playerTwoNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 3);
playerThreeNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 3); playerThreeNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 2);
playerFourNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 4); playerFourNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 4);
} }
private void OnClick_playBtn() private void OnClick_playBtn()
{ {
playerOneName = playerOneNameInput.text; playerOneName = string.IsNullOrWhiteSpace(playerOneNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerOneNameInput.text;
playerTwoName = playerTwoNameInput.text; playerTwoName = string.IsNullOrWhiteSpace(playerTwoNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerTwoNameInput.text;
playerThreeName = playerThreeNameInput.text; playerThreeName = string.IsNullOrWhiteSpace(playerThreeNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerThreeNameInput.text;
playerFourName = playerFourNameInput.text; playerFourName = string.IsNullOrWhiteSpace(playerFourNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerFourNameInput.text;
soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager; soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager;
soundManager?.PlayGameSoundClip(SoundType.ButtonClick); soundManager?.PlayGameSoundClip(SoundType.ButtonClick);
@ -77,13 +78,12 @@ public class PvPModePopup : PopupBase
Debug.Log($"Player 3: {playerThreeName}"); Debug.Log($"Player 3: {playerThreeName}");
if (selectedPlayerCount == 4) if (selectedPlayerCount == 4)
Debug.Log($"Player 4: {playerFourName}"); Debug.Log($"Player 4: {playerFourName}");
} }
private void OnClick_closeBtn() private void OnClick_closeBtn()
{ {
screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>() : screenManager; screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>() : screenManager;
screenManager.ShowScreen(ScreenType.MenuHUDScreen); screenManager.ShowScreen(ScreenType.MenuScreen);
soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager; soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager;
soundManager?.PlayGameSoundClip(SoundType.ButtonClick); soundManager?.PlayGameSoundClip(SoundType.ButtonClick);

View File

@ -12,18 +12,19 @@ public class GameHUDS : ScreenBase
[SerializeField] private TMP_Text diceCountText; [SerializeField] private TMP_Text diceCountText;
[SerializeField] private TMP_Text playerTurnText; [SerializeField] private TMP_Text playerTurnText;
SoundManager soundManager; private SoundManager soundManager;
private UIManager uiManager;
private void OnEnable() private void OnEnable()
{ {
pauseBtn.onClick.AddListener(OnClick_pauseBtn); pauseBtn.onClick.AddListener(OnClick_pauseBtn);
diceBtn.onClick.AddListener(OnClick_diceBtn); diceBtn.onClick.AddListener(OnClick_DiceBtn);
} }
private void OnDisable() private void OnDisable()
{ {
pauseBtn.onClick.RemoveListener(OnClick_pauseBtn); pauseBtn.onClick.RemoveListener(OnClick_pauseBtn);
diceBtn.onClick.RemoveListener(OnClick_diceBtn); diceBtn.onClick.RemoveListener(OnClick_DiceBtn);
} }
private void OnClick_pauseBtn() private void OnClick_pauseBtn()
@ -37,9 +38,9 @@ public class GameHUDS : ScreenBase
Hide(); Hide();
} }
private void OnClick_diceBtn() private void OnClick_DiceBtn()
{ {
Dice dice = InterfaceManager.Instance?.GetInterfaceInstance<Dice>(); uiManager = uiManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<UIManager>() : uiManager;
dice?.Roll(); uiManager.OnDiceViewInteracted();
} }
} }