Advertisement
Guest User

Reus decompiled growth code

a guest
May 25th, 2013
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.05 KB | None | 0 0
  1.         private void UpdateGrowthSpeed()
  2.         {
  3.             float num = 0f;
  4.             float num2 = 0f;
  5.             float num3 = 0f;
  6.             float totalFood = this.Civilization.TotalFood;
  7.             float totalMechanics = this.Civilization.TotalMechanics;
  8.             float totalValuables = this.Civilization.TotalValuables;
  9.             float arg_51_0 = totalFood * this.parameters.PopulationSustainance / this.parameters.GrowthDif;
  10.             float arg_6C_0 = totalMechanics * this.parameters.TechnologySustainance / this.parameters.GrowthDif;
  11.             float arg_87_0 = totalValuables * this.parameters.WealthSustainance / this.parameters.GrowthDif;
  12.             if (totalFood * this.parameters.PopulationSustainance > this.Civilization.Population)
  13.             {
  14.                 num += this.parameters.BaseGrowth;
  15.             }
  16.             if (totalMechanics * this.parameters.TechnologySustainance > this.Civilization.Technology)
  17.             {
  18.                 num2 += this.parameters.BaseGrowth;
  19.             }
  20.             if (totalValuables * this.parameters.WealthSustainance > this.Civilization.Wealth)
  21.             {
  22.                 num3 += this.parameters.BaseGrowth;
  23.             }
  24.             num += (totalFood * this.parameters.PopulationSustainance - this.Civilization.Population) * this.parameters.AbundanceToPopGrowth;
  25.             num2 += (totalMechanics * this.parameters.TechnologySustainance - this.Civilization.Technology) * this.parameters.MechanicsToTechGrowth;
  26.             num3 += (totalValuables * this.parameters.WealthSustainance - this.Civilization.Wealth) * this.parameters.ValuablesToWealthGrowth;
  27.             float num4 = num;
  28.             float num5 = num2;
  29.             float num6 = num3;
  30.             num = Math.Min(num, this.parameters.MaxGrowth);
  31.             num2 = Math.Min(num2, this.parameters.MaxGrowth);
  32.             num3 = Math.Min(num3, this.parameters.MaxGrowth);
  33.             this.Civilization.PopulationGrowth.InitialValue = num;
  34.             this.Civilization.TechnologyGrowth.InitialValue = num2;
  35.             this.Civilization.WealthGrowth.InitialValue = num3;
  36.             if (num4 > this.parameters.GreedThreshold + this.Civilization.ApathyRR * this.parameters.ReductionRankPower)
  37.             {
  38.                 this.Civilization.ApathyGrowth.InitialValue = this.parameters.GreedGrowth;
  39.             }
  40.             else
  41.             {
  42.                 this.Civilization.ApathyGrowth.InitialValue = this.parameters.GreedGrowthMinimum;
  43.             }
  44.             if (num5 > this.parameters.GreedThreshold + this.Civilization.ApathyRR * this.parameters.ReductionRankPower)
  45.             {
  46.                 this.Civilization.ToxicityGrowth.InitialValue = this.parameters.GreedGrowth;
  47.             }
  48.             else
  49.             {
  50.                 this.Civilization.ToxicityGrowth.InitialValue = this.parameters.GreedGrowthMinimum;
  51.             }
  52.             if (num6 > this.parameters.GreedThreshold + this.Civilization.ApathyRR * this.parameters.ReductionRankPower)
  53.             {
  54.                 this.Civilization.GreedGrowth.InitialValue = this.parameters.GreedGrowth;
  55.                 return;
  56.             }
  57.             this.Civilization.GreedGrowth.InitialValue = this.parameters.GreedGrowthMinimum;
  58.         }
  59.  
  60.  
  61.  
  62.  
  63.         protected override void Tick(GameTime gameTime)
  64.         {
  65.             this.firstGrowTick = false;
  66.             float num = new float[]
  67.             {
  68.                 this.Civilization.Population,
  69.                 this.Civilization.Wealth,
  70.                 this.Civilization.Technology
  71.             }.Max();
  72.             float num2 = this.parameters.BaseHP + this.parameters.HPModifier * (0.75f * num + 0.25f * ((this.Civilization.Population + this.Civilization.Wealth + this.Civilization.Technology) / 3f));
  73.             float num3 = (float)((int)((num2 - this.Civilization.MaxHP) / this.parameters.HPStepSize)) * this.parameters.HPStepSize;
  74.             this.Civilization.MaxHP += num3;
  75.             if (num3 > 0f)
  76.             {
  77.                 this.Civilization.HP += num3;
  78.             }
  79.             this.Civilization.MaxHP = Math.Max(this.parameters.BaseHP, this.Civilization.MaxHP);
  80.             this.Civilization.HP += this.parameters.HPRegen / 100f * this.Civilization.MaxHP;
  81.             this.Civilization.HP = Math.Min(this.Civilization.HP, this.Civilization.MaxHP);
  82.             this.UpdateGrowthSpeed();
  83.             this.Civilization.DangerAcceptance = this.parameters.DangerAcceptanceBase + this.parameters.DangerAcceptanceModifier * this.Civilization.StatStrength;
  84.             this.Civilization.DangerPatrollingLevel = this.parameters.DangerPatrollingBase + this.parameters.DangerPatrollingModifier * this.Civilization.StatStrength;
  85.             this.GrowReach();
  86.             float num4 = this.parameters.BasePopulationCap + this.Civilization.TotalFood * this.parameters.AbundanceToPopulationCapFactor;
  87.             float num5 = this.parameters.BaseWealthCap + this.Civilization.TotalValuables * this.parameters.AbundanceToPopulationCapFactor;
  88.             float num6 = this.parameters.BaseTechnologyCap + this.Civilization.TotalMechanics * this.parameters.AbundanceToPopulationCapFactor;
  89.             float max = this.parameters.HardCapPercentagePopulation / 100f * num4;
  90.             float max2 = this.parameters.HardCapPercentageWealth / 100f * num5;
  91.             float max3 = this.parameters.HardCapPercentageTechnology / 100f * num6;
  92.             float value = this.Civilization.Population + ((this.Civilization.Population >= num4) ? this.parameters.SoftCapGrowthRatio : 1f) * this.Civilization.PopulationGrowth;
  93.             float value2 = this.Civilization.Wealth + ((this.Civilization.Wealth >= num5) ? this.parameters.SoftCapGrowthRatio : 1f) * this.Civilization.WealthGrowth;
  94.             float value3 = this.Civilization.Technology + ((this.Civilization.Technology >= num6) ? this.parameters.SoftCapGrowthRatio : 1f) * this.Civilization.TechnologyGrowth;
  95.             this.Civilization.Population = MathHelper.Clamp(value, 0f, max);
  96.             this.Civilization.Wealth = MathHelper.Clamp(value2, 0f, max2);
  97.             this.Civilization.Technology = MathHelper.Clamp(value3, 0f, max3);
  98.             this.Civilization.Apathy.InitialValue = MathHelper.Clamp(this.Civilization.Apathy.InitialValue + this.Civilization.ApathyGrowth, 0f, this.parameters.IrresponsibilityCap);
  99.             this.Civilization.Greed.InitialValue = MathHelper.Clamp(this.Civilization.Greed.InitialValue + this.Civilization.GreedGrowth, 0f, this.parameters.IrresponsibilityCap);
  100.             this.Civilization.Toxicity.InitialValue = MathHelper.Clamp(this.Civilization.Toxicity.InitialValue + this.Civilization.ToxicityGrowth, 0f, this.parameters.IrresponsibilityCap);
  101.             if (this.Civilization.DangerState == CivilizationDangerStates.Struggling)
  102.             {
  103.                 this.Civilization.ReachPoints -= ModelSettings.Instance.CivParams.Danger.DangerShrinkRate;
  104.             }
  105.             else
  106.             {
  107.                 if (this.Civilization.DangerState == CivilizationDangerStates.Panic)
  108.                 {
  109.                     this.Civilization.ReachPoints -= ModelSettings.Instance.CivParams.Danger.DangerShrinkRatePanic;
  110.                 }
  111.                 else
  112.                 {
  113.                     this.Civilization.ReachPoints += this.parameters.ReachPointsPerSecond;
  114.                 }
  115.             }
  116.             float val = this.Civilization.Army + this.parameters.ArmyRegenPerTick;
  117.             float val2 = this.ComputeMaxArmy();
  118.             this.Civilization.Army = Math.Min(val, val2);
  119.             if (!this.Civilization.IsTypeGrounded)
  120.             {
  121.                 Patch[] cityCenter = this.Civilization.CityCenter;
  122.                 this.Civilization.CivilizationType = ((PatchType[])Enum.GetValues(typeof(PatchType))).ArgMax((PatchType t) => cityCenter.Count((Patch p) => p.Type == t));
  123.             }
  124.         }
  125.  
  126.  
  127.  
  128.  
  129.  
  130.         private void GrowReach()
  131.         {
  132.             if (this.Civilization.IsDisrupted)
  133.             {
  134.                 if (this.Civilization.ReachPoints <= -this.parameters.ReachLossCost)
  135.                 {
  136.                     float num = this.Civilization.GetReach(true, 0).Sum((Patch p) => p.Danger);
  137.                     float num2 = this.Civilization.GetReach(false, 0).Sum((Patch p) => p.Danger);
  138.                     int num3;
  139.                     Reach reach;
  140.                     if (num > num2 || (num.Equals(num2) && (double)RandomHelper.NextFloat() < 0.5))
  141.                     {
  142.                         num3 = -1;
  143.                         reach = this.Civilization.ReachLeft;
  144.                     }
  145.                     else
  146.                     {
  147.                         num3 = 1;
  148.                         reach = this.Civilization.ReachRight;
  149.                     }
  150.                     this.Civilization.ReachPoints += this.parameters.ReachLossCost;
  151.                     reach.NextPatch = this.Civilization.Planet.Surface[reach.NextPatch.Index + num3];
  152.                     reach.Span--;
  153.                 }
  154.             }
  155.             else
  156.             {
  157.                 float num4 = this.ComputeBuyValue(this.Civilization.ReachLeft.NextPatch);
  158.                 float num5 = this.ComputeBuyValue(this.Civilization.ReachRight.NextPatch);
  159.                 int num6 = 0;
  160.                 float num7 = 0f;
  161.                 Reach reach2 = null;
  162.                 if (this.Civilization.ReachPoints >= num4)
  163.                 {
  164.                     num6 = 1;
  165.                     num7 = num4;
  166.                     reach2 = this.Civilization.ReachLeft;
  167.                 }
  168.                 else
  169.                 {
  170.                     if (this.Civilization.ReachPoints >= num5)
  171.                     {
  172.                         num6 = -1;
  173.                         num7 = num5;
  174.                         reach2 = this.Civilization.ReachRight;
  175.                     }
  176.                 }
  177.                 if (num6 != 0)
  178.                 {
  179.                     reach2.NextPatch = this.Civilization.Planet.Surface[reach2.NextPatch.Index + num6];
  180.                     reach2.Span++;
  181.                     this.Civilization.ReachPoints -= num7;
  182.                 }
  183.             }
  184.             Patch disruptedPatch = this.GetDisruptedPatch(true);
  185.             this.Civilization.ReachLeft.IsDisrupted = (disruptedPatch != null);
  186.             disruptedPatch = this.GetDisruptedPatch(false);
  187.             this.Civilization.ReachRight.IsDisrupted = (disruptedPatch != null);
  188.         }
  189.  
  190.  
  191.  
  192.  
  193.         private Patch GetDisruptedPatch(bool left)
  194.         {
  195.             return this.Civilization.GetReach(left, 0).FirstOrDefault(new Func<Patch, bool>(this.Civilization.IsDangerous));
  196.         }
  197.  
  198.  
  199.  
  200.  
  201.         private float ComputeBuyValue(Patch patch)
  202.         {
  203.             float num = 0f;
  204.             float num2 = 1f;
  205.             if (patch.Owner != null)
  206.             {
  207.                 return float.PositiveInfinity;
  208.             }
  209.             num += this.parameters.ReachExpandDangerModifier * patch.Slots.OfType<NatureAsset>().Sum((NatureAsset a) => a.Definition.Danger);
  210.             num += this.parameters.ReachExpandDistanceModifier * (float)(this.Civilization.GetDistance(patch.Index) - Civilization.Radius);
  211.             if (patch.Type != this.Civilization.CivilizationType)
  212.             {
  213.                 switch (patch.Type)
  214.                 {
  215.                     case PatchType.Swamp:
  216.                     {
  217.                         num += this.parameters.ReachExpandSwampCost;
  218.                         break;
  219.                     }
  220.                     case PatchType.Desert:
  221.                     {
  222.                         num += this.parameters.ReachExpandDesertCost;
  223.                         break;
  224.                     }
  225.                     case PatchType.Ocean:
  226.                     {
  227.                         num += this.parameters.ReachExpandOceanCost;
  228.                         break;
  229.                     }
  230.                     case PatchType.Mountain:
  231.                     {
  232.                         num += this.parameters.ReachExpandMountainCost;
  233.                         break;
  234.                     }
  235.                 }
  236.             }
  237.             else
  238.             {
  239.                 num2 -= this.parameters.ReachExpandSameTypeDiscount;
  240.             }
  241.             num2 -= this.parameters.ReachExpandAssetDiscount * (float)patch.Slots.OfType<FloraAsset>().Count((FloraAsset f) => f.Definition.IsSpecial && f.Definition.Danger <= 0f);
  242.             num2 -= this.parameters.ReachExpandAssetDiscount * (float)patch.Slots.OfType<AnimalSourceAsset>().Count((AnimalSourceAsset f) => f.Definition.Danger <= 0f);
  243.             return num * num2;
  244.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement