/// <summary> /// 해당 위치를 기준으로 이동 가능한 타일들을 표시한다. /// </summary> /// <param name="_start"></param> public void DrawMovableRange(Unit _unit, SquareTile _start) { m_MovableTiles = SearchToMove(_start, _unit.m_Stat.m_MoveRange); if (m_MovableTiles.Count == 0) { return; } Dictionary <Vector3Int, float> costs = new Dictionary <Vector3Int, float>(); HashSet <Vector3Int> obstacles = Map.instance.m_TilemapObstacle.GetObstacleTiles(); foreach (var tile in m_MovableTiles) { bool isObstacle = false; // 장애물이 있을 경우, 장애물 타일로 변경 foreach (var point in obstacles) { if (point == tile.m_Position) { tile.m_State = null; tile.m_State = new TileStateObstacle(tile.m_Position); SquareTile obstacle = SquareTileFactory.CreateObstacle(tile.m_Position); m_Tilemap.SetTile(obstacle.m_Position, obstacle); costs.Add(obstacle.m_Position, 0f); isObstacle = true; break; } } // 장애물이 아닐 경우, if (isObstacle == false) { tile.m_State = null; tile.m_State = new TileStateMovable(tile.m_Position); SquareTile moveTile = SquareTileFactory.CreateMovable(tile.m_Position); m_Tilemap.SetTile(moveTile.m_Position, moveTile); costs.Add(tile.m_Position, 1f); } } m_Grid.UpdateGrid(costs); }
/// <summary> /// 이동 경로를 모두 삭제한다. /// </summary> private void ClearPath() { if (m_Paths == null) { return; } if (m_Paths.Count == 0) { return; } foreach (Vector3Int point in m_Paths) { SquareTile tile = m_Tilemap.GetTile <SquareTile>(point); tile.m_State = null; tile.m_State = new TileStateMovable(tile.m_Position); SquareTile moveTile = SquareTileFactory.CreateMovable(tile.m_Position); m_Tilemap.SetTile(moveTile.m_Position, moveTile); } m_Paths.Clear(); }