Skip to content

The custom Mainloop inherited from SceneTree does not work properly #70764

Closed
@hapenia

Description

@hapenia

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

  1. Create a mainloop extends SceneTree. In this case, I call it MyGDScriptMainLoop.
class_name MyGDScriptMainLoop extends SceneTree

func say_hello():
    print("hello")
  1. Go to project settings, set application/run/main_loop_type to MyGDScriptMainLoop.
  2. 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:

image

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.

Minimal reproduction project

bug.zip

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions