131 lines
2.5 KiB
GDScript3
131 lines
2.5 KiB
GDScript3
|
@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()
|