From 25ab7b2f710883f85747569adcfea7237cd0f252 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Mon, 7 Jul 2025 12:23:34 +0300 Subject: [PATCH] IActionQueue ticking Optimisations --- .../npcs/controllers/data/action/Action.java | 3 ++ .../controllers/data/action/ActionQueue.java | 34 ++++++++----------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/data/action/Action.java b/src/main/java/noppes/npcs/controllers/data/action/Action.java index c78310a0d..8d1e929e8 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/Action.java +++ b/src/main/java/noppes/npcs/controllers/data/action/Action.java @@ -265,6 +265,9 @@ public class Action implements IAction { if (duration == 0 && onStart != null) execute("start", this::executeOnStart); + if (done) + return; + duration++; if (startAfterTicks > 0) { diff --git a/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java b/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java index 8becaf38a..627f0bbbf 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java +++ b/src/main/java/noppes/npcs/controllers/data/action/ActionQueue.java @@ -257,34 +257,30 @@ public class ActionQueue implements IActionQueue { /////////////////////////////////////////////////// // Handling + protected boolean tick(Action a) { + a.tick(); + if (a.isDone()) { + if (a.onDone != null) + a.execute("done", a::executeOnDone); + a.kill(); + return true; + } + + return false; + } + protected void tick() { if (!isWorking || isDead) return; if (!isParallel) { - IAction current = getCurrentAction(); - if (current instanceof Action) { - Action cab = (Action) current; - cab.tick(); - if (cab.isDone()) { - if (cab.onDone != null) - cab.execute("task", cab::executeOnDone); - cab.kill(); + if (tick((Action) getCurrentAction())) queue.pollFirst(); - } - } } else { Iterator pit = queue.iterator(); - while (pit.hasNext()) { - Action a = (Action) pit.next(); - a.tick(); - if (a.isDone()) { - if (a.onDone != null) - a.execute("complete", a::executeOnDone); - a.kill(); + while (pit.hasNext()) + if (tick((Action) pit.next())) pit.remove(); - } - } } killWhenEmpty();