Ludo-3D/Assets/Scripts/Tile/TilesManager.cs

89 lines
2.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Tilemaps;
[System.Serializable]
public struct TileData
{
public PlayerType playerType;
public Transform playerFinishingTileParent;
}
public class TilesManager : MonoBehaviour, IBootLoader, IDataLoader, IBase
{
[SerializeField] private Tile[] generalTiles;
[SerializeField] private TileData[] tileDatas;
private GameplayManager gameplayManager;
private Dictionary<PlayerType, List<Tile>> finishingTileDataPairs = new Dictionary<PlayerType, List<Tile>>();
public void Initialize()
{
InterfaceManager.Instance.RegisterInterface<TilesManager>(this);
}
public void InitializeData()
{
gameplayManager = InterfaceManager.Instance.GetInterfaceInstance<GameplayManager>();
}
public void InitTilesData()
{
finishingTileDataPairs = new Dictionary<PlayerType, List<Tile>>();
foreach (var tileData in tileDatas)
{
if (gameplayManager.PlayerTypesCollection.Contains(tileData.playerType))
{
finishingTileDataPairs.Add(tileData.playerType, new List<Tile>());
foreach (Transform child in tileData.playerFinishingTileParent)
finishingTileDataPairs[tileData.playerType].Add(child.GetComponent<Tile>());
}
}
}
public int GetFinishingTileDataLength(PlayerType playerType) => finishingTileDataPairs[playerType].Count;
public int GetGeneralTilesLength() => generalTiles.Length;
public Tile RetrieveTileBasedOnIndex(int index)
{
Debug.Log($"RetrieveTileBasedOnIndex: Index: {index}");
Tile tile = index == generalTiles.Length ? generalTiles[0] : generalTiles[index];
return tile;
}
public Tile RetrieveFinishingTileBasedOnIndex(PlayerType playerType, int index)
{
return finishingTileDataPairs[playerType][index];
}
public void ResetData()
{
finishingTileDataPairs.Clear();
}
public void ResetTileData(PlayerType playerType, int currentTileIndex, PlayerState playerState)
{
if (playerState == PlayerState.InFinishingPath)
{
Tile tile = RetrieveFinishingTileBasedOnIndex(playerType, currentTileIndex);
tile.ResetTileData();
}
else if (playerState == PlayerState.Moving)
{
Tile tile = RetrieveTileBasedOnIndex(currentTileIndex);
tile.ResetTileData();
}
else if (playerState == PlayerState.InSafeZone)
{
SafeTile tile = (SafeTile)RetrieveTileBasedOnIndex(currentTileIndex);
tile.ResetTileData();
}
}
}