I am trying to switch from importing classes with
preload() to defining
class_name and use them globally.
It works fine with most of my classes, but one of them triggers a "Identifier “Track” not declared in current scope.
Here is the (dead simple) content of
var mode: Constants.ModeEnum
var max_val = INF
func _init(mode_: Constants.ModeEnum):
self.mode = mode_
What bugs me is that other really similar classes are referred no problem by their
class_name when this one can’t.
I tried changing the name of the class and file in case it hid another godot class name but I get the same behavior.
Thanks in advance for your help!
_init() function from it and see if it helps.
Don’t forget to restart Godot editor every time you encounter seemingly unexplainable error. Very often it helps.
Thank you for your answer.
_init() did not help.
I am using the headless version, and restarting did not solve the issue. I had to manually edit
.godot/global_script_class_cache.cfg to conform to which of my classes have a
I guess that’s what would happen automatically when loading the editor UI. It would be nice if the headless version behave the same, though.
Not sure if that’s the issue but I think
_init() always either needs to work without parameters or must include default values for parameters to work.
So try to set a default value for mode_ to see if that helps?
As stated, this was not the issue. I actually never had issues with arguments in
_init() functions. Maybe you refer to some specific types like
extends Node that may be automatically instanciated, with no parameter, upon scene mounting?
The thing is that
.instantiate() function uses a parameterless constructor only.
That means that if you create your instances through
.instantiate() insead of
.new(), then your classes MUST have parameterless constructors. Otherwise it would fail. The worst thing is that it would fail silently (no errors in console, no crashes, it just doesn’t work and you don’t know why).
It’s probably not related to your particular issue, but it’s still a useful thing to know.