Esempio n. 1
0
    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>());
        }
    }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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));
            }
        }
Esempio n. 4
0
        /// <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;
                }
            }
        }
Esempio n. 5
0
        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);
                }
            });
        }