Open Hadaward opened 10 months ago
I think this is limited engine - C++ <-> JS, you can bind data into JS from C++ only in global object. Actually another languages with runtime has similar behaviour
I think this is limited engine - C++ <-> JS, you can bind data into JS from C++ only in global object. Actually another languages with runtime has similar behaviour
Hmm, I don't know what to say about this because I've already found libraries in C#, for example, that allowed running javascript engines and exporting objects as modules to be imported. So i dunno if there's a lib like that in C++
@Hadaward at the moment godot
is registered in the global context in this file.
I'm not comfortable enough to do some changes at this point and I'm not sure if we can build an own object somehow.
I personally don't like global pollution, as well. But there is some workaround for TS.
You could create a new file godot.ts
where you wrap everything like this:
// @ts-nocheck
export class Node extends godot.Node {}
export const DEBUG_ENABLED: boolean = godot.DEBUG_ENABLED;
export const register_class = (target: godot.GodotClass, name: string) =>
godot.register_class(target, name);
...
You need to map everything you need then you are able to use it as module for now.
We should generate the godot.ts
file via editor as well in the future as an alternative for godot.d.ts
.
I personally don't really like global pollution, you could take advantage of the javascript module system to export godot methods, utilities and classes without needing to register the
godot
namespace into the global. If you are wondering how this would work, it is quite simple, the first thing needed would be a d.ts documentation file for intellisense to work. And then we can consume the godot api using import syntax:This is literally the only thing I dislike about this api, the godot api is simply thrown into the global scope.