public TileEntity(Vector2 coords, eTileType type, TileTheme theme) { coordsM = coords; coordsW = coords * coords.SPACE_SIZE(); tileType = type; color = theme.GetColor(type); }
public override void _Ready() { ChangeOrders = new List <TileChangeOrder>(); update = false; mapHandler = new MapHandler(); theme = new TileTheme(); projectileQueue = new List <SimpleProjectile>(); rightHighlight.color = new UITheme().cAccent; leftHighlight.color = new UITheme().cBlue; AllLevels = new List <TileMap>() { level2, level3, level4 }; mapHandler.GenerateTiles(50); mapHandler.AddGrass(); mapHandler.tiles.ForEach(t => level3.SetCellv(t.coordsM, GetTileId(level3, t.tileType))); }
public MapHandler() { rng = new Random(); tiles = new List <TileEntity>(); theme = new TileTheme(); }
// 새 타일맵 생성 public void CreateTileMap(TileTheme theme, int horizontal, int vertical) { tileList = new List <List <BasicTile> >(); decoTileList = new List <DecoTileListData>(); if (horizontal * vertical > MAX_TILE_NUMBER) { Debug.Log("타일 최대값 초과!"); return; } PoolManager.Instance.CreateObjectPoolFromPath <BasicTile>(tileGroupData.BasicTilePath, tileGroupData.BasicTilePath, 60); switch (theme) { case TileTheme.Grass: currentTileSet = tileGroupData.GrassTileSet; break; case TileTheme.Ice: currentTileSet = tileGroupData.IceTileSet; break; case TileTheme.Desert: currentTileSet = tileGroupData.DesertTileSet; break; } SetCurrentMaterialOnPath(currentTileSet); // 테마에 맞는 랜덤 바닥 타일맵 세팅 for (int i = 0; i < horizontal; i++) { tileList.Add(new List <BasicTile>()); for (int j = 0; j < vertical; j++) { int rand = Random.Range(0, currentTileMaterial.Count); BasicTile tile = PoolManager.Instance.Create <BasicTile>(tileGroupData.BasicTilePath); tile.Init(TileState.None, new Vector3Int(i, 0, j), currentTileMaterial[rand][0], currentTileMaterial[rand][1]); tileList[i].Add(tile); } } // 몬스터 성 생성 CreateCastle(vertical, horizontal); // 무조건 성으로 가는 길은 하나 존재해야 하므로 None State를 잠시 바꿔둔다. List <Vector3Int> roadTilePosList = pathFinder.GetPath(monsterCastlePos, playerCastlePos, tileList); for (int i = 1; i < roadTilePosList.Count - 1; i++) { tileList[roadTilePosList[i].x][roadTilePosList[i].z].SetState(TileState.Obstacle); } int riverCreateGen; // 테마 별로 강 생성 확률이 다르다 if (theme == TileTheme.Grass) { riverCreateGen = 100; } else if (theme == TileTheme.Ice) { riverCreateGen = 50; } else { riverCreateGen = 30; } if (riverCreateGen > Random.Range(1, 101)) { CreateRiver(horizontal, vertical); } CreateObstacle(Random.Range(2, horizontal), horizontal, vertical); for (int i = 1; i < roadTilePosList.Count - 1; i++) { if (tileList[roadTilePosList[i].x][roadTilePosList[i].z].GetState() == TileState.Obstacle) { tileList[roadTilePosList[i].x][roadTilePosList[i].z].SetState(TileState.None); } } }