| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593 |
- /*
- * Copyright (c) 2012-2025 Daniele Bartolini et al.
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
- namespace Crown
- {
- const string OBJECT_TYPE_ACTOR = "actor";
- const string OBJECT_TYPE_ANIMATION_FRAME = "animation_frame";
- const string OBJECT_TYPE_ANIMATION_STATE_MACHINE = "animation_state_machine";
- const string OBJECT_TYPE_CAMERA = "camera";
- const string OBJECT_TYPE_COLLIDER = "collider";
- const string OBJECT_TYPE_FILE = "file";
- const string OBJECT_TYPE_FOG = "fog";
- const string OBJECT_TYPE_FONT = "font";
- const string OBJECT_TYPE_LEVEL = "level";
- const string OBJECT_TYPE_LIGHT = "light";
- const string OBJECT_TYPE_MATERIAL = "material";
- const string OBJECT_TYPE_MESH = "mesh";
- const string OBJECT_TYPE_MESH_ANIMATION = "mesh_animation";
- const string OBJECT_TYPE_MESH_BONE = "mesh_bone";
- const string OBJECT_TYPE_MESH_RENDERER = "mesh_renderer";
- const string OBJECT_TYPE_MESH_SKELETON = "mesh_skeleton";
- const string OBJECT_TYPE_NODE_ANIMATION = "node_animation";
- const string OBJECT_TYPE_NODE_TRANSITION = "node_transition";
- const string OBJECT_TYPE_SCRIPT = "script";
- const string OBJECT_TYPE_SOUND = "sound";
- const string OBJECT_TYPE_SOUND_SOURCE = "sound_source";
- const string OBJECT_TYPE_SPRITE = "sprite";
- const string OBJECT_TYPE_SPRITE_ANIMATION = "sprite_animation";
- const string OBJECT_TYPE_SPRITE_RENDERER = "sprite_renderer";
- const string OBJECT_TYPE_STATE_MACHINE = "state_machine";
- const string OBJECT_TYPE_STATE_MACHINE_NODE = "state_machine_node";
- const string OBJECT_TYPE_STATE_MACHINE_VARIABLE = "state_machine_variable";
- const string OBJECT_TYPE_TEXTURE = "texture";
- const string OBJECT_TYPE_TRANSFORM = "transform";
- const string OBJECT_TYPE_UNIT = "unit";
- public static void node_name_enum_callback(InputField enum_property, InputEnum combo, Project project)
- {
- try {
- string path = ResourceId.path(OBJECT_TYPE_MESH, (string)enum_property.union_value());
- Mesh mesh = Mesh.load_from_path(project, path);
- combo.clear();
- foreach (var node in mesh._nodes)
- combo.append(node, node);
- combo.value = combo.any_valid_id();
- } catch (JsonSyntaxError e) {
- loge(e.message);
- }
- }
- public static void scene_resource_callback(InputField enum_property, InputResource chooser, Project project)
- {
- if (enum_property.union_value() == "mesh")
- chooser.set_union_value("core/units/primitives/cube");
- }
- public static void shape_resource_callback(InputField enum_property, InputEnum combo, Project project)
- {
- if (enum_property.union_value() == "inline")
- combo.set_union_value("box");
- }
- public static void class_enum_callback(InputField property_enum, InputEnum combo, Project project)
- {
- try {
- string path = ResourceId.path("physics_config", "global");
- Hashtable global = SJSON.load_from_path(project.absolute_path(path));
- string prev_enum = combo.value;
- combo.clear();
- if (global.has_key("actors")) {
- Hashtable obj = (Hashtable)global["actors"];
- foreach (var e in obj)
- combo.append(e.key, e.key);
- }
- combo.value = prev_enum;
- } catch (JsonSyntaxError e) {
- loge(e.message);
- }
- }
- public static void collision_filter_enum_callback(InputField property_enum, InputEnum combo, Project project)
- {
- try {
- string path = ResourceId.path("physics_config", "global");
- Hashtable global = SJSON.load_from_path(project.absolute_path(path));
- string prev_enum = combo.value;
- combo.clear();
- if (global.has_key("collision_filters")) {
- Hashtable obj = (Hashtable)global["collision_filters"];
- foreach (var e in obj)
- combo.append(e.key, e.key);
- }
- combo.value = prev_enum;
- } catch (JsonSyntaxError e) {
- loge(e.message);
- }
- }
- public static void material_enum_callback(InputField property_enum, InputEnum combo, Project project)
- {
- try {
- string path = ResourceId.path("physics_config", "global");
- Hashtable global = SJSON.load_from_path(project.absolute_path(path));
- string prev_enum = combo.value;
- combo.clear();
- if (global.has_key("materials")) {
- Hashtable obj = (Hashtable)global["materials"];
- foreach (var e in obj)
- combo.append(e.key, e.key);
- }
- combo.value = prev_enum;
- } catch (JsonSyntaxError e) {
- loge(e.message);
- }
- }
- public static void create_object_types(Database database)
- {
- PropertyDefinition[] properties;
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "data.position",
- },
- PropertyDefinition()
- {
- type = PropertyType.QUATERNION,
- name = "data.rotation",
- },
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "data.scale",
- min = VECTOR3_ZERO,
- deffault = VECTOR3_ONE,
- },
- };
- database.create_object_type(OBJECT_TYPE_TRANSFORM, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.mesh_resource",
- label = "Scene",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_MESH,
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.geometry_name",
- label = "Node",
- editor = PropertyEditorType.ENUM,
- enum_property = "data.mesh_resource",
- enum_callback = node_name_enum_callback,
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.material",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_MATERIAL,
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.visible",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.cast_shadows",
- },
- };
- database.create_object_type(OBJECT_TYPE_MESH_RENDERER, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.sprite_resource",
- label = "Sprite",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_SPRITE,
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.material",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_MATERIAL,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.layer",
- min = 0.0,
- max = 7.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.depth",
- min = 0.0,
- max = (double)uint32.MAX,
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.visible",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.flip_x",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.flip_y",
- },
- };
- database.create_object_type(OBJECT_TYPE_SPRITE_RENDERER, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.type",
- editor = PropertyEditorType.ENUM,
- enum_values = { "directional", "omni", "spot" },
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.range",
- min = 0.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.intensity",
- min = 0.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.spot_angle",
- editor = PropertyEditorType.ANGLE,
- min = 0.0,
- max = 90.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "data.color",
- editor = PropertyEditorType.COLOR,
- min = VECTOR3_ZERO,
- max = VECTOR3_ONE,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.shadow_bias",
- min = 0.0,
- max = 1.0,
- deffault = 0.0001,
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.cast_shadows",
- deffault = true,
- },
- };
- database.create_object_type(OBJECT_TYPE_LIGHT, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.projection",
- editor = PropertyEditorType.ENUM,
- enum_values = { "orthographic", "perspective" },
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.fov",
- label = "FOV",
- editor = PropertyEditorType.ANGLE,
- min = 0.0,
- max = 90.0
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.near_range",
- deffault = 0.1,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.far_range",
- deffault = 1000.0,
- },
- };
- database.create_object_type(OBJECT_TYPE_CAMERA, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.source",
- editor = PropertyEditorType.ENUM,
- enum_values = { "mesh", "inline" },
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.scene",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_MESH,
- enum_property = "data.source",
- resource_callback = scene_resource_callback
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.name",
- label = "Node",
- editor = PropertyEditorType.ENUM,
- enum_property = "data.scene",
- enum_callback = node_name_enum_callback,
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.shape",
- editor = PropertyEditorType.ENUM,
- enum_values = { "sphere", "capsule", "box", "convex_hull", "mesh" },
- enum_property = "data.source",
- enum_callback = shape_resource_callback,
- },
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "data.collider_data.position",
- },
- PropertyDefinition()
- {
- type = PropertyType.QUATERNION,
- name = "data.collider_data.rotation",
- },
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "data.collider_data.half_extents", // Box only.
- min = VECTOR3_ZERO,
- deffault = Vector3(0.5, 0.5, 0.5),
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.collider_data.radius", // Sphere and capsule only.
- min = 0.0,
- deffault = 0.5,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.collider_data.height", // Capsule only.
- min = 0.0,
- deffault = 1.0,
- },
- };
- database.create_object_type(OBJECT_TYPE_COLLIDER, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "_global_physics_config",
- deffault = "global",
- editor = PropertyEditorType.RESOURCE,
- resource_type = "physics_config",
- hidden = true,
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.class",
- editor = PropertyEditorType.ENUM,
- enum_property = "_global_physics_config",
- enum_callback = class_enum_callback
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.collision_filter",
- editor = PropertyEditorType.ENUM,
- enum_property = "_global_physics_config",
- enum_callback = collision_filter_enum_callback
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.material",
- editor = PropertyEditorType.ENUM,
- enum_property = "_global_physics_config",
- enum_callback = material_enum_callback
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.mass",
- min = 0.0,
- deffault = 1.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.lock_translation_x",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.lock_translation_y",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.lock_translation_z",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.lock_rotation_x",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.lock_rotation_y",
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.lock_rotation_z",
- },
- };
- database.create_object_type(OBJECT_TYPE_ACTOR, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.script_resource",
- label = "Script",
- editor = PropertyEditorType.RESOURCE,
- resource_type = "lua"
- },
- };
- database.create_object_type(OBJECT_TYPE_SCRIPT, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.state_machine_resource",
- label = "State Machine",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_STATE_MACHINE
- },
- };
- database.create_object_type(OBJECT_TYPE_ANIMATION_STATE_MACHINE, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "position",
- },
- PropertyDefinition()
- {
- type = PropertyType.QUATERNION,
- name = "rotation",
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "name",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_SOUND,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "range",
- min = 0.0,
- deffault = 10.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "volume",
- min = 0.0,
- max = 1.0,
- deffault = 1.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "loop",
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "group",
- deffault = "music",
- },
- };
- database.create_object_type(OBJECT_TYPE_SOUND_SOURCE, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "data.color",
- editor = PropertyEditorType.COLOR,
- min = VECTOR3_ZERO,
- max = VECTOR3_ONE,
- deffault = VECTOR3_ONE,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.density",
- min = 0.0,
- deffault = 0.02
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.range_min",
- min = 0.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.range_max",
- min = 0.0,
- deffault = 1000.0
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.sun_blend",
- min = 0.0,
- max = 1.0,
- deffault = 0.0
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.enabled",
- deffault = true,
- },
- };
- database.create_object_type(OBJECT_TYPE_FOG, properties);
- }
- } /* namespace Crown */
|