Files
WulaFallenEmpireRW/Source/WulaFallenEmpire/ThingComp/CompUseEffect_OpenCustomUI.cs
Tourswen 6a5c5bd9aa 1
2025-11-30 14:39:22 +08:00

74 lines
2.5 KiB
C#

using RimWorld;
using System;
using Verse;
namespace WulaFallenEmpire
{
public class CompProperties_UseEffect_OpenCustomUI : CompProperties_UseEffect
{
public string uiDefName; // 要打开的UI的EventDef名称
public bool requireFactionPlayer = true; // 是否要求玩家派系才能使用
public CompProperties_UseEffect_OpenCustomUI()
{
this.compClass = typeof(CompUseEffect_OpenCustomUI);
}
}
public class CompUseEffect_OpenCustomUI : CompUseEffect
{
public CompProperties_UseEffect_OpenCustomUI Props => (CompProperties_UseEffect_OpenCustomUI)this.props;
public override void DoEffect(Pawn usedBy)
{
base.DoEffect(usedBy);
try
{
// 查找对应的EventDef
EventDef uiDef = DefDatabase<EventDef>.GetNamed(Props.uiDefName, false);
if (uiDef != null)
{
// 创建并打开自定义UI窗口
Window window = (Window)Activator.CreateInstance(uiDef.windowType, uiDef);
Find.WindowStack.Add(window);
Log.Message($"[CompUseEffect] Opened custom UI: {Props.uiDefName}");
}
else
{
Log.Error($"[CompUseEffect] Could not find EventDef named '{Props.uiDefName}'");
Messages.Message($"Error: Could not find UI definition '{Props.uiDefName}'", MessageTypeDefOf.RejectInput);
}
}
catch (Exception ex)
{
Log.Error($"[CompUseEffect] Error opening custom UI '{Props.uiDefName}': {ex}");
Messages.Message($"Error opening UI: {ex.Message}", MessageTypeDefOf.RejectInput);
}
}
public override AcceptanceReport CanBeUsedBy(Pawn p)
{
// 基础检查
AcceptanceReport baseResult = base.CanBeUsedBy(p);
if (!baseResult.Accepted)
return baseResult;
// 检查派系要求
if (Props.requireFactionPlayer && parent.Faction != Faction.OfPlayer)
{
return "Must be player faction to use this".Translate();
}
// 检查EventDef是否存在
if (DefDatabase<EventDef>.GetNamed(Props.uiDefName, false) == null)
{
return $"UI definition '{Props.uiDefName}' not found".Translate();
}
return true;
}
}
}