public void Initialize(Vector2Int size, GameTileContentFactory contentFactory) { this.size = size; this.contentFactory = contentFactory; ground.localScale = new Vector3(size.x, size.y, 1f); Vector2 offset = new Vector2((size.x - 1) * 0.5f, (size.y - 1) * 0.5f); tiles = new GameaTile[size.x * size.y]; for (int i = 0, y = 0; y < size.y; y++) { for (int x = 0; x < size.x; x++, i++) { GameaTile tile = tiles[i] = Instantiate(tilePrefab); tile.transform.SetParent(transform, false); tile.transform.localPosition = new Vector3(x - offset.x, 0f, y - offset.y); if (x > 0) { GameaTile.MakeEastWestNeighbors(tile, tiles[i - 1]); } if (y > 0) { GameaTile.MakeNorthSouthNeighbors(tile, tiles[i - size.x]); } tile.IsAlternative = (x & 1) == 0; if ((y & 1) == 0) { tile.IsAlternative = !tile.IsAlternative; } tile.Content = contentFactory.Get(GameTileContentType.Empty); } } //FindPaths(); ToggleDestination(tiles[tiles.Length / 2]); ToggleSpawnPoint(tiles[0]); }
public static void MakeNorthSouthNeighbors(GameaTile north, GameaTile south) { Debug.Assert( south.north == null && north.south == null, "Redefined neighbors!" ); south.north = north; north.south = south; }
public static void MakeEastWestNeighbors(GameaTile east, GameaTile west) { Debug.Assert( west.east == null && east.west == null, "Redefined neighbors!" ); west.east = east; east.west = west; }
void SpawnEnemy() { GameaTile spawnPoint = board.GetSpawnPoint(Random.Range(0, board.SpawnPointCount)); Enemy enemy = enemyFactory.Get(); enemy.SpawnOn(spawnPoint); enemies.Add(enemy); }
void HandleTouch() { GameaTile tile = board.GetTile(TouchRay); if (tile != null) { Debug.Log("oldu"); //tile.Content = // tileContentFactory.Get(GameTileContentType.Destination); board.ToggleWall(tile); } }
GameaTile GrowPathTo(GameaTile neighbor, Direction direction) { if (!HasPath || neighbor == null || neighbor.HasPath) { return(null); } neighbor.distance = distance + 1; neighbor.nextOnPath = this; neighbor.ExitPoint = neighbor.transform.localPosition + direction.GetHalfVector(); neighbor.PathDirection = direction; return (neighbor.Content.Type != GameTileContentType.Wall ? neighbor : null); }
void HandleAlternativeTouch() { GameaTile tile = board.GetTile(TouchRay); if (tile != null) { if (Input.GetKey(KeyCode.LeftShift)) { board.ToggleDestination(tile); } else { board.ToggleSpawnPoint(tile); } } }
bool FindPaths() { foreach (GameaTile ktile in tiles) { if (ktile.Content.Type == GameTileContentType.Destination) { ktile.BecomeDestination(); searchFrontier.Enqueue(ktile); } else { ktile.ClearPath(); } } if (searchFrontier.Count == 0) { return(false); } //tiles[tiles.Length / 2].BecomeDestination(); //searchFrontier.Enqueue(tiles[tiles.Length / 2]); while (searchFrontier.Count > 0) { GameaTile tile = searchFrontier.Dequeue(); if (tile != null) { if (tile.IsAlternative) { searchFrontier.Enqueue(tile.GrowPathNorth()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathWest()); } else { searchFrontier.Enqueue(tile.GrowPathWest()); searchFrontier.Enqueue(tile.GrowPathEast()); searchFrontier.Enqueue(tile.GrowPathSouth()); searchFrontier.Enqueue(tile.GrowPathNorth()); } } } foreach (GameaTile tile in tiles) { if (!tile.HasPath) { return(false); } } foreach (GameaTile atile in tiles) { atile.ShowPath(); } if (showPaths) { foreach (GameaTile tile in tiles) { tile.ShowPath(); } } return(true); }