TurnBasedStrategyCourse/Assets/Scripts/Grid/GridSystem.cs

40 lines
1.7 KiB
C#

using UnityEngine;
public class GridSystem {
private readonly float cellSize;
private readonly GridObject[,] gridObjectArray;
private readonly int height;
private readonly int width;
public GridSystem(int width, int height, float cellSize) {
this.width = width;
this.height = height;
this.cellSize = cellSize;
gridObjectArray = new GridObject[width, height];
for (int x = 0; x < width; x++) {
for (int z = 0; z < height; z++) {
gridObjectArray[x, z] = new(this, new(x, z));
}
}
}
public Vector3 GetWorldPosition(GridPosition gridPosition) => new Vector3(gridPosition.X, 0, gridPosition.Z) * cellSize;
public GridPosition GetGridPosition(Vector3 worldPosition) => new(Mathf.RoundToInt(worldPosition.x / cellSize), Mathf.RoundToInt(worldPosition.z / cellSize));
public void CreateDebugObjects(Transform debugPrefab) {
for (int x = 0; x < width; x++) {
for (int z = 0; z < height; z++) {
GridPosition gridPosition = new(x, z);
Transform debugTransform = Object.Instantiate(debugPrefab, GetWorldPosition(gridPosition), Quaternion.identity);
GridDebugObject gridDebugObject = debugTransform.GetComponent<GridDebugObject>();
gridDebugObject.SetGridObject(GetGridObject(gridPosition));
}
}
}
public GridObject GetGridObject(GridPosition gridPosition) => gridObjectArray[gridPosition.X, gridPosition.Z];
public bool IsValidGridPosition(GridPosition gridPosition) => gridPosition is { X: >= 0, Z: >= 0 } && gridPosition.X < width && gridPosition.Z < height;
}