private void SpawnEnemyGameObjects() { List <GameObject> spawners = new List <GameObject>(); Tile.PositionOnGrid flags = ( Tile.PositionOnGrid.TopLeftCorner | Tile.PositionOnGrid.TopRightCorner | Tile.PositionOnGrid.BottomLeftCorner | Tile.PositionOnGrid.BottomRightCorner ); IEnumerable <Enum> flagValues = flags.GetIndividualFlags(); foreach (Enum value in flagValues) { spawners.Add( assetSpawner.SpawnAssetGeneric( mapGenerator.Grid, assets.EnemySpawner, assets.EnemySpawner.name, (Tile.PositionOnGrid)value )); } foreach (GameObject go in spawners) { go.GetComponent <SpawnAgentOverTime>().Init(assetSpawner, go.transform.parent.GetComponent <Tile>()); } }
public virtual Tile GetFirstUnoccupiedTile(Tile.PositionOnGrid position) { int tileLength = TileGrid.Length; foreach (Tile t in TileGrid) { if (t.TilePositionOnGrid == position) { if (t.transform.childCount == 0) { return(t); } } } return(null); }
/// <summary> /// Brute-force recursion to get an unoccupied Tile at random. /// </summary> /// <param name="position">The position you want it from on the Grid.</param> /// <returns></returns> public virtual Tile GetRandomUnoccupiedTile(Tile.PositionOnGrid position) { //first, we get a random tile from the grid int randC = Random.Range(0, Columns); int randR = Random.Range(0, Rows); //we then assign it to a reference for readability Tile tileToTest = TileGrid[randC, randR]; //does it have the position we asked for? if (tileToTest.TilePositionOnGrid == position) { //if yes, does it have no children? Thus, is it unoccupied? If yes, return the tile, else, retry this method return(tileToTest.transform.childCount == 0 ? tileToTest : GetRandomUnoccupiedTile(position)); } else { //if no, retry with a different tile return(GetRandomUnoccupiedTile(position)); } }
/// <summary> /// Highlight all Tiles found on the given Position of the Grid. /// </summary> /// <param name="PositionToHighlight">The Position of the Grid which you want to have Highlighted.</param> public virtual void HighlightSectionOfGrid(Tile.PositionOnGrid PositionToHighlight) { Tile[] flattened = TileGrid.Cast <Tile>().ToArray(); int len = flattened.Length; foreach (var selectedTile in selectedTilesColours) { selectedTile.Key.spriteRenderer.color = selectedTile.Value; } selectedTilesColours.Clear(); for (int i = 0; i < len; ++i) { Tile t = flattened[i]; if (t.TilePositionOnGrid == PositionToHighlight) { selectedTilesColours.Add(t, t.spriteRenderer.color); t.spriteRenderer.color = Color.gray; } } }
private void AssignCoordinatesAndPositionsToTiles() { Tile.PositionOnGrid gridCornersFlags = ( Tile.PositionOnGrid.TopLeftCorner | Tile.PositionOnGrid.TopRightCorner | Tile.PositionOnGrid.BottomLeftCorner | Tile.PositionOnGrid.BottomRightCorner ); Array.ForEach(TileGrid, (column, row) => { Vector2 coordinatesOnGrid = new Vector2(column, row); Tile.PositionOnGrid tpOnG = SetupTilePositionsOnGrid(coordinatesOnGrid); TileGrid[column, row] = new Tile(); TileGrid[column, row].Init(tpOnG, coordinatesOnGrid); Tile t = TileGrid[column, row]; if (gridCornersFlags.HasFlag(t.TilePositionOnGrid)) { GridCorners.Add(t); } }); }