修复ActionStepCoroutineWrapper中的错误调用顺序

This commit is contained in:
2025-12-02 16:54:58 +08:00
parent 172b2af3ea
commit 48965decbb

View File

@@ -1319,28 +1319,30 @@ namespace Convention
public class ActionStepCoroutineWrapper public class ActionStepCoroutineWrapper
{ {
private class YieldInstructionWrapper private struct YieldInstructionWrapper
{ {
public YieldInstruction UnityYieldInstruction; public YieldInstruction UnityYieldInstruction;
public CustomYieldInstruction CustomYieldInstruction; public CustomYieldInstruction CustomYieldInstruction;
public YieldInstructionWrapper() public YieldInstructionWrapper(YieldInstruction unityYieldInstruction, CustomYieldInstruction customYieldInstruction)
{
}
public YieldInstructionWrapper(YieldInstruction unityYieldInstruction)
{ {
this.UnityYieldInstruction = unityYieldInstruction; this.UnityYieldInstruction = unityYieldInstruction;
this.CustomYieldInstruction = customYieldInstruction;
} }
public YieldInstructionWrapper(CustomYieldInstruction customYieldInstruction) public static YieldInstructionWrapper Make(YieldInstruction unityYieldInstruction)
{ {
this.CustomYieldInstruction = customYieldInstruction; return new(unityYieldInstruction, null);
}
public static YieldInstructionWrapper Make(CustomYieldInstruction customYieldInstruction)
{
return new(null, customYieldInstruction);
} }
} }
private List<KeyValuePair<YieldInstructionWrapper, Action>> steps = new(); private List<KeyValuePair<YieldInstructionWrapper, Action>> steps = new();
public ActionStepCoroutineWrapper Update(Action action) public ActionStepCoroutineWrapper Update(Action action)
{ {
steps.Add(new(new(), action)); steps.Add(new(new(), action));
@@ -1348,33 +1350,33 @@ namespace Convention
} }
public ActionStepCoroutineWrapper Wait(float time, Action action) public ActionStepCoroutineWrapper Wait(float time, Action action)
{ {
steps.Add(new(new(new WaitForSeconds(time)), action)); steps.Add(new(YieldInstructionWrapper.Make(new WaitForSeconds(time)), action));
return this; return this;
} }
public ActionStepCoroutineWrapper FixedUpdate(Action action) public ActionStepCoroutineWrapper FixedUpdate(Action action)
{ {
steps.Add(new(new (new WaitForFixedUpdate()), action)); steps.Add(new(YieldInstructionWrapper.Make(new WaitForFixedUpdate()), action));
return this; return this;
} }
public ActionStepCoroutineWrapper Next(Action action) public ActionStepCoroutineWrapper Next(Action action)
{ {
steps.Add(new(new(new WaitForEndOfFrame()), action)); steps.Add(new(YieldInstructionWrapper.Make(new WaitForEndOfFrame()), action));
return this; return this;
} }
public ActionStepCoroutineWrapper Until(Func<bool> pr, Action action) public ActionStepCoroutineWrapper Until(Func<bool> pr, Action action)
{ {
steps.Add(new(new(new WaitUntil(pr)), action)); steps.Add(new(YieldInstructionWrapper.Make(new WaitUntil(pr)), action));
return this; return this;
} }
private static IEnumerator Execute(List<KeyValuePair<YieldInstructionWrapper, Action>> steps) private static IEnumerator Execute(List<KeyValuePair<YieldInstructionWrapper, Action>> steps)
{ {
foreach (var (waiting, action) in steps) foreach (var (waiting, action) in steps)
{ {
action();
if (waiting.UnityYieldInstruction != null) if (waiting.UnityYieldInstruction != null)
yield return waiting.UnityYieldInstruction; yield return waiting.UnityYieldInstruction;
else else
yield return waiting.CustomYieldInstruction; yield return waiting.CustomYieldInstruction;
action();
} }
} }
~ActionStepCoroutineWrapper() ~ActionStepCoroutineWrapper()