| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924 |
- /*
- * 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_BLOOM = "bloom";
- 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_GLOBAL_LIGHTING = "global_lighting";
- 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_MOVER = "mover";
- 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_TONEMAP = "tonemap";
- const string OBJECT_TYPE_TRANSFORM = "transform";
- const string OBJECT_TYPE_UNIT = "unit";
- // UI order reference table:
- //
- // spatial 500
- // rendering 1000
- // global_lighti 1001
- // camera 1100
- // light 1101
- // mesh 1102
- // sprite 1103
- // fog 1104
- // physics 2000
- // collider 2100
- // actor 2101
- // mover 2102
- // animation 3000
- // state_machine 3100
- // scripting 7000
- // lua_script 7100
- // post-processing 9000
- // bloom 9100
- // tonemap 9900
- 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
- , 500
- , ObjectTypeFlags.UNIT_COMPONENT
- );
- 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",
- deffault = true
- },
- };
- database.create_object_type(OBJECT_TYPE_MESH_RENDERER
- , properties
- , 1102
- , ObjectTypeFlags.UNIT_COMPONENT
- , OBJECT_TYPE_TRANSFORM
- );
- 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
- , 1103
- , ObjectTypeFlags.UNIT_COMPONENT
- , OBJECT_TYPE_TRANSFORM
- );
- 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
- , 1101
- , ObjectTypeFlags.UNIT_COMPONENT
- , OBJECT_TYPE_TRANSFORM
- );
- 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
- , 1100
- , ObjectTypeFlags.UNIT_COMPONENT
- , OBJECT_TYPE_TRANSFORM
- );
- 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
- , 2100
- , ObjectTypeFlags.UNIT_COMPONENT
- , OBJECT_TYPE_TRANSFORM
- );
- 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
- , 2101
- , ObjectTypeFlags.UNIT_COMPONENT
- , OBJECT_TYPE_TRANSFORM
- );
- 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
- , 7100
- , ObjectTypeFlags.UNIT_COMPONENT
- );
- 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
- , 3100
- , ObjectTypeFlags.UNIT_COMPONENT
- );
- 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, 3.0);
- 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
- , 1104
- , ObjectTypeFlags.UNIT_COMPONENT
- );
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "_global_physics_config",
- deffault = "global",
- editor = PropertyEditorType.RESOURCE,
- resource_type = "physics_config",
- hidden = true,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.height",
- min = 0.0,
- deffault = 1.80,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.radius",
- min = 0.0,
- deffault = 0.50,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.max_slope_angle",
- editor = PropertyEditorType.ANGLE,
- min = 0.0,
- max = 90.0,
- deffault = 45.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.collision_filter",
- editor = PropertyEditorType.ENUM,
- enum_property = "_global_physics_config",
- enum_callback = collision_filter_enum_callback
- },
- };
- database.create_object_type(OBJECT_TYPE_MOVER
- , properties
- , 2102
- , ObjectTypeFlags.UNIT_COMPONENT
- , OBJECT_TYPE_TRANSFORM
- );
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.skydome_map",
- label = "Skydome Map",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_TEXTURE,
- deffault = "core/units/skydome/skydome"
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.skydome_intensity",
- min = 0.0,
- deffault = 1.0,
- },
- PropertyDefinition()
- {
- type = PropertyType.VECTOR3,
- name = "data.ambient_color",
- editor = PropertyEditorType.COLOR,
- min = VECTOR3_ZERO,
- max = VECTOR3_ONE,
- },
- };
- database.create_object_type(OBJECT_TYPE_GLOBAL_LIGHTING
- , properties
- , 1001
- , ObjectTypeFlags.UNIT_COMPONENT
- );
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "data.enabled",
- deffault = true,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.threshold",
- min = 0.0,
- hidden = true
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.weight",
- min = 0.0,
- max = 1.0,
- deffault = 0.05,
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "data.intensity",
- min = 0.0,
- max = 2.0,
- deffault = 0.8,
- },
- };
- database.create_object_type(OBJECT_TYPE_BLOOM
- , properties
- , 9100
- , ObjectTypeFlags.UNIT_COMPONENT
- );
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "data.type",
- editor = PropertyEditorType.ENUM,
- enum_values = { "gamma", "reinhard", "filmic", "aces" },
- },
- };
- database.create_object_type(OBJECT_TYPE_TONEMAP
- , properties
- , 9900
- , ObjectTypeFlags.UNIT_COMPONENT
- );
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "editor.name",
- },
- };
- database.create_object_type(OBJECT_TYPE_UNIT, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "name",
- editor = PropertyEditorType.RESOURCE,
- resource_type = OBJECT_TYPE_MESH_ANIMATION,
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "weight",
- }
- };
- StringId64 node_animation_type = database.create_object_type(OBJECT_TYPE_NODE_ANIMATION, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "event",
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "mode",
- editor = PropertyEditorType.ENUM,
- enum_values = { "immediate", "wait_until_end" },
- },
- PropertyDefinition()
- {
- type = PropertyType.GUID,
- object_type = StringId64(OBJECT_TYPE_STATE_MACHINE_NODE),
- name = "to",
- },
- };
- StringId64 node_transition_type = database.create_object_type(OBJECT_TYPE_NODE_TRANSITION, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "name",
- deffault = "New Node",
- },
- PropertyDefinition()
- {
- type = PropertyType.OBJECTS_SET,
- name = "animations",
- object_type = node_animation_type,
- },
- PropertyDefinition()
- {
- type = PropertyType.BOOL,
- name = "loop",
- },
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "speed",
- },
- PropertyDefinition()
- {
- type = PropertyType.OBJECTS_SET,
- name = "transitions",
- object_type = node_transition_type,
- },
- };
- StringId64 state_machine_node_type = database.create_object_type(OBJECT_TYPE_STATE_MACHINE_NODE, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.STRING,
- name = "name",
- },
- PropertyDefinition()
- {
- type = PropertyType.DOUBLE,
- name = "value",
- },
- };
- StringId64 state_machine_variable_type = database.create_object_type(OBJECT_TYPE_STATE_MACHINE_VARIABLE, properties);
- properties =
- {
- PropertyDefinition()
- {
- type = PropertyType.GUID,
- object_type = StringId64(OBJECT_TYPE_STATE_MACHINE_NODE),
- name = "initial_state",
- },
- PropertyDefinition()
- {
- type = PropertyType.OBJECTS_SET,
- name = "states",
- object_type = state_machine_node_type,
- },
- PropertyDefinition()
- {
- type = PropertyType.OBJECTS_SET,
- name = "variables",
- object_type = state_machine_variable_type,
- },
- };
- database.create_object_type(OBJECT_TYPE_STATE_MACHINE, properties);
- }
- } /* namespace Crown */
|