From 6b5d9166e7dfce2a4b9d8ba8081e2242c76768e4 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 29 Jul 2025 18:08:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/Assemblies/WulaFallenEmpire.dll | Bin 79872 -> 80896 bytes .../Buildings_EventSource.xml | 43 +++++++++++++ .../WulaMiscSettingDefs/EventUIConfig.xml | 2 + Documentation/EventSystem_Documentation.md | 34 ++++++++++ .../.vs/WulaFallenEmpire/v17/.suo | Bin 114176 -> 109568 bytes .../WulaFallenEmpire/v17/DocumentLayout.json | 47 +++++++------- .../EventSystem/CompOpenCustomUI.cs | 60 ++++++++++++++++++ .../EventSystem/CustomUIDef.cs | 40 +++++++++++- .../EventSystem/Dialog_CustomDisplay.cs | 45 +++++++++++-- .../EventSystem/EventUIConfigDef.cs | 1 + 10 files changed, 238 insertions(+), 34 deletions(-) create mode 100644 1.6/Defs/ThingDefs_Buildings/Buildings_EventSource.xml create mode 100644 Source/WulaFallenEmpire/EventSystem/CompOpenCustomUI.cs diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index 840552cfb41f2e15d278428fc05b919aa41f9509..31cb5dead0dba4ef593b344ad68dce07e583a794 100644 GIT binary patch delta 38147 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 HEY<%DfiL+B delta 37339 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

