随便吧乌拉乌拉

This commit is contained in:
2025-08-06 20:42:15 +08:00
parent 6d2d84f5e5
commit f84c9d8313
5 changed files with 84 additions and 0 deletions

Binary file not shown.

View File

@@ -36,6 +36,7 @@
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_Test_VariableEvent</defName>
<delayTicks>180</delayTicks> <!-- 3 seconds -->
</li>
</effects>
</li>

View File

@@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using RimWorld.Planet;
using Verse;
namespace WulaFallenEmpire
{
public class DelayedActionManager : WorldComponent
{
private class DelayedAction
{
public int TicksRemaining;
public Action Action;
}
private List<DelayedAction> actions = new List<DelayedAction>();
public DelayedActionManager(World world) : base(world)
{
}
public void AddAction(Action action, int delayTicks)
{
if (action == null || delayTicks <= 0)
{
return;
}
actions.Add(new DelayedAction { TicksRemaining = delayTicks, Action = action });
}
public override void WorldComponentTick()
{
base.WorldComponentTick();
for (int i = actions.Count - 1; i >= 0; i--)
{
DelayedAction delayedAction = actions[i];
delayedAction.TicksRemaining--;
if (delayedAction.TicksRemaining <= 0)
{
try
{
delayedAction.Action();
}
catch (Exception ex)
{
Log.Error($"[WulaFallenEmpire] Error executing delayed action: {ex}");
}
actions.RemoveAt(i);
}
}
}
public override void ExposeData()
{
// This simple manager does not save scheduled actions across game loads.
// If you need actions to persist, you would need a more complex system
// to serialize the action's target and parameters.
base.ExposeData();
}
}
}

View File

@@ -15,8 +15,29 @@ namespace WulaFallenEmpire
public class Effect_OpenCustomUI : Effect
{
public string defName;
public int delayTicks = 0;
public override void Execute(Dialog_CustomDisplay dialog = null)
{
if (delayTicks > 0)
{
var actionManager = Find.World.GetComponent<DelayedActionManager>();
if (actionManager != null)
{
actionManager.AddAction(() => OpenUI(), delayTicks);
}
else
{
Log.Error("[WulaFallenEmpire] DelayedActionManager not found. Cannot schedule delayed UI opening.");
}
}
else
{
OpenUI();
}
}
private void OpenUI()
{
EventDef nextDef = DefDatabase<EventDef>.GetNamed(defName);
if (nextDef != null)

View File

@@ -80,6 +80,7 @@
<Compile Include="EventSystem\CompOpenCustomUI.cs" />
<Compile Include="EventSystem\Condition.cs" />
<Compile Include="EventSystem\DebugActions.cs" />
<Compile Include="EventSystem\DelayedActionManager.cs" />
<Compile Include="EventSystem\Dialog_CustomDisplay.cs" />
<Compile Include="EventSystem\Effect.cs" />
<Compile Include="EventSystem\EventContext.cs" />