/// <summary> /// 유닛을 실제로 이동 시키고 각종 초기화를 수행한다. /// </summary> /// <param name="_path"></param> /// <returns></returns> IEnumerator MoveCoroutine(HashSet <Vector3Int> _path, Vector3Int _targetPosition) { SquareTile item = Map.instance.m_TilemapHighlight.m_Tilemap.GetTile <SquareTile>(m_Position); item.m_State = null; item.m_State = new TileStateNormal(m_Position); SquareTile normalTile = SquareTileFactory.CreateNormal(m_Position); Map.instance.m_TilemapHighlight.m_Tilemap.SetTile(normalTile.m_Position, normalTile); foreach (Vector3Int point in _path) { Vector3 pos = m_SetCenterPosition.GetWorldPosition(point); transform.DOMove(pos, 1f); yield return(new WaitForSeconds(1f)); if (point == _targetPosition) { break; } } // 초기화 SetToIdle(); SetPosition(_targetPosition, true); InitTiles(); }
/// <summary> /// 해당 위치에 타일을 삭제한다. /// </summary> /// <param name="_position"></param> public void DeleteTile(Vector3Int _position) { SquareTile tile = m_Tilemap.GetTile <SquareTile>(_position); if (tile == null) { return; } // 이동 가능한 타일 / 유닛이 위치한 타일 / 이동 경로 타일 일 때는 삭제할 필요가 없다. if (tile.m_State.m_State == eTileType.Movable) { return; } // 그 외의 타일일 경우에는 일반 타일로 교체한다. tile.m_State = null; tile.m_State = new TileStateNormal(tile.m_Position); SquareTile normalTile = SquareTileFactory.CreateNormal(tile.m_Position); m_Tilemap.SetTile(normalTile.m_Position, normalTile); m_TilemapPathFind.m_Grid.UpdateTile(_position, 0f); }
/// <summary> /// 이동 가능한 영역의 타일들을 모두 삭제한다. /// </summary> public void ClearMovableTiles() { if (m_MovableTiles == null) { return; } if (m_MovableTiles.Count == 0) { return; } Dictionary <Vector3Int, float> costs = new Dictionary <Vector3Int, float>(); foreach (var item in m_MovableTiles) { if (item.m_State.m_State != eTileType.Movable) { continue; } item.m_State = null; item.m_State = new TileStateNormal(item.m_Position); SquareTile normalTile = SquareTileFactory.CreateNormal(item.m_Position); m_Tilemap.SetTile(normalTile.m_Position, normalTile); costs.Add(item.m_Position, 0f); } m_Grid.UpdateGrid(costs); }
private void InitTiles() { SquareTile tile = ScriptableObject.CreateInstance <SquareTile>(); tile.m_Position = m_Position; tile.m_State = new TileStateNormal(tile.m_Position); m_CurrentTile = SquareTileFactory.CreateNormal(tile.m_Position); Map.instance.m_TilemapHighlight.m_Tilemap.SetTile(m_Position, m_CurrentTile); Map.instance.m_TilemapController.ResetAllTiles(); Map.instance.m_TilemapController.SetAllUnitPlacedTiles(); }
/// <summary> /// 유닛이 위치한 타일을 제외하고 모든 타일들을 모두 지운다. /// </summary> public void ResetAllTiles() { Dictionary <Vector3Int, float> costs = new Dictionary <Vector3Int, float>(); for (int x = m_Bounds.xMin; x < m_Bounds.xMax; x++) { for (int y = m_Bounds.yMin; y < m_Bounds.yMax; y++) { Vector3Int pos = new Vector3Int(x, y, 0); SquareTile tile = m_Tilemap.GetTile <SquareTile>(pos); // 유닛이 위치한 타일은 초기화 할 필요 없다. //if ( tile.m_State.m_State == eTileType.UnitPlaced ) //{ // //tile.m_Cost = 0; // //tile.m_Distance = 0; // //m_Tilemap.SetTile( tile.m_Position, tile ); // continue; //} // 타일 위에 유닛이 없으면 일반 타일로 초기화시킨다. //else { tile.m_State = null; tile.m_State = new TileStateNormal(tile.m_Position); SquareTile normalTile = SquareTileFactory.CreateNormal(tile.m_Position); m_Tilemap.SetTile(normalTile.m_Position, normalTile); costs.Add(tile.m_Position, 0f); } } } // 테스트 코드 //for ( int x = m_Bounds.xMin; x < m_Bounds.xMax; x++ ) //{ // for ( int y = m_Bounds.yMin; y < m_Bounds.yMax; y++ ) // { // Vector3Int pos = new Vector3Int( x, y, 0 ); // SquareTile tile = m_Tilemap.GetTile<SquareTile>( pos ); // if ( tile.m_Distance != 0 ) // { // Debug.Log( pos ); // } // } //} m_TilemapPathFind.m_Grid.UpdateGrid(costs); }
/// <summary> /// Tilemap에 SquareTile들로 설정한다. /// </summary> private void CreateTilesToNormal() { // Tilemap 크기에 맞추어 SquareTile들을 생성한다. for (int x = m_Bounds.xMin; x < m_Bounds.xMax; x++) { for (int y = m_Bounds.yMin; y < m_Bounds.yMax; y++) { Vector3Int current = new Vector3Int(x, y, 0); SquareTile normal = ScriptableObject.CreateInstance <SquareTile>(); normal.m_Position = new Vector3Int(x, y, 0); normal.m_Cost = 1f; normal.m_State = new TileStateNormal(normal.m_Position); SquareTile tile = SquareTileFactory.CreateNormal(normal.m_Position); m_Tilemap.SetTile(current, tile); } } }
public void ResetAllExceptMoveTiles() { Dictionary <Vector3Int, float> costs = new Dictionary <Vector3Int, float>(); for (int x = m_Bounds.xMin; x < m_Bounds.xMax; x++) { for (int y = m_Bounds.yMin; y < m_Bounds.yMax; y++) { Vector3Int pos = new Vector3Int(x, y, 0); SquareTile tile = m_Tilemap.GetTile <SquareTile>(pos); //if ( tile.m_State.m_State == eTileType.UnitPlaced ) //{ // continue; //} /*else */ if (tile.m_State.m_State == eTileType.Movable) { continue; } //else if ( tile.m_State.m_State == eTileType.Path ) //{ // continue; //} //else if ( tile.m_State.m_State == eTileType.Attackable ) //{ // continue; //} else { tile.m_State = null; tile.m_State = new TileStateNormal(tile.m_Position); SquareTile normalTile = SquareTileFactory.CreateNormal(tile.m_Position); m_Tilemap.SetTile(normalTile.m_Position, normalTile); costs.Add(tile.m_Position, 0f); } } } m_TilemapPathFind.m_Grid.UpdateGrid(costs); }