Cannot change scene with InkPlayer instantiated
Describe the bug
It's not possible to change a scene via get_tree().change_scene_to_file() with InkPlayer instance in the active scene.
To Reproduce
- Run a scene with instantiated and loaded InkPlayer
- Change it to another one (it doesn't work with and without the inkplayer in the new scene).
- Crash
Expected behavior
Normal scene change, just like with any scene that doesn't have InkPlayer
Ink files
It happens with any .json ink file
Environment:
- OS: MacOS 14.2.1
- Godot version: 4.2.1 vanilla
- Inklecate version:
- inkgd version: 0.6.0
Additional context
The exact issue is caused by line 838 in ink_player.gd with error Invalid get index 'root' (on base: 'null instance').
Also, I noticed that if I just comment that line out, there's no errors and the scene changes, though I don't know exactly if something else breaks in the back that I don't know about.
Adding details to this
_remove_runtime calls get_tree().root which should be while the InkPlayer node is in the tree.
It looks like what is happening is that _remove_runtime is getting called from the _exit_tree function, which should be fine, except that the call to _remove_runtime is deferred, meaning it happens after the node has been removed, I'm not sure what the intent of deferring is, but I'll experiment with removing it. Currently using this plugin for game, so I have an interest in fixing this.
See here: get_tree returns null when it's called on a node that isn't inside the tree.
https://github.com/ephread/inkgd/blob/fea9098ee18d6cdbe9a5e25f8f0296bcdf0fd96a/addons/inkgd/ink_player.gd#L307-L308