public SelectableTile FindTileWithPOIKind(POIkind poikind) { foreach (var tile in Tiles) { if (tile.PointOfInterest == poikind) { return(tile); } } return(null); }
void Start() { PointsOfInterestAmount = new Dictionary <POIkind, int> (); Tiles = new SelectableTile[PosWidth - NegWidth + 1, PosHeight - NegHeight + 1]; int tilesAmount = (PosWidth - NegWidth + 1) * (PosHeight - NegHeight + 1); int amountWithoutNones = 0; for (int i = 1; i < POIamounts.Count; i++) { amountWithoutNones += POIamounts [i]; } POIamounts [0] = tilesAmount - amountWithoutNones; for (int i = 0; i < POIs.Count; i++) { PointsOfInterestAmount.Add(POIs [i], POIamounts [i]); } List <POIkind> poiKinds = new List <POIkind> (); Dictionary <POIkind, int> tempPointsOfInterestAmount = new Dictionary <POIkind, int> (PointsOfInterestAmount); List <POIkind> keys = new List <POIkind> (tempPointsOfInterestAmount.Keys); foreach (var key in keys) { while (tempPointsOfInterestAmount[key] > 0) { poiKinds.Add(key); tempPointsOfInterestAmount [key]--; } } Utility.Shuffle(poiKinds); POIKinds = new List <POIkind> (poiKinds); int counter = 0; int enemyShipsCounter = 0; for (int i = NegWidth; i <= PosWidth; i++) { for (int j = NegHeight; j <= PosHeight; j++) { GameObject tile = Instantiate(TilePrefab) as GameObject; tile.transform.SetParent(TileContainer.transform, false); float x = i * 1.223f; float y = j * 1.223f; float z = -3.0f; tile.transform.position = new Vector3(x, y, z); tile.GetComponent <SelectableTile> ().BoardCoords = new Vector2Int(i, j); tile.GetComponent <SelectableTile> ().BoardCoordsAsString = i + ":" + j; if (!Player.Instance.Tiles.ContainsKey(i + ":" + j)) { Player.Instance.Tiles.Add(i + ":" + j, true); } if (!GameManager.Instance.Tiles.Contains(tile.GetComponent <SelectableTile> ())) { GameManager.Instance.Tiles.Add(tile.GetComponent <SelectableTile> ()); } if (AllClear) { tile.GetComponent <SelectableTile> ().StopParticles(); } if (Random.Range(0.0f, 1.0f) <= Player.Instance.CurrentAdventure.RevealedTilesRatio) { tile.GetComponent <SelectableTile> ().StopParticles(); } if (Player.Instance.NewBoard) { POIkind poi = poiKinds [counter]; tile.GetComponent <SelectableTile> ().PointOfInterest = poi; SpawnPOI(tile.GetComponent <SelectableTile> ()); } else if (Player.Instance.POIDataByTiles.ContainsKey(i + ":" + j) && Player.Instance.POIDataByTiles[(i + ":" + j)].POIkind != POIkind.None) { POIkind poi = Player.Instance.POIDataByTiles [(i + ":" + j)].POIkind; tile.GetComponent <SelectableTile> ().PointOfInterest = poi; SpawnPOI(tile.GetComponent <SelectableTile> ()); } Tiles[i - NegWidth, j - NegHeight] = tile.GetComponent <SelectableTile> (); tile.GetComponent <SelectableTile> ().AbsBoardCoords = new Vector2Int(i - NegWidth, j - NegHeight); if (tile.GetComponent <SelectableTile> ().PointOfInterest == POIkind.None && enemyShipsCounter < Player.Instance.CurrentAdventure.EnemyShipsCount) { GameObject enemyShipObject = Instantiate(EnemyShipPrefab) as GameObject; //enemyShipObject.transform.SetParent (tile.transform); enemyShipObject.GetComponent <EnemyShip> ().CurrentTile = tile.GetComponent <SelectableTile> (); enemyShipObject.transform.position = new Vector3(tile.transform.position.x, tile.transform.position.y, 0); enemyShipsCounter++; GameManager.Instance.EnemyShips.Add(enemyShipObject.GetComponent <EnemyShip> ()); } counter++; } } foreach (var tile in Tiles) { tile.Neighbors = GetTileNeighbors(tile); tile.FullNeighbors = GetFullTileNeighbors(tile); tile.DiagonalNeighbors = GetDiagonalTileNeighbors(tile); } if (Player.Instance.NewBoard) { Player.Instance.NewBoard = false; } if (OnBoardGenerationFinished != null) { OnBoardGenerationFinished(); } Player.Instance.CurrentAdventure.InitialChestsCount = PointsOfInterestAmount [POIkind.Chest]; // spaghetti code ftw }