Camp
@exports are shared between instances of the same scene, unless you set it in editor, but you can't change it in game.
you are doing push_warning()
why? just use print.
and before doing this s**t I would set current_state to a static cast and do the same with everything else in the scene and test if things exist.
current_state doesn't have a type. you are testing if current_state:. what do you think this will return? because not godot nor me would know.
you don't need to test if state is State if you just set a parameter type:
func change_state(state : State):
anyways it feels like the problem is with the State class and not here.