@tool extends Node @export_tool_button("测试") var test = _load_test @export_tool_button("refresh") var refresh = notify_property_list_changed var method := "" func _load_test(): call(method) func _get_property_list() -> Array[Dictionary]: var method_arr = PackedStringArray() var method_list = get_method_list() # build method_arr for m in method_list: if ( not str(m.name).begins_with("_") and m.name != "get_property_list" and len(m.args) == 0 and m.flags == METHOD_FLAGS_DEFAULT ): method_arr.append(m.name) return [ { "name": "method", "type": TYPE_STRING, "usage": PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_SCRIPT_VARIABLE, "hint": PROPERTY_HINT_ENUM_SUGGESTION, "hint_string": ",".join(method_arr) } ] func test_map_alias(): var map := { "a": 1, "b": {"b1": 1}, } var cow_map := map map.a = 2 cow_map.a = 3 # map before: { "a": 3, "b": { "b1": 1 } } print("map before: ", map) # cow_map before: { "a": 3, "b": { "b1": 1 } } print("cow_map before: ", cow_map) _foo_map(cow_map) map.a = 8 cow_map.a = 9 # map after: { "a": 9, "b": { "b1": 5 } } print("map after: ", map) # cow_map after: { "a": 9, "b": { "b1": 5 } } print("cow_map after: ", cow_map) func _foo_map(map): map.a = 5 map.b.b1 = 5 func test_array_alias(): var arr := [1, 2] var cow_arr := arr arr[0] = 5 _foo_arr(cow_arr) # arr: [5, 6, 10, , ] print("arr: ", arr) # cow_arr: [5, 6, 10, , ] print("cow_arr: ", cow_arr) func _foo_arr(arr): arr[1] = 6 arr.append(10) arr.resize(5) func test_concat_arr(): var arr := [1, 2] var concat_arr := arr + [] arr[0] = 5 _foo_arr(concat_arr) # arr: [5, 2] print("arr: ", arr) # concat_arr: [1, 6, 10, , ] print("concat_arr: ", concat_arr) func test_packed_array(): var arr := PackedInt32Array([1, 2]) var cow_arr := arr arr[0] = 5 _foo_arr(cow_arr) # arr: [5, 6, 10, 0, 0] print("arr: ", arr) # cow_arr: [5, 6, 10, 0, 0] print("cow_arr: ", cow_arr) # func _ready() -> void: # $Button.mouse_exited.connect(_free_btn) # _wait_btn() # get_tree().create_timer(3.0).timeout.connect(_free_self) # func _wait_btn() -> void: # print("waiting...") # var res = await _waiting() # print("button pressed res", res) # print("hello") # func _waiting() -> void: # await get_tree().create_timer(1.0).timeout # func _free_btn() -> void: # print("free button") # $Button.queue_free() # print("button freed") # func _free_self() -> void: # # print("free self") # # queue_free() # # print("self freed") # print("quit") # get_tree().quit()