Exemplo n.º 1
0
        void SpawnNewHexagons(int column, int emptyCount)
        {
            for (int i = 0; i < emptyCount; i++)
            {
                OffsetCoordinate coord  = new OffsetCoordinate(column, GameConfiguration.Instance.GetRowCount() - 1 - i);
                Vector2          target = CoordToWorld(coord);
                Hexagon          newHexagon;
                if (_nextHexagonIsBomb)
                {
                    newHexagon = PoolManager.Instance.GetNewBombHexagon();
                    BombHexagon bombHexagon = (BombHexagon)newHexagon;
                    bombHexagon.SetCounter(5);
                    bombHexagon.UpdateText();
                    //if detonate event not registered yet
                    if (bombHexagon.OnBombDetonated.GetPersistentEventCount() == 0)
                    {
                    }
                    if (!bombHexagon.IsEventSubbed())
                    {
                        bombHexagon.OnBombDetonated.AddListener(
                            () => GameManager.Instance.LoseGame(GameOverReason.BombExploded));
                        bombHexagon.OnExploded.AddListener(() => GameManager.Instance.OnHexagonExploded());
                        bombHexagon.OnExploded.AddListener(() => RemoveBombHexagonFromList(bombHexagon));
                        bombHexagon.OnExploded.AddListener(() => PoolManager.Instance.DespawnBombHexagon(bombHexagon));
                        bombHexagon.SetEventSubbedFlag(true);
                    }

                    bombHexagon.SetNewlySpawnedFlag(true);
                    _nextHexagonIsBomb = false;
                    _bombHexagons.Add(bombHexagon);
                }
                else
                {
                    newHexagon = PoolManager.Instance.GetNewHexagon();
                    if (!newHexagon.IsEventSubbed())
                    {
                        newHexagon.OnExploded.AddListener(() => PoolManager.Instance.DespawnHexagon(newHexagon));
                        newHexagon.OnExploded.AddListener(() => GameManager.Instance.OnHexagonExploded());
                        newHexagon.SetEventSubbedFlag(true);
                    }
                }
                newHexagon.name = "[" + coord.Column + ", " + coord.Row + "]";
                newHexagon.transform.SetParent(parent);
                newHexagon.transform.position = new Vector3(target.x, CameraManager.Instance.GetTopOfCamera() + 1.5f + ((emptyCount - i) * 0.7f));
                int colorIndex = ColorReferencer.Instance.GetRandomColorIndexExcepts();
                newHexagon.SetColorIndex(colorIndex);
                newHexagon.SetColor(ColorReferencer.Instance.GetColorByIndex(colorIndex));
                newHexagon.gameObject.SetActive(true);
                _hexagons[coord.Column, coord.Row] = newHexagon;
                StartCoroutine(newHexagon.Move(target, 10f));
            }
        }
Exemplo n.º 2
0
        public IEnumerable<PlacedHexagon> GetComplementaryHexagons(bool shouldPlaceBomb)
        {
            var alreadyPlacedBomb = false;
            var complementaryHexagons = new List<PlacedHexagon>();
            for (var columnIndex = 0; columnIndex < _gridSize.x; columnIndex++)
            for (var rowIndex = 0; rowIndex < _gridSize.y; rowIndex++)
            {
                var position = new Vector3Int(rowIndex, columnIndex, 0);
                var value = _placedHexagons.Find(placedHexagon => placedHexagon.Cell == position);
                if (value != null) continue;

                if (shouldPlaceBomb && !alreadyPlacedBomb)
                {
                    alreadyPlacedBomb = true;
                    var hexagon = bombHexagons[Random.Range(0, bombHexagons.Count)];
                    if (NeighborHood.FindNeighbor(position, _placedHexagons, _grid, NeighborType.BottomLeft,
                        out var neighbor))
                        while (neighbor.Hexagon.color.Equals(hexagon.color))
                            hexagon = bombHexagons[Random.Range(0, bombHexagons.Count)];

                    var tile = CreateTile(hexagon);
                    _tilemap.SetTile(position, tile);
                    var item = new BombHexagon(hexagon, position, Random.Range(6, 10));
                    complementaryHexagons.Add(item);
                    _placedHexagons.Add(item);
                }
                else
                {
                    var hexagon = hexagons[Random.Range(0, hexagons.Count)];
                    if (NeighborHood.FindNeighbor(position, _placedHexagons, _grid, NeighborType.BottomLeft,
                        out var neighbor))
                        while (neighbor.Hexagon.color.Equals(hexagon.color))
                            hexagon = hexagons[Random.Range(0, hexagons.Count)];

                    var tile = CreateTile(hexagon);
                    _tilemap.SetTile(position, tile);
                    var item = new PlacedHexagon(hexagon, position);
                    complementaryHexagons.Add(item);
                    _placedHexagons.Add(item);
                }
            }

            return complementaryHexagons;
        }
Exemplo n.º 3
0
 public void RemoveBombHexagonFromList(BombHexagon bombHexagon)
 {
     _bombHexagons.Remove(bombHexagon);
 }
Exemplo n.º 4
0
 public void DespawnBombHexagon(BombHexagon bombHexagon)
 {
     bombHexagonPool.Despawn(bombHexagon.gameObject);
 }