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;
                }
            }
        }
    }
예제 #4
0
 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);
 }
예제 #5
0
 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);
 }
예제 #6
0
    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);
    }
예제 #10
0
    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;
            }
        }
    }
예제 #11
0
 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);
            }
        }
    }
예제 #13
0
 public static bool CanActivate(BoosterDefinition boosterDefinition, SimulationObjectWrapper context)
 {
     return(Booster.CheckActivationPrerequisites(boosterDefinition, context) && (boosterDefinition.Effects == null || Booster.CanApplyAtLeastOneEffect(boosterDefinition, context)));
 }
예제 #14
0
 public static bool IsTargetValid(BoosterDefinition boosterDefinition, SimulationObjectWrapper context)
 {
     return(boosterDefinition.TargetPath == null || string.IsNullOrEmpty(boosterDefinition.TargetPath.ToString()) || boosterDefinition.TargetPath.IsSimulationObjectValid(context));
 }