xiandie/util/tester.gd
2025-07-04 21:03:51 +08:00

131 lines
2.5 KiB
GDScript

@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, <null>, <null>]
print("arr: ", arr)
# cow_arr: [5, 6, 10, <null>, <null>]
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, <null>, <null>]
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()