Fix: Attacking logic for multiple pawns in the same tile.
This commit is contained in:
parent
f86216c729
commit
4b2720759c
@ -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<GameplayManager>(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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,18 +27,30 @@ public class Tile : MonoBehaviour
|
||||
|
||||
protected int lastOccupiedIndex = 0;
|
||||
|
||||
public PlayerPawn PlayerPawn // Change implementation
|
||||
private List<PlayerPawn> PlayerPawns = new List<PlayerPawn>(); // 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}");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user