2021-04-04 12:50:40 +02:00
|
|
|
extends Node
|
|
|
|
|
2021-04-24 17:53:09 +02:00
|
|
|
### Scripts to arguments and return needed info about them.
|
2021-04-04 12:50:40 +02:00
|
|
|
|
2021-04-24 17:53:09 +02:00
|
|
|
|
|
|
|
### Class which contains informations about used
|
2021-04-04 12:50:40 +02:00
|
|
|
class SingleArgument:
|
|
|
|
var name: String # E.G. var roman, can be empty, so temp variable isn't created(nodes and objects must be created with temp_variable due to memory leaks)
|
|
|
|
var type: String # np. Vector2 or Object
|
|
|
|
var value: String # np. randi() % 100 or
|
|
|
|
var is_object: bool = false # Check if this is object e.g. Node not Vector2
|
|
|
|
var is_only_object: bool = false # Only needs to freed with .free()
|
|
|
|
var is_only_reference: bool = false # Don't needs to be removed manually
|
|
|
|
var is_only_node: bool = false # Needs to be removed with .queue_free()
|
|
|
|
|
|
|
|
|
|
|
|
func create_gdscript_arguments(arguments: Array) -> Array:
|
|
|
|
var argument_array: Array = []
|
|
|
|
|
|
|
|
var counter = 0
|
|
|
|
for argument in arguments:
|
|
|
|
counter += 1
|
|
|
|
var sa: SingleArgument = SingleArgument.new()
|
|
|
|
sa.name = "variable" + str(counter)
|
|
|
|
match argument["type"]:
|
|
|
|
TYPE_NIL: # Looks that this means VARIANT not null
|
|
|
|
sa.type = "Variant"
|
|
|
|
sa.value = "false"
|
|
|
|
TYPE_AABB:
|
|
|
|
sa.type = "AABB"
|
|
|
|
sa.value = ValueCreator.get_aabb_string()
|
|
|
|
TYPE_ARRAY:
|
|
|
|
sa.type = "Array"
|
|
|
|
sa.value = "[]"
|
|
|
|
TYPE_BASIS:
|
|
|
|
sa.type = "Basis"
|
|
|
|
sa.value = ValueCreator.get_basis_string()
|
|
|
|
TYPE_BOOL:
|
|
|
|
sa.type = "bool"
|
|
|
|
sa.value = ValueCreator.get_bool_string().to_lower()
|
|
|
|
TYPE_COLOR:
|
|
|
|
sa.type = "Color"
|
|
|
|
sa.value = ValueCreator.get_color_string()
|
|
|
|
TYPE_COLOR_ARRAY:
|
|
|
|
sa.type = "PoolColorArray"
|
|
|
|
sa.value = "PoolColorArray([])"
|
|
|
|
TYPE_DICTIONARY:
|
|
|
|
sa.type = "Dictionary"
|
|
|
|
sa.value = "{}" # TODO Why not all use ValueCreator?
|
|
|
|
TYPE_INT:
|
|
|
|
sa.type = "int"
|
|
|
|
sa.value = ValueCreator.get_int_string()
|
|
|
|
TYPE_INT_ARRAY:
|
|
|
|
sa.type = "PoolIntArray"
|
|
|
|
sa.value = "PoolIntArray([])"
|
|
|
|
TYPE_NODE_PATH:
|
|
|
|
sa.type = "NodePath"
|
|
|
|
sa.value = "NodePath(\".\")"
|
|
|
|
TYPE_OBJECT:
|
|
|
|
sa.type = ValueCreator.get_object_string(argument["class_name"])
|
|
|
|
sa.value = sa.type + ".new()"
|
|
|
|
|
|
|
|
sa.is_object = true
|
|
|
|
if ClassDB.is_parent_class(sa.type, "Node"):
|
|
|
|
sa.is_only_node = true
|
|
|
|
elif ClassDB.is_parent_class(sa.type, "Reference"):
|
|
|
|
sa.is_only_reference = true
|
|
|
|
else:
|
|
|
|
sa.is_only_object = true
|
|
|
|
|
|
|
|
TYPE_PLANE:
|
|
|
|
sa.type = "Plane"
|
|
|
|
sa.value = ValueCreator.get_plane_string()
|
|
|
|
TYPE_QUAT:
|
|
|
|
sa.type = "Quat"
|
|
|
|
sa.value = ValueCreator.get_quat_string()
|
|
|
|
TYPE_RAW_ARRAY:
|
|
|
|
sa.type = "PoolByteArray"
|
|
|
|
sa.value = "PoolByteArray([])"
|
|
|
|
TYPE_REAL:
|
|
|
|
sa.type = "float"
|
|
|
|
sa.value = ValueCreator.get_float_string()
|
|
|
|
TYPE_REAL_ARRAY:
|
|
|
|
sa.type = "PoolRealArray"
|
|
|
|
sa.value = "PoolRealArray([])"
|
|
|
|
TYPE_RECT2:
|
|
|
|
sa.type = "Rect2"
|
|
|
|
sa.value = ValueCreator.get_rect2_string()
|
|
|
|
TYPE_RID:
|
|
|
|
sa.type = "RID"
|
|
|
|
sa.value = "RID()"
|
|
|
|
TYPE_STRING:
|
|
|
|
sa.type = "String"
|
|
|
|
sa.value = ValueCreator.get_string_string()
|
|
|
|
TYPE_STRING_ARRAY:
|
|
|
|
sa.type = "PoolStringArray"
|
|
|
|
sa.value = "PoolStringArray([])"
|
|
|
|
TYPE_TRANSFORM:
|
|
|
|
sa.type = "Transform"
|
|
|
|
sa.value = ValueCreator.get_transform_string()
|
|
|
|
TYPE_TRANSFORM2D:
|
|
|
|
sa.type = "Transform2D"
|
|
|
|
sa.value = ValueCreator.get_transform2D_string()
|
|
|
|
TYPE_VECTOR2:
|
|
|
|
sa.type = "Vector2"
|
|
|
|
sa.value = ValueCreator.get_vector2_string()
|
|
|
|
TYPE_VECTOR2_ARRAY:
|
|
|
|
sa.type = "PoolVector2Array"
|
|
|
|
sa.value = "PoolVector2Array([])"
|
|
|
|
TYPE_VECTOR3:
|
|
|
|
sa.type = "Vector3"
|
|
|
|
sa.value = ValueCreator.get_vector3_string()
|
|
|
|
TYPE_VECTOR3_ARRAY:
|
|
|
|
sa.type = "PoolVector3Array"
|
|
|
|
sa.value = "PoolVector3Array([])"
|
|
|
|
_:
|
|
|
|
assert(false, "Missing type, needs to be added to project")
|
|
|
|
argument_array.append(sa)
|
|
|
|
|
|
|
|
return argument_array
|
|
|
|
|
|
|
|
|
2021-04-24 17:53:09 +02:00
|
|
|
func parse_and_return_objects(method_data: Dictionary, name_of_class: String, debug_print: bool = false) -> Array:
|
2021-04-04 12:50:40 +02:00
|
|
|
var arguments_array: Array = []
|
|
|
|
|
|
|
|
for argument in method_data["args"]:
|
|
|
|
match argument.type:
|
|
|
|
TYPE_NIL: # Looks that this means VARIANT not null
|
|
|
|
if ValueCreator.random == false:
|
|
|
|
arguments_array.push_back(false)
|
|
|
|
else:
|
|
|
|
if randi() % 3:
|
|
|
|
arguments_array.push_back(ValueCreator.get_array())
|
|
|
|
elif randi() % 3:
|
|
|
|
arguments_array.push_back(ValueCreator.get_object("Object"))
|
|
|
|
elif randi() % 3:
|
|
|
|
arguments_array.push_back(ValueCreator.get_dictionary())
|
|
|
|
elif randi() % 3:
|
|
|
|
arguments_array.push_back(ValueCreator.get_string())
|
|
|
|
elif randi() % 3:
|
|
|
|
arguments_array.push_back(ValueCreator.get_int())
|
|
|
|
else:
|
|
|
|
arguments_array.push_back(ValueCreator.get_basis())
|
|
|
|
TYPE_AABB:
|
|
|
|
arguments_array.push_back(ValueCreator.get_aabb())
|
|
|
|
TYPE_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_array())
|
|
|
|
TYPE_BASIS:
|
|
|
|
arguments_array.push_back(ValueCreator.get_basis())
|
|
|
|
TYPE_BOOL:
|
|
|
|
arguments_array.push_back(ValueCreator.get_bool())
|
|
|
|
TYPE_COLOR:
|
|
|
|
arguments_array.push_back(ValueCreator.get_color())
|
|
|
|
TYPE_COLOR_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_pool_color_array())
|
|
|
|
TYPE_DICTIONARY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_dictionary())
|
|
|
|
TYPE_INT:
|
|
|
|
arguments_array.push_back(ValueCreator.get_int())
|
|
|
|
TYPE_INT_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_pool_int_array())
|
|
|
|
TYPE_NODE_PATH:
|
|
|
|
arguments_array.push_back(ValueCreator.get_nodepath())
|
|
|
|
TYPE_OBJECT:
|
|
|
|
if ValueCreator.random && randi() % 2:
|
|
|
|
arguments_array.push_back(null)
|
|
|
|
else:
|
|
|
|
var obj: Object = ValueCreator.get_object(argument["class_name"])
|
|
|
|
arguments_array.push_back(obj)
|
|
|
|
assert(obj != null, "Failed to create an object of type " + argument["class_name"])
|
|
|
|
|
|
|
|
TYPE_PLANE:
|
|
|
|
arguments_array.push_back(ValueCreator.get_plane())
|
|
|
|
TYPE_QUAT:
|
|
|
|
arguments_array.push_back(ValueCreator.get_quat())
|
|
|
|
TYPE_RAW_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_pool_byte_array())
|
|
|
|
TYPE_REAL:
|
|
|
|
arguments_array.push_back(ValueCreator.get_float())
|
|
|
|
TYPE_REAL_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_pool_real_array())
|
|
|
|
TYPE_RECT2:
|
|
|
|
arguments_array.push_back(ValueCreator.get_rect2())
|
|
|
|
TYPE_RID:
|
|
|
|
arguments_array.push_back(RID())
|
|
|
|
TYPE_STRING:
|
|
|
|
arguments_array.push_back(ValueCreator.get_string())
|
|
|
|
TYPE_STRING_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_pool_string_array())
|
|
|
|
TYPE_TRANSFORM:
|
|
|
|
arguments_array.push_back(ValueCreator.get_transform())
|
|
|
|
TYPE_TRANSFORM2D:
|
|
|
|
arguments_array.push_back(ValueCreator.get_transform2D())
|
|
|
|
TYPE_VECTOR2:
|
|
|
|
arguments_array.push_back(ValueCreator.get_vector2())
|
|
|
|
TYPE_VECTOR2_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_pool_vector2_array())
|
|
|
|
TYPE_VECTOR3:
|
|
|
|
arguments_array.push_back(ValueCreator.get_vector3())
|
|
|
|
TYPE_VECTOR3_ARRAY:
|
|
|
|
arguments_array.push_back(ValueCreator.get_pool_vector3_array())
|
|
|
|
_:
|
|
|
|
assert(false, "Missing type, needs to be added to project")
|
|
|
|
|
|
|
|
if debug_print:
|
2021-04-24 17:53:09 +02:00
|
|
|
print("\n" + name_of_class + "." + method_data["name"] + " --- executing with " + str(arguments_array.size()) + " parameters " + str(arguments_array))
|
2021-04-04 12:50:40 +02:00
|
|
|
return arguments_array
|
2021-04-24 17:53:09 +02:00
|
|
|
|
|
|
|
|
|
|
|
func return_gdscript_code_which_run_this_object(data) -> String:
|
|
|
|
if data == null:
|
|
|
|
return "null"
|
|
|
|
|
|
|
|
var return_string: String = ""
|
|
|
|
|
|
|
|
match typeof(data):
|
|
|
|
TYPE_NIL: # Looks that this means VARIANT not null
|
|
|
|
assert("false", "This is even possible?")
|
|
|
|
TYPE_AABB:
|
|
|
|
return_string = "AABB("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.position)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.size)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_ARRAY:
|
|
|
|
return_string = "Array(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
TYPE_BASIS:
|
|
|
|
return_string = "Basis("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.x)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.y)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.z)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_BOOL:
|
|
|
|
if data == true:
|
|
|
|
return_string = "true"
|
|
|
|
else:
|
|
|
|
return_string = "false"
|
|
|
|
TYPE_COLOR:
|
|
|
|
return_string = "Color("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.r)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.g)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.b)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.a)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_COLOR_ARRAY:
|
|
|
|
return_string = "PoolColorArray(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
TYPE_DICTIONARY:
|
|
|
|
return_string = "{"
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.keys()[i])
|
|
|
|
return_string += " : "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.values()[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "}"
|
|
|
|
TYPE_INT:
|
|
|
|
return_string = str(data)
|
|
|
|
TYPE_INT_ARRAY:
|
|
|
|
return_string = "PoolIntArray(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
TYPE_NODE_PATH:
|
|
|
|
return_string = "NodePath("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(str(data))
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_OBJECT:
|
|
|
|
if data == null:
|
|
|
|
return_string = "null"
|
|
|
|
else:
|
|
|
|
var name_of_class: String = data.get_class()
|
|
|
|
if (
|
|
|
|
ClassDB.is_parent_class(name_of_class, "Object")
|
|
|
|
&& !ClassDB.is_parent_class(name_of_class, "Node")
|
|
|
|
&& !ClassDB.is_parent_class(name_of_class, "Reference")
|
|
|
|
&& !ClassDB.class_has_method(name_of_class, "new")
|
|
|
|
):
|
|
|
|
return_string += "ClassDB.instance(\"" + name_of_class + "\")"
|
|
|
|
else:
|
|
|
|
return_string = name_of_class.trim_prefix("_")
|
|
|
|
return_string += ".new()"
|
|
|
|
|
|
|
|
TYPE_PLANE:
|
|
|
|
return_string = "Plane("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.x)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.y)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.z)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.d)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_QUAT:
|
|
|
|
return_string = "Quat("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.x)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.y)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.z)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.w)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_RAW_ARRAY:
|
|
|
|
return_string = "PoolByteArray(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
TYPE_REAL:
|
|
|
|
return_string = str(data)
|
|
|
|
TYPE_REAL_ARRAY:
|
|
|
|
return_string = "PoolRealArray(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
TYPE_RECT2:
|
|
|
|
return_string = "Rect2("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.position)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.size)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_RID:
|
|
|
|
return_string = "RID()"
|
|
|
|
TYPE_STRING:
|
|
|
|
return_string = "\"" + data + "\""
|
|
|
|
TYPE_STRING_ARRAY:
|
|
|
|
return_string = "PoolStringArray(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
TYPE_TRANSFORM:
|
|
|
|
return_string = "Transform("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.basis)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.origin)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_TRANSFORM2D:
|
|
|
|
return_string = "Transform2D("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.x)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.y)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.origin)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_VECTOR2:
|
|
|
|
return_string = "Vector2("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.x)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.y)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_VECTOR2_ARRAY:
|
|
|
|
return_string = "PoolVector2Array(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
TYPE_VECTOR3:
|
|
|
|
return_string = "Vector3("
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.x)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.y)
|
|
|
|
return_string += ", "
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data.z)
|
|
|
|
return_string += ")"
|
|
|
|
TYPE_VECTOR3_ARRAY:
|
|
|
|
return_string = "PoolVector3Array(["
|
|
|
|
for i in data.size():
|
|
|
|
return_string += return_gdscript_code_which_run_this_object(data[i])
|
|
|
|
if i != data.size() - 1:
|
|
|
|
return_string += ", "
|
|
|
|
return_string += "])"
|
|
|
|
_:
|
|
|
|
assert(false, "Missing type, needs to be added to project")
|
|
|
|
|
|
|
|
return return_string
|