Esempio n. 1
0
        public DefenseContractComp(Alliance alliance, FactionInteraction signer, FactionInteraction owner, FightersLevel fightersLevel, int daysDuration)
        {
            AllianceAgreementDef = AllianceAgreementDefOfLocal.DefenseContractAgreement;
            Alliance             = alliance;

            SignedFaction      = signer;
            OwnerFaction       = owner;
            SignTicks          = Find.TickManager.TicksGame;
            EndTicks           = Find.TickManager.TicksGame + (daysDuration * 60000);
            this.fightersLevel = fightersLevel;
        }
        public DefenseContractCompWindow(Alliance alliance, DefenseContractCompProperties defenseContractCompProperties, Pawn negotiator)
        {
            this.alliance = alliance;
            this.defenseContractCompProperties = defenseContractCompProperties;
            this.negotiator = negotiator;

            fightersType = FightersLevel.RegularFighers;
            faction      = alliance.Factions.FirstOrDefault();

            doCloseX   = true;
            forcePause = true;

            contractDaysDuration = minContractDays;
        }
        public static string ToStringHuman(this FightersLevel fightersLevel)
        {
            switch (fightersLevel)
            {
            case FightersLevel.RegularFighers:
                return("FightersLevel_RegularFighers".Translate());

            case FightersLevel.EliteFighters:
                return("FightersLevel_EliteFighters".Translate());

            case FightersLevel.Officiers:
                return("FightersLevel_Officiers".Translate());

            default:
                return("");
            }
        }
        public override void DoWindowContents(Rect inRect)
        {
            float y = inRect.y + 10;

            Text.Anchor = TextAnchor.MiddleCenter;
            Rect selectFactionRect = new Rect(0, y, inRect.width, 25);

            if (GUIUtils.DrawCustomButton(selectFactionRect, "DefenseContractCompWindow_SelectFaction".Translate(faction.Faction.Name), Color.white))
            {
                List <FloatMenuOption> opt = new List <FloatMenuOption>();
                foreach (var f in alliance.Factions)
                {
                    opt.Add(new FloatMenuOption($"{f.Faction.Name} {((int)f.Faction.def.techLevel < (int)defenseContractCompProperties.MinFactionTechLevel ? "DefenseContractCompWindow_LowTechLevel".Translate().ToString() : "")}", () => { if ((int)f.Faction.def.techLevel > (int)defenseContractCompProperties.MinFactionTechLevel)
                                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                                  faction = f;
                                                                                                                                                                                                                                              }
                                                }));
                }
                Find.WindowStack.Add(new FloatMenu(opt));
            }
            y += 30;
            Rect durationLabelRect = new Rect(0, y, inRect.width, 30);

            Widgets.Label(durationLabelRect, "DefenseContractCompWindow_ContractDuration".Translate());
            durationLabelRect.y += 30;
            Widgets.IntEntry(durationLabelRect, ref contractDaysDuration, ref contractDaysDurationBuff);
            if (contractDaysDuration < minContractDays)
            {
                ResetBufferTo(minContractDays, ref contractDaysDuration, ref contractDaysDurationBuff);
            }
            else if (contractDaysDuration > maxContractDays)
            {
                ResetBufferTo(maxContractDays, ref contractDaysDuration, ref contractDaysDurationBuff);
            }

            y = 100;
            Rect costRangeRect = new Rect(0, y, inRect.width, 25);

            Widgets.Label(costRangeRect, "DefenseContractCompWindow_CostRangeSlider".Translate());
            costRangeRect.y += 28;
            if (GUIUtils.DrawCustomButton(costRangeRect, fightersType.ToStringHuman(), Color.white))
            {
                List <FloatMenuOption> opt = new List <FloatMenuOption>();
                foreach (FightersLevel f in Enum.GetValues(typeof(FightersLevel)))
                {
                    opt.Add(new FloatMenuOption(f.ToStringHuman(), () => fightersType = f));
                }
                Find.WindowStack.Add(new FloatMenu(opt));
            }
            y += 60;
            Rect generateButtonRect = new Rect(0, y, inRect.width, 25);

            if (GUIUtils.DrawCustomButton(generateButtonRect, "DefenseContractCompWindow_ShowExamplePawns".Translate(), Color.white))
            {
                GenerateAndSelectPawns();
            }
            y += 30;
            Widgets.DrawLineHorizontal(0, y, inRect.width);
            y += 35;
            Rect  pawnRect   = new Rect(0, y, 100, 140);
            float weaponY    = pawnRect.y + 135;
            Rect  weaponRect = new Rect(0, weaponY, 100, 100);

            foreach (var pawn in generatedPawns)
            {
                Widgets.ThingIcon(pawnRect, pawn);
                if (pawn.equipment != null && pawn.equipment.Primary != null)
                {
                    Widgets.ThingIcon(weaponRect, pawn.equipment.Primary);
                }

                weaponRect.x += 110;
                pawnRect.x   += 110;
            }

            Text.Anchor = TextAnchor.UpperLeft;

            y += 280;

            Rect infoRect = new Rect(0, y, inRect.width, 200);

            Widgets.Label(infoRect, "DefenseContractCompWindow_ResultInfo".Translate(contractDaysDuration, totalDaysCost, fightersType.ToStringHuman(), fightersCost[fightersType], totalCost));

            Text.Anchor = TextAnchor.MiddleCenter;
            y          += 210;
            Rect createAgrRect = new Rect(0, inRect.height - 30, inRect.width, 25);
            bool active        = faction.Trust >= totalCost;

            if (GUIUtils.DrawCustomButton(createAgrRect, "DefenseContractCompWindow_CreateAgreement".Translate(), active ? Color.white : Color.gray))
            {
                if (active)
                {
                    CreateAgreement();

                    Close();
                }
                else
                {
                    Messages.Message("DefenseContractCompWindow_CreateAgreement_NoTrust".Translate(), MessageTypeDefOf.NegativeEvent, false);
                }
            }

            Text.Anchor = TextAnchor.UpperLeft;
        }