Add ability to use custom script templates.
Templates will be loaded from .godot/script_templates For now they're disabled for GDNative. Ideas for further improvements: - Add a "Save as Template" option to the script editor, as it can normally only save to res:// - Support more placeholders / custom placeholders
This commit is contained in:
parent
a8a1f2e2a8
commit
8361b1ce07
10 changed files with 111 additions and 4 deletions
|
|
@ -69,6 +69,19 @@ Ref<Script> GDScriptLanguage::get_template(const String &p_class_name, const Str
|
|||
return script;
|
||||
}
|
||||
|
||||
bool GDScriptLanguage::is_using_templates() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void GDScriptLanguage::make_template(const String &p_class_name, const String &p_base_class_name, Ref<Script> &p_script) {
|
||||
|
||||
String src = p_script->get_source_code();
|
||||
src = src.replace("%BASE%", p_base_class_name);
|
||||
src = src.replace("%TS%", _get_indentation());
|
||||
p_script->set_source_code(src);
|
||||
}
|
||||
|
||||
bool GDScriptLanguage::validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path, List<String> *r_functions) const {
|
||||
|
||||
GDParser parser;
|
||||
|
|
|
|||
|
|
@ -615,6 +615,11 @@ Error GDScript::reload(bool p_keep_state) {
|
|||
if (basedir != "")
|
||||
basedir = basedir.get_base_dir();
|
||||
|
||||
if (basedir.find("res://") == -1 && basedir.find("user://") == -1) {
|
||||
//loading a template, don't parse
|
||||
return OK;
|
||||
}
|
||||
|
||||
valid = false;
|
||||
GDParser parser;
|
||||
Error err = parser.parse(source, basedir, false, path);
|
||||
|
|
|
|||
|
|
@ -381,6 +381,8 @@ public:
|
|||
virtual void get_comment_delimiters(List<String> *p_delimiters) const;
|
||||
virtual void get_string_delimiters(List<String> *p_delimiters) const;
|
||||
virtual Ref<Script> get_template(const String &p_class_name, const String &p_base_class_name) const;
|
||||
virtual bool is_using_templates();
|
||||
virtual void make_template(const String &p_class_name, const String &p_base_class_name, Ref<Script> &p_script);
|
||||
virtual bool validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path = "", List<String> *r_functions = NULL) const;
|
||||
virtual Script *create_script() const;
|
||||
virtual bool has_named_classes() const;
|
||||
|
|
|
|||
|
|
@ -2369,6 +2369,17 @@ Ref<Script> VisualScriptLanguage::get_template(const String &p_class_name, const
|
|||
script->set_instance_base_type(p_base_class_name);
|
||||
return script;
|
||||
}
|
||||
|
||||
bool VisualScriptLanguage::is_using_templates() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void VisualScriptLanguage::make_template(const String &p_class_name, const String &p_base_class_name, Ref<Script> &p_script) {
|
||||
Ref<VisualScript> script = p_script;
|
||||
script->set_instance_base_type(p_base_class_name);
|
||||
}
|
||||
|
||||
bool VisualScriptLanguage::validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path, List<String> *r_functions) const {
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -564,6 +564,8 @@ public:
|
|||
virtual void get_comment_delimiters(List<String> *p_delimiters) const;
|
||||
virtual void get_string_delimiters(List<String> *p_delimiters) const;
|
||||
virtual Ref<Script> get_template(const String &p_class_name, const String &p_base_class_name) const;
|
||||
virtual bool is_using_templates();
|
||||
virtual void make_template(const String &p_class_name, const String &p_base_class_name, Ref<Script> &p_script);
|
||||
virtual bool validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path = "", List<String> *r_functions = NULL) const;
|
||||
virtual Script *create_script() const;
|
||||
virtual bool has_named_classes() const;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue