Skip to content

Commit

Permalink
Add a simple callback decorator to behavior tree
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed Nov 1, 2023
1 parent 56561e3 commit 1cc7f1c
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions src/main/java/net/citizensnpcs/api/ai/tree/Callback.java
@@ -0,0 +1,44 @@
package net.citizensnpcs.api.ai.tree;

import java.util.function.Consumer;

/**
* Wraps an {@link Behavior} and runs callbacks when the underlying Behavior is finished.
*/
public class Callback extends BehaviorGoalAdapter {
private final Consumer<BehaviorStatus> cb;
private final Behavior wrapping;

private Callback(Behavior wrapping, Consumer<BehaviorStatus> cb) {
this.wrapping = wrapping;
this.cb = cb;
}

@Override
public void reset() {
wrapping.reset();
}

@Override
public BehaviorStatus run() {
BehaviorStatus status = wrapping.run();
switch (status) {
case FAILURE:
case SUCCESS:
case RESET_AND_REMOVE:
cb.accept(status);
default:
break;
}
return status;
}

@Override
public boolean shouldExecute() {
return wrapping.shouldExecute();
}

public static Callback callback(Behavior wrapping, Consumer<BehaviorStatus> cb) {
return new Callback(wrapping, cb);
}
}

0 comments on commit 1cc7f1c

Please sign in to comment.