diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index 56556321..445cff53 100644 Binary files a/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/Defs/EventDefs/EventDef_VariableTest.xml b/1.6/Defs/EventDefs/EventDef_VariableTest.xml index e6c92970..a6218566 100644 --- a/1.6/Defs/EventDefs/EventDef_VariableTest.xml +++ b/1.6/Defs/EventDefs/EventDef_VariableTest.xml @@ -36,6 +36,7 @@
  • Wula_Test_VariableEvent + 180
  • diff --git a/Source/WulaFallenEmpire/EventSystem/DelayedActionManager.cs b/Source/WulaFallenEmpire/EventSystem/DelayedActionManager.cs new file mode 100644 index 00000000..09418e75 --- /dev/null +++ b/Source/WulaFallenEmpire/EventSystem/DelayedActionManager.cs @@ -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 actions = new List(); + + 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(); + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/EventSystem/Effect.cs b/Source/WulaFallenEmpire/EventSystem/Effect.cs index 3f89eea6..c219dd7d 100644 --- a/Source/WulaFallenEmpire/EventSystem/Effect.cs +++ b/Source/WulaFallenEmpire/EventSystem/Effect.cs @@ -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(); + 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.GetNamed(defName); if (nextDef != null) diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 410e4be6..06dfecae 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -80,6 +80,7 @@ +