protected void processCommunicable(ICommunicable comm, Pawn myPawn, List <FloatMenuOption> result) { if (comm != null) { string text = "CallOnRadio".Translate(comm.GetCallLabel()); Action action = delegate { ICommunicable localCommTarget = comm; if (!Building_OrbitalTradeBeacon.AllPowered(this.Map).Any <Building_OrbitalTradeBeacon>()) { Messages.Message("MessageNeedBeaconToTradeWithShip".Translate(), this, MessageTypeDefOf.RejectInput); return; } if (comm is ILoadReferenceable) { //if we communicate with an object that can be saved we create a job. Job job = new Job(JobDefOf.UseCommsConsole, this); job.commTarget = localCommTarget; myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); } else { //if we cannot save the com target we avoid creating a job and start the communication immediately. localCommTarget.TryOpenComms(myPawn); } PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.OpeningComms, KnowledgeAmount.Total); }; result.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, action, MenuOptionPriority.InitiateSocial, null, null, 0f, null, null), myPawn, this)); } }
public override void DoWindowContents(Rect inRect) { GUI.BeginGroup(inRect); Rect rect = new Rect(0f, 0f, inRect.width / 2f, 70f); Rect rect2 = new Rect(0f, rect.yMax, rect.width, 60f); Rect rect3 = new Rect(inRect.width / 2f, 0f, inRect.width / 2f, 70f); Rect rect4 = new Rect(inRect.width / 2f, rect.yMax, rect.width, 60f); Text.Font = GameFont.Medium; Widgets.Label(rect, negotiator.LabelCap); Text.Anchor = TextAnchor.UpperRight; Widgets.Label(rect3, commTarget.GetCallLabel()); Text.Anchor = TextAnchor.UpperLeft; Text.Font = GameFont.Small; GUI.color = new Color(1f, 1f, 1f, 0.7f); Widgets.Label(rect2, "SocialSkillIs".Translate(negotiator.skills.GetSkill(SkillDefOf.Social).Level)); Text.Anchor = TextAnchor.UpperRight; Widgets.Label(rect4, commTarget.GetInfoText()); Faction faction = commTarget.GetFaction(); if (faction != null) { FactionRelationKind playerRelationKind = faction.PlayerRelationKind; GUI.color = playerRelationKind.GetColor(); Rect rect5 = new Rect(rect4.x, rect4.y + Text.CalcHeight(commTarget.GetInfoText(), rect4.width) + Text.SpaceBetweenLines, rect4.width, 30f); Widgets.Label(rect5, playerRelationKind.GetLabel()); } Text.Anchor = TextAnchor.UpperLeft; GUI.color = Color.white; GUI.EndGroup(); float num = 147f; Rect rect6 = new Rect(0f, num, inRect.width, inRect.height - num); DrawNode(rect6); }
static string CallLabelReplace(ICommunicable comm, string callLabel) { if (comm is Communication) { return(comm.GetCallLabel()); } return(callLabel); }
public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn) { if (!myPawn.CanReach(this, PathEndMode.InteractionCell, Danger.Some, false, TraverseMode.ByPawn)) { FloatMenuOption item = new FloatMenuOption("CannotUseNoPath".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null); List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(item); return(list); } if (base.Spawned && base.Map.gameConditionManager.ConditionIsActive(GameConditionDefOf.SolarFlare)) { FloatMenuOption item2 = new FloatMenuOption("CannotUseSolarFlare".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null); List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(item2); return(list); } if (!this.powerComp.PowerOn) { FloatMenuOption item3 = new FloatMenuOption("CannotUseNoPower".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null); List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(item3); return(list); } if (!myPawn.health.capacities.CapableOf(PawnCapacityDefOf.Talking)) { FloatMenuOption item4 = new FloatMenuOption("CannotUseReason".Translate("IncapableOfCapacity".Translate(PawnCapacityDefOf.Talking.label)), null, MenuOptionPriority.Default, null, null, 0f, null, null); List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(item4); return(list); } if (myPawn.skills.GetSkill(SkillDefOf.Social).TotallyDisabled) { FloatMenuOption item5 = new FloatMenuOption("CannotPrioritizeWorkTypeDisabled".Translate(SkillDefOf.Social.LabelCap), null, MenuOptionPriority.Default, null, null, 0f, null, null); List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(item5); return(list); } if (!this.CanUseCommsNow) { Log.Error(myPawn + " could not use comm console for unknown reason."); FloatMenuOption item6 = new FloatMenuOption("Cannot use now", null, MenuOptionPriority.Default, null, null, 0f, null, null); List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(item6); return(list); } List <FloatMenuOption> list2 = new List <FloatMenuOption>(); IEnumerable <ICommunicable> enumerable = myPawn.Map.passingShipManager.passingShips.Cast <ICommunicable>().Concat(Find.FactionManager.AllFactionsInViewOrder.Cast <ICommunicable>()); foreach (ICommunicable item7 in enumerable) { ICommunicable localCommTarget = item7; string text = "CallOnRadio".Translate(localCommTarget.GetCallLabel()); Faction faction = localCommTarget as Faction; if (faction != null) { if (!faction.IsPlayer) { if (Building_CommsConsole.LeaderIsAvailableToTalk(faction)) { goto IL_0339; } string str = (faction.leader == null) ? "LeaderUnavailableNoLeader".Translate() : "LeaderUnavailable".Translate(faction.leader.LabelShort); list2.Add(new FloatMenuOption(text + " (" + str + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null)); } continue; } goto IL_0339; IL_0339: Action action = delegate { ICommunicable commTarget2 = localCommTarget; if (item7 is TradeShip && !Building_OrbitalTradeBeacon.AllPowered(base.Map).Any()) { Messages.Message("MessageNeedBeaconToTradeWithShip".Translate(), this, MessageTypeDefOf.RejectInput); } else { Job job = new Job(JobDefOf.UseCommsConsole, this); job.commTarget = commTarget2; myPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.OpeningComms, KnowledgeAmount.Total); } }; list2.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, action, MenuOptionPriority.InitiateSocial, null, null, 0f, null, null), myPawn, this, "ReservedBy")); } return(list2); }
public static IEnumerable <FloatMenuOption> GetFloatMenuOptions(this Building_CommsConsole building, Pawn myPawn) { /*if (!myPawn.CanReserve(building, 1)) * { * FloatMenuOption item = new FloatMenuOption("CannotUseReserved".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null); * return new List<FloatMenuOption> * { * item * }; * }*/ if (!myPawn.CanReach(building, PathEndMode.InteractionCell, Danger.Some, false, TraverseMode.ByPawn)) { FloatMenuOption item2 = new FloatMenuOption("CannotUseNoPath".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null); return(new List <FloatMenuOption> { item2 }); } if (building.Map.mapConditionManager.ConditionIsActive(MapConditionDefOf.SolarFlare)) { FloatMenuOption item3 = new FloatMenuOption("CannotUseSolarFlare".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null); return(new List <FloatMenuOption> { item3 }); } if (!building.GetFieldViaReflection <CompPowerTrader>("powerComp").PowerOn) { FloatMenuOption item4 = new FloatMenuOption("CannotUseNoPower".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null); return(new List <FloatMenuOption> { item4 }); } if (!myPawn.health.capacities.CapableOf(PawnCapacityDefOf.Talking)) { FloatMenuOption item5 = new FloatMenuOption("CannotUseReason".Translate(new object[] { "IncapableOfCapacity".Translate(new object[] { PawnCapacityDefOf.Talking.label }) }), null, MenuOptionPriority.Default, null, null, 0f, null); return(new List <FloatMenuOption> { item5 }); } if (!building.CanUseCommsNow) { Log.Error(myPawn + " could not use comm console for unknown reason."); FloatMenuOption item6 = new FloatMenuOption("Cannot use now", null, MenuOptionPriority.Default, null, null, 0f, null); return(new List <FloatMenuOption> { item6 }); } IEnumerable <ICommunicable> enumerable = myPawn.Map.passingShipManager.passingShips.Cast <ICommunicable>().Concat(Find.FactionManager.AllFactionsInViewOrder.Cast <ICommunicable>()); List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (ICommunicable commTarget in enumerable) { ICommunicable localCommTarget = commTarget; string text = "CallOnRadio".Translate(new object[] { localCommTarget.GetCallLabel() }); Faction faction = localCommTarget as Faction; if (faction != null) { if (faction.IsPlayer) { continue; } if (!Building_CommsConsole.LeaderIsAvailableToTalk(faction)) { list.Add(new FloatMenuOption(text + " (" + "LeaderUnavailable".Translate(new object[] { faction.leader.LabelShort }) + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null)); continue; } } Action action = delegate { if (commTarget is TradeShip && !Building_OrbitalTradeBeacon.AllPowered(building.Map).Any <Building_OrbitalTradeBeacon>()) { Messages.Message("MessageNeedBeaconToTradeWithShip".Translate(), building, MessageSound.RejectInput); return; } Job job = new Job(JobDefOf.UseCommsConsole, building); job.commTarget = localCommTarget; myPawn.jobs.TryTakeOrderedJob(job); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.OpeningComms, KnowledgeAmount.Total); }; ITWN.PostMenuOption(list, myPawn, building, text, action, priority: MenuOptionPriority.InitiateSocial); } return(list); }
public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn) { if (!ReachabilityUtility.CanReach(myPawn, this, (PathEndMode)4, (Danger)2, false, 0)) { FloatMenuOption item = new FloatMenuOption(Translator.Translate("CannotUseNoPath"), null, (MenuOptionPriority)4, null, null, 0f, null, null); return(new List <FloatMenuOption> { item }); } if (Spawned && Map.gameConditionManager.ConditionIsActive(GameConditionDefOf.SolarFlare)) { return(new List <FloatMenuOption> { new FloatMenuOption(Translator.Translate("CannotUseSolarFlare"), null, (MenuOptionPriority)4, null, null, 0f, null, null) }); } if (!myPawn.health.capacities.CapableOf(PawnCapacityDefOf.Talking)) { return(new List <FloatMenuOption> { new FloatMenuOption(Translator.Translate("CannotUseReason", new object[] { Translator.Translate("IncapableOfCapacity", new object[] { PawnCapacityDefOf.Talking.label }) }), null, (Verse.MenuOptionPriority) 4, null, null, 0f, null, null) }); } if (!this.CanUseSignalFireNow) { Log.Error(myPawn + " could not use comm console for unknown reason."); return(new List <FloatMenuOption> { new FloatMenuOption("Cannot use now", null, (MenuOptionPriority)4, null, null, 0f, null, null) }); } List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (ICommunicable commTarget in Find.FactionManager.AllFactionsInViewOrder) { ICommunicable localCommTarget = commTarget; string text = Translator.Translate("CallOnRadio", new object[] { localCommTarget.GetCallLabel() }); if (localCommTarget is Faction faction) { if (faction.IsPlayer) { continue; } if (!LeaderIsAvailableToTalk(faction)) { string str; if (faction.leader != null) { str = Translator.Translate("LeaderUnavailable", new object[] { faction.leader.LabelShort }); } else { str = Translator.Translate("LeaderUnavailableNoLeader"); } list.Add(new FloatMenuOption(text + " (" + str + ")", null, (MenuOptionPriority)4, null, null, 0f, null, null)); continue; } } void action() { if (commTarget is TradeShip && !Building_OrbitalTradeBeacon.AllPowered(Map).Any()) { Messages.Message(Translator.Translate("MessageNeedBeaconToTradeWithShip"), this, MessageTypeDefOf.RejectInput, false); } else { Job job = new Job(DefDatabase <JobDef> .GetNamed("UseSignalFire", true), this) { commTarget = localCommTarget }; myPawn.jobs.TryTakeOrderedJob(job, 0); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.OpeningComms, (KnowledgeAmount)6); } } list.Add(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption(text, action, (MenuOptionPriority)7, null, null, 0f, null, null), myPawn, this, "ReservedBy")); } return(list); }
public override void DoWindowContents(Rect inRect) { Rect baseRect = inRect; Rect leftRect = new Rect(0f, 15f, 120f, baseRect.height - 25f); Rect centerRect = new Rect(baseRect.width / 2f - 220f, 120f, 440f, baseRect.height - 120f); Rect rightRect = new Rect(baseRect.width - 120f, 15f, 120f, baseRect.height - 25f); GUI.BeginGroup(inRect); Rect titleRect = new Rect(baseRect.x, baseRect.y, baseRect.width, 30f); // GUI.BeginGroup(titleRect); Text.Anchor = TextAnchor.MiddleCenter; Text.Font = GameFont.Medium; string title = "Subsector " + storyTracker.SubsectorName; Widgets.Label(titleRect, title); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; // GUI.EndGroup(); GUI.BeginGroup(leftRect); float num = leftRect.y; CorruptionStoryTrackerUtilities.ListSeparatorBig(ref num, leftRect.width, "ImperialFrequencies".Translate()); num += 50f; for (int i = 0; i < storyTracker.ImperialFactions.Count; i++) { num += DrawFactionRowCommsIoM(storyTracker.ImperialFactions[i], num, leftRect, negotiator); } // Widgets.DrawRectFast(leftRect, Color.white); GUI.EndGroup(); this.DrawStarGrid(centerRect); // GUI.BeginGroup(centerRect); Rect worldRect = new Rect((centerRect.x + centerRect.width / 2f) - 30f, (centerRect.y + centerRect.height / 2f) - 30f, 60f, 60f); if (Widgets.ButtonImage(worldRect, CorruptionStoryTrackerUtilities.PlanetMedium)) { List <FloatMenuOption> list = new List <FloatMenuOption>(); IEnumerable <ICommunicable> enumerable = negotiator.Map.passingShipManager.passingShips.Cast <ICommunicable>().Concat(Find.FactionManager.AllFactionsInViewOrder.Cast <ICommunicable>()); foreach (ICommunicable commTarget in enumerable) { ICommunicable localCommTarget = commTarget; string text = "CallOnRadio".Translate(new object[] { localCommTarget.GetCallLabel() }); Faction faction = localCommTarget as Faction; if (faction != null) { if (faction.IsPlayer) { continue; } if (!Building_CommsConsole.LeaderIsAvailableToTalk(faction)) { list.Add(new FloatMenuOption(text + " (" + "LeaderUnavailable".Translate(new object[] { faction.leader.LabelShort }) + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null)); continue; } } Action action = delegate { localCommTarget.TryOpenComms(negotiator); }; list.Add(new FloatMenuOption(text, action, MenuOptionPriority.InitiateSocial, null, null, 0f, null, null)); } Find.WindowStack.Add(new FloatMenu(list, null, false)); } TooltipHandler.TipRegion(worldRect, "CurrentWorldInfoRect".Translate(new object[] { Find.World.info.name })); Rect worldLabelrect = worldRect; worldLabelrect.y += 65f; worldLabelrect.width = 80f; GUI.color = Color.red; Widgets.Label(worldLabelrect, Find.World.info.name); GUI.color = Color.white; foreach (StarMapObject current in storyTracker.SubSectorObjects) { // Log.Message(current.objectName + current.objectRect.ToString()); // Widgets.DrawRectFast(current.objectRect, Color.red); if (Widgets.ButtonImage(current.objectRect, current.objectTex)) { } TooltipHandler.TipRegion(current.objectRect, "StarmapObjectInfo".Translate(new object[] { current.objectName, current.diameter, "Unknown" })); } // GUI.EndGroup(); GUI.BeginGroup(rightRect); // Widgets.DrawRectFast(rightRect, Color.red); float num2 = rightRect.y; CorruptionStoryTrackerUtilities.ListSeparatorBig(ref num2, rightRect.width, "UnknownFrequencies".Translate()); num2 += 50f; for (int i = 0; i < storyTracker.XenoFactions.Count; i++) { num2 += DrawFactionRowCommsXeno(storyTracker.XenoFactions[i], num2, rightRect, negotiator); } GUI.EndGroup(); GUI.EndGroup(); if (Widgets.CloseButtonFor(inRect.AtZero())) { this.Close(); } }