Skip to content

State Machine Listeners

Wyatt Gillette edited this page Jan 12, 2022 · 7 revisions

Global event listeners can be defined for the state machine. These listeners will be invoked any time a state transition occurs and can be utilized for things such as logging or other.

We need to define a listener by extending StateMachineListener:

public class AIControl extends AbstractControl implements StateMachineListener {

    @Override
    public void stateChanged(AnimatorState from, AnimatorState to) {
        System.out.printf("Transitioned from %s to %s%n", from, to);
    }

    @Override
    protected void controlUpdate(float tpf) {
        //do something...
    }

    @Override
    protected void controlRender(RenderManager rm, ViewPort vp) {
        //do something...
    }
}
Spatial enemy = ...;
AnimComposer composer = enemy.getControl(AnimComposer.class);

// Create the controller
AnimatorController animator = new AnimatorController(composer);
enemy.addControl(animator);

AnimatorControllerLayer layer0 = animator.getLayer(AnimComposer.DEFAULT_LAYER);
AnimatorStateMachine sm = layer0.getStateMachine();

AIControl aiControl = new AIControl();
enemy.addControl(aiControl);
sm.addListener(aiControl);
Clone this wiki locally