Exemple #1
0
 public SelectableTile FindTileWithPOIKind(POIkind poikind)
 {
     foreach (var tile in Tiles)
     {
         if (tile.PointOfInterest == poikind)
         {
             return(tile);
         }
     }
     return(null);
 }
Exemple #2
0
    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
    }