using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Serialization; namespace Grid { public class LevelGrid : MonoBehaviour { [FormerlySerializedAs("GridDebugObjectPrefab")] [SerializeField] private Transform gridDebugObjectPrefab; private GridSystem gridSystem; public static LevelGrid Instance { get; private set; } public event EventHandler OnAnyUnitMovedGridPosition; private void Awake() { if (Instance is not null) { Debug.LogError($"There is more than one LevelGrid! {transform} - {Instance}"); Destroy(gameObject); return; } Instance = this; gridSystem = new(10, 10, 2f); gridSystem.CreateDebugObjects(gridDebugObjectPrefab); } public void AddUnitAtGridPosition(GridPosition gridPosition, Unit unit) => gridSystem.GetGridObject(gridPosition).UnitList.Add(unit); public List GetUnitListAtGridPosition(GridPosition gridPosition) => gridSystem.GetGridObject(gridPosition).UnitList; public void RemoveUnitAtGridPosition(GridPosition gridPosition, Unit unit) => gridSystem.GetGridObject(gridPosition).UnitList.Remove(unit); public GridPosition GetGridPosition(Vector3 worldPosition) => gridSystem.GetGridPosition(worldPosition); public Vector3 GetWorldPosition(GridPosition gridPosition) => gridSystem.GetWorldPosition(gridPosition); public bool IsValidGridPosition(GridPosition gridPosition) => gridSystem.IsValidGridPosition(gridPosition); public int GetWidth() => gridSystem.Width; public int GetHeight() => gridSystem.Height; public void UnitMovedGridPosition(Unit unit, GridPosition fromGridPosition, GridPosition toGridPosition) { RemoveUnitAtGridPosition(fromGridPosition, unit); AddUnitAtGridPosition(toGridPosition, unit); OnAnyUnitMovedGridPosition?.Invoke(this,EventArgs.Empty); } public bool HasAnyUnitOnGridPosition(GridPosition gridPosition) => gridSystem.GetGridObject(gridPosition).UnitList.Count > 0; public Unit GetUnitAtGridPosition(GridPosition gridPosition) => gridSystem.GetGridObject(gridPosition).GetUnit(); } }