diff --git a/addons/omi_extensions/omi_extensions_plugin.gd b/addons/omi_extensions/omi_extensions_plugin.gd index 878d13a..676e1bd 100644 --- a/addons/omi_extensions/omi_extensions_plugin.gd +++ b/addons/omi_extensions/omi_extensions_plugin.gd @@ -2,12 +2,21 @@ extends EditorPlugin +var seat_gizmo_plugin = EditorSeat3DGizmoPlugin.new() + + func _enter_tree() -> void: # NOTE: Be sure to also instance and register these at runtime if you want # the extensions at runtime. This editor plugin script won't run in games. - var ext = GLTFDocumentExtensionOMISeat.new() - GLTFDocument.register_gltf_document_extension(ext) + var ext: GLTFDocumentExtension + ext = GLTFDocumentExtensionOMISeat.new() + GLTFDocument.register_gltf_document_extension(ext, true) ext = GLTFDocumentExtensionOMISpawnPoint.new() GLTFDocument.register_gltf_document_extension(ext) ext = GLTFDocumentExtensionOMIPhysicsJoint.new() GLTFDocument.register_gltf_document_extension(ext) + add_node_3d_gizmo_plugin(seat_gizmo_plugin) + + +func _exit_tree(): + remove_node_3d_gizmo_plugin(seat_gizmo_plugin) diff --git a/addons/omi_extensions/misc/omi_seat.gd b/addons/omi_extensions/seat/omi_seat_doc_ext.gd similarity index 55% rename from addons/omi_extensions/misc/omi_seat.gd rename to addons/omi_extensions/seat/omi_seat_doc_ext.gd index faf36f3..21ae5c6 100644 --- a/addons/omi_extensions/misc/omi_seat.gd +++ b/addons/omi_extensions/seat/omi_seat_doc_ext.gd @@ -3,6 +3,7 @@ class_name GLTFDocumentExtensionOMISeat extends GLTFDocumentExtension +# Import process. func _import_preflight(_state: GLTFState, extensions: PackedStringArray) -> Error: if extensions.has("OMI_seat"): return OK @@ -13,27 +14,46 @@ func _get_supported_extensions() -> PackedStringArray: return PackedStringArray(["OMI_seat"]) -func _import_node(_state: GLTFState, _gltf_node: GLTFNode, json: Dictionary, node: Node) -> Error: - if not json.has("extensions"): - return OK - var extensions = json.get("extensions") - if not extensions is Dictionary: - printerr("Error: GLTF file is invalid, extensions should be a Dictionary.") - return ERR_FILE_CORRUPT +func _parse_node_extensions(state: GLTFState, gltf_node: GLTFNode, extensions: Dictionary) -> Error: if not extensions.has("OMI_seat"): return OK - var seat_dict = extensions.get("OMI_seat") + var seat_dict = extensions["OMI_seat"] if not seat_dict is Dictionary: printerr("Error: OMI_seat extension should be a Dictionary.") return ERR_FILE_CORRUPT - if convert_seat(seat_dict): - node.set_meta(&"OMI_seat", seat_dict) - else: + if not _convert_seat_dict(seat_dict): return ERR_FILE_CORRUPT + gltf_node.set_additional_data(&"OMI_seat", seat_dict) return OK -static func convert_seat(seat_dict: Dictionary) -> bool: +func _generate_scene_node(state: GLTFState, gltf_node: GLTFNode, scene_parent: Node) -> Node3D: + var seat_dict = gltf_node.get_additional_data(&"OMI_seat") + if seat_dict == null: + return null + # If this node is both a seat and a glTF trigger, generate the Area3D-derived Seat3D node. + # Else, if this is not any kind of trigger, don't generate a Seat3D/Area3D, just set node metadata later. + var trigger = gltf_node.get_additional_data(&"GLTFPhysicsTrigger") + if trigger == null: + trigger = gltf_node.get_additional_data(&"GLTFPhysicsCompoundTriggerNodes") + if trigger == null: + trigger = gltf_node.get_additional_data(&"GLTFPhysicsBody") + if trigger == null: + return null + if trigger.body_type != "trigger": + return null + return Seat3D.from_points(seat_dict["back"], seat_dict["foot"], seat_dict["knee"], seat_dict.get("angle", TAU * 0.25)) + + +func _import_node(_state: GLTFState, gltf_node: GLTFNode, json: Dictionary, node: Node) -> Error: + var seat_dict = gltf_node.get_additional_data(&"OMI_seat") + if seat_dict != null: + node.set_meta(&"OMI_seat", seat_dict) + return OK + + +static func _convert_seat_dict(seat_dict: Dictionary) -> bool: + # The JSON data has Vector3s represented as arrays, let's convert them to Vector3. if not _convert_seat_vector(seat_dict, "foot"): return false if not _convert_seat_vector(seat_dict, "knee"): @@ -80,29 +100,45 @@ static func _calculate_helper_vectors(seat_dict: Dictionary) -> void: seat_dict["lower_leg_norm"] = lower_leg_norm +# Export process. func _export_node(state: GLTFState, _gltf_node: GLTFNode, json: Dictionary, node: Node) -> Error: - if node.has_meta(&"OMI_seat"): - var omi_seat_ext: Dictionary = _export_omi_seat(node.get_meta(&"OMI_seat")) - # Write to the GLTF node JSON. - var extensions: Dictionary - if "extensions" in json: - extensions = json["extensions"] - else: - extensions = {} - json["extensions"] = extensions - extensions["OMI_seat"] = omi_seat_ext - state.add_used_extension("OMI_seat", false) + var omi_seat_ext: Dictionary = _export_omi_seat_from_node(node) + if omi_seat_ext.is_empty(): + return OK + # Write to the GLTF node JSON. + var extensions: Dictionary + if "extensions" in json: + extensions = json["extensions"] + else: + extensions = {} + json["extensions"] = extensions + extensions["OMI_seat"] = omi_seat_ext + state.add_used_extension("OMI_seat", false) return OK -func _export_omi_seat(omi_seat_meta: Dictionary) -> Dictionary: - var back: Vector3 = omi_seat_meta["back"] - var foot: Vector3 = omi_seat_meta["foot"] - var knee: Vector3 = omi_seat_meta["knee"] +func _export_omi_seat_from_node(node: Node) -> Dictionary: var omi_seat_ext: Dictionary = {} + var back: Vector3 + var foot: Vector3 + var knee: Vector3 + var angle: float + if node is Seat3D: + back = node.back + foot = node.foot + knee = node.knee + angle = node.angle + elif node.has_meta(&"OMI_seat"): + var omi_seat_meta = node.get_meta(&"OMI_seat") + back = omi_seat_meta["back"] + foot = omi_seat_meta["foot"] + knee = omi_seat_meta["knee"] + angle = omi_seat_meta["angle"] + else: + return omi_seat_ext omi_seat_ext["back"] = [back.x, back.y, back.z] omi_seat_ext["foot"] = [foot.x, foot.y, foot.z] omi_seat_ext["knee"] = [knee.x, knee.y, knee.z] - if not is_equal_approx(omi_seat_meta["angle"], TAU * 0.25): - omi_seat_ext["angle"] = omi_seat_meta["angle"] + if not is_equal_approx(angle, TAU * 0.25): + omi_seat_ext["angle"] = angle return omi_seat_ext diff --git a/addons/omi_extensions/seat/seat_3d.gd b/addons/omi_extensions/seat/seat_3d.gd new file mode 100644 index 0000000..5e4b5cf --- /dev/null +++ b/addons/omi_extensions/seat/seat_3d.gd @@ -0,0 +1,115 @@ +## Defines a seat using a set of control points. Characters can sit on this seat by interacting with it. +@tool +class_name Seat3D +extends Area3D + + +## The character occupying the seat, if any. This is expected to be assigned at runtime. +## Change the type if your characters do not inherit CharacterBody3D. +var occupant: CharacterBody3D + +var _back := Vector3(0.0, 0.0, -0.25) +## The seat position control point corresponding to the character's back position. +@export_custom(PROPERTY_HINT_NONE, "suffix:m") +var back := Vector3(0.0, 0.0, -0.25): + get: + return _back + set(value): + _back = value + _recalculate_helper_vectors() + +var _foot := Vector3(0.0, -0.5, 0.25) +## The seat position control point corresponding to the character's foot position. +@export_custom(PROPERTY_HINT_NONE, "suffix:m") +var foot := Vector3(0.0, -0.5, 0.25): + get: + return _foot + set(value): + _foot = value + _recalculate_helper_vectors() + +var _knee := Vector3(0.0, 0.0, 0.25) +## The seat position control point corresponding to the character's knee position. +@export_custom(PROPERTY_HINT_NONE, "suffix:m") +var knee := Vector3(0.0, 0.0, 0.25): + get: + return _knee + set(value): + _knee = value + _recalculate_helper_vectors() + +var _angle: float = TAU * 0.25 +## The seat angle between the spine and the back-knee line. Recommended values are close to 90 degrees, and going over is better than going under. +@export_range(10.0, 180.0, 0.1, "radians_as_degrees") +var angle: float = TAU * 0.25: + get: + return _angle + set(value): + _angle = value + _recalculate_helper_vectors() + +var _right := Vector3.ZERO +var _spine_dir := Vector3.ZERO +var _spine_norm := Vector3.ZERO +var _upper_leg_dir := Vector3.ZERO +var _upper_leg_norm := Vector3.ZERO +var _lower_leg_dir := Vector3.ZERO +var _lower_leg_norm := Vector3.ZERO + + +func _init() -> void: + _recalculate_helper_vectors() + + +func get_right() -> Vector3: + return _right + + +func get_spine_dir() -> Vector3: + return _spine_dir + + +func get_spine_norm() -> Vector3: + return _spine_norm + + +func get_upper_leg_dir() -> Vector3: + return _upper_leg_dir + + +func get_upper_leg_norm() -> Vector3: + return _upper_leg_norm + + +func get_lower_leg_dir() -> Vector3: + return _lower_leg_dir + + +func get_lower_leg_norm() -> Vector3: + return _lower_leg_norm + + +func set_points(p_back: Vector3, p_foot: Vector3, p_knee: Vector3, p_angle: float = TAU * 0.25) -> void: + _back = p_back + _foot = p_foot + _knee = p_knee + _angle = p_angle + _recalculate_helper_vectors() + + +func _recalculate_helper_vectors() -> void: + _upper_leg_dir = back.direction_to(knee) + _lower_leg_dir = knee.direction_to(foot) + _right = _lower_leg_dir.cross(_upper_leg_dir).normalized() + if _right == Vector3.ZERO: + return + _spine_dir = _upper_leg_dir.rotated(_right, angle) + _spine_norm = _spine_dir.cross(_right) + _upper_leg_norm = _right.cross(_upper_leg_dir) + _lower_leg_norm = _right.cross(_lower_leg_dir) + + +static func from_points(p_back: Vector3, p_foot: Vector3, p_knee: Vector3, p_angle: float = TAU * 0.25) -> Seat3D: + var seat = Seat3D.new() + seat.set_points(p_back, p_foot, p_knee, p_angle) + return seat diff --git a/addons/omi_extensions/seat/seat_gizmo_plugin.gd b/addons/omi_extensions/seat/seat_gizmo_plugin.gd new file mode 100644 index 0000000..a95c863 --- /dev/null +++ b/addons/omi_extensions/seat/seat_gizmo_plugin.gd @@ -0,0 +1,130 @@ +@tool +class_name EditorSeat3DGizmoPlugin +extends EditorNode3DGizmoPlugin + + +const _HANDLE_FOOT: int = 0 +const _HANDLE_KNEE: int = 1 +const _HANDLE_BACK: int = 2 +const _HANDLE_ANGLE: int = 3 +const _SNAP_STEP = 0.01 +const _SNAP_RADIANS = 0.0017453292519943295769 # 0.1 degrees + +var _edited_point_start: Vector3 +var _edited_right_start: Vector3 + + +func _init(): + create_material("main", Color.CYAN) + create_material("cosmetic", Color.YELLOW) + create_handle_material("handles") + + +func _begin_handle_action(gizmo: EditorNode3DGizmo, handle_id: int, secondary: bool) -> void: + var node: Seat3D = gizmo.get_node_3d() + _edited_right_start = node.get_right() + match handle_id: + _HANDLE_FOOT: + _edited_point_start = node.foot + _HANDLE_KNEE: + _edited_point_start = node.knee + _: + _edited_point_start = node.back + + +func _get_gizmo_name() -> String: + return "Seat3DGizmoPlugin" + + +func _get_handle_name(gizmo: EditorNode3DGizmo, handle_id: int, secondary: bool) -> String: + match handle_id: + _HANDLE_FOOT: + return "Foot Control Point" + _HANDLE_KNEE: + return "Knee Control Point" + _HANDLE_BACK: + return "Back Control Point" + _HANDLE_ANGLE: + return "Spine Angle" + return "Error" + + +func _get_handle_value(gizmo: EditorNode3DGizmo, handle_id: int, secondary: bool) -> Variant: + var node: Seat3D = gizmo.get_node_3d() + match handle_id: + _HANDLE_FOOT: + return node.foot + _HANDLE_KNEE: + return node.knee + _HANDLE_BACK: + return node.back + _HANDLE_ANGLE: + return node.angle + return null + + +func _has_gizmo(node: Node3D) -> bool: + return node is Seat3D + + +func _set_handle(gizmo: EditorNode3DGizmo, handle_id: int, secondary: bool, camera: Camera3D, screen_pos: Vector2) -> void: + var node: Seat3D = gizmo.get_node_3d() + var inverse: Transform3D = node.global_transform.affine_inverse() + var project_ray_normal: Vector3 = inverse.basis * camera.project_ray_normal(screen_pos) + var project_ray_origin: Vector3 = inverse * camera.project_ray_origin(screen_pos) + var plane := Plane(_edited_right_start, _edited_point_start) + var intersection = plane.intersects_ray(project_ray_origin, project_ray_normal) + if intersection == null: + return + if plane.has_point(intersection.snappedf(_SNAP_STEP)): + intersection = intersection.snappedf(_SNAP_STEP) + match handle_id: + _HANDLE_FOOT: + node.foot = intersection + if node.get_right() == Vector3.ZERO: + # Oops, that was invalid! Revert. + node.foot = _edited_point_start + _HANDLE_KNEE: + node.knee = intersection + if node.get_right() == Vector3.ZERO: + node.knee = _edited_point_start + _HANDLE_BACK: + node.back = intersection + if node.get_right() == Vector3.ZERO: + node.back = _edited_point_start + _HANDLE_ANGLE: + var back_to_intersection: Vector3 = intersection - node.back + if node.get_upper_leg_norm().dot(back_to_intersection) > 0: + var angle: float = snappedf(node.get_upper_leg_dir().angle_to(back_to_intersection), _SNAP_RADIANS) + node.angle = clampf(angle, deg_to_rad(10.0), deg_to_rad(180.0)) + else: + node.angle = deg_to_rad(10.0) if node.get_upper_leg_dir().dot(back_to_intersection) > 0 else PI + _redraw(gizmo) + + +func _redraw(gizmo: EditorNode3DGizmo): + gizmo.clear() + var node: Seat3D = gizmo.get_node_3d() + var spine_gizmo_length: float = (node.back - node.knee).length() + var angle_gizmo_point: Vector3 = node.back + node.get_spine_dir() * spine_gizmo_length + var main_lines: PackedVector3Array = [ + node.foot, node.knee, + node.back, node.knee, + node.back, angle_gizmo_point, + ] + # Draw cosmetic lines to visually show the seat having a square sitting place. + var cosmetic_right: Vector3 = node.get_right() * (spine_gizmo_length * 0.5) + var cosmetic_lines: PackedVector3Array = [ + node.back + cosmetic_right, node.back - cosmetic_right, + node.knee + cosmetic_right, node.knee - cosmetic_right, + node.foot + cosmetic_right, node.foot - cosmetic_right, + node.back + cosmetic_right, node.knee + cosmetic_right, + node.knee + cosmetic_right, node.foot + cosmetic_right, + node.back - cosmetic_right, node.knee - cosmetic_right, + node.knee - cosmetic_right, node.foot - cosmetic_right, + ] + # Keep these indices consistent with the _HANDLE constants. + var handles: PackedVector3Array = [node.foot, node.knee, node.back, angle_gizmo_point] + gizmo.add_lines(main_lines, get_material("main", gizmo), false) + gizmo.add_lines(cosmetic_lines, get_material("cosmetic", gizmo), false) + gizmo.add_handles(handles, get_material("handles", gizmo), []) diff --git a/examples/omi_physics_body/gltf/ball_pit.gltf.import b/examples/omi_physics_body/gltf/ball_pit.gltf.import index 6dc59fd..7c57b46 100644 --- a/examples/omi_physics_body/gltf/ball_pit.gltf.import +++ b/examples/omi_physics_body/gltf/ball_pit.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/collider_trigger_same_node.gltf.import b/examples/omi_physics_body/gltf/collider_trigger_same_node.gltf.import index f915ba9..52415d6 100644 --- a/examples/omi_physics_body/gltf/collider_trigger_same_node.gltf.import +++ b/examples/omi_physics_body/gltf/collider_trigger_same_node.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/dynamic_box.gltf.import b/examples/omi_physics_body/gltf/dynamic_box.gltf.import index 8ed3b34..8cde439 100644 --- a/examples/omi_physics_body/gltf/dynamic_box.gltf.import +++ b/examples/omi_physics_body/gltf/dynamic_box.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/dynamic_with_velocity.gltf.import b/examples/omi_physics_body/gltf/dynamic_with_velocity.gltf.import index 7f24f18..aafb331 100644 --- a/examples/omi_physics_body/gltf/dynamic_with_velocity.gltf.import +++ b/examples/omi_physics_body/gltf/dynamic_with_velocity.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/indirect_children.gltf.import b/examples/omi_physics_body/gltf/indirect_children.gltf.import index 4a1d925..33f4cf6 100644 --- a/examples/omi_physics_body/gltf/indirect_children.gltf.import +++ b/examples/omi_physics_body/gltf/indirect_children.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/static_body_motion.gltf.import b/examples/omi_physics_body/gltf/static_body_motion.gltf.import index 336f856..d26eed1 100644 --- a/examples/omi_physics_body/gltf/static_body_motion.gltf.import +++ b/examples/omi_physics_body/gltf/static_body_motion.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/static_compound_collider.gltf.import b/examples/omi_physics_body/gltf/static_compound_collider.gltf.import index 93ccf11..51a605d 100644 --- a/examples/omi_physics_body/gltf/static_compound_collider.gltf.import +++ b/examples/omi_physics_body/gltf/static_compound_collider.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/static_with_trigger.gltf.import b/examples/omi_physics_body/gltf/static_with_trigger.gltf.import index ef6f000..0ed5ee2 100644 --- a/examples/omi_physics_body/gltf/static_with_trigger.gltf.import +++ b/examples/omi_physics_body/gltf/static_with_trigger.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/trigger_box.gltf.import b/examples/omi_physics_body/gltf/trigger_box.gltf.import index 069a03d..d5f8ab7 100644 --- a/examples/omi_physics_body/gltf/trigger_box.gltf.import +++ b/examples/omi_physics_body/gltf/trigger_box.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_body/gltf/two_boxes.gltf.import b/examples/omi_physics_body/gltf/two_boxes.gltf.import index d94e838..79ee564 100644 --- a/examples/omi_physics_body/gltf/two_boxes.gltf.import +++ b/examples/omi_physics_body/gltf/two_boxes.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/box_collider.gltf.import b/examples/omi_physics_shape/box_collider.gltf.import index f55a896..aaf2f55 100644 --- a/examples/omi_physics_shape/box_collider.gltf.import +++ b/examples/omi_physics_shape/box_collider.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/capsule_collider.gltf.import b/examples/omi_physics_shape/capsule_collider.gltf.import index 619284c..ca45fe9 100644 --- a/examples/omi_physics_shape/capsule_collider.gltf.import +++ b/examples/omi_physics_shape/capsule_collider.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/convex/convex_hull.gltf.import b/examples/omi_physics_shape/convex/convex_hull.gltf.import index 06d20a7..b1b9dc1 100644 --- a/examples/omi_physics_shape/convex/convex_hull.gltf.import +++ b/examples/omi_physics_shape/convex/convex_hull.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/convex/convex_hull_only.gltf.import b/examples/omi_physics_shape/convex/convex_hull_only.gltf.import index ba3be4c..7e2f668 100644 --- a/examples/omi_physics_shape/convex/convex_hull_only.gltf.import +++ b/examples/omi_physics_shape/convex/convex_hull_only.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/cylinder_collider.gltf.import b/examples/omi_physics_shape/cylinder_collider.gltf.import index f0bb4ce..6bf093c 100644 --- a/examples/omi_physics_shape/cylinder_collider.gltf.import +++ b/examples/omi_physics_shape/cylinder_collider.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/default_box.gltf.import b/examples/omi_physics_shape/default_box.gltf.import index a7e9997..e3363aa 100644 --- a/examples/omi_physics_shape/default_box.gltf.import +++ b/examples/omi_physics_shape/default_box.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/sphere_collider.gltf.import b/examples/omi_physics_shape/sphere_collider.gltf.import index 5352ec4..cf9f597 100644 --- a/examples/omi_physics_shape/sphere_collider.gltf.import +++ b/examples/omi_physics_shape/sphere_collider.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/trimesh/concave_trimesh.gltf.import b/examples/omi_physics_shape/trimesh/concave_trimesh.gltf.import index f723947..c1d17dc 100644 --- a/examples/omi_physics_shape/trimesh/concave_trimesh.gltf.import +++ b/examples/omi_physics_shape/trimesh/concave_trimesh.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_physics_shape/trimesh/concave_trimesh_only.gltf.import b/examples/omi_physics_shape/trimesh/concave_trimesh_only.gltf.import index 90bccf6..91d6b07 100644 --- a/examples/omi_physics_shape/trimesh/concave_trimesh_only.gltf.import +++ b/examples/omi_physics_shape/trimesh/concave_trimesh_only.gltf.import @@ -32,8 +32,5 @@ animation/remove_immutable_tracks=true animation/import_rest_as_RESET=false import_script/path="" _subresources={} -fbx/importer=0 -fbx/allow_geometry_helper_nodes=false -fbx/embedded_image_handling=1 gltf/naming_version=1 gltf/embedded_image_handling=1 diff --git a/examples/omi_seat/gltf/recliner_chair_with_trigger.gltf b/examples/omi_seat/gltf/recliner_chair_with_trigger.gltf new file mode 100644 index 0000000..d9e5da9 --- /dev/null +++ b/examples/omi_seat/gltf/recliner_chair_with_trigger.gltf @@ -0,0 +1,130 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v3.4.50 (manually modified with seat data and physics data)", + "version": "2.0" + }, + "extensionsUsed": ["GODOT_single_root", "OMI_physics_body", "OMI_physics_shape", "OMI_seat"], + "extensions": { + "OMI_physics_shape": { + "shapes": [ + { + "type": "box", + "box": { + "size": [0.5, 1, 1] + } + } + ] + } + }, + "nodes": [ + { + "children": [1, 2], + "name": "ReclinerChairWithTrigger", + "extensions": { + "OMI_physics_body": { + "trigger": { + "nodes": [2] + } + }, + "OMI_seat": { + "back": [0, 0.33, -0.247], + "foot": [0, -0.17, 0.8], + "knee": [0, 0.33, 0.3], + "angle": 2.0943951 + } + } + }, + { + "mesh": 0, + "name": "ReclinerChairFullMesh" + }, + { + "name": "ReclinerChairShape", + "translation": [0, 0.5, 0], + "extensions": { + "OMI_physics_body": { + "trigger": { + "shape": 0 + } + } + } + } + ], + "scene": 0, + "scenes": [{ "nodes": [0] }], + "meshes": [ + { + "name": "ReclinerChairMesh", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "TEXCOORD_0": 1, + "NORMAL": 2 + }, + "indices": 3 + } + ] + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 184, + "max": [0.30000001192092896, 0.9351986050605774, 0.6531219482421875], + "min": [-0.30000001192092896, -0.25, -0.6483013033866882], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 184, + "type": "VEC2" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 184, + "type": "VEC3" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 276, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 2208, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1472, + "byteOffset": 2208, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2208, + "byteOffset": 3680, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 552, + "byteOffset": 5888, + "target": 34963 + } + ], + "buffers": [ + { + "byteLength": 6440, + "uri": "data:application/octet-stream;base64,mpmZvnI9ij6amZk+mpmZvnI9ij6amZk+mpmZvnI9ij6amZk+mpmZvsL1qD6amZk+mpmZvsL1qD6amZk+mpmZvsL1qD6amZk+mpmZvnI9ij6amZm+mpmZvnI9ij6amZm+mpmZvnI9ij6amZm+mpmZvsL1qD6amZm+mpmZvsL1qD6amZm+mpmZvsL1qD6amZm+mpmZPnI9ij6amZk+mpmZPnI9ij6amZk+mpmZPnI9ij6amZk+mpmZPsL1qD6amZk+mpmZPsL1qD6amZk+mpmZPsL1qD6amZk+mpmZPnI9ij6amZm+mpmZPnI9ij6amZm+mpmZPnI9ij6amZm+mpmZPsL1qD6amZm+mpmZPsL1qD6amZm+mpmZPsL1qD6amZm+mZmZvgAAgL6ZmZk+mZmZvgAAgL6ZmZk+mZmZvgAAgL6ZmZk+mZmZvnE9ij6ZmZk+mZmZvnE9ij6ZmZk+mZmZvgAAgL6SwnU+mZmZvgAAgL6SwnU+mZmZvgAAgL6SwnU+mZmZvnE9ij6SwnU+mZmZvnE9ij6SwnU+ksJ1vgAAgL6ZmZk+ksJ1vgAAgL6ZmZk+ksJ1vgAAgL6ZmZk+ksJ1vnE9ij6ZmZk+ksJ1vnE9ij6ZmZk+ksJ1vgAAgL6SwnU+ksJ1vgAAgL6SwnU+ksJ1vgAAgL6SwnU+ksJ1vnE9ij6SwnU+ksJ1vnE9ij6SwnU+ksJ1PgAAgL6ZmZk+ksJ1PgAAgL6ZmZk+ksJ1PgAAgL6ZmZk+ksJ1PnE9ij6ZmZk+ksJ1PnE9ij6ZmZk+ksJ1PgAAgL6SwnU+ksJ1PgAAgL6SwnU+ksJ1PgAAgL6SwnU+ksJ1PnE9ij6SwnU+ksJ1PnE9ij6SwnU+mZmZPgAAgL6ZmZk+mZmZPgAAgL6ZmZk+mZmZPgAAgL6ZmZk+mZmZPnE9ij6ZmZk+mZmZPnE9ij6ZmZk+mZmZPgAAgL6SwnU+mZmZPgAAgL6SwnU+mZmZPgAAgL6SwnU+mZmZPnE9ij6SwnU+mZmZPnE9ij6SwnU+mZmZvgAAgL6SwnW+mZmZvgAAgL6SwnW+mZmZvgAAgL6SwnW+mZmZvnE9ij6SwnW+mZmZvnE9ij6SwnW+mZmZvgAAgL6ZmZm+mZmZvgAAgL6ZmZm+mZmZvgAAgL6ZmZm+mZmZvnE9ij6ZmZm+mZmZvnE9ij6ZmZm+ksJ1vgAAgL6SwnW+ksJ1vgAAgL6SwnW+ksJ1vgAAgL6SwnW+ksJ1vnE9ij6SwnW+ksJ1vnE9ij6SwnW+ksJ1vgAAgL6ZmZm+ksJ1vgAAgL6ZmZm+ksJ1vgAAgL6ZmZm+ksJ1vnE9ij6ZmZm+ksJ1vnE9ij6ZmZm+ksJ1PgAAgL6SwnW+ksJ1PgAAgL6SwnW+ksJ1PgAAgL6SwnW+ksJ1PnE9ij6SwnW+ksJ1PnE9ij6SwnW+ksJ1PgAAgL6ZmZm+ksJ1PgAAgL6ZmZm+ksJ1PgAAgL6ZmZm+ksJ1PnE9ij6ZmZm+ksJ1PnE9ij6ZmZm+mZmZPgAAgL6SwnW+mZmZPgAAgL6SwnW+mZmZPgAAgL6SwnW+mZmZPnE9ij6SwnW+mZmZPnE9ij6SwnW+mZmZPgAAgL6ZmZm+mZmZPgAAgL6ZmZm+mZmZPgAAgL6ZmZm+mZmZPnE9ij6ZmZm+mZmZPnE9ij6ZmZm+AACAvlXH1D7ZuZe+AACAvlXH1D7ZuZe+AACAvlXH1D7ZuZe+AACAvi1pbz+6qRi/AACAvi1pbz+6qRi/AACAvi1pbz+6qRi/AACAvi1rxT6LVLK+AACAvi1rxT6LVLK+AACAvi1rxT6LVLK+AACAvhm7Zz8T9yW/AACAvhm7Zz8T9yW/AACAvhm7Zz8T9yW/AACAPlXH1D7ZuZe+AACAPlXH1D7ZuZe+AACAPlXH1D7ZuZe+AACAPi1pbz+6qRi/AACAPi1pbz+6qRi/AACAPi1pbz+6qRi/AACAPi1rxT6LVLK+AACAPi1rxT6LVLK+AACAPi1rxT6LVLK+AACAPhm7Zz8T9yW/AACAPhm7Zz8T9yW/AACAPhm7Zz8T9yW/AAAAvilwqD59QHy+AAAAvilwqD59QHy+AAAAvlXH1D7ZuZe+AAAAvlXH1D7ZuZe+AAAAvgEUmT7xupi+AAAAvgEUmT7xupi+AAAAvi1rxT6LVLK+AAAAvi1rxT6LVLK+AAAAPilwqD59QHy+AAAAPilwqD59QHy+AAAAPlXH1D7ZuZe+AAAAPlXH1D7ZuZe+AAAAPgEUmT7xupi+AAAAPgEUmT7xupi+AAAAPi1rxT6LVLK+AAAAPi1rxT6LVLK+AACAvigCXj5U3Kc+AACAvigCXj5U3Kc+AACAvigCXj5U3Kc+AACAvsg+h72LVhw/AACAvsg+h72LVhw/AACAvsg+h72LVhw/AACAvvy5hD49lb0+AACAvvy5hD49lb0+AACAvvy5hD49lb0+AACAvoBswbwAMyc/AACAvoBswbwAMyc/AACAvoBswbwAMyc/AACAPigCXj5U3Kc+AACAPigCXj5U3Kc+AACAPigCXj5U3Kc+AACAPsg+h72LVhw/AACAPsg+h72LVhw/AACAPsg+h72LVhw/AACAPvy5hD49lb0+AACAPvy5hD49lb0+AACAPvy5hD49lb0+AACAPoBswbwAMyc/AACAPoBswbwAMyc/AACAPoBswbwAMyc/AAAAvkU1kz4jqIM+AAAAvkU1kz4jqIM+AAAAvigCXj5U3Kc+AAAAvigCXj5U3Kc+AAAAvi7uqD4LYZk+AAAAvi7uqD4LYZk+AAAAvvy5hD49lb0+AAAAvvy5hD49lb0+AAAAPkU1kz4jqIM+AAAAPkU1kz4jqIM+AAAAPigCXj5U3Kc+AAAAPigCXj5U3Kc+AAAAPi7uqD4LYZk+AAAAPi7uqD4LYZk+AAAAPvy5hD49lb0+AAAAPvy5hD49lb0+AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAYD8AAIA+AAAAPgAAAD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAAD4AAIA+AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAAA+AAAAPwAAwD4AAEA/AADAPgAAQD8AACA/AABAPwAAID8AAEA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AAAA+AACAPgAAwD4AAAAAAADAPgAAgD8AACA/AAAAAAAAID8AAIA/AAAAPgAAAD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAID8AAIA+AAAgPwAAgD4AAMA+AAAAPwAAwD4AAAA/AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAAD4AAIA+AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAGA/AACAPgAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAGA/AAAAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAID8AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAwD4AAAAAAADAPgAAgD8AACA/AAAAAAAAID8AAIA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAYD8AAIA+AAAAPgAAAD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIC/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAAAAAACAvwAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAAAAAAAAAAgL8AAIA/AAAAAAAAAIAAAAAA2LNdv////z4AAAAAAAAAP9azXT8AAIC/AAAAAAAAAIAAAAAAAAAAP9azXT8AAIC/AAAAAAAAAIAAAAAA2LNdP////74AAAAA2LNdv////z4AAIC/AAAAAAAAAIAAAAAAAAAAv9azXb8AAIC/AAAAAAAAAIAAAAAAAAAAv9azXb8AAAAA2LNdP////74AAAAA2LNdv////z4AAAAAAAAAP9azXT8AAIA/AAAAAAAAAIAAAAAAAAAAP9azXT8AAAAA2LNdP////74AAIA/AAAAAAAAAIAAAAAA2LNdv////z4AAAAAAAAAv9azXb8AAIA/AAAAAAAAAIAAAAAAAAAAv9azXb8AAAAA2LNdP////74AAIA/AAAAAAAAAIAAAAAAAQAAP9azXT8AAIC/AAAAAAAAAIAAAAAAAQAAP9azXT8AAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA////vtizXb8AAIC/AAAAAAAAAIAAAAAA////vtizXb8AAAAAAQAAP9azXT8AAIA/AAAAAAAAAIAAAAAAAQAAP9azXT8AAIA/AAAAAAAAAIAAAAAA////vtizXb8AAIA/AAAAAAAAAIAAAAAA////vtizXb8AAIA/AAAAAAAAAIAAAAAA9wQ1P+4ENb8AAAAA8AQ1v/UENb8AAIC/AAAAAAAAAIAAAAAA8AQ1v/UENb8AAIC/AAAAAAAAAIAAAAAA8wQ1v/MENT8AAAAA9wQ1P+4ENb8AAIC/AAAAAAAAAIAAAAAA8wQ1P/QENT8AAIC/AAAAAAAAAIAAAAAA8wQ1P/QENT8AAAAA8wQ1v/MENT8AAAAA8AQ1v/UENb8AAAAA9wQ1P+4ENb8AAIA/AAAAAAAAAIAAAAAA8wQ1v/MENT8AAAAA8AQ1v/UENb8AAIA/AAAAAAAAAIAAAAAA8wQ1P/QENT8AAAAA9wQ1P+4ENb8AAIA/AAAAAAAAAIAAAAAA8wQ1v/MENT8AAAAA8wQ1P/QENT8AAIA/AAAAAAAAAIAAAAAA8wQ1v/MENb8AAIC/AAAAAAAAAIAAAAAA8wQ1v/MENb8AAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAA8wQ1P/MENT8AAIC/AAAAAAAAAIAAAAAA8wQ1P/MENT8AAAAA8wQ1v/MENb8AAIA/AAAAAAAAAIAAAAAA8wQ1v/MENb8AAIA/AAAAAAAAAIAAAAAA8wQ1P/MENT8AAIA/AAAAAAAAAIAAAAAA8wQ1P/MENT8AAIA/AAAAAAAAAIACAAQACQACAAkABwAIAAoAFQAIABUAEwAUABcAEQAUABEADgANAA8AAwANAAMAAQAGABIADAAGAAwAAAAWAAsABQAWAAUAEAAaABwAIAAaACAAHgAfACEAKgAfACoAKAApACsAJgApACYAJAAjACUAGwAjABsAGQAdACcAIgAdACIAGABHAEkAUgBHAFIAUAAuADAANAAuADQAMgAzADUAPgAzAD4APAA9AD8AOgA9ADoAOAA3ADkALwA3AC8ALQAxADsANgAxADYALABCAEQASABCAEgARgBRAFMATgBRAE4ATABLAE0AQwBLAEMAQQBFAE8ASgBFAEoAQABWAFgAXABWAFwAWgBbAF0AZgBbAGYAZABlAGcAYgBlAGIAYABfAGEAVwBfAFcAVQBZAGMAXgBZAF4AVABqAGwAcQBqAHEAbwBwAHIAfQBwAH0AewB8AH8AeQB8AHkAdgB1AHcAawB1AGsAaQBuAHoAdABuAHQAaAB+AHMAbQB+AG0AeACBAIMAhgCBAIYAhACFAIcAjgCFAI4AjACNAI8AiwCNAIsAiQCIAIoAggCIAIIAgACSAJQAmQCSAJkAlwCYAJoApgCYAKYAogCkAKcAoQCkAKEAngCcAKAAkwCcAJMAkQCWAKMAnQCWAJ0AkAClAJsAlQClAJUAnwCpAKsArgCpAK4ArACtAK8AtgCtALYAtAC1ALcAswC1ALMAsQCwALIAqgCwAKoAqAA=" + } + ] +} diff --git a/examples/omi_seat/gltf/recliner_chair_with_trigger.gltf.import b/examples/omi_seat/gltf/recliner_chair_with_trigger.gltf.import new file mode 100644 index 0000000..722cbbe --- /dev/null +++ b/examples/omi_seat/gltf/recliner_chair_with_trigger.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bktisttcq888v" +path="res://.godot/imported/recliner_chair_with_trigger.gltf-cf3aa85ea6d2a35d6b49fc91ee3e86d7.scn" + +[deps] + +source_file="res://examples/omi_seat/gltf/recliner_chair_with_trigger.gltf" +dest_files=["res://.godot/imported/recliner_chair_with_trigger.gltf-cf3aa85ea6d2a35d6b49fc91ee3e86d7.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/examples/omi_seat/gltf/simple_chair_no_trigger.gltf b/examples/omi_seat/gltf/simple_chair_no_trigger.gltf new file mode 100644 index 0000000..75583dd --- /dev/null +++ b/examples/omi_seat/gltf/simple_chair_no_trigger.gltf @@ -0,0 +1,101 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v3.4.50 (manually modified with seat data and physics data)", + "version": "2.0" + }, + "extensionsUsed": ["GODOT_single_root", "OMI_seat"], + "nodes": [ + { + "children": [1], + "name": "SimpleChairNoTrigger", + "extensions": { + "OMI_seat": { + "back": [0, 0.33, -0.24], + "foot": [0, -0.25, 0.3], + "knee": [0, 0.33, 0.3] + } + } + }, + { + "mesh": 0, + "name": "SimpleChairMesh" + } + ], + "scene": 0, + "scenes": [{ "nodes": [0] }], + "meshes": [ + { + "name": "SimpleChairMesh", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "TEXCOORD_0": 1, + "NORMAL": 2 + }, + "indices": 3 + } + ] + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 144, + "max": [0.30000001192092896, 1.03000009059906, 0.30000001192092896], + "min": [-0.30000001192092896, -0.25, -0.30000001192092896], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 144, + "type": "VEC2" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 144, + "type": "VEC3" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 216, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 1728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 2880, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 4608, + "target": 34963 + } + ], + "buffers": [ + { + "byteLength": 5040, + "uri": "data:application/octet-stream;base64,mpmZvnI9ij6amZk+mpmZvnI9ij6amZk+mpmZvnI9ij6amZk+mpmZvsL1qD6amZk+mpmZvsL1qD6amZk+mpmZvsL1qD6amZk+mpmZvnI9ij6amZm+mpmZvnI9ij6amZm+mpmZvnI9ij6amZm+mpmZvsL1qD6amZm+mpmZvsL1qD6amZm+mpmZvsL1qD6amZm+mpmZPnI9ij6amZk+mpmZPnI9ij6amZk+mpmZPnI9ij6amZk+mpmZPsL1qD6amZk+mpmZPsL1qD6amZk+mpmZPsL1qD6amZk+mpmZPnI9ij6amZm+mpmZPnI9ij6amZm+mpmZPnI9ij6amZm+mpmZPsL1qD6amZm+mpmZPsL1qD6amZm+mpmZPsL1qD6amZm+mZmZvgAAgL6ZmZk+mZmZvgAAgL6ZmZk+mZmZvgAAgL6ZmZk+mZmZvnE9ij6ZmZk+mZmZvnE9ij6ZmZk+mZmZvgAAgL6SwnU+mZmZvgAAgL6SwnU+mZmZvgAAgL6SwnU+mZmZvnE9ij6SwnU+mZmZvnE9ij6SwnU+ksJ1vgAAgL6ZmZk+ksJ1vgAAgL6ZmZk+ksJ1vgAAgL6ZmZk+ksJ1vnE9ij6ZmZk+ksJ1vnE9ij6ZmZk+ksJ1vgAAgL6SwnU+ksJ1vgAAgL6SwnU+ksJ1vgAAgL6SwnU+ksJ1vnE9ij6SwnU+ksJ1vnE9ij6SwnU+ksJ1PgAAgL6ZmZk+ksJ1PgAAgL6ZmZk+ksJ1PgAAgL6ZmZk+ksJ1PnE9ij6ZmZk+ksJ1PnE9ij6ZmZk+ksJ1PgAAgL6SwnU+ksJ1PgAAgL6SwnU+ksJ1PgAAgL6SwnU+ksJ1PnE9ij6SwnU+ksJ1PnE9ij6SwnU+mZmZPgAAgL6ZmZk+mZmZPgAAgL6ZmZk+mZmZPgAAgL6ZmZk+mZmZPnE9ij6ZmZk+mZmZPnE9ij6ZmZk+mZmZPgAAgL6SwnU+mZmZPgAAgL6SwnU+mZmZPgAAgL6SwnU+mZmZPnE9ij6SwnU+mZmZPnE9ij6SwnU+mZmZvgAAgL6SwnW+mZmZvgAAgL6SwnW+mZmZvgAAgL6SwnW+mZmZvnE9ij6SwnW+mZmZvnE9ij6SwnW+mZmZvgAAgL6ZmZm+mZmZvgAAgL6ZmZm+mZmZvgAAgL6ZmZm+mZmZvnE9ij6ZmZm+mZmZvnE9ij6ZmZm+ksJ1vgAAgL6SwnW+ksJ1vgAAgL6SwnW+ksJ1vgAAgL6SwnW+ksJ1vnE9ij6SwnW+ksJ1vnE9ij6SwnW+ksJ1vgAAgL6ZmZm+ksJ1vgAAgL6ZmZm+ksJ1vgAAgL6ZmZm+ksJ1vnE9ij6ZmZm+ksJ1vnE9ij6ZmZm+ksJ1PgAAgL6SwnW+ksJ1PgAAgL6SwnW+ksJ1PgAAgL6SwnW+ksJ1PnE9ij6SwnW+ksJ1PnE9ij6SwnW+ksJ1PgAAgL6ZmZm+ksJ1PgAAgL6ZmZm+ksJ1PgAAgL6ZmZm+ksJ1PnE9ij6ZmZm+ksJ1PnE9ij6ZmZm+mZmZPgAAgL6SwnW+mZmZPgAAgL6SwnW+mZmZPgAAgL6SwnW+mZmZPnE9ij6SwnW+mZmZPnE9ij6SwnW+mZmZPgAAgL6ZmZm+mZmZPgAAgL6ZmZm+mZmZPgAAgL6ZmZm+mZmZPnE9ij6ZmZm+mZmZPnE9ij6ZmZm+AACAvvYo3D6SwnW+AACAvvYo3D6SwnW+AACAvvYo3D6SwnW+AACAvgvXgz+SwnW+AACAvgvXgz+SwnW+AACAvgvXgz+SwnW+AACAvvYo3D6ZmZm+AACAvvYo3D6ZmZm+AACAvvYo3D6ZmZm+AACAvgvXgz+ZmZm+AACAvgvXgz+ZmZm+AACAvgvXgz+ZmZm+AACAPvYo3D6SwnW+AACAPvYo3D6SwnW+AACAPvYo3D6SwnW+AACAPgvXgz+SwnW+AACAPgvXgz+SwnW+AACAPgvXgz+SwnW+AACAPvYo3D6ZmZm+AACAPvYo3D6ZmZm+AACAPvYo3D6ZmZm+AACAPgvXgz+ZmZm+AACAPgvXgz+ZmZm+AACAPgvXgz+ZmZm+AAAAvsL1qD6SwnW+AAAAvsL1qD6SwnW+AAAAvvYo3D6SwnW+AAAAvvYo3D6SwnW+AAAAvsL1qD6ZmZm+AAAAvsL1qD6ZmZm+AAAAvvYo3D6ZmZm+AAAAvvYo3D6ZmZm+AAAAPsL1qD6SwnW+AAAAPsL1qD6SwnW+AAAAPvYo3D6SwnW+AAAAPvYo3D6SwnW+AAAAPsL1qD6ZmZm+AAAAPsL1qD6ZmZm+AAAAPvYo3D6ZmZm+AAAAPvYo3D6ZmZm+AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAYD8AAIA+AAAAPgAAAD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAAD4AAIA+AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAAA+AAAAPwAAwD4AAEA/AADAPgAAQD8AACA/AABAPwAAID8AAEA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AAAA+AACAPgAAwD4AAAAAAADAPgAAgD8AACA/AAAAAAAAID8AAIA/AAAAPgAAAD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAID8AAIA+AAAgPwAAgD4AAMA+AAAAPwAAwD4AAAA/AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAAD4AAIA+AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAGA/AACAPgAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAGA/AAAAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAID8AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAwD4AAAAAAADAPgAAgD8AACA/AAAAAAAAID8AAIA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAgAEAAkAAgAJAAcACAAKABUACAAVABMAFAAXABEAFAARAA4ADQAPAAMADQADAAEABgASAAwABgAMAAAAFgALAAUAFgAFABAAGgAcACAAGgAgAB4AHwAhACoAHwAqACgAKQArACYAKQAmACQAIwAlABsAIwAbABkAHQAnACIAHQAiABgARwBJAFIARwBSAFAALgAwADQALgA0ADIAMwA1AD4AMwA+ADwAPQA/ADoAPQA6ADgANwA5AC8ANwAvAC0AMQA7ADYAMQA2ACwAQgBEAEgAQgBIAEYAUQBTAE4AUQBOAEwASwBNAEMASwBDAEEARQBPAEoARQBKAEAAVgBYAFwAVgBcAFoAWwBdAGYAWwBmAGQAZQBnAGIAZQBiAGAAXwBhAFcAXwBXAFUAWQBjAF4AWQBeAFQAagBsAHEAagBxAG8AcAByAH0AcAB9AHsAfAB/AHkAfAB5AHYAdQB3AGsAdQBrAGkAbgB6AHQAbgB0AGgAfgBzAG0AfgBtAHgAgQCDAIYAgQCGAIQAhQCHAI4AhQCOAIwAjQCPAIsAjQCLAIkAiACKAIIAiACCAIAA" + } + ] +} diff --git a/examples/omi_seat/gltf/simple_chair_no_trigger.gltf.import b/examples/omi_seat/gltf/simple_chair_no_trigger.gltf.import new file mode 100644 index 0000000..721eeae --- /dev/null +++ b/examples/omi_seat/gltf/simple_chair_no_trigger.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dh6vy8cbr4dp4" +path="res://.godot/imported/simple_chair_no_trigger.gltf-c7fa53331cb365a27a3b42143aaeef92.scn" + +[deps] + +source_file="res://examples/omi_seat/gltf/simple_chair_no_trigger.gltf" +dest_files=["res://.godot/imported/simple_chair_no_trigger.gltf-c7fa53331cb365a27a3b42143aaeef92.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/examples/omi_seat/gltf/simple_chair_with_trigger.gltf b/examples/omi_seat/gltf/simple_chair_with_trigger.gltf new file mode 100644 index 0000000..0b475ab --- /dev/null +++ b/examples/omi_seat/gltf/simple_chair_with_trigger.gltf @@ -0,0 +1,129 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v3.4.50 (manually modified with seat data)", + "version": "2.0" + }, + "extensionsUsed": ["GODOT_single_root", "OMI_physics_body", "OMI_physics_shape", "OMI_seat"], + "extensions": { + "OMI_physics_shape": { + "shapes": [ + { + "type": "box", + "box": { + "size": [0.5, 1, 1] + } + } + ] + } + }, + "nodes": [ + { + "children": [1, 2], + "name": "SimpleChairWithTrigger", + "extensions": { + "OMI_physics_body": { + "trigger": { + "nodes": [2] + } + }, + "OMI_seat": { + "back": [0, 0.33, -0.24], + "foot": [0, -0.25, 0.3], + "knee": [0, 0.33, 0.3] + } + } + }, + { + "mesh": 0, + "name": "SimpleChairMesh" + }, + { + "name": "SimpleChairShape", + "translation": [0, 0.5, 0], + "extensions": { + "OMI_physics_body": { + "trigger": { + "shape": 0 + } + } + } + } + ], + "scene": 0, + "scenes": [{ "nodes": [0] }], + "meshes": [ + { + "name": "SimpleChairMesh", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "TEXCOORD_0": 1, + "NORMAL": 2 + }, + "indices": 3 + } + ] + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 144, + "max": [0.30000001192092896, 1.03000009059906, 0.30000001192092896], + "min": [-0.30000001192092896, -0.25, -0.30000001192092896], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 144, + "type": "VEC2" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 144, + "type": "VEC3" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 216, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 1728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 2880, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 4608, + "target": 34963 + } + ], + "buffers": [ + { + "byteLength": 5040, + "uri": "data:application/octet-stream;base64,mpmZvnI9ij6amZk+mpmZvnI9ij6amZk+mpmZvnI9ij6amZk+mpmZvsL1qD6amZk+mpmZvsL1qD6amZk+mpmZvsL1qD6amZk+mpmZvnI9ij6amZm+mpmZvnI9ij6amZm+mpmZvnI9ij6amZm+mpmZvsL1qD6amZm+mpmZvsL1qD6amZm+mpmZvsL1qD6amZm+mpmZPnI9ij6amZk+mpmZPnI9ij6amZk+mpmZPnI9ij6amZk+mpmZPsL1qD6amZk+mpmZPsL1qD6amZk+mpmZPsL1qD6amZk+mpmZPnI9ij6amZm+mpmZPnI9ij6amZm+mpmZPnI9ij6amZm+mpmZPsL1qD6amZm+mpmZPsL1qD6amZm+mpmZPsL1qD6amZm+mZmZvgAAgL6ZmZk+mZmZvgAAgL6ZmZk+mZmZvgAAgL6ZmZk+mZmZvnE9ij6ZmZk+mZmZvnE9ij6ZmZk+mZmZvgAAgL6SwnU+mZmZvgAAgL6SwnU+mZmZvgAAgL6SwnU+mZmZvnE9ij6SwnU+mZmZvnE9ij6SwnU+ksJ1vgAAgL6ZmZk+ksJ1vgAAgL6ZmZk+ksJ1vgAAgL6ZmZk+ksJ1vnE9ij6ZmZk+ksJ1vnE9ij6ZmZk+ksJ1vgAAgL6SwnU+ksJ1vgAAgL6SwnU+ksJ1vgAAgL6SwnU+ksJ1vnE9ij6SwnU+ksJ1vnE9ij6SwnU+ksJ1PgAAgL6ZmZk+ksJ1PgAAgL6ZmZk+ksJ1PgAAgL6ZmZk+ksJ1PnE9ij6ZmZk+ksJ1PnE9ij6ZmZk+ksJ1PgAAgL6SwnU+ksJ1PgAAgL6SwnU+ksJ1PgAAgL6SwnU+ksJ1PnE9ij6SwnU+ksJ1PnE9ij6SwnU+mZmZPgAAgL6ZmZk+mZmZPgAAgL6ZmZk+mZmZPgAAgL6ZmZk+mZmZPnE9ij6ZmZk+mZmZPnE9ij6ZmZk+mZmZPgAAgL6SwnU+mZmZPgAAgL6SwnU+mZmZPgAAgL6SwnU+mZmZPnE9ij6SwnU+mZmZPnE9ij6SwnU+mZmZvgAAgL6SwnW+mZmZvgAAgL6SwnW+mZmZvgAAgL6SwnW+mZmZvnE9ij6SwnW+mZmZvnE9ij6SwnW+mZmZvgAAgL6ZmZm+mZmZvgAAgL6ZmZm+mZmZvgAAgL6ZmZm+mZmZvnE9ij6ZmZm+mZmZvnE9ij6ZmZm+ksJ1vgAAgL6SwnW+ksJ1vgAAgL6SwnW+ksJ1vgAAgL6SwnW+ksJ1vnE9ij6SwnW+ksJ1vnE9ij6SwnW+ksJ1vgAAgL6ZmZm+ksJ1vgAAgL6ZmZm+ksJ1vgAAgL6ZmZm+ksJ1vnE9ij6ZmZm+ksJ1vnE9ij6ZmZm+ksJ1PgAAgL6SwnW+ksJ1PgAAgL6SwnW+ksJ1PgAAgL6SwnW+ksJ1PnE9ij6SwnW+ksJ1PnE9ij6SwnW+ksJ1PgAAgL6ZmZm+ksJ1PgAAgL6ZmZm+ksJ1PgAAgL6ZmZm+ksJ1PnE9ij6ZmZm+ksJ1PnE9ij6ZmZm+mZmZPgAAgL6SwnW+mZmZPgAAgL6SwnW+mZmZPgAAgL6SwnW+mZmZPnE9ij6SwnW+mZmZPnE9ij6SwnW+mZmZPgAAgL6ZmZm+mZmZPgAAgL6ZmZm+mZmZPgAAgL6ZmZm+mZmZPnE9ij6ZmZm+mZmZPnE9ij6ZmZm+AACAvvYo3D6SwnW+AACAvvYo3D6SwnW+AACAvvYo3D6SwnW+AACAvgvXgz+SwnW+AACAvgvXgz+SwnW+AACAvgvXgz+SwnW+AACAvvYo3D6ZmZm+AACAvvYo3D6ZmZm+AACAvvYo3D6ZmZm+AACAvgvXgz+ZmZm+AACAvgvXgz+ZmZm+AACAvgvXgz+ZmZm+AACAPvYo3D6SwnW+AACAPvYo3D6SwnW+AACAPvYo3D6SwnW+AACAPgvXgz+SwnW+AACAPgvXgz+SwnW+AACAPgvXgz+SwnW+AACAPvYo3D6ZmZm+AACAPvYo3D6ZmZm+AACAPvYo3D6ZmZm+AACAPgvXgz+ZmZm+AACAPgvXgz+ZmZm+AACAPgvXgz+ZmZm+AAAAvsL1qD6SwnW+AAAAvsL1qD6SwnW+AAAAvvYo3D6SwnW+AAAAvvYo3D6SwnW+AAAAvsL1qD6ZmZm+AAAAvsL1qD6ZmZm+AAAAvvYo3D6ZmZm+AAAAvvYo3D6ZmZm+AAAAPsL1qD6SwnW+AAAAPsL1qD6SwnW+AAAAPvYo3D6SwnW+AAAAPvYo3D6SwnW+AAAAPsL1qD6ZmZm+AAAAPsL1qD6ZmZm+AAAAPvYo3D6ZmZm+AAAAPvYo3D6ZmZm+AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAYD8AAIA+AAAAPgAAAD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAAD4AAIA+AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAAA+AAAAPwAAwD4AAEA/AADAPgAAQD8AACA/AABAPwAAID8AAEA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AAAA+AACAPgAAwD4AAAAAAADAPgAAgD8AACA/AAAAAAAAID8AAIA/AAAAPgAAAD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAID8AAIA+AAAgPwAAgD4AAMA+AAAAPwAAwD4AAAA/AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AAAAPgAAgD4AAMA+AAAAAAAAwD4AAIA/AAAgPwAAAAAAACA/AACAPwAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AADAPgAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAAD4AAIA+AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAGA/AACAPgAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAGA/AAAAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAID8AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAwD4AAAAAAADAPgAAgD8AACA/AAAAAAAAID8AAIA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AACA/AAAAPwAAID8AAAA/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAgAEAAkAAgAJAAcACAAKABUACAAVABMAFAAXABEAFAARAA4ADQAPAAMADQADAAEABgASAAwABgAMAAAAFgALAAUAFgAFABAAGgAcACAAGgAgAB4AHwAhACoAHwAqACgAKQArACYAKQAmACQAIwAlABsAIwAbABkAHQAnACIAHQAiABgARwBJAFIARwBSAFAALgAwADQALgA0ADIAMwA1AD4AMwA+ADwAPQA/ADoAPQA6ADgANwA5AC8ANwAvAC0AMQA7ADYAMQA2ACwAQgBEAEgAQgBIAEYAUQBTAE4AUQBOAEwASwBNAEMASwBDAEEARQBPAEoARQBKAEAAVgBYAFwAVgBcAFoAWwBdAGYAWwBmAGQAZQBnAGIAZQBiAGAAXwBhAFcAXwBXAFUAWQBjAF4AWQBeAFQAagBsAHEAagBxAG8AcAByAH0AcAB9AHsAfAB/AHkAfAB5AHYAdQB3AGsAdQBrAGkAbgB6AHQAbgB0AGgAfgBzAG0AfgBtAHgAgQCDAIYAgQCGAIQAhQCHAI4AhQCOAIwAjQCPAIsAjQCLAIkAiACKAIIAiACCAIAA" + } + ] +} diff --git a/examples/omi_seat/gltf/simple_chair_with_trigger.gltf.import b/examples/omi_seat/gltf/simple_chair_with_trigger.gltf.import new file mode 100644 index 0000000..06fc1cb --- /dev/null +++ b/examples/omi_seat/gltf/simple_chair_with_trigger.gltf.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b444svajmkdb6" +path="res://.godot/imported/simple_chair_with_trigger.gltf-1fd5790b6b4a68d806aa966dbe1585d9.scn" + +[deps] + +source_file="res://examples/omi_seat/gltf/simple_chair_with_trigger.gltf" +dest_files=["res://.godot/imported/simple_chair_with_trigger.gltf-1fd5790b6b4a68d806aa966dbe1585d9.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/examples/test_space_environment.tscn b/examples/test_space_environment.tscn new file mode 100644 index 0000000..d37ed7d --- /dev/null +++ b/examples/test_space_environment.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=3 uid="uid://bmbkstugq3cyh"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_6ujne"] +sky_top_color = Color(0.0117647, 0.0117647, 0.0117647, 1) +sky_horizon_color = Color(0.0117647, 0.0117647, 0.0117647, 1) +ground_bottom_color = Color(0.0117647, 0.0117647, 0.0117647, 1) +ground_horizon_color = Color(0.0117647, 0.0117647, 0.0117647, 1) +sun_angle_max = 2.0 +sun_curve = 1.0 + +[sub_resource type="Sky" id="Sky_3ftm5"] +sky_material = SubResource("ProceduralSkyMaterial_6ujne") + +[sub_resource type="Environment" id="Environment_88n3p"] +background_mode = 2 +sky = SubResource("Sky_3ftm5") +tonemap_mode = 2 + +[node name="TestSpaceEnvironment" type="WorldEnvironment"] +environment = SubResource("Environment_88n3p") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.866024, -0.433016, 0.25, 0, 0.5, 0.866026, -0.5, 0.75, -0.43301, 0, 0, 0) diff --git a/project.godot b/project.godot index 33e260e..9799a43 100644 --- a/project.godot +++ b/project.godot @@ -14,10 +14,115 @@ config/name="OMI extensions for Godot" config/features=PackedStringArray("4.3") config/icon="res://icon.svg" +[display] + +window/size/viewport_width=1600 +window/size/viewport_height=900 + [editor_plugins] enabled=PackedStringArray("res://addons/gltf_khr_xmp_copyright/plugin.cfg", "res://addons/omi_extensions/plugin.cfg") +[input] + +jump={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +move_forward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_back={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_up={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) +] +} +move_down={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null) +] +} +reset={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) +] +} +rotate_pitch_up={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null) +] +} +rotate_pitch_down={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":75,"key_label":0,"unicode":107,"location":0,"echo":false,"script":null) +] +} +rotate_yaw_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":74,"key_label":0,"unicode":106,"location":0,"echo":false,"script":null) +] +} +rotate_yaw_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"location":0,"echo":false,"script":null) +] +} +rotate_roll_ccw={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":85,"key_label":0,"unicode":117,"location":0,"echo":false,"script":null) +] +} +rotate_roll_clockwise={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":79,"key_label":0,"unicode":111,"location":0,"echo":false,"script":null) +] +} +throttle_increase={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +throttle_decrease={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +throttle_zero={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null) +] +} +toggle_inertia_dampeners={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"key_label":0,"unicode":112,"location":0,"echo":false,"script":null) +] +} + [rendering] renderer/rendering_method="mobile"