summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/tests/scripts/runtime/features/static_variables.gd
diff options
context:
space:
mode:
authorGeorge Marques <george@gmarqu.es>2023-04-19 11:10:35 -0300
committerGeorge Marques <george@gmarqu.es>2023-04-27 09:51:44 -0300
commit0ba6048ad3c945e2bd1d0114b5095535c22103ce (patch)
treee9d17e159dab50dc6cc3d574a25647af01939d6c /modules/gdscript/tests/scripts/runtime/features/static_variables.gd
parent352ebe97259622f20b47627b4bf747cdfc79304d (diff)
downloadredot-engine-0ba6048ad3c945e2bd1d0114b5095535c22103ce.tar.gz
Add support for static variables in GDScript
Which allows editable data associated with a particular class instead of the instance. Scripts with static variables are kept in memory indefinitely unless the `@static_unload` annotation is used or the `static_unload()` method is called on the GDScript. If the custom function `_static_init()` exists it will be called when the class is loaded, after the static variables are set.
Diffstat (limited to 'modules/gdscript/tests/scripts/runtime/features/static_variables.gd')
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/static_variables.gd56
1 files changed, 56 insertions, 0 deletions
diff --git a/modules/gdscript/tests/scripts/runtime/features/static_variables.gd b/modules/gdscript/tests/scripts/runtime/features/static_variables.gd
new file mode 100644
index 0000000000..e193312381
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/static_variables.gd
@@ -0,0 +1,56 @@
+@static_unload
+
+static var perm := 0
+
+static var prop := "Hello!":
+ get: return prop + " suffix"
+ set(value): prop = "prefix " + str(value)
+
+static func get_data():
+ return "data"
+
+static var data = get_data()
+
+class Inner:
+ static var prop := "inner"
+ static func _static_init() -> void:
+ prints("Inner._static_init", prop)
+
+ class InnerInner:
+ static var prop := "inner inner"
+ static func _static_init() -> void:
+ prints("InnerInner._static_init", prop)
+
+func test():
+ prints("data:", data)
+
+ prints("perm:", perm)
+ prints("prop:", prop)
+
+ perm = 1
+ prop = "World!"
+
+ prints("perm:", perm)
+ prints("prop:", prop)
+
+ print("other.perm:", StaticVariablesOther.perm)
+ print("other.prop:", StaticVariablesOther.prop)
+
+ StaticVariablesOther.perm = 2
+ StaticVariablesOther.prop = "foo"
+
+ print("other.perm:", StaticVariablesOther.perm)
+ print("other.prop:", StaticVariablesOther.prop)
+
+ @warning_ignore("unsafe_method_access")
+ var path = get_script().get_path().get_base_dir()
+ var other = load(path + "/static_variables_load.gd")
+
+ print("load.perm:", other.perm)
+ print("load.prop:", other.prop)
+
+ other.perm = 3
+ other.prop = "bar"
+
+ print("load.perm:", other.perm)
+ print("load.prop:", other.prop)