Merge pull request #67155 from touilleMan/Engine-exposes-ScriptServer-unregister_language
Expose unregister language & improve usability with GDExtension
This commit is contained in:
commit
126025d2dd
@ -1590,8 +1590,12 @@ Vector<String> Engine::get_singleton_list() const {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::register_script_language(ScriptLanguage *p_language) {
|
Error Engine::register_script_language(ScriptLanguage *p_language) {
|
||||||
ScriptServer::register_language(p_language);
|
return ScriptServer::register_language(p_language);
|
||||||
|
}
|
||||||
|
|
||||||
|
Error Engine::unregister_script_language(const ScriptLanguage *p_language) {
|
||||||
|
return ScriptServer::unregister_language(p_language);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Engine::get_script_language_count() {
|
int Engine::get_script_language_count() {
|
||||||
@ -1662,6 +1666,7 @@ void Engine::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("get_singleton_list"), &Engine::get_singleton_list);
|
ClassDB::bind_method(D_METHOD("get_singleton_list"), &Engine::get_singleton_list);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("register_script_language", "language"), &Engine::register_script_language);
|
ClassDB::bind_method(D_METHOD("register_script_language", "language"), &Engine::register_script_language);
|
||||||
|
ClassDB::bind_method(D_METHOD("unregister_script_language", "language"), &Engine::unregister_script_language);
|
||||||
ClassDB::bind_method(D_METHOD("get_script_language_count"), &Engine::get_script_language_count);
|
ClassDB::bind_method(D_METHOD("get_script_language_count"), &Engine::get_script_language_count);
|
||||||
ClassDB::bind_method(D_METHOD("get_script_language", "index"), &Engine::get_script_language);
|
ClassDB::bind_method(D_METHOD("get_script_language", "index"), &Engine::get_script_language);
|
||||||
|
|
||||||
|
@ -499,7 +499,8 @@ public:
|
|||||||
void unregister_singleton(const StringName &p_name);
|
void unregister_singleton(const StringName &p_name);
|
||||||
Vector<String> get_singleton_list() const;
|
Vector<String> get_singleton_list() const;
|
||||||
|
|
||||||
void register_script_language(ScriptLanguage *p_language);
|
Error register_script_language(ScriptLanguage *p_language);
|
||||||
|
Error unregister_script_language(const ScriptLanguage *p_language);
|
||||||
int get_script_language_count();
|
int get_script_language_count();
|
||||||
ScriptLanguage *get_script_language(int p_index) const;
|
ScriptLanguage *get_script_language(int p_index) const;
|
||||||
|
|
||||||
|
@ -165,22 +165,30 @@ ScriptLanguage *ScriptServer::get_language(int p_idx) {
|
|||||||
return _languages[p_idx];
|
return _languages[p_idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptServer::register_language(ScriptLanguage *p_language) {
|
Error ScriptServer::register_language(ScriptLanguage *p_language) {
|
||||||
ERR_FAIL_NULL(p_language);
|
ERR_FAIL_NULL_V(p_language, ERR_INVALID_PARAMETER);
|
||||||
ERR_FAIL_COND(_language_count >= MAX_LANGUAGES);
|
ERR_FAIL_COND_V_MSG(_language_count >= MAX_LANGUAGES, ERR_UNAVAILABLE, "Script languages limit has been reach, cannot register more.");
|
||||||
|
for (int i = 0; i < _language_count; i++) {
|
||||||
|
const ScriptLanguage *other_language = _languages[i];
|
||||||
|
ERR_FAIL_COND_V_MSG(other_language->get_extension() == p_language->get_extension(), ERR_ALREADY_EXISTS, "A script language with extension '" + p_language->get_extension() + "' is already registered.");
|
||||||
|
ERR_FAIL_COND_V_MSG(other_language->get_name() == p_language->get_name(), ERR_ALREADY_EXISTS, "A script language with name '" + p_language->get_name() + "' is already registered.");
|
||||||
|
ERR_FAIL_COND_V_MSG(other_language->get_type() == p_language->get_type(), ERR_ALREADY_EXISTS, "A script language with type '" + p_language->get_type() + "' is already registered.");
|
||||||
|
}
|
||||||
_languages[_language_count++] = p_language;
|
_languages[_language_count++] = p_language;
|
||||||
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptServer::unregister_language(const ScriptLanguage *p_language) {
|
Error ScriptServer::unregister_language(const ScriptLanguage *p_language) {
|
||||||
for (int i = 0; i < _language_count; i++) {
|
for (int i = 0; i < _language_count; i++) {
|
||||||
if (_languages[i] == p_language) {
|
if (_languages[i] == p_language) {
|
||||||
_language_count--;
|
_language_count--;
|
||||||
if (i < _language_count) {
|
if (i < _language_count) {
|
||||||
SWAP(_languages[i], _languages[_language_count]);
|
SWAP(_languages[i], _languages[_language_count]);
|
||||||
}
|
}
|
||||||
return;
|
return OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return ERR_DOES_NOT_EXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptServer::init_languages() {
|
void ScriptServer::init_languages() {
|
||||||
|
@ -70,8 +70,8 @@ public:
|
|||||||
static bool is_scripting_enabled();
|
static bool is_scripting_enabled();
|
||||||
_FORCE_INLINE_ static int get_language_count() { return _language_count; }
|
_FORCE_INLINE_ static int get_language_count() { return _language_count; }
|
||||||
static ScriptLanguage *get_language(int p_idx);
|
static ScriptLanguage *get_language(int p_idx);
|
||||||
static void register_language(ScriptLanguage *p_language);
|
static Error register_language(ScriptLanguage *p_language);
|
||||||
static void unregister_language(const ScriptLanguage *p_language);
|
static Error unregister_language(const ScriptLanguage *p_language);
|
||||||
|
|
||||||
static void set_reload_scripts_on_save(bool p_enable);
|
static void set_reload_scripts_on_save(bool p_enable);
|
||||||
static bool is_reload_scripts_on_save_enabled();
|
static bool is_reload_scripts_on_save_enabled();
|
||||||
|
@ -244,10 +244,14 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="register_script_language">
|
<method name="register_script_language">
|
||||||
<return type="void" />
|
<return type="int" enum="Error" />
|
||||||
<param index="0" name="language" type="ScriptLanguage" />
|
<param index="0" name="language" type="ScriptLanguage" />
|
||||||
<description>
|
<description>
|
||||||
Registers a [ScriptLanguage] instance to be available with [code]ScriptServer[/code].
|
Registers a [ScriptLanguage] instance to be available with [code]ScriptServer[/code].
|
||||||
|
Returns:
|
||||||
|
- [constant OK] on success
|
||||||
|
- [constant ERR_UNAVAILABLE] if [code]ScriptServer[/code] has reached it limit and cannot register any new language
|
||||||
|
- [constant ERR_ALREADY_EXISTS] if [code]ScriptServer[/code] already contains a language with similar extension/name/type
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="register_singleton">
|
<method name="register_singleton">
|
||||||
@ -258,6 +262,16 @@
|
|||||||
Registers the given object as a singleton, globally available under [param name].
|
Registers the given object as a singleton, globally available under [param name].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="unregister_script_language">
|
||||||
|
<return type="int" enum="Error" />
|
||||||
|
<param index="0" name="language" type="ScriptLanguage" />
|
||||||
|
<description>
|
||||||
|
Unregisters the [ScriptLanguage] instance from [code]ScriptServer[/code].
|
||||||
|
Returns:
|
||||||
|
- [constant OK] on success
|
||||||
|
- [constant ERR_DOES_NOT_EXIST] if the language is already not registered in [code]ScriptServer[/code]
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="unregister_singleton">
|
<method name="unregister_singleton">
|
||||||
<return type="void" />
|
<return type="void" />
|
||||||
<param index="0" name="name" type="StringName" />
|
<param index="0" name="name" type="StringName" />
|
||||||
|
Loading…
Reference in New Issue
Block a user