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); } } } } }
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); }
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; }