Closed
Description
Godot version
4.0 beta 10, also 3.5.1
System information
Windows 11
Issue description
Creating a Mainloop inherited from SceneTree makes sense when you want to add a few features to SceneTree instead of starting from scratch. Unfortunately, this doesn't work as well, as if its type is erased.
But inheriting from Mainloop directly (in the example) can work properly.
Steps to reproduce
- Create a mainloop extends SceneTree. In this case, I call it
MyGDScriptMainLoop
.
class_name MyGDScriptMainLoop extends SceneTree
func say_hello():
print("hello")
- Go to project settings, set
application/run/main_loop_type
toMyGDScriptMainLoop
. - Create a test scene and try to call
Engine.get_main_loop().say_hello()
.
extends Node2D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Engine.get_main_loop().say_hello()
pass # Replace with function body.
Then you will see:
And also I found that Engine.get_main_loop() is MyGDScriptMainLoop
is false
.
Using GDExtension to do this also failed. But since I'm using godot-rust, I'm not sure if this problem exists with godot-cpp.