diff --git a/Assets/Scripts/Gameplay/GameplayManager.cs b/Assets/Scripts/Gameplay/GameplayManager.cs index 9669cf2..6cf8f19 100644 --- a/Assets/Scripts/Gameplay/GameplayManager.cs +++ b/Assets/Scripts/Gameplay/GameplayManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using DG.Tweening; using TMPro; using UnityEngine; @@ -80,6 +81,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader public void Initialize() { InterfaceManager.Instance?.RegisterInterface(this); + DOTween.useSafeMode = false; } public void InitializeData() @@ -91,7 +93,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader // initialize the player list from UI. // InitPlayerTypesForLAN(null); - InitPlayerTypesForBotMatch(PlayerType.Player1, 3); + InitPlayerTypesForBotMatch(PlayerType.Player1, 1); } // TODO :: Call when the UI selection is made and game starts @@ -310,7 +312,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader Debug.Log($"AI playerPawn :: {playerPawn.name} :: state: {playerPawn.GetPlayerState()}, possibleLandingIndex: {possibleLandingIndex > playerGameDatasDict[currentPlayerTypeTurn].endIndex}"); Debug.Log($"AI playerPawn :: {playerPawn.name} :: possibleTileData.IsSafeZone: {possibleTileData.IsSafeZone}"); - Debug.Log($"AI playerPawn :: {playerPawn.name} :: possibleTileData.PlayerPawn: {possibleTileData.PlayerPawn}"); + Debug.Log($"AI playerPawn :: {playerPawn.name} :: possibleTileData.PlayerPawn: {possibleTileData.HasPawnsAvailable}"); if (playerPawn.GetPlayerState() == PlayerState.InFinishingPath || possibleLandingIndex > playerGameDatasDict[currentPlayerTypeTurn].endIndex) { @@ -331,7 +333,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader Debug.Log($"AI playerPawn :: {playerPawn.name} :: {playerPawn.PlayerId} :: safeMove"); botPawnsDictForCurrentPlayer[playerPawn.PlayerId] = BotMove.SafeMove; } - else if (possibleTileData.PlayerPawn != null) + else if (possibleTileData.HasPawnsAvailable) { Debug.Log($"AI playerPawn :: {playerPawn.name} :: {playerPawn.PlayerId} :: attackMove"); botPawnsDictForCurrentPlayer[playerPawn.PlayerId] = BotMove.AttackMove; @@ -596,7 +598,7 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader } else { - currentSittingTile.ResetPlayerPawn(); + currentSittingTile.ResetPlayerPawn(playerPawn); } MoveThroughTiles(playerPawn, nextTileIdx, targetIndex: targetIdx); @@ -710,18 +712,29 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader Debug.Log($"nextTile.IsSafeZone: {nextTile.IsSafeZone}"); if (!nextTile.IsSafeZone) { - Debug.Log($"nextTile.PlayerPawn: {nextTile.PlayerPawn}, {nextTile.transform.name}"); - if (nextTile.PlayerPawn != null && playerPawn.PlayerType != nextTile.PlayerPawn.PlayerType) + Debug.Log($"nextTile.HasPawnsAvailable: {nextTile.HasPawnsAvailable}"); + if (nextTile.HasPawnsAvailable && playerPawn.PlayerType != nextTile.CurrentHoldingPlayerType) { + Debug.Log($"nextTile.PlayerPawn: {nextTile.CurrentHoldingPlayerType}, {nextTile.transform.name}"); + Debug.Log($"nextTile.TotalPawnsInTile: {nextTile.TotalPawnsInTile}"); // play animation for moving back to base. // TODO :: Send existing pawn back to base. // means there's already a pawn there, move him back to the base. - var playerBasePos = playerBaseHandler.GetPlayerBase(nextTile.PlayerPawn.PlayerType) - .GetBasePlacementDataPosition(nextTile.PlayerPawn.PlayerId - 1); - Debug.Log($"playerBasePos: {playerBasePos}"); + var counter = nextTile.TotalPawnsInTile; - playerGameDatasDict[nextTile.PlayerPawn.PlayerType].totalPawnsInHome++; - nextTile.PlayerPawn.MoveBackToHome(playerBasePos); + for (int i = counter; i > 0; i--) + { + var pawn = nextTile.GetPlayerPawn(); + Debug.Log($"pawn: {pawn}"); + Debug.Log($"playerBase: {playerBaseHandler}"); + + var playerBasePos = playerBaseHandler.GetPlayerBase(pawn.PlayerType) + .GetBasePlacementDataPosition(pawn.PlayerId - 1); + Debug.Log($"playerBasePos: {playerBasePos}"); + + playerGameDatasDict[pawn.PlayerType].totalPawnsInHome++; + pawn.MoveBackToHome(playerBasePos); + } } nextTile.InitPlayerPawn(playerPawn, currentPlayerTypeTurn); diff --git a/Assets/Scripts/Gameplay/Player/PlayerBase.cs b/Assets/Scripts/Gameplay/Player/PlayerBase.cs index ea3939d..9172f78 100644 --- a/Assets/Scripts/Gameplay/Player/PlayerBase.cs +++ b/Assets/Scripts/Gameplay/Player/PlayerBase.cs @@ -39,6 +39,7 @@ public class PlayerBase : MonoBehaviour public Transform GetBasePlacementDataPosition(int idx) { + Debug.Log($"Index: {idx}, basePlacementDatas[idx]: {basePlacementDatas[idx]}"); return basePlacementDatas[idx].placementTransform; } } diff --git a/Assets/Scripts/Tile/Tile.cs b/Assets/Scripts/Tile/Tile.cs index fb6ecbe..65c0caf 100644 --- a/Assets/Scripts/Tile/Tile.cs +++ b/Assets/Scripts/Tile/Tile.cs @@ -27,18 +27,30 @@ public class Tile : MonoBehaviour protected int lastOccupiedIndex = 0; - public PlayerPawn PlayerPawn // Change implementation + private List PlayerPawns = new List(); // Change implementation + + public bool HasPawnsAvailable => PlayerPawns.Count > 0; + public PlayerType CurrentHoldingPlayerType => PlayerPawns[0].PlayerType; + public int TotalPawnsInTile => PlayerPawns.Count; + + public PlayerPawn GetPlayerPawn() { - get; private set; + var pawn = PlayerPawns[0]; + PlayerPawns.RemoveAt(0); + return pawn; } public virtual void InitPlayerPawn(PlayerPawn playerPawn, PlayerType playerType) { - PlayerPawn = playerPawn; + PlayerPawns.Add(playerPawn); + Debug.Log($"Adding new PlayerPawn {playerPawn.name}, playerType: {playerType} to {name}"); + Debug.Log($"Adding new PlayerPawn {PlayerPawns.Count} {name}"); } - public void ResetPlayerPawn() + public void ResetPlayerPawn(PlayerPawn movingPawn) { - PlayerPawn = null; + PlayerPawns.Remove(movingPawn); + Debug.Log($"Resetting new PlayerPawn {movingPawn.name} {name}"); + Debug.Log($"Resetting new PlayerPawn {PlayerPawns.Count} {name}"); } }