From af7625768fc116c9c96564abf4adae356d8823fd Mon Sep 17 00:00:00 2001 From: Will Nations Date: Wed, 15 Aug 2018 13:03:27 -0500 Subject: [PATCH] Add script class docs --- .../scripting/gdscript/gdscript_basics.rst | 21 ++++++++++-- .../step_by_step/scripting_continued.rst | 32 ++++++++++++++++++ img/script_class_nativescript_example.png | Bin 0 -> 17495 bytes 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 img/script_class_nativescript_example.png diff --git a/getting_started/scripting/gdscript/gdscript_basics.rst b/getting_started/scripting/gdscript/gdscript_basics.rst index ed52000a6..e499c5b05 100644 --- a/getting_started/scripting/gdscript/gdscript_basics.rst +++ b/getting_started/scripting/gdscript/gdscript_basics.rst @@ -59,6 +59,10 @@ here's a simple example of how GDScript looks. extends BaseClass + # optional script class with optional icon + + class_name MyClass, "res://path/to/optional/icon.svg" + # Member Variables var a = 5 @@ -865,9 +869,13 @@ Classes ~~~~~~~ By default, the body of a script file is an unnamed class and it can -only be referenced externally as a resource or file. Class syntax is -meant to be compact and can only contain member variables or -functions. Static functions are allowed, but not static members (this is +only be referenced externally as a resource or file. Users can also define +an explicit name for a script using the 'class_name' keyword, optionally +followed by a path to an image resource. Named scripts appear in Godot +Engine's editor with their base class icon or the custom defined icon. + +Class syntax is meant to be very compact and can only contain member variables +or functions. Static functions are allowed, but not static members (this is in the spirit of thread safety, since scripts can be initialized in separate threads without the user knowing). In the same way, member variables (including arrays and dictionaries) are initialized every time @@ -878,11 +886,18 @@ Below is an example of a class file. :: # Saved as a file named 'myclass.gd'. + + class_name MyClass var a = 5 func print_value_of_a(): print(a) + + func print_script_three_times(): + print(get_script()) + print(ResourceLoader.load("res://myclass.gd")) + print(MyClass) Inheritance ^^^^^^^^^^^ diff --git a/getting_started/step_by_step/scripting_continued.rst b/getting_started/step_by_step/scripting_continued.rst index b9a18684d..a3ec4147b 100644 --- a/getting_started/step_by_step/scripting_continued.rst +++ b/getting_started/step_by_step/scripting_continued.rst @@ -381,3 +381,35 @@ The advantage of this two-step process is that a packed scene may be kept loaded and ready to use so that you can create as many instances as desired. This is especially useful to quickly instance several enemies, bullets, and other entities in the active scene. + +Script Classes +-------------- + +Godot has a "Script Class" feature to register individual scripts with the +Editor. By default, unnamed scripts are only accessible by loading the file +directly. Users name the script and give it an optional icon. These name-script +pairings are then supplied to scripting languages in Godot. The named scripts +that derive Node or Resource will show up in their respective creation dialogs +in the Editor. + +At this time... + +- Only GDScript and NativeScript (C++ and other GDNative-powered languages) can register scripts. +- Only GDScript creates global variables for each named script. + +.. tabs:: + .. code-tab:: gdscript GDScript + + extends Node + + # Declare the class name here + class_name ScriptName, "res://path/to/optional/icon.svg" + + func _ready(): + var this = ScriptName # script + var cppNode = MyCppNode.new() # instance of a script + + cppNode.queue_free() + +.. image:: img/script_class_nativescript_example.png + diff --git a/img/script_class_nativescript_example.png b/img/script_class_nativescript_example.png new file mode 100644 index 0000000000000000000000000000000000000000..3cee89bea1df048fbf350a9ea76770850f58754f GIT binary patch literal 17495 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