49 lines
1.5 KiB
GDScript
49 lines
1.5 KiB
GDScript
class_name KCUtils
|
|
|
|
static func remove_children(node: Node):
|
|
for i in range(node.get_child_count()):
|
|
node.remove_child(node.get_child(i))
|
|
|
|
static func get_class_name(value: Object) -> String:
|
|
match value.get_script():
|
|
var script when script != null:
|
|
match script.get_global_name():
|
|
var name when name != null: return name
|
|
_: return script.get_instance_base_type()
|
|
_: return value.get_class()
|
|
|
|
static func is_string_like(value: Variant) -> bool:
|
|
match typeof(value):
|
|
TYPE_STRING: return true
|
|
TYPE_STRING_NAME: return true
|
|
TYPE_NODE_PATH: return true
|
|
_: return false
|
|
|
|
static func to_str(value: Variant) -> String:
|
|
match typeof(value):
|
|
TYPE_OBJECT:
|
|
if value.has_method('_to_string'):
|
|
return value.to_string()
|
|
else:
|
|
var name = get_class_name(value)
|
|
value = value as Object
|
|
var props: Dictionary = inst_to_dict(value)
|
|
return "%s %s" % [name, to_str(props)]
|
|
_: return str(value)
|
|
|
|
static func propagate(node: Node, fn: StringName, args: Array, call_on_self: bool = true):
|
|
if call_on_self and node.has_method(fn):
|
|
node.callv(fn, args)
|
|
|
|
for child in node.get_children():
|
|
propagate(child, fn, args)
|
|
|
|
static func propagate_input_event(node: Node, fn: StringName, event: InputEvent, call_on_self: bool = true):
|
|
if node.get_viewport().is_input_handled() or event.is_canceled():
|
|
return
|
|
|
|
if call_on_self and node.has_method(fn):
|
|
node.callv(fn, [event])
|
|
|
|
for child in node.get_children():
|
|
propagate_input_event(child, fn, event)
|