using UnityEngine; namespace DDD { public class CellManager : MonoBehaviour { public RectTransform cellCanvas; public CellUI cell; public int minX = -20; public int maxX = 20; public int minZ = -20; public int maxZ = 20; // 0 == 비어있음, 1 == 차있음, 2 == 잠김 public const int offsetZ = 40; private const int mapSize = 80; private int[] tiles; private CellUI[] tileUIs; void Start() { tiles = new int [mapSize * mapSize]; // TODO: 데이터 입력 for (int i = 0; i < mapSize * mapSize; i++) { tiles[i] = 0; } cell.transform.SetParent(null); cell.gameObject.SetActive(false); tileUIs = new CellUI[mapSize * mapSize]; for (int i = 0; i < mapSize * mapSize; i++) { var newCell = Instantiate(cell, cellCanvas); newCell.gameObject.SetActive(true); tileUIs[i] = newCell.GetComponent(); } UpdateCells(); } public static Vector3 CellToWorld(Vector2Int cellPos) { var worldX = (cellPos.x - cellPos.y) * 0.5f * 1.414f; // sqrt(2) var worldZ = -(cellPos.x + cellPos.y) * 0.5f * 1.414f + offsetZ; return new Vector3(worldX, 0f, worldZ); } public static Vector2Int WorldToCell(Vector3 worldPos) { var cellX = Mathf.RoundToInt((worldPos.x - (worldPos.z - offsetZ)) / 1.414f); var cellY = Mathf.RoundToInt((-(worldPos.z - offsetZ) - worldPos.x) / 1.414f); return new Vector2Int(cellX, cellY); } public static int GetCellID(Vector2Int cellPos) { return cellPos.x + cellPos.y * mapSize; } public static Vector3 GetCellWorldPos(int cellPos) { int x = cellPos % mapSize; // x는 열 (가로) int y = cellPos / mapSize; // y는 행 (세로) return CellToWorld(new Vector2Int(x, y)); } private void Update() { //UpdateCells(); } public void UpdateCells() { for (int i = 0; i < mapSize * mapSize; i++) { var worldPos = GetCellWorldPos(i); // 바운더리체크 함수로 빼기 if (minX > worldPos.x || worldPos.x > maxX) { tileUIs[i].gameObject.SetActive(false); continue; } if (minZ > worldPos.z || worldPos.z > maxZ) { tileUIs[i].gameObject.SetActive(false); continue; } tileUIs[i].SetTile(tiles[i]); tileUIs[i].gameObject.SetActive(true); tileUIs[i].transform.position = GetCellWorldPos(i); } } public void SetupCell(Vector3 position) { tiles[GetCellID(WorldToCell(position))] = 1; } } }