w&>j>u14 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 CACn;f diff --git a/1.6/Defs/ThingDefs_Buildings/Buildings_EventSource.xml b/1.6/Defs/ThingDefs_Buildings/Buildings_EventSource.xml new file mode 100644 index 00000000..371efd85 --- /dev/null +++ b/1.6/Defs/ThingDefs_Buildings/Buildings_EventSource.xml @@ -0,0 +1,43 @@ + + + + + Wula_EventConsole + + 一个可以触发特殊事件的控制台。 + Building + + Things/Building/Misc/CommsConsole + Graphic_Multi + (3,3) + + + 250 + 2000 + 70 + 0.5 + + (3,1) + + 120 + 8 + + Building + PassThroughOnly + 50 + Misc + +
  • + CompPowerTrader + 100 +
  • +
  • +
  • + Wula_ExampleUI + + 无法接触事件控制台。 +
  • +
    +
    + +
    diff --git a/1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml b/1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml index 063feb23..86e2a347 100644 --- a/1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml +++ b/1.6/Defs/WulaMiscSettingDefs/EventUIConfig.xml @@ -18,6 +18,8 @@ 0 0 + + (750, 500) diff --git a/Documentation/EventSystem_Documentation.md b/Documentation/EventSystem_Documentation.md index b0cc6ac0..0257f778 100644 --- a/Documentation/EventSystem_Documentation.md +++ b/Documentation/EventSystem_Documentation.md @@ -423,3 +423,37 @@ 5. 在弹出的列表中,选择你想要测试的事件的 `defName`。 这会立即打开对应的事件窗口,让你可以在不满足游戏内触发条件的情况下快速预览和测试你的事件。 +--- + +## 10. 组件:从建筑触发事件 (`CompOpenCustomUI`) + +我们提供了一个通用的 `ThingComp`,可以附加到任何建筑上,通过右键菜单来打开一个指定的事件窗口。 + +**如何使用:** + +1. 在你的建筑 `ThingDef` 的 `` 列表中,添加一个新的 `li`。 +2. 将 `Class` 属性设置为 `WulaFallenEmpire.CompProperties_OpenCustomUI`。 +3. 在 `li` 内部,设置以下字段: + - `uiDefName`: (必须) 要打开的 `CustomUIDef` 的 `defName`。 + - `label`: (必须) 显示在右键菜单中的文本。 + - `failReason`: (可选) 当殖民者无法到达建筑时显示的提示文本。如果未提供,则默认为 "无法到达"。 + +**示例 (`Buildings_EventSource.xml`):** +```xml + + Wula_EventConsole + + ... + + ... + +
  • + Wula_ExampleUI + + 无法接触事件控制台。 +
  • +
    +
    +``` + +这个组件会自动处理电力检查(如果建筑有 `CompPowerTrader`)和可达性检查。 diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo index 912f5c809da05e63154eb5ba0d3d39c865f5d273..1cf253cf27a02524b6c574a84d84526840c30d3b 100644 GIT binary patch delta 6902 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 diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json index db33f4c4..e56e3d21 100644 --- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json +++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json @@ -1,21 +1,21 @@ { "Version": 1, - "WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\", + "WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\wulafallenempiretest\\source\\wulafallenempire\\eventsystem\\dialog_customdisplay.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\eventsystem\\dialog_customdisplay.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\dialog_customdisplay.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\wulafallenempiretest\\source\\wulafallenempire\\eventsystem\\debugactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\eventsystem\\debugactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\debugactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\wulafallenempiretest\\source\\wulafallenempire\\eventsystem\\customuidef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\eventsystem\\customuidef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\customuidef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\wulafallenempiretest\\source\\wulafallenempire\\eventsystem\\condition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\eventsystem\\condition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\condition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], @@ -26,17 +26,21 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 0, + "SelectedChildIndex": 1, "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, { "$type": "Document", "DocumentIndex": 0, "Title": "Dialog_CustomDisplay.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\Dialog_CustomDisplay.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Dialog_CustomDisplay.cs", "RelativeDocumentMoniker": "EventSystem\\Dialog_CustomDisplay.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\Dialog_CustomDisplay.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Dialog_CustomDisplay.cs", "RelativeToolTip": "EventSystem\\Dialog_CustomDisplay.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAPAAAAAAAAAA==", + "ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-27T10:59:13.84Z", "EditorCaption": "" @@ -45,44 +49,37 @@ "$type": "Document", "DocumentIndex": 1, "Title": "DebugActions.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\DebugActions.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\DebugActions.cs", "RelativeDocumentMoniker": "EventSystem\\DebugActions.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\DebugActions.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\DebugActions.cs", "RelativeToolTip": "EventSystem\\DebugActions.cs", "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-27T10:59:11.817Z", - "EditorCaption": "" + "WhenOpened": "2025-07-27T10:59:11.817Z" }, { "$type": "Document", "DocumentIndex": 2, "Title": "CustomUIDef.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\CustomUIDef.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\CustomUIDef.cs", "RelativeDocumentMoniker": "EventSystem\\CustomUIDef.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\CustomUIDef.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\CustomUIDef.cs", "RelativeToolTip": "EventSystem\\CustomUIDef.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-27T10:59:01.929Z", - "EditorCaption": "" + "WhenOpened": "2025-07-27T10:59:01.929Z" }, { "$type": "Document", "DocumentIndex": 3, "Title": "Condition.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\Condition.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Condition.cs", "RelativeDocumentMoniker": "EventSystem\\Condition.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\WulaFallenEmpireTest\\Source\\WulaFallenEmpire\\EventSystem\\Condition.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Condition.cs", "RelativeToolTip": "EventSystem\\Condition.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-27T10:50:26.799Z", - "EditorCaption": "" - }, - { - "$type": "Bookmark", - "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + "WhenOpened": "2025-07-27T10:50:26.799Z" } ] } diff --git a/Source/WulaFallenEmpire/EventSystem/CompOpenCustomUI.cs b/Source/WulaFallenEmpire/EventSystem/CompOpenCustomUI.cs new file mode 100644 index 00000000..af251dcf --- /dev/null +++ b/Source/WulaFallenEmpire/EventSystem/CompOpenCustomUI.cs @@ -0,0 +1,60 @@ +using RimWorld; +using Verse; +using System.Collections.Generic; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class CompProperties_OpenCustomUI : CompProperties + { + public string uiDefName; + public string label; // The text to display in the float menu + public string failReason; // Optional: Custom text to show if the pawn can't reach the building + + public CompProperties_OpenCustomUI() + { + this.compClass = typeof(CompOpenCustomUI); + } + } + + public class CompOpenCustomUI : ThingComp + { + public CompProperties_OpenCustomUI Props => (CompProperties_OpenCustomUI)this.props; + + public override IEnumerable CompFloatMenuOptions(Pawn selPawn) + { + // Check if the pawn can interact with the building + if (!selPawn.CanReserveAndReach(this.parent, PathEndMode.InteractionCell, Danger.Deadly)) + { + string reason = Props.failReason ?? "CannotUseNoPath".Translate(); + yield return new FloatMenuOption(reason, null); + yield break; + } + + // Check for power if the building has a power component + CompPowerTrader powerComp = this.parent.GetComp(); + if (powerComp != null && !powerComp.PowerOn) + { + yield return new FloatMenuOption("CannotUseNoPower".Translate(), null); + yield break; + } + + string label = Props.label ?? "Open Custom UI"; // Use default label if not provided + + FloatMenuOption option = new FloatMenuOption(label, delegate() + { + CustomUIDef uiDef = DefDatabase.GetNamed(Props.uiDefName, false); + if (uiDef != null) + { + Find.WindowStack.Add(new Dialog_CustomDisplay(uiDef)); + } + else + { + Log.Error($"[CompOpenCustomUI] Could not find CustomUIDef named '{Props.uiDefName}'."); + } + }); + + yield return option; + } + } +} diff --git a/Source/WulaFallenEmpire/EventSystem/CustomUIDef.cs b/Source/WulaFallenEmpire/EventSystem/CustomUIDef.cs index c1f4534a..90652a44 100644 --- a/Source/WulaFallenEmpire/EventSystem/CustomUIDef.cs +++ b/Source/WulaFallenEmpire/EventSystem/CustomUIDef.cs @@ -1,17 +1,51 @@ using System.Collections.Generic; +using UnityEngine; using Verse; namespace WulaFallenEmpire { + public enum DescriptionSelectionMode + { + Random, + Sequential + } + public class CustomUIDef : Def { public string portraitPath; public string characterName; - public new string description; + + // New system: list of descriptions + public List descriptions; + public DescriptionSelectionMode descriptionMode = DescriptionSelectionMode.Random; + + // Backwards compatibility: old single description field + [System.Obsolete("Use 'descriptions' list instead. This field is for backwards compatibility only.")] + public new string description = null; + + public Vector2 windowSize = Vector2.zero; + public List options; - public string backgroundImagePath; // Override default background + public string backgroundImagePath; public List onOpenEffects; public List dismissEffects; + + public override void PostLoad() + { + base.PostLoad(); +#pragma warning disable 0618 + // If the old description field is used, move its value to the new list for processing. + if (!description.NullOrEmpty()) + { + if (descriptions.NullOrEmpty()) + { + descriptions = new List(); + } + descriptions.Insert(0, description); + description = null; // Clear the old field to prevent confusion + } +#pragma warning restore 0618 + } } public class CustomUIOption @@ -19,6 +53,6 @@ namespace WulaFallenEmpire public string label; public List effects; public List conditions; - public string disabledReason; // Custom text to show if conditions aren't met + public string disabledReason; } } diff --git a/Source/WulaFallenEmpire/EventSystem/Dialog_CustomDisplay.cs b/Source/WulaFallenEmpire/EventSystem/Dialog_CustomDisplay.cs index 93c8309a..0ccf67a2 100644 --- a/Source/WulaFallenEmpire/EventSystem/Dialog_CustomDisplay.cs +++ b/Source/WulaFallenEmpire/EventSystem/Dialog_CustomDisplay.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using UnityEngine; using Verse; @@ -10,6 +11,7 @@ namespace WulaFallenEmpire private CustomUIDef def; private Texture2D portrait; private Texture2D background; + private string selectedDescription; // Store the chosen description for this window instance private static EventUIConfigDef config; public static EventUIConfigDef Config @@ -24,14 +26,47 @@ namespace WulaFallenEmpire } } - public override Vector2 InitialSize => new Vector2(750f, 500f); + public override Vector2 InitialSize + { + get + { + if (def.windowSize != Vector2.zero) + { + return def.windowSize; + } + return Config.defaultWindowSize; // Fallback to size from config + } + } public Dialog_CustomDisplay(CustomUIDef def) { this.def = def; this.forcePause = true; this.absorbInputAroundWindow = true; - this.doCloseX = true; // Add a close button to the window + this.doCloseX = true; + + // Select the description text + if (!def.descriptions.NullOrEmpty()) + { + if (def.descriptionMode == DescriptionSelectionMode.Random) + { + selectedDescription = def.descriptions.RandomElement(); + } + else // Sequential + { + string indexVarName = $"_seq_desc_index_{def.defName}"; + int currentIndex = EventContext.GetVariable(indexVarName, 0); + + selectedDescription = def.descriptions[currentIndex]; + + int nextIndex = (currentIndex + 1) % def.descriptions.Count; + EventContext.SetVariable(indexVarName, nextIndex); + } + } + else + { + selectedDescription = "Error: No descriptions found in def."; + } } public override void PreOpen() @@ -127,12 +162,11 @@ namespace WulaFallenEmpire GUI.color = Color.white; } Rect textInnerRect = textRect.ContractedBy(10f * scale); - Widgets.Label(textInnerRect, def.description); + Widgets.Label(textInnerRect, selectedDescription); // Use the selected description // option (Buttons) Rect optionRect = new Rect(nameRect.x, textRect.yMax + Config.optionsTextOffset * scale, scaledOptionsWidth, lihuiRect.height - nameRect.height - textRect.height - (Config.textNameOffset + Config.optionsTextOffset) * scale); - // No need to draw a box for the options area, the buttons will be listed inside. - + Listing_Standard listing = new Listing_Standard(); listing.Begin(optionRect.ContractedBy(10f * scale)); if (def.options != null) @@ -151,7 +185,6 @@ namespace WulaFallenEmpire } else { - // Draw a disabled button and add a tooltip Rect rect = listing.GetRect(30f); Widgets.ButtonText(rect, option.label, false, true, false); TooltipHandler.TipRegion(rect, GetDisabledReason(option, reason)); diff --git a/Source/WulaFallenEmpire/EventSystem/EventUIConfigDef.cs b/Source/WulaFallenEmpire/EventSystem/EventUIConfigDef.cs index c14a18de..e968157c 100644 --- a/Source/WulaFallenEmpire/EventSystem/EventUIConfigDef.cs +++ b/Source/WulaFallenEmpire/EventSystem/EventUIConfigDef.cs @@ -9,6 +9,7 @@ namespace WulaFallenEmpire public GameFont labelFont = GameFont.Small; public bool drawBorders = true; public string defaultBackgroundImagePath; + public Vector2 defaultWindowSize = new Vector2(750f, 500f); // Virtual Layout Dimensions public Vector2 lihuiSize = new Vector2(500f, 800f);