コード例 #1
0
        public virtual bool CanSign(Alliance alliance, AllianceAgreementDef allianceAgreementDef, Pawn speaker, out string reason)
        {
            reason = string.Empty;

            if (alliance.AgreementActive(allianceAgreementDef))
            {
                reason = "Alliance_CanSignAgreement_AlreadyActive".Translate();
                return(false);
            }

            if (!allianceAgreementDef.TargetGoals.Contains(alliance.AllianceGoalDef))
            {
                reason = "Alliance_CanSignAgreement_NoTargetGoal".Translate();
                return(false);
            }

            if (allianceAgreementDef.UseAgreementsSlot && alliance.AllianceAgreements.Count == alliance.AgreementsSlots)
            {
                reason = "Alliance_CanSignAgreement_NoSlots".Translate(alliance.AgreementsSlots);
                return(false);
            }

            var conditions = allianceAgreementDef.Conditions;

            if (conditions != null)
            {
                foreach (var condition in conditions)
                {
                    if (!condition.Avaliable(alliance))
                    {
                        reason = condition.Reason;
                        return(false);
                    }
                }
            }

            if (alliance.Factions.Count < allianceAgreementDef.MinMembersRequired)
            {
                reason = "Alliance_CanSignAgreement_MinMembersRequired".Translate(allianceAgreementDef.MinMembersRequired);
                return(false);
            }

            return(true);
        }
コード例 #2
0
ファイル: Alliance.cs プロジェクト: SwimUp/moreevents
        public bool AddAgreement(AllianceAgreementDef allianceAgreementDef, FactionInteraction signedFaction, int endTicks)
        {
            if (!CanSignAgreement(allianceAgreementDef, out string reason))
            {
                Messages.Message("Alliance_AddAgreement_False".Translate(reason), MessageTypeDefOf.NeutralEvent);
                return(false);
            }

            AllianceAgreementComp allianceAgreementComp = (AllianceAgreementComp)Activator.CreateInstance(allianceAgreementDef.Comp.compClass);

            allianceAgreementComp.AllianceAgreementDef = allianceAgreementDef;
            allianceAgreementComp.SignedFaction        = signedFaction;
            allianceAgreementComp.OwnerFaction         = QuestsManager.Communications.FactionManager.GetInteraction(FactionOwner);
            allianceAgreementComp.EndTicks             = Find.TickManager.TicksGame + endTicks;
            allianceAgreementComp.SignTicks            = Find.TickManager.TicksGame;
            allianceAgreementComp.Alliance             = this;

            AllianceAgreements.Add(allianceAgreementComp);

            return(true);
        }
コード例 #3
0
ファイル: AllianceManager.cs プロジェクト: SwimUp/moreevents
        private void DrawAgreement(Rect rect, ref float x, AllianceAgreementDef allianceAgreementDef)
        {
            Text.Anchor = TextAnchor.MiddleCenter;
            Rect textureRect = new Rect(x + 25, 2, 80, 80);

            GUI.DrawTexture(textureRect, alliance.AgreementActive(allianceAgreementDef) ? allianceAgreementDef.AgreementMenuTexture : allianceAgreementDef.OfflineAgreementMenuTexture);

            Rect titleRect = new Rect(x + 3, 85, 124, 55);

            Widgets.Label(titleRect, allianceAgreementDef.label);
            Text.Font   = GameFont.Tiny;
            Text.Anchor = TextAnchor.MiddleCenter;
            Rect buttonRect = new Rect(x, 0, 130, 140);

            if (Widgets.ButtonInvisible(buttonRect))
            {
                var comp = allianceAgreementDef.Comp;
                if (comp.CanSign(alliance, allianceAgreementDef, Negotiator, out string reason))
                {
                    comp.MenuSelect(alliance, allianceAgreementDef, Negotiator);
                }
            }
            GUI.color = Color.white;
            Widgets.DrawHighlightIfMouseover(buttonRect);
            if (Mouse.IsOver(buttonRect))
            {
                string info = allianceAgreementDef.description;
                if (!allianceAgreementDef.Comp.CanSign(alliance, allianceAgreementDef, Negotiator, out string reason))
                {
                    info += "\n" + reason;
                }
                TooltipHandler.TipRegion(buttonRect, info);
            }

            x += 140;

            Text.Font   = GameFont.Small;
            Text.Anchor = TextAnchor.UpperLeft;
        }
コード例 #4
0
ファイル: Alliance.cs プロジェクト: SwimUp/moreevents
        public bool CanSignAgreement(AllianceAgreementDef allianceAgreementDef, out string reason)
        {
            reason = string.Empty;

            if (AgreementActive(allianceAgreementDef))
            {
                reason = "Alliance_CanSignAgreement_AlreadyActive".Translate();
                return(false);
            }

            if (!allianceAgreementDef.TargetGoals.Contains(AllianceGoalDef))
            {
                reason = "Alliance_CanSignAgreement_NoTargetGoal".Translate();
                return(false);
            }

            if (allianceAgreementDef.UseAgreementsSlot && allianceAgreements.Count == AgreementsSlots)
            {
                reason = "Alliance_CanSignAgreement_NoSlots".Translate(AgreementsSlots);
                return(false);
            }

            if (allianceAgreementDef.Conditions != null)
            {
                foreach (var condition in allianceAgreementDef.Conditions)
                {
                    if (!condition.Avaliable(this))
                    {
                        reason = condition.Reason;
                        return(false);
                    }
                }
            }

            return(true);
        }
コード例 #5
0
 public virtual void MenuSelect(Alliance alliance, AllianceAgreementDef allianceAgreementDef, Pawn negotiator)
 {
 }
コード例 #6
0
ファイル: Alliance.cs プロジェクト: SwimUp/moreevents
 public AllianceAgreementComp GetAgreement(AllianceAgreementDef allianceAgreementDef)
 {
     return(AllianceAgreements.FirstOrDefault(x => x.AllianceAgreementDef == allianceAgreementDef));
 }
コード例 #7
0
ファイル: Alliance.cs プロジェクト: SwimUp/moreevents
 public bool AgreementActive(AllianceAgreementDef allianceAgreementDef)
 {
     return(AllianceAgreements.Any(x => x.AllianceAgreementDef == allianceAgreementDef));
 }