private float DecisionScoreTransferFunctionDelegate(ConstructibleElement aiEvaluableElement, float score) { BoosterDefinition constructibleElement = aiEvaluableElement as BoosterDefinition; ConstructionResourceStock[] array; base.DepartmentOfTheTreasury.GetInstantConstructionResourceCostForBuyout(base.Empire, constructibleElement, out array); float num = 0f; for (int i = 0; i < array.Length; i++) { float num2 = 0f; if (!base.DepartmentOfTheTreasury.TryGetResourceStockValue(base.Empire, array[i].PropertyName, out num2, false) || num2 == 0f) { num = 1f; break; } float num3 = array[i].Stock / num2; if (num3 > num) { num = num3; } } score = AILayer.Boost(score, this.costFactorFromRegistry * (1f - num)); return(score); }
private void CreateChosenBoosterNeedMessage(BoosterDefinition boosterDefinition) { EvaluableMessage_LavaboostNeeded evaluableMessage_LavaboostNeeded = null; IEnumerable <EvaluableMessage_LavaboostNeeded> messages = base.AIEntity.AIPlayer.Blackboard.GetMessages <EvaluableMessage_LavaboostNeeded>(BlackboardLayerID.Empire); foreach (EvaluableMessage_LavaboostNeeded evaluableMessage_LavaboostNeeded2 in messages) { if (evaluableMessage_LavaboostNeeded2.State == BlackboardMessage.StateValue.Message_InProgress) { if (evaluableMessage_LavaboostNeeded == null) { evaluableMessage_LavaboostNeeded = evaluableMessage_LavaboostNeeded2; } else { evaluableMessage_LavaboostNeeded2.Cancel(); } } } if (evaluableMessage_LavaboostNeeded == null) { evaluableMessage_LavaboostNeeded = new EvaluableMessage_LavaboostNeeded(1f, 1f, boosterDefinition, AILayer_AccountManager.NoAccountName); base.AIEntity.AIPlayer.Blackboard.AddMessage(evaluableMessage_LavaboostNeeded); } else { evaluableMessage_LavaboostNeeded.Refresh(1f, 1f, boosterDefinition); } }
private void StartNextBooster() { if (base.Empire.SimulationObject.Tags.Contains(FactionTrait.FactionTraitReplicants1)) { return; } DepartmentOfScience agency = base.Empire.GetAgency <DepartmentOfScience>(); bool flag = base.Empire.GetAgency <DepartmentOfForeignAffairs>().IsInWarWithSomeone(); bool flag2 = agency.GetTechnologyState("TechnologyDefinitionAllBoosterLevel1") == DepartmentOfScience.ConstructibleElement.State.Researched || agency.GetTechnologyState("TechnologyDefinitionAllBoosterLevel2") == DepartmentOfScience.ConstructibleElement.State.Researched; if (agency.GetResearchPropertyValue("UnlockedTechnologyCount") <= 16f || flag2 || flag) { if (agency.GetResearchPropertyValue("UnlockedTechnologyCount") >= 23f && !flag2) { return; } for (int i = 0; i < this.departmentOfEducation.VaultCount; i++) { BoosterDefinition boosterDefinition = this.departmentOfEducation.VaultItems[i].Constructible as BoosterDefinition; if (boosterDefinition != null && boosterDefinition.Name == "BoosterScience") { OrderBuyoutAndActivateBooster order = new OrderBuyoutAndActivateBooster(base.Empire.Index, boosterDefinition.Name, this.departmentOfEducation.VaultItems[i].GUID, false); Ticket ticket; base.Empire.PlayerControllers.AI.PostOrder(order, out ticket, new EventHandler <TicketRaisedEventArgs>(this.BuyoutAndActivateBooster_TicketRaised)); return; } } } }
protected static bool CanApplyAtLeastOneEffect(BoosterDefinition boosterDefinition, SimulationObjectWrapper context) { if (boosterDefinition.Effects == null) { return(false); } for (int i = 0; i < boosterDefinition.Effects.Length; i++) { if (Booster.CheckPrerequisites(boosterDefinition.Effects[i], context)) { return(true); } } return(false); }
protected static bool CheckActivationPrerequisites(BoosterDefinition boosterDefinition, SimulationObjectWrapper context) { if (boosterDefinition.Prerequisites == null || boosterDefinition.Prerequisites.Length == 0) { return(true); } for (int i = 0; i < boosterDefinition.Prerequisites.Length; i++) { if (!boosterDefinition.Prerequisites[i].Check(context)) { return(false); } } return(true); }
public Booster(GameEntityGUID boosterGUID, BoosterDefinition boosterDefinition, global::Empire empire, SimulationObjectWrapper context, GameEntityGUID contextGUID, int duration, int instigatorEmpireIndex) : base("Booster#" + boosterGUID) { this.GUID = boosterGUID; this.BoosterDefinition = boosterDefinition; this.empire = empire; this.Duration = duration; this.TurnWhenStarted = -1; this.RemainingTime = -1; this.Context = context; this.TargetGUID = contextGUID; this.InstigatorEmpireIndex = instigatorEmpireIndex; IGameService service = Services.GetService <IGameService>(); if (service != null) { this.game = (service.Game as global::Game); } this.simulationDescriptorsDatatable = Databases.GetDatabase <SimulationDescriptor>(false); }
protected internal override void CreateLocals() { base.CreateLocals(); this.availableBoosterByDefinitionName.Clear(); for (int i = 0; i < this.departmentOfEducation.VaultCount; i++) { BoosterDefinition boosterDefinition = this.departmentOfEducation.VaultItems[i].Constructible as BoosterDefinition; if (boosterDefinition != null) { StaticString staticString = boosterDefinition.Name; if (staticString == "FlamesIndustryBooster") { staticString = "BoosterIndustry"; } if (!this.availableBoosterByDefinitionName.ContainsKey(staticString)) { this.availableBoosterByDefinitionName.Add(staticString, new List <GameEntityGUID>()); } this.availableBoosterByDefinitionName[staticString].Add(this.departmentOfEducation.VaultItems[i].GUID); } } }
protected internal override void CreateLocals() { base.CreateLocals(); float propertyValue = base.AIEntity.Empire.GetPropertyValue(SimulationProperties.LavapoolStock); if (3f - propertyValue > 0f) { this.decisionResults.Clear(); this.decisionMaker.EvaluateDecisions(this.boosterDefinitions, ref this.decisionResults); for (int i = 0; i < this.decisionResults.Count; i++) { BoosterDefinition boosterDefinition = this.decisionResults[i].Element as BoosterDefinition; if (boosterDefinition != null) { float productionCostWithBonus = DepartmentOfTheTreasury.GetProductionCostWithBonus(base.Empire, boosterDefinition, boosterDefinition.Costs[0].ResourceName); if (base.DepartmentOfTheTreasury.CanAfford(productionCostWithBonus, boosterDefinition.Costs[0].ResourceName)) { this.CreateChosenBoosterNeedMessage(boosterDefinition); return; } } } } }
protected internal override void Initialize(AIEntity aiEntity) { base.Initialize(aiEntity); IDatabase <ResourceDefinition> database = Databases.GetDatabase <ResourceDefinition>(false); IDatabase <BoosterDefinition> database2 = Databases.GetDatabase <BoosterDefinition>(false); List <BoosterDefinition> list = new List <BoosterDefinition>(); foreach (ResourceDefinition resourceDefinition in database) { if (resourceDefinition.ResourceType == ResourceDefinition.Type.Strategic) { BoosterDefinition item = null; if (database2.TryGetValue("Booster" + resourceDefinition.Name + "Lavapool", out item)) { list.Add(item); } } } this.boosterDefinitions = list.ToArray(); IConstructibleElementEvaluationAIHelper service = AIScheduler.Services.GetService <IConstructibleElementEvaluationAIHelper>(); this.decisionMaker = new SimulationDecisionMaker <ConstructibleElement>(service, base.Empire); this.decisionMaker.ScoreTransferFunctionDelegate = new Func <ConstructibleElement, float, float>(this.DecisionScoreTransferFunctionDelegate); }
public override void RefreshContent() { if (this.City == null) { return; } base.RefreshContent(); float num = 0f; WorkersDragPanel guiPanel = base.GuiService.GetGuiPanel <WorkersDragPanel>(); for (int i = 0; i < this.workerTypes.Count; i++) { int num2 = Mathf.FloorToInt(this.City.GetPropertyValue(this.workerTypes[i])); if (guiPanel.DragInProgress && guiPanel.DragMoved && this.workerTypes[i] == guiPanel.StartingWorkerType) { num2 -= guiPanel.NumberOfWorkers; } if (i < this.WorkersGroups.Length) { this.WorkersGroups[i].RefreshContent(this.City, num2, this.workerTypes[i], guiPanel); this.WorkersGroups[i].GetComponent <AgeTransform>().Enable = (this.interactionsAllowed && !this.IsOtherEmpire); } int num3 = num2 / this.workersPerLine; if (num3 * this.workersPerLine != num2) { num3++; } if (num3 < 1) { num3 = 1; } if (i < this.WorkersGroups.Length && this.WorkersGroups[i] != null) { AgeTransform workersTable = this.WorkersGroups[i].WorkersTable; float num4 = workersTable.VerticalMargin + (float)num3 * (this.childHeight + workersTable.VerticalSpacing); if (num4 > num) { num = num4; } } } for (int j = 0; j < this.prodPerPopFIDSTypes.Count; j++) { float num5 = 0f; if (j < this.ProdPerPopFIDSValues.Length) { float propertyValue = this.City.GetPropertyValue(this.prodPerPopFIDSTypes[j]); this.ProdPerPopFIDSValues[j].Text = GuiFormater.FormatGui(propertyValue, false, false, false, 0); } float propertyValue2 = this.City.GetPropertyValue(this.workedFIDSTypes[j]); if (j < this.CityTileFIDSValues.Length) { float propertyValue3 = this.City.GetPropertyValue(this.cityTileFIDSTypes[j]); this.CityTileFIDSValues[j].Text = GuiFormater.FormatGui(propertyValue3, false, false, false, 0); } if (j < this.TotalFIDSValues.Length) { num5 = this.City.GetPropertyValue(this.totalFIDSTypes[j]); if (this.City.SimulationObject.Tags.Contains(City.MimicsCity) && this.TotalFIDSValues[j].AgeTransform.AgeTooltip.ClientData != null && this.TotalFIDSValues[j].AgeTransform.AgeTooltip.ClientData is SimulationPropertyTooltipData) { SimulationPropertyTooltipData simulationPropertyTooltipData = this.TotalFIDSValues[j].AgeTransform.AgeTooltip.ClientData as SimulationPropertyTooltipData; if (simulationPropertyTooltipData.Title == SimulationProperties.NetCityProduction) { num5 = 0f; } else if (simulationPropertyTooltipData.Title == SimulationProperties.NetCityGrowth) { num5 = this.City.GetPropertyValue("AlmostNetCityGrowth"); } } this.TotalFIDSValues[j].Text = GuiFormater.FormatGui(num5, false, false, false, 0); } if (j < this.ModifierFIDSValues.Length) { float num6 = num5 - propertyValue2; if (Mathf.RoundToInt(num6) != 0) { this.ModifierFIDSValues[j].Text = GuiFormater.FormatGui(num6, false, false, true, 0); } else { this.ModifierFIDSValues[j].Text = string.Empty; } } } this.WorkerGroupsTable.Height = num; this.WorkersTitle.Height = num; for (int k = 0; k < this.WorkersGroups.Length; k++) { this.WorkersGroups[k].WorkersTable.Height = num; this.WorkersGroups[k].ActiveHighlight.Height = num; this.WorkersGroups[k].GetComponent <AgeTransform>().Height = num; } base.AgeTransform.Height = this.TopMargin * AgeUtils.CurrentUpscaleFactor() + num + this.WorkerGroupsTable.PixelMarginBottom; bool flag = DepartmentOfTheInterior.CanBuyoutPopulation(this.City); bool flag2 = this.City.Empire.SimulationObject.Tags.Contains(FactionTrait.FactionTraitReplicants1); bool flag3 = this.City.Empire.SimulationObject.Tags.Contains(FactionTrait.FactionTraitMimics2); int rowIndex; Func <WorkersGroup, bool> < > 9__0; int rowIndex2; for (rowIndex = 0; rowIndex < this.FoodColumnCells.Length; rowIndex = rowIndex2 + 1) { bool flag4 = false; if (this.IsOtherEmpire) { IEnumerable <WorkersGroup> workersGroups = this.WorkersGroups; Func <WorkersGroup, bool> predicate; if ((predicate = < > 9__0) == null) { predicate = (< > 9__0 = ((WorkersGroup cell) => cell.GetComponent <AgeTransform>() == this.FoodColumnCells[rowIndex])); } flag4 = workersGroups.Any(predicate); } this.FoodColumnCells[rowIndex].Enable = (!flag && this.interactionsAllowed && !flag4); this.ScienceColumnCells[rowIndex].Enable = (!flag2 && this.interactionsAllowed && !flag4); this.IndustryColumnCells[rowIndex].Enable = (!flag3 && this.interactionsAllowed && !flag4); rowIndex2 = rowIndex; } if (this.BoostersTable == null) { bool highDefinition = AgeUtils.HighDefinition; AgeUtils.HighDefinition = false; this.BoostersTable = base.AgeTransform.InstanciateChild(this.BoostersEnumerator.BoostersTable.transform, "WorkerPanelBoostersTable1"); this.BoostersTable.TableArrangement = false; this.BoostersTable2 = base.AgeTransform.InstanciateChild(this.BoostersEnumerator.BoostersTable.transform, "WorkerPanelBoostersTable2"); this.BoostersTable2.TableArrangement = false; AgeUtils.HighDefinition = highDefinition; } this.stackedBoosters.Clear(); this.stackedBoosters2.Clear(); float num7 = 0f; bool flag5 = false; bool flag6 = false; bool flag7 = false; bool flag8 = false; float num8 = AgeUtils.HighDefinition ? 3f : 2f; if (!this.IsOtherEmpire) { foreach (string text in new List <string> { "BoosterFood", "BoosterCadavers", "BoosterIndustry", "FlamesIndustryBooster", "BoosterScience" }) { BoosterDefinition boosterDefinition2; if (this.database.TryGetValue(text, out boosterDefinition2)) { GuiStackedBooster item = new GuiStackedBooster(boosterDefinition2); this.stackedBoosters.Add(item); if (!this.ParentIsCityListScreen && (text == "BoosterCadavers" || text == "FlamesIndustryBooster")) { this.stackedBoosters2.Add(item); } } } bool flag9 = false; this.vaultBoosters = this.departmentOfEducation.GetVaultItems <BoosterDefinition>(); for (int l = 0; l < this.vaultBoosters.Count; l++) { BoosterDefinition boosterDefinition = this.vaultBoosters[l].Constructible as BoosterDefinition; if (boosterDefinition != null) { flag9 = true; if (boosterDefinition.Name == "BoosterFood") { flag5 = true; } else if (boosterDefinition.Name == "BoosterIndustry") { flag6 = true; } else if (boosterDefinition.Name == "BoosterCadavers") { flag7 = true; } else if (boosterDefinition.Name == "FlamesIndustryBooster") { flag8 = true; } this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.RewardType == boosterDefinition.RewardType).AddVaultBooster(this.vaultBoosters[l]); } } if (!flag9) { this.stackedBoosters.Clear(); this.stackedBoosters2.Clear(); } else { num7 = this.FidsGroups[0].Height; if (!this.ParentIsCityListScreen) { if (!flag6) { GuiStackedBooster item2 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "BoosterIndustry"); this.stackedBoosters.Remove(item2); } else { GuiStackedBooster item3 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "FlamesIndustryBooster"); this.stackedBoosters.Remove(item3); } if (!flag5) { GuiStackedBooster item4 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "BoosterFood"); this.stackedBoosters.Remove(item4); } else { GuiStackedBooster item5 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "BoosterCadavers"); this.stackedBoosters.Remove(item5); } if (!flag6 && !flag5) { this.stackedBoosters2.Clear(); } } else { if (flag8 && !flag6) { GuiStackedBooster item6 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "BoosterIndustry"); this.stackedBoosters.Remove(item6); } else if (!flag8) { GuiStackedBooster item7 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "FlamesIndustryBooster"); this.stackedBoosters.Remove(item7); } if (!flag5 && flag7) { GuiStackedBooster item8 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "BoosterFood"); this.stackedBoosters.Remove(item8); } else if (!flag7) { GuiStackedBooster item9 = this.stackedBoosters.Find((GuiStackedBooster booster) => booster.BoosterDefinition.Name == "BoosterCadavers"); this.stackedBoosters.Remove(item9); } } } } this.BoostersTable2.ReserveChildren(this.stackedBoosters2.Count, this.BoostersEnumerator.BoosterStockPrefab, "Item2"); this.BoostersTable2.RefreshChildrenIList <GuiStackedBooster>(this.stackedBoosters2, this.refreshDelegate, true, true); this.BoostersTable.ReserveChildren(this.stackedBoosters.Count, this.BoostersEnumerator.BoosterStockPrefab, "Item"); this.BoostersTable.RefreshChildrenIList <GuiStackedBooster>(this.stackedBoosters, this.refreshDelegate, true, true); this.BoostersTable.PixelMarginTop = base.AgeTransform.Height; this.BoostersTable2.PixelMarginTop = base.AgeTransform.Height + this.FidsGroups[0].Height + num8; float num9 = 0f; foreach (BoosterStock boosterStock in this.BoostersTable.GetChildren <BoosterStock>(true)) { float num10 = num8; if (this.ParentIsCityListScreen && ((flag5 && flag7 && (boosterStock.GuiStackedBooster.BoosterDefinition.Name == "BoosterFood" || boosterStock.GuiStackedBooster.BoosterDefinition.Name == "BoosterCadavers")) || (flag6 && flag8 && (boosterStock.GuiStackedBooster.BoosterDefinition.Name == "BoosterIndustry" || boosterStock.GuiStackedBooster.BoosterDefinition.Name == "FlamesIndustryBooster")))) { boosterStock.AgeTransform.Width = this.FidsGroups[0].Width / 2f - 1f; if (boosterStock.GuiStackedBooster.BoosterDefinition.Name == "BoosterFood" || boosterStock.GuiStackedBooster.BoosterDefinition.Name == "BoosterIndustry") { num10 = 2f; } } else { boosterStock.AgeTransform.Width = this.FidsGroups[0].Width; } if (boosterStock.GuiStackedBooster.Quantity == 0 || (flag && (num9 == 0f || boosterStock.GuiStackedBooster.BoosterDefinition.Name == "BoosterCadavers")) || (flag2 && boosterStock.GuiStackedBooster.BoosterDefinition.Name == "BoosterScience")) { boosterStock.AgeTransform.Enable = false; boosterStock.AgeTransform.Visible = false; } else { num7 = boosterStock.AgeTransform.Height; boosterStock.AgeTransform.Enable = this.interactionsAllowed; boosterStock.AgeTransform.Visible = true; boosterStock.QuickActivation = true; boosterStock.Guid = this.City.GUID; boosterStock.QuantityLabel.AgeTransform.AttachTop = true; boosterStock.QuantityLabel.AgeTransform.AttachRight = true; boosterStock.QuantityLabel.AgeTransform.PixelMarginLeft = 0f; boosterStock.QuantityLabel.Alignement = AgeTextAnchor.AscendMiddleRight; if (!this.ParentIsCityListScreen) { boosterStock.IconImage.AgeTransform.PixelMarginLeft = num8 * 2.5f; boosterStock.QuantityLabel.AgeTransform.PixelMarginRight = num8 * 2f; } else { boosterStock.IconImage.AgeTransform.PixelMarginLeft = ((boosterStock.AgeTransform.Width == this.FidsGroups[0].Width) ? (boosterStock.AgeTransform.Width / 3f) : (boosterStock.AgeTransform.Width / 5f)); boosterStock.QuantityLabel.AgeTransform.PixelMarginRight = ((boosterStock.AgeTransform.Width == this.FidsGroups[0].Width) ? (boosterStock.AgeTransform.Width / 3f) : (boosterStock.AgeTransform.Width / 5f)); } } boosterStock.AgeTransform.X = num9; boosterStock.AgeTransform.AttachRight = false; boosterStock.AgeTransform.AttachLeft = true; num9 += boosterStock.AgeTransform.Width + num10; } if (this.BoostersTable2.GetChildren <BoosterStock>(true).Count > 0) { bool flag10 = false; num9 = 0f; foreach (BoosterStock boosterStock2 in this.BoostersTable2.GetChildren <BoosterStock>(true)) { boosterStock2.AgeTransform.Width = this.FidsGroups[0].Width; if (boosterStock2.GuiStackedBooster.Quantity == 0 || (num9 == 0f && !flag5) || (num9 > 0f && !flag6) || (flag && num9 == 0f)) { boosterStock2.AgeTransform.Enable = false; boosterStock2.AgeTransform.Visible = false; } else { flag10 = true; boosterStock2.AgeTransform.Enable = this.interactionsAllowed; boosterStock2.AgeTransform.Visible = true; boosterStock2.QuickActivation = true; boosterStock2.Guid = this.City.GUID; boosterStock2.IconImage.AgeTransform.PixelMarginLeft = num8 * 2.5f; boosterStock2.QuantityLabel.AgeTransform.AttachTop = true; boosterStock2.QuantityLabel.AgeTransform.AttachRight = true; boosterStock2.QuantityLabel.AgeTransform.PixelMarginLeft = 0f; boosterStock2.QuantityLabel.AgeTransform.PixelMarginRight = num8 * 2f; boosterStock2.QuantityLabel.Alignement = AgeTextAnchor.AscendMiddleRight; } boosterStock2.AgeTransform.X = num9; boosterStock2.AgeTransform.AttachRight = false; boosterStock2.AgeTransform.AttachLeft = true; num9 += this.FidsGroups[0].Width + this.BoostersTable2.HorizontalSpacing; } num7 += (flag10 ? (this.FidsGroups[0].Height + num8) : 0f); } base.AgeTransform.Height += num7; this.AgeModifierPosition.EndHeight = base.AgeTransform.Height; foreach (AgeTransform ageTransform in base.AgeTransform.GetChildren()) { if (ageTransform.name.Contains("CityTile") || ageTransform.name.Contains("Total") || ageTransform.name.Contains("Modifiers")) { ageTransform.PixelMarginBottom = this.OriginalMargins[ageTransform.name] * (AgeUtils.HighDefinition ? 1.5f : 1f) + num7; } } }
public static StaticString GetBoosterActivationsPropertyName(BoosterDefinition boosterDefinition) { return(boosterDefinition + "Activations"); }
protected internal override void Evaluate() { base.Evaluate(); AILayer_ResourceManager layer = base.AIEntity.GetLayer <AILayer_ResourceManager>(); layer.BoostersInUse.Clear(); if (!base.AIEntity.Empire.SimulationObject.Tags.Contains(FactionTrait.FactionTraitReplicants1)) { for (int i = 0; i < this.departmentOfEducation.VaultCount; i++) { BoosterDefinition boosterDefinition = this.departmentOfEducation.VaultItems[i].Constructible as BoosterDefinition; if (boosterDefinition != null && boosterDefinition.Name == "BoosterScience") { layer.BoostersInUse.Add(this.departmentOfEducation.VaultItems[i].GUID.ToString()); break; } } } this.boosterNeedsMessages.Clear(); this.boosterNeedsMessages.AddRange(base.AIEntity.AIPlayer.Blackboard.GetMessages <CityBoosterNeeds>(BlackboardLayerID.Empire)); for (int j = 0; j < this.boosterNeedsMessages.Count; j++) { if (this.boosterNeedsMessages[j].BoosterGuid.IsValid) { VaultItem vaultItem = this.departmentOfEducation[this.boosterNeedsMessages[j].BoosterGuid]; if (vaultItem != null) { StaticString staticString = vaultItem.Constructible.Name; if (staticString == AIBoosterManager_CityResources.boosterCadavers) { staticString = AIBoosterManager_CityResources.boosterFood; } if (staticString == "FlamesIndustryBooster") { staticString = "BoosterIndustry"; } if (this.availableBoosterByDefinitionName.ContainsKey(staticString)) { this.availableBoosterByDefinitionName[staticString].Remove(vaultItem.GUID); if (this.availableBoosterByDefinitionName[staticString].Count == 0) { this.availableBoosterByDefinitionName.Remove(staticString); } } this.boosterNeedsMessages[j].AvailabilityState = CityBoosterNeeds.CityBoosterState.Available; } } } this.boosterNeedsMessages.RemoveAll((CityBoosterNeeds match) => match.AvailabilityState > CityBoosterNeeds.CityBoosterState.Pending); this.boosterNeedsMessages.Sort((CityBoosterNeeds left, CityBoosterNeeds right) => - 1 * left.BoosterPriority.CompareTo(right.BoosterPriority)); for (int k = 0; k < this.boosterNeedsMessages.Count; k++) { CityBoosterNeeds cityBoosterNeeds = this.boosterNeedsMessages[k]; StaticString boosterDefinitionName = cityBoosterNeeds.BoosterDefinitionName; if (this.availableBoosterByDefinitionName.ContainsKey(cityBoosterNeeds.BoosterDefinitionName)) { int num = this.availableBoosterByDefinitionName[cityBoosterNeeds.BoosterDefinitionName].Count - 1; GameEntityGUID boosterGuid = this.availableBoosterByDefinitionName[cityBoosterNeeds.BoosterDefinitionName][num]; this.availableBoosterByDefinitionName[cityBoosterNeeds.BoosterDefinitionName].RemoveAt(num); if (num == 0) { this.availableBoosterByDefinitionName.Remove(cityBoosterNeeds.BoosterDefinitionName); } cityBoosterNeeds.BoosterGuid = boosterGuid; cityBoosterNeeds.AvailabilityState = CityBoosterNeeds.CityBoosterState.Available; layer.BoostersInUse.Add(boosterGuid.ToString()); this.boosterNeedsMessages.RemoveAt(k); k--; } } this.evaluableMessages.Clear(); this.evaluableMessages.AddRange(base.AIEntity.AIPlayer.Blackboard.GetMessages <EvaluableMessage_CityBooster>(BlackboardLayerID.Empire)); this.evaluableMessages.RemoveAll((EvaluableMessage_CityBooster match) => match.State != BlackboardMessage.StateValue.Message_InProgress || match.EvaluationState != EvaluableMessage.EvaluableMessageState.Pending || match.EvaluationState != EvaluableMessage.EvaluableMessageState.Obtaining); this.evaluableMessages.Sort((EvaluableMessage_CityBooster left, EvaluableMessage_CityBooster right) => - 1 * left.Interest.CompareTo(right.Interest)); for (int l = 0; l < this.evaluableMessages.Count; l++) { EvaluableMessage_CityBooster cityBoosterEvaluableMessage = this.evaluableMessages[l]; int num2 = this.boosterNeedsMessages.FindIndex((CityBoosterNeeds match) => match.BoosterDefinitionName == cityBoosterEvaluableMessage.BoosterDefinitionName); if (num2 >= 0) { CityBoosterNeeds cityBoosterNeeds2 = this.boosterNeedsMessages[num2]; cityBoosterEvaluableMessage.Refresh(this.globalPriority, cityBoosterNeeds2.BoosterPriority, cityBoosterNeeds2.CityGuid); this.boosterNeedsMessages.RemoveAt(num2); } else if (cityBoosterEvaluableMessage.EvaluationState == EvaluableMessage.EvaluableMessageState.Obtaining) { cityBoosterEvaluableMessage.Refresh(0f, 0f, cityBoosterEvaluableMessage.CityGuid); } else { base.AIEntity.AIPlayer.Blackboard.CancelMessage(this.evaluableMessages[l]); this.evaluableMessages.RemoveAt(l); l--; } } for (int m = 0; m < this.boosterNeedsMessages.Count; m++) { CityBoosterNeeds cityBoosterNeeds3 = this.boosterNeedsMessages[m]; BoosterGeneratorDefinition boosterGenerator = this.constructibleElementHelper.GetBoosterGenerator(base.AIEntity.Empire, cityBoosterNeeds3.BoosterDefinitionName); if (boosterGenerator != null) { EvaluableMessage_CityBooster evaluableMessage_CityBooster = new EvaluableMessage_CityBooster(cityBoosterNeeds3.CityGuid, cityBoosterNeeds3.BoosterDefinitionName, boosterGenerator.Name, 1, AILayer_AccountManager.EconomyAccountName); evaluableMessage_CityBooster.SetInterest(this.globalPriority, cityBoosterNeeds3.BoosterPriority); base.AIEntity.AIPlayer.Blackboard.AddMessage(evaluableMessage_CityBooster); } } }
public static bool CanActivate(BoosterDefinition boosterDefinition, SimulationObjectWrapper context) { return(Booster.CheckActivationPrerequisites(boosterDefinition, context) && (boosterDefinition.Effects == null || Booster.CanApplyAtLeastOneEffect(boosterDefinition, context))); }
public static bool IsTargetValid(BoosterDefinition boosterDefinition, SimulationObjectWrapper context) { return(boosterDefinition.TargetPath == null || string.IsNullOrEmpty(boosterDefinition.TargetPath.ToString()) || boosterDefinition.TargetPath.IsSimulationObjectValid(context)); }