コード例 #1
0
 public void HandleHappiness(CustomTile pTile, bool pHappy)
 {
     int[] tilePos = GetTilePosition(pTile);
     for (int x = 0; x < 3; x++)//Check all bordering tiles
     {
         for (int y = 0; y < 3; y++)
         {
             int xCoordinate = tilePos[0] - 1 + x;
             int yCoordinate = tilePos[1] - 1 + y;
             if ((xCoordinate < 0 || xCoordinate >= _tileMap.GetLength(0)) || (yCoordinate < 0 || yCoordinate >= _tileMap.GetLength(1)))
             {
                 continue;
             }
             CustomTile borderingTile = _tileMap[xCoordinate, yCoordinate];
             if (!borderingTile.GetIsHappy())
             {
                 borderingTile.SetIsHappy(pHappy);
                 if (borderingTile.GetBuildingOnTile() is House && _myManager is PlayerCityManager && pHappy)
                 {
                     GameInitializer.AddSocializerScore(2);
                 }
             }
         }
     }
 }
コード例 #2
0
    public float GetTileValue(CustomTile pTile) //UGLY PART: Code duplication with AICityManager. Left in because of time pressure.
    {
        Building pBuilding = pTile.GetBuildingOnTile();

        if (pBuilding == null)
        {
            return(0);
        }
        float value    = -(pBuilding.GetCost() / 3); //Remove cost from the value of the move.
        City  tileCity = pTile.GetCity();

        bool  buildingIsProduction = false;
        float happinessValue       = 0;
        float moneyValue           = 0;
        float collectionValue      = 1;

        if (pBuilding is ProductionBuilding)
        {
            buildingIsProduction = true;
            ProductionBuilding prodBuilding = pBuilding as ProductionBuilding;
            happinessValue += prodBuilding.GetHappinessGain();
            moneyValue     += prodBuilding.GetMoneyGain();
            collectionValue = 0;
        }

        Building[] buildingsInRange = tileCity.GetBuildingsAroundTile(1, pTile);
        foreach (Building b in buildingsInRange)
        {
            if (b is CollectionBuilding && buildingIsProduction)
            {
                //If this move places a production building next to a collection building, add value to the move.
                collectionValue += 1;
            }
            else if (b is ProductionBuilding)
            {
                if (!buildingIsProduction)
                {
                    //If this move places a collection building next to a production building, add value to the move.
                    ProductionBuilding prodBuilding = b as ProductionBuilding;
                    happinessValue += prodBuilding.GetHappinessGain();
                    moneyValue     += prodBuilding.GetMoneyGain();
                }
                else if (pBuilding.GetType() == b.GetType())
                {
                    ProductionBuilding prodBuilding = pBuilding as ProductionBuilding;
                    happinessValue += prodBuilding.GetHappinessGain() * Glob.FactoryProductionMultiplier;
                    moneyValue     += prodBuilding.GetMoneyGain() * Glob.FactoryProductionMultiplier; //If a production building is placed next to a production building of the same type, add value to the move.
                }
                else
                {
                    //If a production building is placed next to a production building of a different type, subtract value from the move.
                    ProductionBuilding prodBuilding = pBuilding as ProductionBuilding;
                    happinessValue -= prodBuilding.GetHappinessGain() * Glob.FactoryProductionMultiplier;
                    moneyValue     -= prodBuilding.GetMoneyGain() * Glob.FactoryProductionMultiplier;
                }
            }
        }
        value += (happinessValue + moneyValue) * collectionValue;
        return(value);
    }
コード例 #3
0
    private void launchMissile(CustomTile pTarget)
    {
        Missile missile = Instantiate(Glob.GetMissile());

        missile.WaitWithAnimation(4);
        missile.SetMissileTile(pTarget);
        City targetCity = pTarget.GetCity();

        Destroy(pTarget.GetBuildingOnTile().gameObject);
        Debug.Log("Destroyed the building");
        pTarget.SetBuilding(null);

        SetCurrentMode(CurrentMode.SELECTINGTILE);
        _isFocusedOnOwnCity = true;
    }