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)); } }
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; }
public void RemoveBombHexagonFromList(BombHexagon bombHexagon) { _bombHexagons.Remove(bombHexagon); }
public void DespawnBombHexagon(BombHexagon bombHexagon) { bombHexagonPool.Despawn(bombHexagon.gameObject); }