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); }
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); }
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; }
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); }
public virtual void MenuSelect(Alliance alliance, AllianceAgreementDef allianceAgreementDef, Pawn negotiator) { }
public AllianceAgreementComp GetAgreement(AllianceAgreementDef allianceAgreementDef) { return(AllianceAgreements.FirstOrDefault(x => x.AllianceAgreementDef == allianceAgreementDef)); }
public bool AgreementActive(AllianceAgreementDef allianceAgreementDef) { return(AllianceAgreements.Any(x => x.AllianceAgreementDef == allianceAgreementDef)); }