public override IEnumerable <Gizmo> GetGizmos() { Command_Action mineMode = new Command_Action() { icon = this.icon, defaultLabel = this.defaultLabel, defaultDesc = defaultDesc, hotKey = KeyBindingDefOf.Misc10, activateSound = SoundDefOf.Click, action = delegate() { Find.WindowStack.Add(MakeModeMenu(this)); }, }; // Only allow this option if stonecutting has been researched // The default behavior is to allow resources, but not blocks if (!QuarryDefOf.Stonecutting.IsFinished) { mineMode.Disable(Static.ReportGizmoLackingResearch); } yield return(mineMode); yield return(new Command_Toggle() { icon = Static.DesignationHaul, defaultLabel = Static.LabelHaulMode, defaultDesc = HaulDescription, hotKey = KeyBindingDefOf.Misc11, activateSound = SoundDefOf.Click, isActive = () => autoHaul, toggleAction = () => ToggleAutoHaul(), }); yield return(new Command_Action { defaultLabel = Static.CommandBedSetOwnerLabel, icon = ContentFinder <Texture2D> .Get("UI/Commands/AssignOwner", true), defaultDesc = Static.CommandSetOwnerDesc, action = delegate { Find.WindowStack.Add(new Dialog_AssignBuildingOwner(this.TryGetComp <CompAssignableToPawn>())); }, hotKey = KeyBindingDefOf.Misc3 }); IEnumerator <Gizmo> enumerator = null; if (((this.def.BuildableByPlayer && this.def.passability != Traversability.Impassable && !this.def.IsDoor) || this.def.building.forceShowRoomStats) && Gizmo_RoomStats.GetRoomToShowStatsFor(this) != null && Find.Selector.SingleSelectedObject == this) { yield return(new Gizmo_RoomStats(this)); } if (this.def.Minifiable && base.Faction == Faction.OfPlayer) { yield return(InstallationDesignatorDatabase.DesignatorFor(this.def)); } Command command = BuildCopyCommandUtility.BuildCopyCommand(this.def, base.Stuff); if (command != null) { yield return(command); } if (base.Faction == Faction.OfPlayer) { foreach (Command command2 in BuildFacilityCommandUtility.BuildFacilityCommands(this.def)) { yield return(command2); } IEnumerator <Command> enumerator2 = null; } if (forbiddable != null) { foreach (Gizmo item in forbiddable.CompGetGizmosExtra()) { yield return(item); } ; } yield break; }
// Note to whoever wants to add to this method (hi jptrrs!): // You can just do // foreach (Gizmo c in base.GetGizmos()) // { // yield return c; // } // yield return [whatever you want to add]; // // No need to copy this method. public override IEnumerable <Gizmo> GetGizmos() { // Display the original gizmos (includes the swap guest bed button via patch) foreach (var gizmo in base.GetGizmos()) { switch (gizmo) { case Command_Toggle toggle: { // Disable prisoner and medical buttons if (toggle.defaultLabel == "CommandBedSetForPrisonersLabel".Translate() || toggle.defaultLabel == "CommandBedSetAsMedicalLabel".Translate()) { gizmo.Disable(); } break; } case Command_Action action: { // Disable set owner button if (action.defaultLabel == "CommandThingSetOwnerLabel".Translate()) { action.Disable(); } break; } } yield return(gizmo); } // Gizmo for drawing guest room info if (Find.Selector.SingleSelectedObject == this) { if (Stats.lastCalculated == 0 || Stats.room == null) { UpdateStats(); } yield return(new Gizmo_GuestBedStats(this)); } // Add buttons to decrease / increase the fee yield return(new Command_Action { defaultLabel = "CommandBedDecreaseFeeLabel".Translate(feeStep), defaultDesc = "CommandBedDecreaseFeeDesc".Translate(feeStep, MoodEffect), icon = ContentFinder <Texture2D> .Get("UI/Commands/ChangePriceDown"), action = () => AdjustFee(-feeStep), hotKey = KeyBindingDefOf.Misc5, disabled = rentalFee < feeStep }); yield return(new Command_Action { defaultLabel = "CommandBedIncreaseFeeLabel".Translate(feeStep), defaultDesc = "CommandBedIncreaseFeeDesc".Translate(feeStep, MoodEffect), icon = ContentFinder <Texture2D> .Get("UI/Commands/ChangePriceUp"), action = () => AdjustFee(feeStep), hotKey = KeyBindingDefOf.Misc6 }); // Get base def var defName = def.defName.ReplaceFirst("Guest", string.Empty); var baseDef = DefDatabase <ThingDef> .GetNamed(defName); // Add build copy command Command buildCopy = BuildCopyCommandUtility.BuildCopyCommand(baseDef, Stuff); if (buildCopy != null) { yield return(buildCopy); } }
// RimWorld.Building_Grave //public override Graphic Graphic public override IEnumerable <Gizmo> GetGizmos() { if (this.AllComps != null) { for (int i = 0; i < AllComps.Count; i++) { foreach (Gizmo item in AllComps[i].CompGetGizmosExtra()) { yield return(item); } } } if (((def.BuildableByPlayer && def.passability != Traversability.Impassable && !def.IsDoor) || def.building.forceShowRoomStats) && Gizmo_RoomStats.GetRoomToShowStatsFor(this) != null && Find.Selector.SingleSelectedObject == this) { yield return(new Gizmo_RoomStats(this)); } if (def.Minifiable && base.Faction == Faction.OfPlayer) { yield return(InstallationDesignatorDatabase.DesignatorFor(def)); } Command command = BuildCopyCommandUtility.BuildCopyCommand(def, base.Stuff); if (command != null) { yield return(command); } if (base.Faction == Faction.OfPlayer) { foreach (Command item in BuildFacilityCommandUtility.BuildFacilityCommands(def)) { yield return(item); } } var p = Corpse?.InnerPawn ?? (Pawn)(innerContainer.FirstOrDefault()) ?? null; if ((p?.IsVampire() ?? false) || (p?.HasVampireHediffs() ?? false)) { foreach (Gizmo y in HarmonyPatches.GraveGizmoGetter(p, this)) { yield return(y); } } if (this.GetComps <CompVampBed>().FirstOrDefault() is CompVampBed vbed) { if (vbed.Bed != null) { if (vbed.Bed.def.building.bed_humanlike && base.Faction == Faction.OfPlayer) { Command_Toggle command_Toggle0 = new Command_Toggle(); command_Toggle0.defaultLabel = "ROMV_VampiresOnly".Translate(); command_Toggle0.defaultDesc = "ROMV_VampiresOnlyDesc".Translate(); command_Toggle0.icon = TexButton.ROMV_VampiresOnly; command_Toggle0.isActive = (() => vbed.VampiresOnly); command_Toggle0.toggleAction = delegate { vbed.VampiresOnly = !vbed.VampiresOnly; }; command_Toggle0.hotKey = KeyBindingDefOf.Misc2; yield return(command_Toggle0); Command_Toggle command_Toggle = new Command_Toggle(); command_Toggle.defaultLabel = "CommandBedSetForPrisonersLabel".Translate(); command_Toggle.defaultDesc = "CommandBedSetForPrisonersDesc".Translate(); command_Toggle.icon = ContentFinder <Texture2D> .Get("UI/Commands/ForPrisoners"); command_Toggle.isActive = (() => vbed.Bed.ForPrisoners); command_Toggle.toggleAction = delegate { AccessTools.Method(typeof(Building_Bed), "ToggleForPrisonersByInterface").Invoke(vbed.Bed, null); }; if (!((bool)(AccessTools.Method(typeof(Building_Bed), "RoomCanBePrisonCell").Invoke(vbed.Bed, new object[] { this.GetRoom() }))) && !vbed.Bed.ForPrisoners) { command_Toggle.Disable("CommandBedSetForPrisonersFailOutdoors".Translate()); } command_Toggle.hotKey = KeyBindingDefOf.Misc3; command_Toggle.turnOffSound = null; command_Toggle.turnOnSound = null; yield return(command_Toggle); Command_Toggle command_Toggle2 = new Command_Toggle(); command_Toggle2.defaultLabel = "CommandBedSetAsMedicalLabel".Translate(); command_Toggle2.defaultDesc = "CommandBedSetAsMedicalDesc".Translate(); command_Toggle2.icon = ContentFinder <Texture2D> .Get("UI/Commands/AsMedical"); command_Toggle2.isActive = (() => vbed.Bed.Medical); command_Toggle2.toggleAction = delegate { vbed.Bed.Medical = !vbed.Bed.Medical; }; command_Toggle2.hotKey = KeyBindingDefOf.Misc2; yield return(command_Toggle2); if (!vbed.Bed.ForPrisoners && !vbed.Bed.Medical) { Command_Action command_Action = new Command_Action(); command_Action.defaultLabel = "CommandThingSetOwnerLabel".Translate(); command_Action.icon = ContentFinder <Texture2D> .Get("UI/Commands/AssignOwner"); command_Action.defaultDesc = "CommandBedSetOwnerDesc".Translate(); command_Action.action = delegate { Find.WindowStack.Add(new Dialog_AssignBuildingOwner(vbed.Bed.CompAssignableToPawn)); }; command_Action.hotKey = KeyBindingDefOf.Misc3; yield return(command_Action); } } } } }