|
@@ -297,6 +297,20 @@ Ref<Script> CSharpLanguage::get_template(const String &p_class_name, const Strin
|
|
|
return script;
|
|
|
}
|
|
|
|
|
|
+bool CSharpLanguage::is_using_templates() {
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+void CSharpLanguage::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)
|
|
|
+ .replace("%CLASS%", p_class_name)
|
|
|
+ .replace("%TS%", _get_indentation());
|
|
|
+ p_script->set_source_code(src);
|
|
|
+}
|
|
|
+
|
|
|
Script *CSharpLanguage::create_script() const {
|
|
|
|
|
|
return memnew(CSharpScript);
|
|
@@ -396,6 +410,25 @@ String CSharpLanguage::make_function(const String &p_class, const String &p_name
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
+String CSharpLanguage::_get_indentation() const {
|
|
|
+#ifdef TOOLS_ENABLED
|
|
|
+ if (Engine::get_singleton()->is_editor_hint()) {
|
|
|
+ bool use_space_indentation = EDITOR_DEF("text_editor/indent/type", 0);
|
|
|
+
|
|
|
+ if (use_space_indentation) {
|
|
|
+ int indent_size = EDITOR_DEF("text_editor/indent/size", 4);
|
|
|
+
|
|
|
+ String space_indent = "";
|
|
|
+ for (int i = 0; i < indent_size; i++) {
|
|
|
+ space_indent += " ";
|
|
|
+ }
|
|
|
+ return space_indent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ return "\t";
|
|
|
+}
|
|
|
+
|
|
|
void CSharpLanguage::frame() {
|
|
|
|
|
|
const Ref<MonoGCHandle> &task_scheduler_handle = GDMonoUtils::mono_cache.task_scheduler_handle;
|
|
@@ -1411,6 +1444,34 @@ void CSharpScript::_resource_path_changed() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+bool CSharpScript::_get(const StringName &p_name, Variant &r_ret) const {
|
|
|
+
|
|
|
+ if (p_name == CSharpLanguage::singleton->string_names._script_source) {
|
|
|
+
|
|
|
+ r_ret = get_source_code();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool CSharpScript::_set(const StringName &p_name, const Variant &p_value) {
|
|
|
+
|
|
|
+ if (p_name == CSharpLanguage::singleton->string_names._script_source) {
|
|
|
+
|
|
|
+ set_source_code(p_value);
|
|
|
+ reload();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void CSharpScript::_get_property_list(List<PropertyInfo> *p_properties) const {
|
|
|
+
|
|
|
+ p_properties->push_back(PropertyInfo(Variant::STRING, CSharpLanguage::singleton->string_names._script_source, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR));
|
|
|
+}
|
|
|
+
|
|
|
void CSharpScript::_bind_methods() {
|
|
|
|
|
|
ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "new", &CSharpScript::_new, MethodInfo(Variant::OBJECT, "new"));
|
|
@@ -1984,5 +2045,6 @@ CSharpLanguage::StringNameCache::StringNameCache() {
|
|
|
_set = StaticCString::create("_set");
|
|
|
_get = StaticCString::create("_get");
|
|
|
_notification = StaticCString::create("_notification");
|
|
|
+ _script_source = StaticCString::create("script/source");
|
|
|
dotctor = StaticCString::create(".ctor");
|
|
|
}
|