diff --git a/wle_pp/wle_pp/dev/bundler.js b/wle_pp/wle_pp/dev/bundler.js index c75f55e..56d39c7 100644 --- a/wle_pp/wle_pp/dev/bundler.js +++ b/wle_pp/wle_pp/dev/bundler.js @@ -8,6 +8,6 @@ esbuild.build({ sourcemap: true, minify: false, format: "esm", - outfile: "bundle/bundle.js", + outfile: "bundle/pp/bundle.js", plugins: [nodeExternalsPlugin()] }); \ No newline at end of file diff --git a/wle_pp/wle_pp_bundle/bundle/bundle.js.map b/wle_pp/wle_pp_bundle/bundle/bundle.js.map deleted file mode 100644 index a9f26b0..0000000 --- a/wle_pp/wle_pp_bundle/bundle/bundle.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../src/pp/index.ts", "../src/pp/pp/register_pp_components.js", "../src/pp/audio/audio_globals.js", "../src/pp/cauldron/cauldron/analytics_globals.js", "../src/pp/cauldron/cauldron/save_globals.js", "../src/pp/cauldron/object_pool/object_pool_globals.js", "../src/pp/cauldron/visual/visual_globals.js", "../src/pp/cauldron/wl/engine_globals.ts", "../src/pp/cauldron/wl/getters/default_resources_globals.ts", "../src/pp/cauldron/wl/getters/scene_objects_globals.ts", "../src/pp/debug/debug_globals.ts", "../src/pp/gameplay/experimental/character_controller/collision/character_collision_system_globals.js", "../src/pp/input/cauldron/input_globals.ts", "../src/pp/tool/cauldron/tool_globals.js", "../src/pp/tool/console_vr/console_vr_globals.js", "../src/pp/tool/easy_tune/easy_tune_globals.ts", "../src/pp/pp/globals.ts", "../src/pp/pp/components/pp_gateway_component.ts", "../src/pp/audio/components/audio_manager_component.js", "../src/pp/audio/audio_manager.js", "../src/pp/audio/audio_player.js", "../src/pp/audio/audio_setup.js", "../src/pp/cauldron/cauldron/components/analytics_manager_component.js", "../src/pp/cauldron/utils/xr_utils.js", "../src/pp/cauldron/utils/browser_utils.js", "../src/pp/cauldron/cauldron/analytics_manager.js", "../src/pp/cauldron/cauldron/components/save_manager_component.js", "../src/pp/cauldron/cauldron/save_manager.js", "../src/pp/cauldron/utils/save_utils.ts", "../src/pp/cauldron/cauldron/timer.js", "../src/pp/cauldron/object_pool/components/object_pool_manager_component.js", "../src/pp/cauldron/object_pool/object_pool_manager.js", "../src/pp/cauldron/visual/components/visual_manager_component.js", "../src/pp/cauldron/utils/array/mat3_utils.ts", "../src/pp/cauldron/utils/array/quat_utils.js", "../src/pp/cauldron/utils/math_utils.ts", "../src/pp/cauldron/utils/array/array_utils.ts", "../src/pp/cauldron/utils/array/vec3_utils.js", "../src/pp/cauldron/utils/array/mat4_utils.js", "../src/pp/cauldron/utils/array/quat2_utils.js", "../src/pp/cauldron/utils/array/vec2_utils.ts", "../src/pp/cauldron/utils/array/vec4_utils.js", "../src/pp/plugin/js/extensions/array/vec_create_extension.ts", "../src/pp/cauldron/object_pool/object_pool.js", "../src/pp/cauldron/visual/elements/visual_arrow.js", "../src/pp/cauldron/visual/elements/visual_element_types.js", "../src/pp/cauldron/visual/elements/visual_line.js", "../src/pp/cauldron/visual/elements/visual_mesh.js", "../src/pp/cauldron/visual/elements/visual_point.js", "../src/pp/cauldron/physics/physics_utils.js", "../src/pp/cauldron/physics/physics_layer_flags.js", "../src/pp/cauldron/physics/physics_raycast_params.js", "../src/pp/cauldron/visual/elements/visual_raycast.js", "../src/pp/cauldron/visual/elements/visual_text.js", "../src/pp/cauldron/visual/elements/visual_torus.js", "../src/pp/cauldron/visual/elements/visual_transform.js", "../src/pp/cauldron/visual/visual_manager.js", "../src/pp/cauldron/visual/visual_resources.js", "../src/pp/cauldron/wl/components/add_wl_to_window_component.js", "../src/pp/cauldron/wl/getters/components/get_default_resources_component.js", "../src/pp/cauldron/wl/utils/mesh_utils.js", "../src/pp/cauldron/wl/getters/default_resources.ts", "../src/pp/cauldron/wl/getters/components/get_scene_objects_component.js", "../src/pp/input/cauldron/input_types.ts", "../src/pp/cauldron/wl/getters/scene_objects.ts", "../src/pp/debug/components/debug_manager_component.js", "../src/pp/debug/debug_visual_manager.js", "../src/pp/debug/debug_manager.js", "../src/pp/debug/components/enable_debug_component.js", "../src/pp/gameplay/experimental/character_controller/collision/components/character_collision_system_component.js", "../src/pp/gameplay/experimental/character_controller/collision/character_collision_results.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_params.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_base.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_surface.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_base.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_position.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_movement.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_sliding.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_vertical.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_move.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_teleport.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_position.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check.js", "../src/pp/gameplay/experimental/character_controller/collision/collision_check_bridge.js", "../src/pp/gameplay/experimental/character_controller/collision/character_collision_system.js", "../src/pp/input/cauldron/components/input_manager_component.js", "../src/pp/input/gamepad/gamepad_buttons.js", "../src/pp/input/gamepad/gamepad_cores/gamepad_core.js", "../src/pp/input/gamepad/gamepad_cores/classic_gamepad_core.js", "../src/pp/input/cauldron/keyboard.js", "../src/pp/input/gamepad/gamepad_cores/keyboard_gamepad_core.js", "../src/pp/input/gamepad/gamepad_cores/xr_gamepad_core.js", "../src/pp/input/cauldron/input_manager.js", "../src/pp/input/gamepad/base_gamepad.js", "../src/pp/input/gamepad/universal_gamepad.js", "../src/pp/input/gamepad/cauldron/gamepads_manager.js", "../src/pp/input/pose/base_pose.js", "../src/pp/input/cauldron/input_utils.js", "../src/pp/input/pose/hand_pose.js", "../src/pp/input/pose/head_pose.js", "../src/pp/input/pose/tracked_hand_joint_pose.js", "../src/pp/input/pose/tracked_hand_pose.js", "../src/pp/input/cauldron/mouse.js", "../src/pp/tool/cauldron/components/enable_tool_component.js", "../src/pp/tool/console_vr/components/init_console_vr_component.js", "../src/pp/tool/console_vr/console_original_functions.js", "../src/pp/tool/console_vr/console_vr.js", "../src/pp/tool/easy_tune/components/init_easy_tune_variables_component.js", "../src/pp/tool/easy_tune/easy_tune_variables.js", "../src/pp/cauldron/wl/register_wl_components.js", "../src/pp/cauldron/wl/utils/component_utils.js", "../src/pp/cauldron/wl/utils/default_wl_component_clone_callbacks.js", "../src/pp/cauldron/wl/utils/object_utils.ts", "../src/pp/cauldron/utils/js_utils.js", "../src/pp/plugin/utils/plugin_utils.ts", "../src/pp/plugin/js/extensions/array/array_extension_utils.ts", "../src/pp/plugin/js/extensions/array/array_extension.ts", "../src/pp/plugin/js/extensions/array/array_extension_legacy.js", "../src/pp/plugin/js/extensions/array/mat3_extension.ts", "../src/pp/plugin/js/extensions/array/vec2_extension.ts", "../src/pp/cauldron/utils/array/vec_utils.ts", "../src/pp/plugin/js/extensions/array/vec_extension.ts", "../src/pp/plugin/js/extensions/math_extension.ts", "../src/pp/plugin/js/extensions/number_extension.ts", "../src/pp/plugin/js/extensions/init_js_extentions.ts", "../src/pp/plugin/js/init_js_plugins.ts", "../src/pp/plugin/wl/extensions/cauldron_extensions.js", "../src/pp/plugin/wl/extensions/object_extension.ts", "../src/pp/plugin/wl/extensions/init_wl_extentions.ts", "../src/pp/plugin/wl/mods/components/cauldron_mods.ts", "../src/pp/plugin/wl/mods/components/cursor_component_mod.js", "../src/pp/plugin/wl/mods/components/cursor_target_component_mod.ts", "../src/pp/plugin/wl/mods/components/mouse_look_component_mod.js", "../src/pp/plugin/wl/mods/components/init_component_mods.ts", "../src/pp/plugin/wl/mods/init_wl_mods.ts", "../src/pp/plugin/wl/init_wl_plugins.ts", "../src/pp/plugin/init_plugins.ts", "../src/pp/pp/init_pp.ts", "../src/pp/pp/components/add_pp_to_window_component.js", "../src/pp/audio/audio_utils.js", "../src/pp/audio/howler/howler_audio_player.js", "../src/pp/audio/components/mute_everything_component.js", "../src/pp/audio/components/spatial_audio_listener_component.js", "../src/pp/cauldron/benchmarks/benchmark_max_physx_component.js", "../src/pp/cauldron/physics/physics_collision_collector.js", "../src/pp/cauldron/benchmarks/benchmark_max_visible_triangles_component.js", "../src/pp/cauldron/cauldron/components/adjust_hierarchy_physx_scale_component.js", "../src/pp/cauldron/cauldron/components/clear_console_on_xr_session_start_component.js", "../src/pp/cauldron/cauldron/components/set_active_component.js", "../src/pp/cauldron/cauldron/components/show_fps_component.js", "../src/pp/cauldron/cauldron/components/show_xr_buttons_component.ts", "../src/pp/cauldron/fsm/fsm.js", "../src/pp/cauldron/fsm/state.js", "../src/pp/cauldron/fsm/transition.js", "../src/pp/cauldron/fsm/states/timer_state.js", "../src/pp/cauldron/utils/color_utils.js", "../src/pp/cauldron/utils/analytics_utils.js", "../src/pp/cauldron/wl/utils/material_utils.js", "../src/pp/cauldron/wl/utils/text_utils.js", "../src/pp/debug/components/debug_transform_component.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_overwriter.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analyzer.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analysis_results_logger.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_functions_performance_analyzer_component.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_functions_performance_analyzer_component.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_array_functions_performance_analyzer_component.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_array_creation_performance_analyzer_component.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_function_performance_analyzer_component.js", "../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_components_function_performance_analyzer_component.js", "../src/pp/gameplay/cauldron/cauldron/direction_2D_to_3D_converter.js", "../src/pp/gameplay/cauldron/cauldron/number_over_factor.ts", "../src/pp/gameplay/grab_throw/grabbable_component.js", "../src/pp/gameplay/grab_throw/grabber_hand_component.js", "../src/pp/gameplay/integrations/construct_arcade/ca_utils.js", "../src/pp/gameplay/integrations/construct_arcade/ca_dummy_server.js", "../src/pp/gameplay/integrations/construct_arcade/ca_display_leaderboard_component.js", "../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_utils.ts", "../src/pp/gameplay/experimental/character_controller/collision/character_collider_setup.js", "../src/pp/gameplay/experimental/character_controller/character_controller_utils.js", "../src/pp/gameplay/experimental/character_controller/collision/character_collider_setup_utils.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_head_manager.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_transform_manager.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_rotate.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_movement.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion.js", "../src/pp/input/gamepad/cauldron/gamepad_utils.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_obscure_manager.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_visualizer.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_parable.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_state.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_state.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_blink_state.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_shift_state.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_state.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_smooth.js", "../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_component.js", "../src/pp/input/cauldron/components/finger_cursor_component.js", "../src/pp/input/cauldron/components/switch_hand_object_component.js", "../src/pp/input/cauldron/components/tracked_hand_draw_joint_component.js", "../src/pp/input/cauldron/components/tracked_hand_draw_all_joints_component.js", "../src/pp/input/cauldron/components/tracked_hand_draw_skin_component.js", "../src/pp/input/gamepad/cauldron/gamepad_mesh_animator_component.js", "../src/pp/input/gamepad/cauldron/gamepad_control_scheme_component.js", "../src/pp/input/gamepad/gamepad_cores/virtual_gamepad_gamepad_core.js", "../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_icon.js", "../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_params.js", "../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_virtual_button.js", "../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_virtual_thumbstick.js", "../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad.js", "../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_component.js", "../src/pp/input/pose/components/set_player_height_component.js", "../src/pp/input/pose/components/set_hand_local_transform_component.js", "../src/pp/input/pose/components/set_head_local_transform_component.ts", "../src/pp/input/pose/components/set_tracked_hand_joint_local_transform_component.js", "../src/pp/input/pose/components/copy_hand_transform_component.js", "../src/pp/input/pose/components/copy_head_transform_component.js", "../src/pp/input/pose/components/copy_player_transform_component.js", "../src/pp/input/pose/components/copy_reference_space_transform_component.js", "../src/pp/tool/cauldron/tool_types.js", "../src/pp/tool/cauldron/components/tool_cursor_component.js", "../src/pp/tool/console_vr/console_vr_widget_config.js", "../src/pp/tool/console_vr/console_vr_types.js", "../src/pp/tool/console_vr/console_vr_widget_ui.js", "../src/pp/tool/widget_frame/widget_frame.js", "../src/pp/tool/widget_frame/widget_frame_config.js", "../src/pp/tool/widget_frame/widget_frame_ui.js", "../src/pp/tool/console_vr/console_vr_widget.js", "../src/pp/tool/console_vr/components/console_vr_tool_component.js", "../src/pp/tool/easy_tune/easy_tune_variable_types.js", "../src/pp/tool/easy_tune/easy_tune_utils.js", "../src/pp/tool/easy_tune/components/easy_tune_tool_component.js", "../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget.js", "../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_array_widget_selector.js", "../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_config.js", "../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_config.js", "../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_ui.js", "../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_ui.js", "../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget.js", "../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_selector.js", "../src/pp/tool/easy_tune/easy_tune_widgets/easy_tune_widget_config.js", "../src/pp/tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_config.js", "../src/pp/tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_ui.js", "../src/pp/tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget.js", "../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_config.js", "../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_ui.js", "../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget.js", "../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_widget_selector.js", "../src/pp/tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_config.js", "../src/pp/tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_ui.js", "../src/pp/tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget.js", "../src/pp/tool/easy_tune/easy_tune_widgets/easy_tune_widget.js", "../src/pp/tool/easy_tune/components/easy_tune_import_variables_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_object_tuner.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_light_attenuation.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_light_color.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_mesh_color.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_scale.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_transform.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_mesh_ambient_factor.js", "../src/pp/tool/easy_tune/easy_object_tuners/easy_text_color.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_light_attenuation_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_light_color_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_mesh_ambient_factor_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_mesh_color_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_scale_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_child_number_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_grab_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_text_color_component.js", "../src/pp/tool/easy_tune/easy_object_tuners/components/easy_transform_component.js"], - "sourcesContent": ["/** PP Version 0.6.0 */\r\n\r\n// PP\r\nexport * from \"./pp/register_pp_components.js\";\r\nexport { Globals } from \"./pp/globals.js\";\r\n\r\nexport * from \"./pp/components/pp_gateway_component.js\";\r\nexport * from \"./pp/components/add_pp_to_window_component.js\";\r\n\r\n//\tPLUGIN\r\nexport { PluginUtils } from \"./plugin/utils/plugin_utils.js\";\r\n\r\nexport * from \"./plugin/js/extensions/array/vec_create_extension.js\";\r\nexport { ArrayExtensionUtils } from \"./plugin/js/extensions/array/array_extension_utils.js\";\r\n\r\n//\tAUDIO\r\nexport * from \"./audio/audio_manager.js\";\r\nexport * from \"./audio/audio_player.js\";\r\nexport * from \"./audio/audio_setup.js\";\r\nexport { AudioUtils } from \"./audio/audio_utils.js\";\r\n\r\nexport * from \"./audio/howler/howler_audio_player.js\";\r\n\r\nexport * from \"./audio/components/audio_manager_component.js\";\r\nexport * from \"./audio/components/mute_everything_component.js\";\r\nexport * from \"./audio/components/spatial_audio_listener_component.js\";\r\n\r\n//\tCAULDRON\r\nexport * from \"./cauldron/benchmarks/benchmark_max_physx_component.js\";\r\nexport * from \"./cauldron/benchmarks/benchmark_max_visible_triangles_component.js\";\r\n\r\nexport * from \"./cauldron/cauldron/save_manager.js\";\r\nexport * from \"./cauldron/cauldron/analytics_manager.js\";\r\nexport * from \"./cauldron/cauldron/timer.js\";\r\n\r\nexport * from \"./cauldron/cauldron/components/adjust_hierarchy_physx_scale_component.js\";\r\nexport * from \"./cauldron/cauldron/components/analytics_manager_component.js\";\r\nexport * from \"./cauldron/cauldron/components/clear_console_on_xr_session_start_component.js\";\r\nexport * from \"./cauldron/cauldron/components/save_manager_component.js\";\r\nexport * from \"./cauldron/cauldron/components/set_active_component.js\";\r\nexport * from \"./cauldron/cauldron/components/show_fps_component.js\";\r\nexport * from \"./cauldron/cauldron/components/show_xr_buttons_component.js\";\r\n\r\nexport * from \"./cauldron/fsm/fsm.js\";\r\nexport * from \"./cauldron/fsm/state.js\";\r\nexport * from \"./cauldron/fsm/transition.js\";\r\nexport * from \"./cauldron/fsm/states/timer_state.js\";\r\n\r\nexport * from \"./cauldron/object_pool/object_pool.js\";\r\nexport * from \"./cauldron/object_pool/object_pool_manager.js\";\r\nexport * from \"./cauldron/object_pool/components/object_pool_manager_component.js\";\r\n\r\nexport * from \"./cauldron/type_definitions/array_type_definitions.js\";\r\n\r\nexport { ColorUtils } from \"./cauldron/utils/color_utils.js\";\r\nexport { SaveUtils } from \"./cauldron/utils/save_utils.js\";\r\nexport { XRUtils } from \"./cauldron/utils/xr_utils.js\";\r\nexport { BrowserUtils } from \"./cauldron/utils/browser_utils.js\";\r\nexport { AnalyticsUtils } from \"./cauldron/utils/analytics_utils.js\";\r\n\r\nexport { ArrayUtils } from \"./cauldron/utils/array/array_utils.js\";\r\nexport { VecUtils } from \"./cauldron/utils/array/vec_utils.js\";\r\nexport { Vec2Utils } from \"./cauldron/utils/array/vec2_utils.js\";\r\nexport { Vec3Utils } from \"./cauldron/utils/array/vec3_utils.js\";\r\nexport { Vec4Utils } from \"./cauldron/utils/array/vec4_utils.js\";\r\nexport { QuatUtils } from \"./cauldron/utils/array/quat_utils.js\";\r\nexport { Quat2Utils } from \"./cauldron/utils/array/quat2_utils.js\";\r\nexport { Mat3Utils } from \"./cauldron/utils/array/mat3_utils.js\";\r\nexport { Mat4Utils } from \"./cauldron/utils/array/mat4_utils.js\";\r\n\r\nexport { JSUtils } from \"./cauldron/utils/js_utils.js\";\r\nexport { MathUtils, EasingFunction, EasingSupportFunction } from \"./cauldron/utils/math_utils.js\";\r\n\r\nexport { PhysicsUtils } from \"./cauldron/physics/physics_utils.js\";\r\nexport * from \"./cauldron/physics/physics_raycast_params.js\";\r\nexport * from \"./cauldron/physics/physics_layer_flags.js\";\r\nexport * from \"./cauldron/physics/physics_collision_collector.js\";\r\n\r\nexport * from \"./cauldron/visual/visual_manager.js\";\r\nexport * from \"./cauldron/visual/visual_resources.js\";\r\n\r\nexport * from \"./cauldron/visual/elements/visual_element_types.js\";\r\nexport * from \"./cauldron/visual/elements/visual_line.js\";\r\nexport * from \"./cauldron/visual/elements/visual_mesh.js\";\r\nexport * from \"./cauldron/visual/elements/visual_point.js\";\r\nexport * from \"./cauldron/visual/elements/visual_arrow.js\";\r\nexport * from \"./cauldron/visual/elements/visual_text.js\";\r\nexport * from \"./cauldron/visual/elements/visual_transform.js\";\r\nexport * from \"./cauldron/visual/elements/visual_raycast.js\";\r\nexport * from \"./cauldron/visual/elements/visual_torus.js\";\r\n\r\nexport * from \"./cauldron/visual/components/visual_manager_component.js\";\r\n\r\nexport * from \"./cauldron/wl/register_wl_components.js\";\r\nexport * from \"./cauldron/wl/components/add_wl_to_window_component.js\";\r\nexport { ObjectUtils, CloneParams } from \"./cauldron/wl/utils/object_utils.js\";\r\nexport { ComponentUtils, DeepCloneParams, CustomCloneParams } from \"./cauldron/wl/utils/component_utils.js\";\r\nexport { DefaultWLComponentCloneCallbacks } from \"./cauldron/wl/utils/default_wl_component_clone_callbacks.js\";\r\nexport { MaterialUtils } from \"./cauldron/wl/utils/material_utils.js\";\r\nexport { MeshUtils, MeshCreationVertexParams, MeshCreationTriangleParams, MeshCreationParams } from \"./cauldron/wl/utils/mesh_utils.js\";\r\nexport { TextUtils } from \"./cauldron/wl/utils/text_utils.js\";\r\nexport * from \"./cauldron/wl/getters/scene_objects.js\";\r\nexport * from \"./cauldron/wl/getters/default_resources.js\";\r\nexport * from \"./cauldron/wl/getters/components/get_scene_objects_component.js\";\r\nexport * from \"./cauldron/wl/getters/components/get_default_resources_component.js\";\r\n\r\n//\tDEBUG\r\nexport * from \"./debug/debug_manager.js\";\r\nexport * from \"./debug/debug_visual_manager.js\";\r\n\r\nexport * from \"./debug/components/debug_transform_component.js\";\r\nexport * from \"./debug/components/debug_manager_component.js\";\r\nexport * from \"./debug/components/enable_debug_component.js\";\r\n\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_overwriter.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analyzer.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analysis_results_logger.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_functions_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_functions_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_array_functions_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_array_creation_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_function_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_components_function_performance_analyzer_component.js\";\r\n\r\n//\tGAMEPLAY\r\n\r\n// CAULDRON\r\nexport * from \"./gameplay/cauldron/cauldron/direction_2D_to_3D_converter.js\";\r\nexport * from \"./gameplay/cauldron/cauldron/number_over_factor.js\";\r\n\r\n// GRAB & THROW\r\nexport * from \"./gameplay/grab_throw/grabbable_component.js\";\r\nexport * from \"./gameplay/grab_throw/grabber_hand_component.js\";\r\n\r\n// INTEGRATIONS\r\nexport { CAUtils, CAError } from \"./gameplay/integrations/construct_arcade/ca_utils.js\";\r\nexport * from \"./gameplay/integrations/construct_arcade/ca_dummy_server.js\";\r\nexport * from \"./gameplay/integrations/construct_arcade/ca_display_leaderboard_component.js\";\r\n\r\n// EXPERIMENTAL\r\n\r\n// CHARACTER CONTROLLER\r\nexport * from \"./gameplay/experimental/character_controller/collision/legacy/collision_check/collision_params.js\";\r\nexport { CollisionCheck } from \"./gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check.js\";\r\nexport { CollisionCheckUtils } from \"./gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_utils.js\";\r\n\r\nexport { CollisionCheckBridge } from \"./gameplay/experimental/character_controller/collision/collision_check_bridge.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/character_collider_setup.js\";\r\nexport { CharacterControllerUtils } from \"./gameplay/experimental/character_controller/character_controller_utils.js\";\r\nexport { CharacterColliderSetupUtils, CharacterColliderSetupSimplifiedCreationParams, CharacterColliderSetupSimplifiedCreationAccuracyLevel } from \"./gameplay/experimental/character_controller/collision/character_collider_setup_utils.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/character_collision_results.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/character_collision_system.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/components/character_collision_system_component.js\";\r\n\r\n// LOCOMOTION\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_head_manager.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_transform_manager.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_rotate.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_movement.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_smooth.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_obscure_manager.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_component.js\";\r\n\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_parable.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_visualizer.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_blink_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_shift_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport.js\";\r\n\r\n//\tINPUT\r\nexport * from \"./input/cauldron/input_types.js\";\r\nexport { InputUtils } from \"./input/cauldron/input_utils.js\";\r\nexport * from \"./input/cauldron/keyboard.js\";\r\nexport * from \"./input/cauldron/mouse.js\";\r\nexport * from \"./input/cauldron/input_manager.js\";\r\n\r\nexport * from \"./input/cauldron/components/finger_cursor_component.js\";\r\nexport * from \"./input/cauldron/components/input_manager_component.js\";\r\nexport * from \"./input/cauldron/components/switch_hand_object_component.js\";\r\nexport * from \"./input/cauldron/components/tracked_hand_draw_joint_component.js\";\r\nexport * from \"./input/cauldron/components/tracked_hand_draw_all_joints_component.js\";\r\nexport * from \"./input/cauldron/components/tracked_hand_draw_skin_component.js\";\r\n\r\nexport * from \"./input/gamepad/gamepad_buttons.js\";\r\nexport * from \"./input/gamepad/base_gamepad.js\";\r\nexport * from \"./input/gamepad/universal_gamepad.js\";\r\nexport * from \"./input/gamepad/cauldron/gamepad_mesh_animator_component.js\";\r\nexport * from \"./input/gamepad/cauldron/gamepads_manager.js\";\r\nexport { GamepadUtils } from \"./input/gamepad/cauldron/gamepad_utils.js\";\r\nexport * from \"./input/gamepad/cauldron/gamepad_control_scheme_component.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/xr_gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/keyboard_gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/virtual_gamepad_gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/classic_gamepad_core.js\";\r\n\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_component.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_params.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_virtual_button.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_virtual_thumbstick.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_icon.js\";\r\n\r\nexport * from \"./input/pose/base_pose.js\";\r\nexport * from \"./input/pose/hand_pose.js\";\r\nexport * from \"./input/pose/head_pose.js\";\r\nexport * from \"./input/pose/tracked_hand_joint_pose.js\";\r\nexport * from \"./input/pose/tracked_hand_pose.js\";\r\n\r\nexport * from \"./input/pose/components/set_player_height_component.js\";\r\nexport * from \"./input/pose/components/set_hand_local_transform_component.js\";\r\nexport * from \"./input/pose/components/set_head_local_transform_component.js\";\r\nexport * from \"./input/pose/components/set_tracked_hand_joint_local_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_hand_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_head_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_player_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_reference_space_transform_component.js\";\r\n\r\n//\tTOOL\r\nexport * from \"./tool/cauldron/tool_types.js\";\r\nexport * from \"./tool/cauldron/components/tool_cursor_component.js\";\r\nexport * from \"./tool/cauldron/components/enable_tool_component.js\";\r\n\r\nexport * from \"./tool/console_vr/console_vr_widget_config.js\";\r\nexport * from \"./tool/console_vr/console_vr_widget_ui.js\";\r\nexport * from \"./tool/console_vr/console_vr_widget.js\";\r\nexport * from \"./tool/console_vr/console_vr.js\";\r\nexport * from \"./tool/console_vr/console_vr_types.js\";\r\nexport { ConsoleOriginalFunctions } from \"./tool/console_vr/console_original_functions.js\";\r\n\r\nexport * from \"./tool/console_vr/components/console_vr_tool_component.js\";\r\nexport * from \"./tool/console_vr/components/init_console_vr_component.js\";\r\n\r\nexport * from \"./tool/easy_tune/easy_tune_variables.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_variable_types.js\";\r\nexport { EasyTuneUtils } from \"./tool/easy_tune/easy_tune_utils.js\";\r\n\r\nexport * from \"./tool/easy_tune/components/easy_tune_tool_component.js\";\r\nexport * from \"./tool/easy_tune/components/easy_tune_import_variables_component.js\";\r\nexport * from \"./tool/easy_tune/components/init_easy_tune_variables_component.js\";\r\n\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_object_tuner.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_light_attenuation.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_light_color.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_mesh_color.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_scale.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_transform.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_mesh_ambient_factor.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_text_color.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_light_attenuation_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_light_color_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_mesh_ambient_factor_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_mesh_color_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_scale_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_child_number_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_grab_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_text_color_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_transform_component.js\";\r\n\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/easy_tune_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/easy_tune_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_array_widget_selector.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_selector.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_widget_selector.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_config.js\";\r\n\r\nexport * from \"./tool/widget_frame/widget_frame_config.js\";\r\nexport * from \"./tool/widget_frame/widget_frame_ui.js\";\r\nexport * from \"./tool/widget_frame/widget_frame.js\";", "import { AddPPToWindowComponent, AddWLToWindowComponent, AdjustHierarchyPhysXScaleComponent, AnalyticsManagerComponent, AudioManagerComponent, BenchmarkMaxPhysXComponent, BenchmarkMaxVisibleTrianglesComponent, CADisplayLeaderboardComponent, CharacterCollisionSystemComponent, ClearConsoleOnXRSessionStartComponent, ConsoleVRToolComponent, CopyHandTransformComponent, CopyHeadTransformComponent, CopyPlayerTransformComponent, CopyReferenceSpaceTransformComponent, DebugArrayFunctionsPerformanceAnalyzerComponent, DebugFunctionsPerformanceAnalyzerComponent, DebugManagerComponent, DebugPPArrayCreationPerformanceAnalyzerComponent, DebugPPFunctionsPerformanceAnalyzerComponent, DebugTransformComponent, DebugWLComponentsFunctionsPerformanceAnalyzerComponent, DebugWLFunctionsPerformanceAnalyzerComponent, EasyLightAttenuationComponent, EasyLightColorComponent, EasyMeshAmbientFactorComponent, EasyMeshColorComponent, EasyScaleComponent, EasySetTuneTargeetGrabComponent, EasySetTuneTargetChildNumberComponent, EasyTextColorComponent, EasyTransformComponent, EasyTuneImportVariablesComponent, EasyTuneToolComponent, EnableDebugComponent, EnableToolComponent, FingerCursorComponent, GamepadControlSchemeComponent, GamepadMeshAnimatorComponent, GetDefaultResourcesComponent, GetSceneObjectsComponent, GrabbableComponent, GrabberHandComponent, InitConsoleVRComponent, InitEasyTuneVariablesComponent, InputManagerComponent, MuteEverythingComponent, ObjectPoolManagerComponent, PPGatewayComponent, PlayerLocomotionComponent, SaveManagerComponent, SetActiveComponent, SetHandLocalTransformComponent, SetHeadLocalTransformComponent, SetPlayerHeightComponent, SetTrackedHandJointLocalTransformComponent, ShowFPSComponent, ShowXRButtonsComponent, SpatialAudioListenerComponent, SwitchHandObjectComponent, ToolCursorComponent, TrackedHandDrawAllJointsComponent, TrackedHandDrawJointComponent, TrackedHandDrawSkinComponent, VirtualGamepadComponent, VisualManagerComponent } from \"../index.js\";\r\n\r\nexport function registerPPComponents(engine) {\r\n engine.registerComponent(\r\n AddPPToWindowComponent,\r\n AddWLToWindowComponent,\r\n AdjustHierarchyPhysXScaleComponent,\r\n AnalyticsManagerComponent,\r\n AudioManagerComponent,\r\n BenchmarkMaxPhysXComponent,\r\n BenchmarkMaxVisibleTrianglesComponent,\r\n CADisplayLeaderboardComponent,\r\n CharacterCollisionSystemComponent,\r\n ClearConsoleOnXRSessionStartComponent,\r\n ConsoleVRToolComponent,\r\n CopyHandTransformComponent,\r\n CopyHeadTransformComponent,\r\n CopyReferenceSpaceTransformComponent,\r\n CopyPlayerTransformComponent,\r\n DebugPPArrayCreationPerformanceAnalyzerComponent,\r\n DebugArrayFunctionsPerformanceAnalyzerComponent,\r\n DebugFunctionsPerformanceAnalyzerComponent,\r\n DebugManagerComponent,\r\n DebugPPFunctionsPerformanceAnalyzerComponent,\r\n DebugTransformComponent,\r\n DebugWLComponentsFunctionsPerformanceAnalyzerComponent,\r\n DebugWLFunctionsPerformanceAnalyzerComponent,\r\n EasyLightAttenuationComponent,\r\n EasyLightColorComponent,\r\n EasyMeshAmbientFactorComponent,\r\n EasyMeshColorComponent,\r\n EasyScaleComponent,\r\n EasySetTuneTargeetGrabComponent,\r\n EasySetTuneTargetChildNumberComponent,\r\n EasyTextColorComponent,\r\n EasyTransformComponent,\r\n EasyTuneImportVariablesComponent,\r\n EasyTuneToolComponent,\r\n EnableDebugComponent,\r\n EnableToolComponent,\r\n FingerCursorComponent,\r\n GamepadControlSchemeComponent,\r\n GamepadMeshAnimatorComponent,\r\n GetDefaultResourcesComponent,\r\n GetSceneObjectsComponent,\r\n GrabbableComponent,\r\n GrabberHandComponent,\r\n InitConsoleVRComponent,\r\n InitEasyTuneVariablesComponent,\r\n InputManagerComponent,\r\n MuteEverythingComponent,\r\n ObjectPoolManagerComponent,\r\n PPGatewayComponent,\r\n PlayerLocomotionComponent,\r\n SaveManagerComponent,\r\n SetActiveComponent,\r\n SetHandLocalTransformComponent,\r\n SetHeadLocalTransformComponent,\r\n SetPlayerHeightComponent,\r\n SetTrackedHandJointLocalTransformComponent,\r\n ShowFPSComponent,\r\n ShowXRButtonsComponent,\r\n SpatialAudioListenerComponent,\r\n SwitchHandObjectComponent,\r\n ToolCursorComponent,\r\n TrackedHandDrawAllJointsComponent,\r\n TrackedHandDrawJointComponent,\r\n TrackedHandDrawSkinComponent,\r\n VirtualGamepadComponent,\r\n VisualManagerComponent\r\n );\r\n}", "import { Globals } from \"../pp/globals.js\";\r\n\r\nlet _myAudioManagers = new WeakMap();\r\n\r\nexport function getAudioManager(engine = Globals.getMainEngine()) {\r\n return _myAudioManagers.get(engine);\r\n}\r\n\r\nexport function setAudioManager(audioManager, engine = Globals.getMainEngine()) {\r\n _myAudioManagers.set(engine, audioManager);\r\n}\r\n\r\nexport function removeAudioManager(engine = Globals.getMainEngine()) {\r\n _myAudioManagers.delete(engine);\r\n}\r\n\r\nexport function hasAudioManager(engine = Globals.getMainEngine()) {\r\n return _myAudioManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myAnalyticsManagers = new WeakMap();\r\n\r\nexport function getAnalyticsManager(engine = Globals.getMainEngine()) {\r\n return _myAnalyticsManagers.get(engine);\r\n}\r\n\r\nexport function setAnalyticsManager(analyticsManager, engine = Globals.getMainEngine()) {\r\n _myAnalyticsManagers.set(engine, analyticsManager);\r\n}\r\n\r\nexport function removeAnalyticsManager(engine = Globals.getMainEngine()) {\r\n _myAnalyticsManagers.delete(engine);\r\n}\r\n\r\nexport function hasAnalyticsManager(engine = Globals.getMainEngine()) {\r\n return _myAnalyticsManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _mySaveManagers = new WeakMap();\r\n\r\nexport function getSaveManager(engine = Globals.getMainEngine()) {\r\n return _mySaveManagers.get(engine);\r\n}\r\n\r\nexport function setSaveManager(saveManager, engine = Globals.getMainEngine()) {\r\n _mySaveManagers.set(engine, saveManager);\r\n}\r\n\r\nexport function removeSaveManager(engine = Globals.getMainEngine()) {\r\n _mySaveManagers.delete(engine);\r\n}\r\n\r\nexport function hasSaveManager(engine = Globals.getMainEngine()) {\r\n return _mySaveManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myObjectPoolManagers = new WeakMap();\r\n\r\nexport function getObjectPoolManager(engine = Globals.getMainEngine()) {\r\n return _myObjectPoolManagers.get(engine);\r\n}\r\n\r\nexport function setObjectPoolManager(objectPoolManager, engine = Globals.getMainEngine()) {\r\n _myObjectPoolManagers.set(engine, objectPoolManager);\r\n}\r\n\r\nexport function removeObjectPoolManager(engine = Globals.getMainEngine()) {\r\n _myObjectPoolManagers.delete(engine);\r\n}\r\n\r\nexport function hasObjectPoolManager(engine = Globals.getMainEngine()) {\r\n return _myObjectPoolManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myVisualResourcesContainer = new WeakMap();\r\nlet _myVisualManagers = new WeakMap();\r\n\r\nexport function getVisualResources(engine = Globals.getMainEngineinEngine()) {\r\n return _myVisualResourcesContainer.get(engine);\r\n}\r\n\r\nexport function setVisualResources(visualResources, engine = Globals.getMainEngine()) {\r\n _myVisualResourcesContainer.set(engine, visualResources);\r\n}\r\n\r\nexport function removeVisualResources(engine = Globals.getMainEngine()) {\r\n _myVisualResourcesContainer.delete(engine);\r\n}\r\n\r\nexport function hasVisualResources(engine = Globals.getMainEngine()) {\r\n return _myVisualResourcesContainer.has(engine);\r\n}\r\n\r\nexport function getVisualManager(engine = Globals.getMainEngine()) {\r\n return _myVisualManagers.get(engine);\r\n}\r\n\r\nexport function setVisualManager(visualManager, engine = Globals.getMainEngine()) {\r\n _myVisualManagers.set(engine, visualManager);\r\n}\r\n\r\nexport function removeVisualManager(engine = Globals.getMainEngine()) {\r\n _myVisualManagers.delete(engine);\r\n}\r\n\r\nexport function hasVisualManager(engine = Globals.getMainEngine()) {\r\n return _myVisualManagers.has(engine);\r\n}", "import { Physics, Scene, WASM, WonderlandEngine, XR } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myMainEngine: WonderlandEngine | null = null;\r\nconst _myEngines: WonderlandEngine[] = [];\r\n\r\nexport function getMainEngine(): WonderlandEngine | null {\r\n return _myMainEngine;\r\n}\r\n\r\nexport function setMainEngine(engine: WonderlandEngine): void {\r\n if (!hasEngine(engine)) {\r\n addEngine(engine);\r\n }\r\n\r\n _myMainEngine = engine;\r\n}\r\n\r\nexport function removeMainEngine(): void {\r\n _myMainEngine = null;\r\n}\r\n\r\nexport function getEngines(): WonderlandEngine[] {\r\n return _myEngines;\r\n}\r\n\r\nexport function addEngine(engine: WonderlandEngine): void {\r\n removeEngine(engine);\r\n _myEngines.push(engine);\r\n}\r\n\r\nexport function removeEngine(engine: Readonly): void {\r\n const index = _myEngines.indexOf(engine as WonderlandEngine);\r\n\r\n if (index >= 0) {\r\n _myEngines.splice(index, 1);\r\n\r\n if (getMainEngine() == engine) {\r\n removeMainEngine();\r\n }\r\n }\r\n}\r\n\r\nexport function hasEngine(engine: Readonly): boolean {\r\n return _myEngines.indexOf(engine as WonderlandEngine) >= 0;\r\n}\r\n\r\nexport function getScene(): Scene | null;\r\nexport function getScene(engine: Readonly): Scene;\r\nexport function getScene(engine: Readonly | null = Globals.getMainEngine()): Scene | null {\r\n let scene = null;\r\n\r\n if (engine != null) {\r\n scene = engine.scene;\r\n }\r\n\r\n return scene;\r\n}\r\n\r\nexport function getPhysics(): Physics | null;\r\nexport function getPhysics(engine: Readonly): Physics;\r\nexport function getPhysics(engine: Readonly | null = Globals.getMainEngine()): Physics | null {\r\n let physics = null;\r\n\r\n if (engine != null) {\r\n physics = engine.physics;\r\n }\r\n\r\n return physics;\r\n}\r\n\r\nexport function getCanvas(): HTMLCanvasElement | null;\r\nexport function getCanvas(engine: Readonly): HTMLCanvasElement;\r\nexport function getCanvas(engine: Readonly | null = Globals.getMainEngine()): HTMLCanvasElement | null {\r\n let canvas = null;\r\n\r\n if (engine != null) {\r\n canvas = engine.canvas;\r\n }\r\n\r\n return canvas;\r\n}\r\n\r\nexport function getWASM(): WASM | null;\r\nexport function getWASM(engine: Readonly): WASM;\r\nexport function getWASM(engine: Readonly | null = Globals.getMainEngine()): WASM | null {\r\n let wasm = null;\r\n\r\n if (engine != null) {\r\n wasm = engine.wasm;\r\n }\r\n\r\n return wasm;\r\n}\r\n\r\nexport function getXR(): XR | null;\r\nexport function getXR(engine: Readonly): XR;\r\nexport function getXR(engine: Readonly | null = Globals.getMainEngine()): XR | null {\r\n let xr = null;\r\n\r\n if (engine != null) {\r\n xr = engine.xr;\r\n }\r\n\r\n return xr;\r\n}", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { DefaultResources, DefaultResourcesMaterials, DefaultResourcesMeshes } from \"./default_resources.js\";\r\n\r\nconst _myDefaultResourcesContainer: WeakMap, DefaultResources> = new WeakMap();\r\n\r\nexport function getDefaultResources(engine: Readonly | null = Globals.getMainEngine()): DefaultResources | null {\r\n if (engine == null) return null;\r\n\r\n const defaultResources = _myDefaultResourcesContainer.get(engine);\r\n return defaultResources != null ? defaultResources : null;\r\n}\r\n\r\nexport function setDefaultResources(defaultResources: DefaultResources, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDefaultResourcesContainer.set(engine, defaultResources);\r\n }\r\n}\r\n\r\nexport function removeDefaultResources(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDefaultResourcesContainer.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasDefaultResources(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myDefaultResourcesContainer.has(engine) : false;\r\n}\r\n\r\nexport function getDefaultMeshes(engine: Readonly | null = Globals.getMainEngine()): DefaultResourcesMeshes | null {\r\n const defaultResources = getDefaultResources(engine);\r\n\r\n if (defaultResources != null) {\r\n return defaultResources.myMeshes;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getDefaultMaterials(engine: Readonly | null = Globals.getMainEngine()): DefaultResourcesMaterials | null {\r\n const defaultResources = getDefaultResources(engine);\r\n\r\n if (defaultResources != null) {\r\n return defaultResources.myMaterials;\r\n }\r\n\r\n return null;\r\n}", "import { Object3D, WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { PlayerObjects, SceneObjects } from \"./scene_objects.js\";\r\n\r\nconst _mySceneObjectsContainer: WeakMap, SceneObjects> = new WeakMap();\r\n\r\nexport function getSceneObjects(engine: Readonly | null = Globals.getMainEngine()): SceneObjects | null {\r\n if (engine == null) return null;\r\n\r\n const sceneObjects = _mySceneObjectsContainer.get(engine);\r\n return sceneObjects != null ? sceneObjects : null;\r\n}\r\n\r\nexport function setSceneObjects(sceneObjects: SceneObjects, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _mySceneObjectsContainer.set(engine, sceneObjects);\r\n }\r\n}\r\n\r\nexport function removeSceneObjects(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _mySceneObjectsContainer.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasSceneObjects(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _mySceneObjectsContainer.has(engine) : false;\r\n}\r\n\r\nexport function getRootObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myRoot;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getSceneObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myScene;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getPlayerObjects(engine: Readonly | null = Globals.getMainEngine()): PlayerObjects | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myPlayerObjects;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getPlayerObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myPlayerObjects.myPlayer;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getHeadObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myPlayerObjects.myHead;\r\n }\r\n\r\n return null;\r\n}", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../pp/globals.js\";\r\nimport { DebugManager } from \"./debug_manager.js\";\r\nimport { DebugVisualManager } from \"./debug_visual_manager.js\";\r\n\r\nconst _myDebugManagers: WeakMap, DebugManager> = new WeakMap();\r\nconst _myDebugEnableds: WeakMap, boolean> = new WeakMap();\r\n\r\nexport function getDebugManager(engine: Readonly | null = Globals.getMainEngine()): DebugManager | null {\r\n if (engine == null) return null;\r\n\r\n const debugManager = _myDebugManagers.get(engine);\r\n return debugManager != null ? debugManager : null;\r\n}\r\n\r\nexport function setDebugManager(debugManager: DebugManager, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugManagers.set(engine, debugManager);\r\n }\r\n}\r\n\r\nexport function removeDebugManager(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugManagers.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasDebugManager(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myDebugManagers.has(engine) : false;\r\n}\r\n\r\nexport function getDebugVisualManager(engine: Readonly | null = Globals.getMainEngine()): DebugVisualManager | null {\r\n const debugManager = getDebugManager(engine);\r\n\r\n if (debugManager != null) {\r\n return debugManager.getDebugVisualManager();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function isDebugEnabled(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? !!_myDebugEnableds.get(engine) : false;\r\n}\r\n\r\nexport function setDebugEnabled(debugEnabled: boolean, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugEnableds.set(engine, debugEnabled);\r\n }\r\n}\r\n\r\nexport function removeDebugEnabled(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugEnableds.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasDebugEnabled(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myDebugEnableds.has(engine) : false;\r\n}", "import { Globals } from \"../../../../pp/globals.js\";\r\n\r\nlet _myCharacterCollisionSystems = new WeakMap();\r\n\r\nexport function getCharacterCollisionSystem(engine = Globals.getMainEngine()) {\r\n return _myCharacterCollisionSystems.get(engine);\r\n}\r\n\r\nexport function setCharacterCollisionSystem(characterCollisionSystem, engine = Globals.getMainEngine()) {\r\n _myCharacterCollisionSystems.set(engine, characterCollisionSystem);\r\n}\r\n\r\nexport function removeCharacterCollisionSystem(engine = Globals.getMainEngine()) {\r\n _myCharacterCollisionSystems.delete(engine);\r\n}\r\n\r\nexport function hasCharacterCollisionSystem(engine = Globals.getMainEngine()) {\r\n return _myCharacterCollisionSystems.has(engine);\r\n}", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { GamepadsManager } from \"../../input/gamepad/cauldron/gamepads_manager.js\";\r\nimport { HandPose } from \"../../input/pose/hand_pose.js\";\r\nimport { HeadPose } from \"../../input/pose/head_pose.js\";\r\nimport { TrackedHandPose } from \"../../input/pose/tracked_hand_pose.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { BaseGamepad } from \"../gamepad/base_gamepad.js\";\r\nimport { InputManager } from \"./input_manager.js\";\r\nimport { Handedness } from \"./input_types.js\";\r\nimport { Keyboard } from \"./keyboard.js\";\r\nimport { Mouse } from \"./mouse.js\";\r\n\r\nconst _myInputManagers: WeakMap, InputManager> = new WeakMap();\r\nconst _myPoseForwardFixeds: WeakMap, boolean> = new WeakMap();\r\n\r\nexport function getInputManager(engine: Readonly | null = Globals.getMainEngine()): InputManager | null {\r\n if (engine == null) return null;\r\n\r\n const inputManager = _myInputManagers.get(engine);\r\n return inputManager != null ? inputManager : null;\r\n}\r\n\r\nexport function setInputManager(inputManager: InputManager, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myInputManagers.set(engine, inputManager);\r\n }\r\n}\r\n\r\nexport function removeInputManager(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myInputManagers.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasInputManager(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myInputManagers.has(engine) : false;\r\n}\r\n\r\nexport function getMouse(engine: Readonly | null = Globals.getMainEngine()): Mouse | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getMouse();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getKeyboard(engine: Readonly | null = Globals.getMainEngine()): Keyboard | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getKeyboard();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Gamepad\r\n\r\nexport function getGamepadsManager(engine: Readonly | null = Globals.getMainEngine()): GamepadsManager | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getGamepad(handedness: Handedness, engine: Readonly | null = Globals.getMainEngine()): BaseGamepad | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getGamepad(handedness);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getGamepads(engine: Readonly | null = Globals.getMainEngine()): BaseGamepad[] | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getGamepads();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getLeftGamepad(engine: Readonly | null = Globals.getMainEngine()): BaseGamepad | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getLeftGamepad();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getRightGamepad(engine: Readonly | null = Globals.getMainEngine()): BaseGamepad | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getRightGamepad();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Pose\r\n\r\nexport function getHeadPose(engine: Readonly | null = Globals.getMainEngine()): HeadPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getHeadPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getHandPose(handedness: Handedness, engine: Readonly | null = Globals.getMainEngine()): HandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getHandPose(handedness);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getHandPoses(engine: Readonly | null = Globals.getMainEngine()): HandPose[] | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getHandPoses();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getLeftHandPose(engine: Readonly | null = Globals.getMainEngine()): HandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getLeftHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getRightHandPose(engine: Readonly | null = Globals.getMainEngine()): HandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getRightHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getTrackedHandPose(handedness: Handedness, engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getTrackedHandPose(handedness);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getTrackedHandPoses(engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose[] | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getTrackedHandPoses();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getLeftTrackedHandPose(engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getLeftTrackedHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getRightTrackedHandPose(engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getRightTrackedHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Pose Forward Fixed\r\n\r\nexport function isPoseForwardFixed(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? !!_myPoseForwardFixeds.get(engine) : false;\r\n}\r\n\r\nexport function setPoseForwardFixed(toolEnabled: boolean, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myPoseForwardFixeds.set(engine, toolEnabled);\r\n }\r\n}\r\n\r\nexport function removePoseForwardFixed(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myPoseForwardFixeds.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasPoseForwardFixed(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myPoseForwardFixeds.has(engine) : false;\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myToolEnableds = new WeakMap();\r\n\r\nexport function isToolEnabled(engine = Globals.getMainEngine()) {\r\n return _myToolEnableds.get(engine);\r\n}\r\n\r\nexport function setToolEnabled(toolEnabled, engine = Globals.getMainEngine()) {\r\n _myToolEnableds.set(engine, toolEnabled);\r\n}\r\n\r\nexport function removeToolEnabled(engine = Globals.getMainEngine()) {\r\n _myToolEnableds.delete(engine);\r\n}\r\n\r\nexport function hasToolEnabled(engine = Globals.getMainEngine()) {\r\n return _myToolEnableds.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myConsoleVRs = new WeakMap();\r\n\r\nexport function getConsoleVR(engine = Globals.getMainEngine()) {\r\n return _myConsoleVRs.get(engine);\r\n}\r\n\r\nexport function setConsoleVR(consoleVR, engine = Globals.getMainEngine()) {\r\n _myConsoleVRs.set(engine, consoleVR);\r\n}\r\n\r\nexport function removeConsoleVR(engine = Globals.getMainEngine()) {\r\n _myConsoleVRs.delete(engine);\r\n}\r\n\r\nexport function hasConsoleVR(engine = Globals.getMainEngine()) {\r\n return _myConsoleVRs.has(engine);\r\n}", "import { Object3D, WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { EasyTuneVariables } from \"./easy_tune_variables.js\";\r\n\r\nconst _myEasyTuneVariablesList: WeakMap, EasyTuneVariables> = new WeakMap();\r\nconst _myEasyTuneTargets: WeakMap, Object3D> = new WeakMap();\r\n\r\nexport function getEasyTuneVariables(engine: Readonly | null = Globals.getMainEngine()): EasyTuneVariables | null {\r\n if (engine == null) return null;\r\n\r\n const easyTuneVariables = _myEasyTuneVariablesList.get(engine);\r\n return easyTuneVariables != null ? easyTuneVariables : null;\r\n}\r\n\r\nexport function setEasyTuneVariables(easyTuneVariables: EasyTuneVariables, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneVariablesList.set(engine, easyTuneVariables);\r\n }\r\n}\r\n\r\nexport function removeEasyTuneVariables(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneVariablesList.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasEasyTuneVariables(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myEasyTuneVariablesList.has(engine) : false;\r\n}\r\n\r\nexport function getEasyTuneTarget(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n if (engine == null) return null;\r\n\r\n const easyTuneTarget = _myEasyTuneTargets.get(engine);\r\n return easyTuneTarget != null ? easyTuneTarget : null;\r\n}\r\n\r\nexport function setEasyTuneTarget(easyTuneTarget: Object3D, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneTargets.set(engine, easyTuneTarget);\r\n }\r\n}\r\n\r\nexport function removeEasyTuneTarget(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneTargets.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasEasyTuneTarget(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myEasyTuneTargets.has(engine) : false;\r\n}", "import * as AudioGlobals from \"../audio/audio_globals.js\";\r\nimport * as AnalyticsGlobals from \"../cauldron/cauldron/analytics_globals.js\";\r\nimport * as SaveGlobals from \"../cauldron/cauldron/save_globals.js\";\r\nimport * as ObjectPoolManagerGlobals from \"../cauldron/object_pool/object_pool_globals.js\";\r\nimport * as VisualGlobals from \"../cauldron/visual/visual_globals.js\";\r\nimport * as EngineGlobals from \"../cauldron/wl/engine_globals.js\";\r\nimport * as DefaultResourcesGlobals from \"../cauldron/wl/getters/default_resources_globals.js\";\r\nimport * as SceneObjectsGlobals from \"../cauldron/wl/getters/scene_objects_globals.js\";\r\nimport * as DebugGlobals from \"../debug/debug_globals.js\";\r\nimport * as CharacterCollisionSystemGlobals from \"../gameplay/experimental/character_controller/collision/character_collision_system_globals.js\";\r\nimport * as InputGlobals from \"../input/cauldron/input_globals.js\";\r\nimport * as ToolGlobals from \"../tool/cauldron/tool_globals.js\";\r\nimport * as ConsoleVRGlobals from \"../tool/console_vr/console_vr_globals.js\";\r\nimport * as EasyTuneGlobals from \"../tool/easy_tune/easy_tune_globals.js\";\r\n\r\nexport const Globals = {\r\n ...EngineGlobals,\r\n ...SceneObjectsGlobals,\r\n ...DefaultResourcesGlobals,\r\n ...AudioGlobals,\r\n ...VisualGlobals,\r\n ...DebugGlobals,\r\n ...ObjectPoolManagerGlobals,\r\n ...CharacterCollisionSystemGlobals,\r\n ...InputGlobals,\r\n ...SaveGlobals,\r\n ...AnalyticsGlobals,\r\n ...ToolGlobals,\r\n ...ConsoleVRGlobals,\r\n ...EasyTuneGlobals\r\n} as const;", "import { Component, Property, WonderlandEngine, type ComponentProperty } from \"@wonderlandengine/api\";\r\nimport { AudioManagerComponent } from \"../../audio/components/audio_manager_component.js\";\r\nimport { AnalyticsManagerComponent } from \"../../cauldron/cauldron/components/analytics_manager_component.js\";\r\nimport { SaveManagerComponent } from \"../../cauldron/cauldron/components/save_manager_component.js\";\r\nimport { ObjectPoolManagerComponent } from \"../../cauldron/object_pool/components/object_pool_manager_component.js\";\r\nimport { VisualManagerComponent } from \"../../cauldron/visual/components/visual_manager_component.js\";\r\nimport { AddWLToWindowComponent } from \"../../cauldron/wl/components/add_wl_to_window_component.js\";\r\nimport { GetDefaultResourcesComponent } from \"../../cauldron/wl/getters/components/get_default_resources_component.js\";\r\nimport { GetSceneObjectsComponent } from \"../../cauldron/wl/getters/components/get_scene_objects_component.js\";\r\nimport { DebugManagerComponent } from \"../../debug/components/debug_manager_component.js\";\r\nimport { EnableDebugComponent } from \"../../debug/components/enable_debug_component.js\";\r\nimport { CharacterCollisionSystemComponent } from \"../../gameplay/experimental/character_controller/collision/components/character_collision_system_component.js\";\r\nimport { InputManagerComponent } from \"../../input/cauldron/components/input_manager_component.js\";\r\nimport { EnableToolComponent } from \"../../tool/cauldron/components/enable_tool_component.js\";\r\nimport { InitConsoleVRComponent } from \"../../tool/console_vr/components/init_console_vr_component.js\";\r\nimport { InitEasyTuneVariablesComponent } from \"../../tool/easy_tune/components/init_easy_tune_variables_component.js\";\r\nimport { initPP } from \"../init_pp.js\";\r\nimport { AddPPToWindowComponent } from \"./add_pp_to_window_component.js\";\r\n\r\n// #TODO enable this again as soon as it is possible for the wonderland engine to find components not specified in the index.js,\r\n//since that would make the extension be included just by using the library, and not only when this component is used\r\n//import \"../../plugin/add_type_extensions_to_typescript.js\";\r\n\r\nconst _myRegisteredEngines: WeakMap, null> = new WeakMap();\r\n\r\nexport class PPGatewayComponent extends Component {\r\n public static override TypeName = \"pp-gateway\";\r\n public static override Properties = {\r\n _myEnableDebug: Property.bool(true),\r\n _myEnableTool: Property.bool(true),\r\n _myAddPPToWindow: Property.bool(true),\r\n _myAddWLToWindow: Property.bool(true),\r\n ...InputManagerComponent.Properties,\r\n ...AudioManagerComponent.Properties,\r\n ...VisualManagerComponent.Properties,\r\n ...CharacterCollisionSystemComponent.Properties,\r\n ...ObjectPoolManagerComponent.Properties,\r\n ...SaveManagerComponent.Properties,\r\n ...AnalyticsManagerComponent.Properties,\r\n ...DebugManagerComponent.Properties,\r\n ...GetSceneObjectsComponent.Properties,\r\n ...GetDefaultResourcesComponent.Properties\r\n };\r\n\r\n private _myEnableDebug!: boolean;\r\n private _myEnableTool!: boolean;\r\n\r\n private _myAddPPToWindow!: boolean;\r\n private _myAddWLToWindow!: boolean;\r\n\r\n private _myGetDefaultResourcesComponent!: GetDefaultResourcesComponent;\r\n private _myGetSceneObjectsComponent!: GetSceneObjectsComponent;\r\n private _myEnableDebugComponent!: EnableDebugComponent;\r\n private _myEnableToolComponent!: EnableToolComponent;\r\n private _myAddPPToWindowComponent!: AddPPToWindowComponent;\r\n private _myAddWLToWindowComponent!: AddWLToWindowComponent;\r\n private _myInitConsoleVRComponent!: InitConsoleVRComponent;\r\n private _myInitEasyTuneVariablesComponent!: InitEasyTuneVariablesComponent;\r\n private _myObjectPoolManagerComponent!: ObjectPoolManagerComponent;\r\n private _myInputManagerComponent!: InputManagerComponent;\r\n private _myAudioManagerComponent!: AudioManagerComponent;\r\n private _myVisualManagerComponent!: VisualManagerComponent;\r\n private _myCharacterCollisionSystemComponent!: CharacterCollisionSystemComponent;\r\n private _mySaveManagerComponent!: SaveManagerComponent;\r\n private _myAnalyticsManagerComponent!: AnalyticsManagerComponent;\r\n private _myDebugManagerComponent!: DebugManagerComponent;\r\n\r\n public static override onRegister(engine: WonderlandEngine): void {\r\n if (!_myRegisteredEngines.has(engine)) {\r\n _myRegisteredEngines.set(engine, null);\r\n initPP(engine);\r\n }\r\n }\r\n\r\n public override init(): void {\r\n this._myGetDefaultResourcesComponent = this.object.pp_addComponent(GetDefaultResourcesComponent, this._getProperties(GetDefaultResourcesComponent.Properties), false)!;\r\n this._myGetSceneObjectsComponent = this.object.pp_addComponent(GetSceneObjectsComponent, this._getProperties(GetSceneObjectsComponent.Properties), false)!;\r\n\r\n if (this._myEnableDebug) {\r\n this._myEnableDebugComponent = this.object.pp_addComponent(EnableDebugComponent, false)!;\r\n }\r\n\r\n if (this._myEnableTool) {\r\n this._myEnableToolComponent = this.object.pp_addComponent(EnableToolComponent, false)!;\r\n }\r\n\r\n if (this._myAddPPToWindow) {\r\n this._myAddPPToWindowComponent = this.object.pp_addComponent(AddPPToWindowComponent, false)!;\r\n }\r\n\r\n if (this._myAddWLToWindow) {\r\n this._myAddWLToWindowComponent = this.object.pp_addComponent(AddWLToWindowComponent, false)!;\r\n }\r\n\r\n this._myInitConsoleVRComponent = this.object.pp_addComponent(InitConsoleVRComponent, false)!;\r\n this._myInitEasyTuneVariablesComponent = this.object.pp_addComponent(InitEasyTuneVariablesComponent, false)!;\r\n\r\n this._myObjectPoolManagerComponent = this.object.pp_addComponent(ObjectPoolManagerComponent, this._getProperties(ObjectPoolManagerComponent.Properties), false)!;\r\n this._myInputManagerComponent = this.object.pp_addComponent(InputManagerComponent, this._getProperties(InputManagerComponent.Properties), false)!;\r\n this._myAudioManagerComponent = this.object.pp_addComponent(AudioManagerComponent, this._getProperties(AudioManagerComponent.Properties), false)!;\r\n this._myVisualManagerComponent = this.object.pp_addComponent(VisualManagerComponent, this._getProperties(VisualManagerComponent.Properties), false)!;\r\n this._myCharacterCollisionSystemComponent = this.object.pp_addComponent(CharacterCollisionSystemComponent, this._getProperties(CharacterCollisionSystemComponent.Properties), false)!;\r\n this._mySaveManagerComponent = this.object.pp_addComponent(SaveManagerComponent, this._getProperties(SaveManagerComponent.Properties), false)!;\r\n this._myAnalyticsManagerComponent = this.object.pp_addComponent(AnalyticsManagerComponent, this._getProperties(AnalyticsManagerComponent.Properties), false)!;\r\n\r\n this._myDebugManagerComponent = this.object.pp_addComponent(DebugManagerComponent, this._getProperties(DebugManagerComponent.Properties), false)!;\r\n }\r\n\r\n public override start(): void {\r\n this._myGetDefaultResourcesComponent.active = true;\r\n this._myGetSceneObjectsComponent.active = true;\r\n\r\n if (this._myEnableDebugComponent != null) {\r\n this._myEnableDebugComponent.active = true;\r\n }\r\n\r\n if (this._myEnableToolComponent != null) {\r\n this._myEnableToolComponent.active = true;\r\n }\r\n\r\n if (this._myAddPPToWindowComponent != null) {\r\n this._myAddPPToWindowComponent.active = true;\r\n }\r\n\r\n if (this._myAddWLToWindowComponent != null) {\r\n this._myAddWLToWindowComponent.active = true;\r\n }\r\n\r\n this._myInitConsoleVRComponent.active = true;\r\n this._myInitEasyTuneVariablesComponent.active = true;\r\n\r\n this._myObjectPoolManagerComponent.active = true;\r\n this._myInputManagerComponent.active = true;\r\n this._myAudioManagerComponent.active = true;\r\n this._myVisualManagerComponent.active = true;\r\n this._myCharacterCollisionSystemComponent.active = true;\r\n this._mySaveManagerComponent.active = true;\r\n this._myAnalyticsManagerComponent.active = true;\r\n\r\n this._myDebugManagerComponent.active = true;\r\n }\r\n\r\n private _getProperties(propertiesToGet: Record): Record {\r\n const properties: Record = {};\r\n\r\n if (propertiesToGet != null) {\r\n const propertyNames = Object.getOwnPropertyNames(propertiesToGet);\r\n\r\n for (const propertyName of propertyNames) {\r\n const _this = (this as any);\r\n if (_this[propertyName] != undefined) {\r\n properties[propertyName] = _this[propertyName];\r\n }\r\n }\r\n }\r\n\r\n return properties;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { AudioManager } from \"../audio_manager.js\";\r\n\r\nexport class AudioManagerComponent extends Component {\r\n static TypeName = \"pp-audio-manager\";\r\n static Properties = {\r\n _myPreloadAudio: Property.bool(false),\r\n _myCleanUpAudioSourcesOnInit: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myAudioManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasAudioManager(this.engine)) {\r\n this._myAudioManager = new AudioManager(this._myPreloadAudio, this.engine);\r\n\r\n if (this._myCleanUpAudioSourcesOnInit) {\r\n this._myAudioManager.unloadAllAudioSources();\r\n }\r\n\r\n Globals.setAudioManager(this._myAudioManager, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myAudioManager != null && Globals.getAudioManager(this.engine) == this._myAudioManager) {\r\n Globals.removeAudioManager(this.engine);\r\n }\r\n }\r\n}", "import { Howler } from \"howler\";\r\nimport { Globals } from \"../pp/globals.js\";\r\nimport { AudioPlayer } from \"./audio_player.js\";\r\n\r\nexport class AudioManager {\r\n\r\n constructor(preloadAudio = true, engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myPreloadAudio = preloadAudio;\r\n this._myAudioSetups = new Map();\r\n\r\n this._myAudioPlayersCreatedForPreload = [];\r\n }\r\n\r\n createAudioPlayer(audioSetupID) {\r\n let audioSetup = this.getAudioSetup(audioSetupID);\r\n if (audioSetup != null) {\r\n return new AudioPlayer(this.getAudioSetup(audioSetupID));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getAudioSetup(id) {\r\n return this._myAudioSetups.get(id);\r\n }\r\n\r\n addAudioSetup(id, audioSetup, preloadAudioOverride = null) {\r\n this._myAudioSetups.set(id, audioSetup);\r\n if ((this._myPreloadAudio && preloadAudioOverride == null) || (preloadAudioOverride != null && preloadAudioOverride)) {\r\n this._myAudioPlayersCreatedForPreload.push(this.createAudioPlayer(id));\r\n }\r\n }\r\n\r\n removeAudioSetup(id) {\r\n this._myAudioSetups.delete(id);\r\n }\r\n\r\n setVolume(volume) {\r\n Howler.volume(volume);\r\n }\r\n\r\n setMute(mute) {\r\n Howler.mute(mute);\r\n }\r\n\r\n stop() {\r\n Howler.stop();\r\n }\r\n\r\n unloadAllAudioSources() {\r\n Howler.unload();\r\n }\r\n}", "import { RetainEmitter } from \"@wonderlandengine/api\";\r\nimport { Howl, Howler } from \"howler\";\r\nimport { AudioSetup } from \"./audio_setup.js\";\r\n\r\nexport let AudioEvent = {\r\n END: \"end\",\r\n STOP: \"stop\",\r\n LOAD: \"load\",\r\n LOAD_ERROR: \"loaderror\",\r\n PLAY: \"play\",\r\n PLAY_ERROR: \"playerror\",\r\n PAUSE: \"pause\",\r\n MUTE: \"mute\",\r\n VOLUME: \"volume\",\r\n RATE: \"rate\",\r\n SEEK: \"seek\",\r\n FADE: \"fade\",\r\n UNLOCK: \"unlock\"\r\n};\r\n\r\nexport class AudioPlayer {\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @param {any} audioInstance\r\n */\r\n constructor(audioSetupOrAudioFilePath, audioInstance = null) {\r\n if (audioSetupOrAudioFilePath == null) {\r\n this._myAudioSetup = new AudioSetup();\r\n } else if (typeof audioSetupOrAudioFilePath == \"string\") {\r\n this._myAudioSetup = new AudioSetup(audioSetupOrAudioFilePath);\r\n } else {\r\n this._myAudioSetup = audioSetupOrAudioFilePath.clone();\r\n }\r\n\r\n this._myAudio = null;\r\n\r\n if (audioInstance == null) {\r\n this._myAudio = new Howl({\r\n src: [this._myAudioSetup.myAudioFilePath],\r\n loop: this._myAudioSetup.myLoop,\r\n volume: this._myAudioSetup.myVolume,\r\n autoplay: false,\r\n rate: this._myAudioSetup.myRate,\r\n pool: this._myAudioSetup.myPool,\r\n pos: (this._myAudioSetup.mySpatial) ? this._myAudioSetup.myPosition : null,\r\n refDistance: this._myAudioSetup.myReferenceDistance,\r\n preload: this._myAudioSetup.myPreload\r\n });\r\n\r\n this._myAudio._pannerAttr.refDistance = this._myAudioSetup.myReferenceDistance;\r\n } else {\r\n this._myAudio = audioInstance;\r\n }\r\n\r\n this._myLastAudioID = null;\r\n\r\n this._myAudioEventEmitters = new Map();\r\n for (let eventKey in AudioEvent) {\r\n this._myAudioEventEmitters.set(AudioEvent[eventKey], new RetainEmitter()); // Signature: listener(audioID)\r\n }\r\n\r\n this._addListeners();\r\n\r\n if (this._myAudioSetup.myAutoPlay) {\r\n this.play();\r\n }\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isValid() {\r\n return this._myAudio != null;\r\n }\r\n\r\n play() {\r\n if (Howler.state != \"running\" && this._myAudioSetup.myPreventPlayWhenAudioContextNotRunning) {\r\n return false;\r\n }\r\n\r\n let audioID = this._myAudio.play();\r\n if (audioID != null) {\r\n this._myLastAudioID = audioID;\r\n\r\n this.updatePosition(this._myAudioSetup.myPosition, true);\r\n this.updatePitch(this._myAudioSetup.myPitch, true);\r\n this.updateVolume(this._myAudioSetup.myVolume, true);\r\n }\r\n\r\n return audioID != null;\r\n }\r\n\r\n stop() {\r\n this._myAudio.stop();\r\n }\r\n\r\n pause() {\r\n this._myAudio.pause();\r\n }\r\n\r\n resume() {\r\n this._myAudio.play();\r\n }\r\n\r\n isPlaying(checkOnlyLast = false) {\r\n let playing = false;\r\n\r\n if (checkOnlyLast) {\r\n playing = this._myAudio.playing(this._myLastAudioID);\r\n }\r\n else {\r\n playing = this._myAudio.playing();\r\n }\r\n\r\n return playing;\r\n }\r\n\r\n isLoaded() {\r\n return this._myAudio.state() == \"loaded\";\r\n }\r\n\r\n fade(fromVolume, toVolume, duration, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setVolume(toVolume);\r\n }\r\n\r\n if (updateOnlyLast) {\r\n this._myAudio.fade(fromVolume, toVolume, duration * 1000, this._myLastAudioID);\r\n } else {\r\n this._myAudio.fade(fromVolume, toVolume, duration * 1000);\r\n }\r\n }\r\n\r\n isFading(checkOnlyLast = true) {\r\n let fading = false;\r\n\r\n if (checkOnlyLast) {\r\n let lastSound = this._myAudio._soundById(this._myLastAudioID);\r\n if (lastSound != null) {\r\n fading = lastSound._fadeTo != null;\r\n }\r\n } else {\r\n for (let sound of this._myAudio._sounds) {\r\n if (sound._fadeTo != null) {\r\n fading = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return fading;\r\n }\r\n\r\n updatePosition(position, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setPosition(position);\r\n }\r\n\r\n if (this._myAudioSetup.mySpatial && position) {\r\n if (updateOnlyLast) {\r\n this._myAudio.pos(position[0], position[1], position[2], this._myLastAudioID);\r\n } else {\r\n this._myAudio.pos(position[0], position[1], position[2]);\r\n }\r\n }\r\n }\r\n\r\n updatePitch(pitch, updateOnlyLast = true, setValueOnPlayer = true) {\r\n this.updateRate(pitch, updateOnlyLast, setValueOnPlayer);\r\n }\r\n\r\n updateRate(rate, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setRate(rate);\r\n }\r\n\r\n if (rate != null) {\r\n if (updateOnlyLast) {\r\n this._myAudio.rate(rate, this._myLastAudioID);\r\n } else {\r\n this._myAudio.rate(rate);\r\n }\r\n }\r\n }\r\n\r\n updateVolume(volume, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setVolume(volume);\r\n }\r\n\r\n if (volume != null) {\r\n if (updateOnlyLast) {\r\n this._myAudio.volume(volume, this._myLastAudioID);\r\n } else {\r\n this._myAudio.volume(volume);\r\n }\r\n }\r\n }\r\n\r\n setSpatial(spatial) {\r\n this._myAudioSetup.mySpatial = spatial;\r\n }\r\n\r\n setPosition(position) {\r\n this._myAudioSetup.myPosition = position;\r\n }\r\n\r\n setPitch(pitch) {\r\n this._myAudioSetup.myPitch = pitch;\r\n }\r\n\r\n setRate(rate) {\r\n this._myAudioSetup.myRate = rate;\r\n }\r\n\r\n setVolume(volume) {\r\n this._myAudioSetup.myVolume = volume;\r\n }\r\n\r\n getDuration() {\r\n return this._myAudio.duration();\r\n }\r\n\r\n getVolume() {\r\n return this._myAudioSetup.myVolume;\r\n }\r\n\r\n getPitch() {\r\n return this._myAudioSetup.myPitch;\r\n }\r\n\r\n getRate() {\r\n return this._myAudioSetup.myRate;\r\n }\r\n\r\n registerAudioEventListener(audioEvent, id, listener, notifyOnce = false, notifyIfAlreadyHappened = false) {\r\n this._myAudioEventEmitters.get(audioEvent).add(listener, { id: id, once: notifyOnce, immediate: notifyIfAlreadyHappened });\r\n }\r\n\r\n unregisterAudioEventListener(audioEvent, id) {\r\n this._myAudioEventEmitters.get(audioEvent).remove(id);\r\n }\r\n\r\n _addListeners() {\r\n if (this._myAudio != null) {\r\n for (let eventKey in AudioEvent) {\r\n let event = AudioEvent[eventKey];\r\n this._myAudio.on(event, function (audioID) {\r\n let emitter = this._myAudioEventEmitters.get(event);\r\n emitter.notify(audioID);\r\n }.bind(this));\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myAudio.unload();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "export class AudioSetup {\r\n\r\n constructor(audioFilePath = null) {\r\n this.myAudioFilePath = audioFilePath;\r\n\r\n this.myLoop = false;\r\n this.myAutoPlay = false;\r\n\r\n this.myVolume = 1.0;\r\n this._myRate = 1.0; // From 0.5 to 4.0\r\n\r\n this.myPool = 5;\r\n this.myPreload = true;\r\n\r\n this.myPreventPlayWhenAudioContextNotRunning = false;\r\n\r\n // Spatial Params\r\n\r\n this.myPosition = null;\r\n this.mySpatial = true;\r\n this.myReferenceDistance = Number.MAX_VALUE; // At this distance (and closer) the volume is not reduced\r\n }\r\n\r\n clone() {\r\n let audioSetup = new AudioSetup();\r\n\r\n audioSetup.myAudioFilePath = this.myAudioFilePath;\r\n\r\n audioSetup.myLoop = this.myLoop;\r\n audioSetup.myAutoPlay = this.myAutoPlay;\r\n\r\n audioSetup.myVolume = this.myVolume;\r\n audioSetup.myPitch = this.myPitch;\r\n audioSetup.myRate = this.myRate;\r\n\r\n audioSetup.myPool = this.myPool;\r\n audioSetup.myPreload = this.myPreload;\r\n\r\n audioSetup.myPreventPlayWhenAudioContextNotRunning = this.myPreventPlayWhenAudioContextNotRunning;\r\n\r\n // Spatial\r\n\r\n if (this.myPosition != null) {\r\n audioSetup.myPosition = this.myPosition.vec3_clone();\r\n } else {\r\n audioSetup.myPosition = null;\r\n }\r\n\r\n audioSetup.mySpatial = this.mySpatial;\r\n audioSetup.myReferenceDistance = this.myReferenceDistance;\r\n\r\n return audioSetup;\r\n }\r\n\r\n get myPitch() {\r\n return this._myRate;\r\n }\r\n\r\n get myRate() {\r\n return this._myRate;\r\n }\r\n\r\n set myPitch(pitch) {\r\n this._myRate = pitch;\r\n }\r\n\r\n set myRate(rate) {\r\n this._myRate = rate;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { BrowserUtils } from \"../../utils/browser_utils.js\";\r\nimport { AnalyticsManager } from \"../analytics_manager.js\";\r\n\r\nexport class AnalyticsManagerComponent extends Component {\r\n static TypeName = \"pp-analytics-manager\";\r\n static Properties = {\r\n _myDisableAnalyticsOnLocalhost: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myAnalyticsManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasAnalyticsManager(this.engine)) {\r\n this._myAnalyticsManager = new AnalyticsManager();\r\n\r\n if (BrowserUtils.isLocalhost() && this._myDisableAnalyticsOnLocalhost) {\r\n this._myAnalyticsManager.setAnalyticsEnabled(false);\r\n }\r\n\r\n Globals.setAnalyticsManager(this._myAnalyticsManager, this.engine);\r\n\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myAnalyticsManager != null) {\r\n this._myAnalyticsManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myAnalyticsManager != null && Globals.getAnalyticsManager(this.engine) == this._myAnalyticsManager) {\r\n Globals.removeAnalyticsManager(this.engine);\r\n }\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\nimport { BrowserUtils } from \"./browser_utils.js\";\r\n\r\nexport function getSession(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.session : null;\r\n}\r\n\r\nexport function getSessionMode(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.sessionMode : null;\r\n}\r\n\r\nexport function getReferenceSpace(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.currentReferenceSpace : null;\r\n}\r\n\r\nexport function getReferenceSpaceType(engine = Globals.getMainEngine()) {\r\n let type = \"local\";\r\n\r\n try {\r\n let xr = Globals.getXR(engine);\r\n type = xr != null ? xr.currentReferenceSpaceType : null;\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n\r\n return type;\r\n}\r\n\r\nexport function getFrame(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.frame : null;\r\n}\r\n\r\nexport function isSessionActive(engine = Globals.getMainEngine()) {\r\n return XRUtils.getSession(engine) != null;\r\n}\r\n\r\nexport function isReferenceSpaceFloorBased(engine = Globals.getMainEngine()) {\r\n return XRUtils.getReferenceSpaceType(engine).includes(\"floor\");\r\n}\r\n\r\nexport function exitSession(engine = Globals.getMainEngine()) {\r\n let xrSession = XRUtils.getSession(engine);\r\n\r\n if (xrSession != null) {\r\n xrSession.end();\r\n }\r\n}\r\n\r\nexport function registerSessionStartEventListener(id, listener, manuallyCallSessionStartIfSessionAlreadyActive = true, addManualCallFlagToStartListener = false, engine = Globals.getMainEngine()) {\r\n if (listener != null) {\r\n if (addManualCallFlagToStartListener) {\r\n engine.onXRSessionStart.add(listener.bind(undefined, false), { id: id, immediate: false });\r\n } else {\r\n engine.onXRSessionStart.add(listener, { id: id, immediate: false });\r\n }\r\n\r\n if (manuallyCallSessionStartIfSessionAlreadyActive && XRUtils.isSessionActive(engine)) {\r\n if (addManualCallFlagToStartListener) {\r\n listener(true, XRUtils.getSession(engine), XRUtils.getSessionMode(engine));\r\n } else {\r\n listener(XRUtils.getSession(engine), XRUtils.getSessionMode(engine));\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function unregisterSessionStartEventListener(id, engine = Globals.getMainEngine()) {\r\n engine.onXRSessionStart.remove(id);\r\n}\r\n\r\nexport function registerSessionEndEventListener(id, listener, engine = Globals.getMainEngine()) {\r\n if (listener != null) {\r\n engine.onXRSessionEnd.add(listener, { id: id });\r\n }\r\n}\r\n\r\nexport function unregisterSessionEndEventListener(id, engine = Globals.getMainEngine()) {\r\n return engine.onXRSessionEnd.remove(id);\r\n}\r\n\r\nexport function registerSessionStartEndEventListeners(id, startListener, endListener, manuallyCallSessionStartIfSessionAlreadyActive = true, addManualCallFlagToStartListener = false, engine = Globals.getMainEngine()) {\r\n XRUtils.registerSessionEndEventListener(id, endListener, engine);\r\n XRUtils.registerSessionStartEventListener(id, startListener, manuallyCallSessionStartIfSessionAlreadyActive, addManualCallFlagToStartListener, engine);\r\n}\r\n\r\nexport function unregisterSessionStartEndEventListeners(id, engine = Globals.getMainEngine()) {\r\n XRUtils.unregisterSessionEndEventListener(id, engine);\r\n XRUtils.unregisterSessionStartEventListener(id, engine);\r\n}\r\n\r\nexport function isXRSupported(engine = Globals.getMainEngine()) {\r\n return XRUtils.isVRSupported(engine) || XRUtils.isARSupported(engine);\r\n}\r\n\r\nexport function isVRSupported(engine = Globals.getMainEngine()) {\r\n return engine.vrSupported;\r\n}\r\n\r\nexport function isARSupported(engine = Globals.getMainEngine()) {\r\n return engine.arSupported;\r\n}\r\n\r\nexport function isDeviceEmulated(onlyOnLocalhost = true) {\r\n let emulated = window.CustomWebXRPolyfill != null && (!onlyOnLocalhost || BrowserUtils.isLocalhost());\r\n return emulated;\r\n}\r\n\r\nexport let XRUtils = {\r\n getSession,\r\n getSessionMode,\r\n getReferenceSpace,\r\n getReferenceSpaceType,\r\n getFrame,\r\n isSessionActive,\r\n exitSession,\r\n registerSessionStartEventListener,\r\n unregisterSessionStartEventListener,\r\n registerSessionEndEventListener,\r\n unregisterSessionEndEventListener,\r\n registerSessionStartEndEventListeners,\r\n unregisterSessionStartEndEventListeners,\r\n isReferenceSpaceFloorBased,\r\n isXRSupported,\r\n isVRSupported,\r\n isARSupported,\r\n isDeviceEmulated\r\n};", "import { Globals } from \"../../pp/globals.js\";\r\nimport { XRUtils } from \"./xr_utils.js\";\r\n\r\nexport let isMobile = function () {\r\n let checkMobileRegex = new RegExp(\"Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\", \"i\");\r\n return function isMobile() {\r\n let userAgent = navigator.userAgent;\r\n return userAgent != null && userAgent.match(checkMobileRegex) != null;\r\n };\r\n}();\r\n\r\nexport function isDesktop() {\r\n return !BrowserUtils.isMobile();\r\n}\r\n\r\nexport let isLocalhost = function () {\r\n let localhostRegex = new RegExp(\"(localhost|127\\\\.0\\\\.0\\\\.1)(:(\\\\d{4}))?\");\r\n return function isLocalhost(port = null, isRegex = false) {\r\n let isLocalhost = false;\r\n\r\n let localhostMatch = window.location.origin.match(localhostRegex);\r\n\r\n if (localhostMatch != null) {\r\n if (port == null) {\r\n isLocalhost = true;\r\n } else if (localhostMatch.length >= 4 && localhostMatch[3] != null) {\r\n let portMatch = localhostMatch[3];\r\n if (isRegex) {\r\n isLocalhost = portMatch.match(port) != null;\r\n } else {\r\n isLocalhost = portMatch == port;\r\n }\r\n }\r\n }\r\n\r\n return isLocalhost;\r\n };\r\n}();\r\n\r\nexport function openLink(url, newTab = true, exitXRSessionBeforeOpen = true, exitXRSessionOnSuccess = true, tryOpenLinkOnClickOnFailure = false, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n let element = document.createElement(\"a\");\r\n\r\n element.style.display = \"none\";\r\n\r\n document.body.appendChild(element);\r\n\r\n element.addEventListener(\"click\", function () {\r\n let targetPage = undefined;\r\n if (newTab) {\r\n targetPage = \"_blank\";\r\n } else {\r\n targetPage = \"_top\";\r\n }\r\n\r\n let result = window.open(url, targetPage);\r\n\r\n if (result != null) {\r\n if (!exitXRSessionBeforeOpen && exitXRSessionOnSuccess) {\r\n XRUtils.exitSession(engine);\r\n }\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n } else {\r\n if (tryOpenLinkOnClickOnFailure) {\r\n setTimeout(function () {\r\n BrowserUtils.openLinkOnClick(url, newTab, exitXRSessionOnSuccess, onSuccessCallback, onFailureCallback);\r\n }, 100);\r\n } else if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n }\r\n });\r\n\r\n if (exitXRSessionBeforeOpen) {\r\n XRUtils.exitSession(engine);\r\n }\r\n\r\n element.click();\r\n\r\n document.body.removeChild(element);\r\n}\r\n\r\nexport function openLinkOnClick(url, newTab = true, exitXRSessionOnSuccess = true, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n document.addEventListener(\"click\", function () {\r\n let targetPage = undefined;\r\n if (newTab) {\r\n targetPage = \"_blank\";\r\n } else {\r\n targetPage = \"_top\";\r\n }\r\n\r\n let result = window.open(url, targetPage);\r\n\r\n if (result != null) {\r\n if (exitXRSessionOnSuccess) {\r\n XRUtils.exitSession(engine);\r\n }\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n } else {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n }\r\n }, { once: true });\r\n}\r\n\r\nexport let BrowserUtils = {\r\n isMobile,\r\n isDesktop,\r\n isLocalhost,\r\n openLink,\r\n openLinkOnClick\r\n};", "export class AnalyticsManager {\r\n constructor() {\r\n this._myAnalyticsEnabled = true;\r\n\r\n this._mySendDataCallback = null;\r\n\r\n this._myDefaultEventCooldown = 0;\r\n this._myEventCooldowns = new Map();\r\n\r\n this._myDataLogEnabled = false;\r\n this._myEventsLogEnabled = false;\r\n\r\n this._myErrorsLogEnabled = false;\r\n }\r\n\r\n update(dt) {\r\n if (this._myEventCooldowns.size > 0) {\r\n let eventNamesToUpdateCooldown = this._myEventCooldowns.keys();\r\n for (let eventName of eventNamesToUpdateCooldown) {\r\n let newCooldown = this._myEventCooldowns.get(eventName) - dt;\r\n if (newCooldown <= 0) {\r\n this._myEventCooldowns.delete(eventName);\r\n } else {\r\n this._myEventCooldowns.set(eventName, newCooldown);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setAnalyticsEnabled(enabled) {\r\n this._myAnalyticsEnabled = enabled;\r\n }\r\n\r\n isAnalyticsEnabled() {\r\n return this._myAnalyticsEnabled;\r\n }\r\n\r\n setSendDataCallback(callback) {\r\n this._mySendDataCallback = callback;\r\n }\r\n\r\n sendData(...args) {\r\n let dataSent = false;\r\n\r\n try {\r\n if (this._myAnalyticsEnabled) {\r\n if (this._myDataLogEnabled) {\r\n console.log(\"Analytics Data: \" + args);\r\n }\r\n\r\n if (this._mySendDataCallback != null) {\r\n this._mySendDataCallback(...args);\r\n\r\n dataSent = true;\r\n } else if (this._myErrorsLogEnabled) {\r\n console.error(\"Analytics Error: You need to set the send data callback\");\r\n } else {\r\n console.warn(\"Analytics Error: You need to set the send data callback\");\r\n }\r\n }\r\n } catch (error) {\r\n if (this._myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n\r\n dataSent = false;\r\n }\r\n\r\n return dataSent;\r\n }\r\n\r\n sendEvent(eventName, value = null) {\r\n let eventSent = false;\r\n\r\n try {\r\n if (this._myAnalyticsEnabled) {\r\n if (this._myEventsLogEnabled) {\r\n if (value != null) {\r\n console.log(\"Analytics Event: \" + eventName + \" - Value: \" + value);\r\n } else {\r\n console.log(\"Analytics Event: \" + eventName);\r\n }\r\n }\r\n\r\n if (this._mySendDataCallback != null) {\r\n if (value != null) {\r\n this._mySendDataCallback(\"event\", eventName, { \"value\": value });\r\n } else {\r\n this._mySendDataCallback(\"event\", eventName);\r\n }\r\n\r\n eventSent = true;\r\n } else if (this._myErrorsLogEnabled) {\r\n console.error(\"Analytics Error: You need to set the send data callback\");\r\n } else {\r\n console.warn(\"Analytics Error: You need to set the send data callback\");\r\n }\r\n }\r\n } catch (error) {\r\n if (this._myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n\r\n eventSent = false;\r\n }\r\n\r\n return eventSent;\r\n }\r\n\r\n sendEventOnce(eventName, value = null) {\r\n if (this._myAnalyticsEnabled) {\r\n if (!this.hasEventAlreadyBeenSent(eventName)) {\r\n let eventSent = this.sendEvent(eventName, value, true);\r\n\r\n if (eventSent) {\r\n this._myEventsSentOnce.pp_pushUnique(eventName);\r\n }\r\n }\r\n }\r\n }\r\n\r\n clearEventSentOnceState(eventName) {\r\n this._myEventsSentOnce.pp_removeEqual(eventName);\r\n }\r\n\r\n clearAllEventsSentOnceState() {\r\n this._myEventsSentOnce.pp_clear();\r\n }\r\n\r\n hasEventAlreadyBeenSent(eventName) {\r\n return this._myEventsSentOnce.pp_hasEqual(eventName);\r\n }\r\n\r\n getEventsAlreadyBeenSent() {\r\n return this._myEventsSentOnce;\r\n }\r\n\r\n sendEventWithCooldown(eventName, value = null, cooldownSeconds = this._myDefaultEventCooldown) {\r\n if (this._myAnalyticsEnabled) {\r\n if (this.getEventCooldown(eventName) <= 0) {\r\n let eventSent = this.sendEvent(eventName, value, true);\r\n\r\n if (eventSent) {\r\n this._myEventCooldowns.set(eventName, cooldownSeconds);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getDefaultEventCooldown() {\r\n return this._myDefaultEventCooldown;\r\n }\r\n\r\n setDefaultEventCooldown(cooldownSeconds) {\r\n this._myDefaultEventCooldown = cooldownSeconds;\r\n }\r\n\r\n clearEventCooldown(eventName) {\r\n this._myEventCooldowns.delete(eventName);\r\n }\r\n\r\n clearAllEventCooldowns() {\r\n this._myEventCooldowns.clear();\r\n }\r\n\r\n getEventCooldown(eventName) {\r\n let eventCooldown = this._myEventCooldowns.get(eventName);\r\n\r\n if (eventCooldown != null) {\r\n return eventCooldown;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n getEventCooldowns() {\r\n return this._myEventCooldowns;\r\n }\r\n\r\n setDataLogEnabled(enabled) {\r\n this._myDataLogEnabled = enabled;\r\n }\r\n\r\n isDataLogEnabled() {\r\n return this._myDataLogEnabled;\r\n }\r\n\r\n setEventsLogEnabled(enabled) {\r\n this._myEventsLogEnabled = enabled;\r\n }\r\n\r\n isEventsLogEnabled() {\r\n return this._myEventsLogEnabled;\r\n }\r\n\r\n setErrorsLogEnabled(enabled) {\r\n this._myErrorsLogEnabled = enabled;\r\n }\r\n\r\n isErrorsLogEnabled() {\r\n return this._myErrorsLogEnabled;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { SaveManager } from \"../save_manager.js\";\r\n\r\nexport class SaveManagerComponent extends Component {\r\n static TypeName = \"pp-save-manager\";\r\n static Properties = {\r\n _mySaveID: Property.string(\"\"),\r\n _myAutoLoadSaves: Property.bool(true),\r\n };\r\n\r\n init() {\r\n this._mySaveManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (this._mySaveID.length > 0 && !Globals.hasSaveManager(this.engine)) {\r\n this._mySaveManager = new SaveManager(this._mySaveID, this._myAutoLoadSaves, this.engine);\r\n\r\n Globals.setSaveManager(this._mySaveManager, this.engine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._mySaveManager != null) {\r\n this._mySaveManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._mySaveManager != null && Globals.getSaveManager(this.engine) == this._mySaveManager) {\r\n Globals.removeSaveManager(this.engine);\r\n }\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { SaveUtils } from \"../utils/save_utils.js\";\r\nimport { XRUtils } from \"../utils/xr_utils.js\";\r\nimport { Timer } from \"./timer.js\";\r\n\r\nexport class SaveManager {\r\n\r\n constructor(saveID, autoLoadSaves = true, engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._mySaveID = saveID;\r\n\r\n this._myCommitSavesDelayTimer = new Timer(0, false);\r\n this._myDelaySavesCommit = true;\r\n this._myCommitSavesDirty = false;\r\n this._myCommitSavesDirtyClearOnFail = true;\r\n this._myCommitSavesOnInterrupt = true;\r\n this._myCommitSavesWhenLoadSavesFailed = false;\r\n this._myResetSaveObjectOnLoadSavesFail = false;\r\n\r\n this._mySaveObject = {};\r\n this._myLoadSavesSucceded = false;\r\n\r\n this._mySaveObjectLoadedOnce = false;\r\n this._myAtLeastOneValueSavedOnce = false;\r\n\r\n this._myClearEmitter = new Emitter(); // Signature: listener()\r\n this._myDeleteEmitter = new Emitter(); // Signature: listener(id)\r\n this._myDeleteIDEmitters = new Map(); // Signature: listener(id)\r\n this._mySaveEmitter = new Emitter(); // Signature: listener(id, value)\r\n this._mySaveValueChangedEmitter = new Emitter(); // Signature: listener(id, value)\r\n this._mySaveIDEmitters = new Map(); // Signature: listener(id, value)\r\n this._mySaveValueChangedIDEmitters = new Map(); // Signature: listener(id, value)\r\n this._myCommitSavesEmitter = new Emitter(); // Signature: listener(succeeded)\r\n this._myLoadEmitter = new Emitter(); // Signature: listener(id, value)\r\n this._myLoadIDEmitters = new Map(); // Signature: listener(id, value)\r\n this._myLoadSavesEmitter = new Emitter(); // Signature: listener(loadSavesSucceded, saveObjectReset)\r\n\r\n if (autoLoadSaves) {\r\n this.loadSaves();\r\n }\r\n\r\n this._myXRVisibilityChangeEventListener = null;\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n\r\n this._myWindowVisibilityChangeEventListener = function () {\r\n if (document.visibilityState != \"visible\") {\r\n this._onInterrupt();\r\n }\r\n }.bind(this);\r\n window.addEventListener('visibilitychange', this._myWindowVisibilityChangeEventListener);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setCommitSavesDelay(delay) {\r\n this._myCommitSavesDelayTimer.start(delay);\r\n }\r\n\r\n setDelaySavesCommit(delayed) {\r\n this._myDelaySavesCommit = delayed;\r\n }\r\n\r\n setCommitSavesDirty(dirty, startDelayTimer = true) {\r\n this._myCommitSavesDirty = dirty;\r\n if (dirty && startDelayTimer) {\r\n if (!this.startDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._myCommitSavesDelayTimer.reset();\r\n }\r\n }\r\n\r\n setCommitSavesDirtyClearOnFail(clearOnFail) {\r\n this._myCommitSavesDirtyClearOnFail = clearOnFail;\r\n }\r\n\r\n setCommitSavesOnInterrupt(commitSavesOnInterrupt) {\r\n this._myCommitSavesOnInterrupt = commitSavesOnInterrupt;\r\n }\r\n\r\n setCommitSavesWhenLoadSavesFailed(commitSavesWhenLoadSavesFailed) {\r\n this._myCommitSavesWhenLoadSavesFailed = commitSavesWhenLoadSavesFailed;\r\n }\r\n\r\n setResetSaveObjectOnLoadSavesFail(resetSaveObjectOnLoadSavesFail) {\r\n this._myResetSaveObjectOnLoadSavesFail = resetSaveObjectOnLoadSavesFail;\r\n }\r\n\r\n getCommitSavesDelay() {\r\n return this._myCommitSavesDelayTimer.getDuration();\r\n }\r\n\r\n isDelaySavesCommit() {\r\n return this._myDelaySavesCommit;\r\n }\r\n\r\n isCommitSavesDirty() {\r\n return this._myCommitSavesDirty;\r\n }\r\n\r\n isCommitSavesDirtyClearOnFail() {\r\n return this._myCommitSavesDirtyClearOnFail;\r\n }\r\n\r\n isCommitSavesOnInterrupt() {\r\n return this._myCommitSavesOnInterrupt;\r\n }\r\n\r\n isCommitSavesWhenLoadSavesFailed() {\r\n return this._myCommitSavesWhenLoadSavesFailed;\r\n }\r\n\r\n isResetSaveObjectOnLoadSavesFail() {\r\n return this._myResetSaveObjectOnLoadSavesFail;\r\n }\r\n\r\n hasLoadSavesSucceded() {\r\n return this._myLoadSavesSucceded;\r\n }\r\n\r\n update(dt) {\r\n if (this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.update(dt);\r\n if (this._myCommitSavesDelayTimer.isDone()) {\r\n if (this._myCommitSavesDirty) {\r\n this._commitSaves();\r\n }\r\n }\r\n } else {\r\n if (this._myCommitSavesDirty) {\r\n this._commitSaves();\r\n }\r\n }\r\n }\r\n\r\n has(id) {\r\n return id in this._mySaveObject;\r\n }\r\n\r\n save(id, value, overrideDelaySavesCommit = null) {\r\n let sameValue = false;\r\n if (this.has(id)) {\r\n sameValue = this._mySaveObject[id] === value;\r\n }\r\n\r\n if (!sameValue) {\r\n this._mySaveObject[id] = value;\r\n\r\n if ((this._myDelaySavesCommit && overrideDelaySavesCommit == null) || (overrideDelaySavesCommit != null && overrideDelaySavesCommit)) {\r\n this._myCommitSavesDirty = true;\r\n if (!this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n this._myAtLeastOneValueSavedOnce = true;\r\n\r\n this._mySaveEmitter.notify(id, value);\r\n\r\n if (this._mySaveIDEmitters.size > 0) {\r\n let emitter = this._mySaveIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id, value);\r\n }\r\n }\r\n\r\n if (!sameValue) {\r\n this._mySaveValueChangedEmitter.notify(id, value);\r\n\r\n if (this._mySaveValueChangedIDEmitters.size > 0) {\r\n let emitter = this._mySaveValueChangedIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n delete(id, overrideDelaySavesCommit = null) {\r\n if (this.has(id)) {\r\n delete this._mySaveObject[id];\r\n\r\n if ((this._myDelaySavesCommit && overrideDelaySavesCommit == null) || (overrideDelaySavesCommit != null && overrideDelaySavesCommit)) {\r\n this._myCommitSavesDirty = true;\r\n if (!this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n this._myAtLeastOneValueSavedOnce = true;\r\n\r\n this._myDeleteEmitter.notify(id);\r\n\r\n if (this._myDeleteIDEmitters.size > 0) {\r\n let emitter = this._myDeleteIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id);\r\n }\r\n }\r\n }\r\n\r\n clear(overrideDelaySavesCommit = null) {\r\n if (Object.keys(this._mySaveObject).length > 0) {\r\n this._mySaveObject = {};\r\n\r\n if ((this._myDelaySavesCommit && overrideDelaySavesCommit == null) || (overrideDelaySavesCommit != null && overrideDelaySavesCommit)) {\r\n this._myCommitSavesDirty = true;\r\n if (!this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n this._myAtLeastOneValueSavedOnce = true;\r\n\r\n this._myClearEmitter.notify();\r\n }\r\n\r\n load(id, defaultValue) {\r\n let value = this._mySaveObject[id];\r\n\r\n if (value == null && defaultValue != null) {\r\n value = defaultValue;\r\n }\r\n\r\n this._myLoadEmitter.notify(id, value);\r\n\r\n if (this._myLoadIDEmitters.size > 0) {\r\n let emitter = this._myLoadIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id, value);\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n commitSaves(commitSavesOnlyIfDirty = true) {\r\n if (this._myCommitSavesDirty || !commitSavesOnlyIfDirty) {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n _commitSaves() {\r\n let succeded = true;\r\n\r\n if (this._myLoadSavesSucceded || this._myCommitSavesWhenLoadSavesFailed) {\r\n try {\r\n let saveObjectStringified = JSON.stringify(this._mySaveObject);\r\n SaveUtils.save(this._mySaveID, saveObjectStringified);\r\n } catch (error) {\r\n succeded = false;\r\n }\r\n }\r\n\r\n if (succeded || this._myCommitSavesDirtyClearOnFail) {\r\n this._myCommitSavesDirty = false;\r\n this._myCommitSavesDelayTimer.reset();\r\n }\r\n\r\n this._myCommitSavesEmitter.notify(succeded);\r\n\r\n return succeded;\r\n }\r\n\r\n loadSaves() {\r\n let saveObject = {};\r\n let loadSavesSucceded = false;\r\n let saveObjectReset = false;\r\n\r\n let maxLoadObjectAttempts = 3;\r\n do {\r\n try {\r\n saveObject = SaveUtils.loadObject(this._mySaveID, {});\r\n loadSavesSucceded = true;\r\n } catch (error) {\r\n maxLoadObjectAttempts--;\r\n }\r\n } while (maxLoadObjectAttempts > 0 && !loadSavesSucceded);\r\n\r\n if (loadSavesSucceded) {\r\n this._mySaveObject = saveObject;\r\n this._myLoadSavesSucceded = true;\r\n } else if (this._myResetSaveObjectOnLoadSavesFail) {\r\n this._mySaveObject = {};\r\n this._myLoadSavesSucceded = false;\r\n\r\n saveObjectReset = true;\r\n }\r\n\r\n this._mySaveObjectLoadedOnce = true;\r\n\r\n this._myLoadSavesEmitter.notify(loadSavesSucceded, saveObjectReset);\r\n\r\n return loadSavesSucceded;\r\n }\r\n\r\n _onXRSessionStart(session) {\r\n this._myXRVisibilityChangeEventListener = function (event) {\r\n if (event.session.visibilityState != \"visible\") {\r\n this._onInterrupt();\r\n }\r\n }.bind(this);\r\n\r\n session.addEventListener(\"visibilitychange\", this._myXRVisibilityChangeEventListener);\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._myXRVisibilityChangeEventListener = null;\r\n\r\n this._onInterrupt();\r\n }\r\n\r\n _onInterrupt() {\r\n if (this._myCommitSavesOnInterrupt && this._myCommitSavesDirty && (this._mySaveObjectLoadedOnce || this._myAtLeastOneValueSavedOnce)) {\r\n this.commitSaves();\r\n }\r\n }\r\n\r\n registerClearEventListener(listenerID, listener) {\r\n this._myClearEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterClearEventListener(listenerID) {\r\n this._myClearEmitter.remove(listenerID);\r\n }\r\n\r\n registerDeleteEventListener(listenerID, listener) {\r\n this._myDeleteEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterDeleteEventListener(listenerID) {\r\n this._myDeleteEmitter.remove(listenerID);\r\n }\r\n\r\n registerDeleteIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._myDeleteIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._myDeleteIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._myDeleteIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterDeleteIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._myDeleteIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._myDeleteIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerSaveEventListener(listenerID, listener) {\r\n this._mySaveEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveEventListener(listenerID) {\r\n this._mySaveEmitter.remove(listenerID);\r\n }\r\n\r\n registerSaveIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._mySaveIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._mySaveIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._mySaveIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._mySaveIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._mySaveIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerSaveValueChangedEventListener(listenerID, listener) {\r\n this._mySaveValueChangedEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveValueChangedEventListener(listenerID) {\r\n this._mySaveValueChangedEmitter.remove(listenerID);\r\n }\r\n\r\n registerSaveValueChangedIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._mySaveValueChangedIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._mySaveValueChangedIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._mySaveValueChangedIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveValueChangedIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._mySaveValueChangedIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._mySaveValueChangedIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerCommitSavesEventListener(listenerID, listener) {\r\n this._myCommitSavesEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterCommitSavesEventListener(listenerID) {\r\n this._myCommitSavesEmitter.remove(listenerID);\r\n }\r\n\r\n registerLoadEventListener(listenerID, listener) {\r\n this._myLoadEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterLoadEventListener(listenerID) {\r\n this._myLoadEmitter.remove(listenerID);\r\n }\r\n\r\n registerLoadIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._myLoadIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._myLoadIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._myLoadIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterLoadIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._myLoadIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._myLoadIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerLoadSavesEventListener(listenerID, listener) {\r\n this._myLoadSavesEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterLoadSavesEventListener(listenerID) {\r\n this._myLoadSavesEmitter.remove(listenerID);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.getSession(this._myEngine)?.removeEventListener(\"visibilitychange\", this._myXRVisibilityChangeEventListener);\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n\r\n window.removeEventListener('visibilitychange', this._myWindowVisibilityChangeEventListener);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "export function save(id: string, value: string): void {\r\n if (value != null) {\r\n localStorage.setItem(id, value);\r\n }\r\n}\r\n\r\nexport function has(id: string): boolean {\r\n return SaveUtils.loadString(id, null) != null;\r\n}\r\n\r\nexport function remove(id: string): void {\r\n return localStorage.removeItem(id);\r\n}\r\n\r\nexport function clear(): void {\r\n return localStorage.clear();\r\n}\r\n\r\nexport function load(id: string, defaultValue: string | null = null): string | null {\r\n return SaveUtils.loadString(id, defaultValue);\r\n}\r\n\r\nexport function loadString(id: string, defaultValue: string | null = null): string | null {\r\n const item = localStorage.getItem(id);\r\n\r\n if (item != null) {\r\n return item;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadNumber(id: string, defaultValue: number | null = null): number | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item != null) {\r\n return Number(item);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadBool(id: string, defaultValue: boolean | null = null): boolean | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item == \"true\") {\r\n return true;\r\n } else if (item == \"false\") {\r\n return false;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadObject(id: string, defaultValue: Readonly | null = null): object | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item != null) {\r\n try {\r\n const parsedValue = JSON.parse(item);\r\n if (parsedValue.constructor == Object) {\r\n return parsedValue;\r\n }\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadArray(id: string, defaultValue: Readonly | null = null): T[] | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item != null) {\r\n try {\r\n const parsedValue = JSON.parse(item);\r\n if (Array.isArray(parsedValue)) {\r\n return parsedValue;\r\n }\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n }\r\n\r\n return defaultValue as T[] | null;\r\n}\r\n\r\nexport const SaveUtils = {\r\n save,\r\n has,\r\n remove,\r\n clear,\r\n load,\r\n loadString,\r\n loadNumber,\r\n loadBool,\r\n loadObject,\r\n loadArray\r\n} as const;", "import { Emitter } from \"@wonderlandengine/api\";\r\n\r\nexport class Timer {\r\n\r\n constructor(duration, autoStart = true) {\r\n this._myDuration = duration;\r\n this._myOnEndEmitter = new Emitter(); // Signature: listener()\r\n\r\n this._myDone = false;\r\n this._myJustDone = false;\r\n this._myStarted = false;\r\n\r\n if (autoStart) {\r\n this.start();\r\n } else {\r\n this.reset();\r\n }\r\n }\r\n\r\n start(duration = null) {\r\n this.reset(duration);\r\n this._myStarted = true;\r\n }\r\n\r\n end() {\r\n this._done();\r\n }\r\n\r\n reset(duration = null) {\r\n if (duration != null) {\r\n this._myDuration = Math.max(0, duration);\r\n }\r\n\r\n this._myTimeLeft = this._myDuration;\r\n this._myDone = false;\r\n this._myJustDone = false;\r\n this._myStarted = false;\r\n }\r\n\r\n update(dt) {\r\n this._myJustDone = false;\r\n\r\n if (this.isRunning()) {\r\n this._myTimeLeft = Math.max(0, this._myTimeLeft - dt);\r\n if (this._myTimeLeft == 0) {\r\n this._done();\r\n }\r\n }\r\n }\r\n\r\n isDone() {\r\n return this._myDone;\r\n }\r\n\r\n isJustDone() {\r\n return this._myJustDone;\r\n }\r\n\r\n isStarted() {\r\n return this._myStarted;\r\n }\r\n\r\n isRunning() {\r\n return this.isStarted() && !this.isDone();\r\n }\r\n\r\n getDuration() {\r\n return this._myDuration;\r\n }\r\n\r\n setDuration(duration) {\r\n const newDuration = Math.max(0, duration);\r\n\r\n if (this.isRunning()) {\r\n const timeElapsed = Math.max(0, this._myDuration - this._myTimeLeft);\r\n this._myTimeLeft = Math.max(0, newDuration - timeElapsed);\r\n }\r\n\r\n this._myDuration = newDuration;\r\n }\r\n\r\n getTimeLeft() {\r\n return this._myTimeLeft;\r\n }\r\n\r\n setTimeLeft(timeLeft) {\r\n if (this.isRunning()) {\r\n this._myTimeLeft = Math.max(0, timeLeft);\r\n\r\n if (this._myTimeLeft > this._myDuration) {\r\n this._myDuration = this._myTimeLeft;\r\n }\r\n }\r\n }\r\n\r\n getTimeElapsed() {\r\n let timeElapsed = 0;\r\n if (this.isRunning()) {\r\n timeElapsed = this._myDuration - this._myTimeLeft;\r\n }\r\n return Math.max(0, timeElapsed);\r\n }\r\n\r\n setTimeElapsed(timeElapsed) {\r\n this.setTimeLeft(this._myDuration - Math.max(0, timeElapsed));\r\n }\r\n\r\n getPercentage() {\r\n let percentage = 1;\r\n if (this._myTimeLeft > 0 && this._myDuration > 0) {\r\n percentage = (this._myDuration - this._myTimeLeft) / this._myDuration;\r\n }\r\n return Math.pp_clamp(percentage, 0, 1);\r\n }\r\n\r\n setPercentage(percentage) {\r\n if (this.isRunning()) {\r\n let durationPercentage = Math.pp_clamp(1 - percentage, 0, 1);\r\n this._myTimeLeft = this._myDuration * durationPercentage;\r\n }\r\n }\r\n\r\n onEnd(listener, id = null) {\r\n this._myOnEndEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterOnEnd(id = null) {\r\n this._myOnEndEmitter.remove(id);\r\n }\r\n\r\n _done() {\r\n this._myTimeLeft = 0;\r\n this._myDone = true;\r\n this._myJustDone = true;\r\n\r\n this._myOnEndEmitter.notify();\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ObjectPoolManager } from \"../object_pool_manager.js\";\r\n\r\nexport class ObjectPoolManagerComponent extends Component {\r\n static TypeName = \"pp-object-pools-manager\";\r\n\r\n init() {\r\n this._myObjectPoolManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasObjectPoolManager(this.engine)) {\r\n this._myObjectPoolManager = new ObjectPoolManager();\r\n\r\n Globals.setObjectPoolManager(this._myObjectPoolManager, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myObjectPoolManager != null && Globals.getObjectPoolManager(this.engine) == this._myObjectPoolManager) {\r\n Globals.removeObjectPoolManager(this.engine);\r\n }\r\n }\r\n}", "export class ObjectPoolManager {\r\n\r\n constructor() {\r\n this._myPools = new Map();\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n addPool(poolID, pool) {\r\n if (!this._myPools.has(poolID)) {\r\n this._myPools.set(poolID, pool);\r\n } else {\r\n console.warn(\"Trying to add a Pool with an ID that has been already used:\", poolID);\r\n }\r\n }\r\n\r\n destroyPool(poolID) {\r\n let poolToRemove = this._myPools.get(poolID);\r\n if (poolToRemove != null) {\r\n this._myPools.delete(poolID);\r\n poolToRemove.destroy();\r\n }\r\n }\r\n\r\n getPool(poolID) {\r\n return this._myPools.get(poolID);\r\n }\r\n\r\n hasPool(poolID) {\r\n return this._myPools.has(poolID);\r\n }\r\n\r\n get(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).get();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n has(poolIDOrObject, object = undefined) {\r\n let hasObject = false;\r\n\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n if (pool.has(poolIDOrObject)) {\r\n hasObject = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n hasObject = this._myPools.get(poolIDOrObject).has(object);\r\n }\r\n\r\n return hasObject;\r\n }\r\n\r\n isBusy(poolIDOrObject, object = undefined) {\r\n let busy = false;\r\n\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n if (pool.isBusy(poolIDOrObject)) {\r\n busy = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n busy = this._myPools.get(poolIDOrObject).isBusy(object);\r\n }\r\n\r\n return busy;\r\n }\r\n\r\n isAvailable(poolIDOrObject, object = undefined) {\r\n let available = false;\r\n\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n if (pool.isAvailable(poolIDOrObject)) {\r\n available = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n available = this._myPools.get(poolIDOrObject).isAvailable(object);\r\n }\r\n\r\n return available;\r\n }\r\n\r\n release(poolIDOrObject, object = undefined) {\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n pool.release(poolIDOrObject);\r\n }\r\n } else {\r\n this._myPools.get(poolIDOrObject).release(object);\r\n }\r\n }\r\n\r\n releaseAll(poolID = undefined) {\r\n if (poolID == null) {\r\n for (let pool of this._myPools.values()) {\r\n pool.releaseAll();\r\n }\r\n } else {\r\n this._myPools.get(poolID).releaseAll();\r\n }\r\n }\r\n\r\n increase(poolID, amount) {\r\n let pool = this._myPools.get(poolID);\r\n if (pool) {\r\n pool.increase(amount);\r\n }\r\n }\r\n\r\n increasePercentage(poolID, percentage) {\r\n let pool = this._myPools.get(poolID);\r\n if (pool) {\r\n pool.increasePercentage(percentage);\r\n }\r\n }\r\n\r\n getSize(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).getSize();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getAvailableSize(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).getAvailableSize();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getBusySize(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).getBusySize();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let pool of this._myPools.values()) {\r\n pool.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualManager } from \"../visual_manager.js\";\r\nimport { VisualResources } from \"../visual_resources.js\";\r\n\r\nexport class VisualManagerComponent extends Component {\r\n static TypeName = \"pp-visual-manager\";\r\n\r\n init() {\r\n this._myVisualManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasVisualManager(this.engine)) {\r\n this._myVisualManager = new VisualManager(this.engine);\r\n\r\n Globals.setVisualManager(this._myVisualManager, this.engine);\r\n }\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasVisualResources(this.engine)) {\r\n this._myVisualResources = new VisualResources();\r\n\r\n Globals.setVisualResources(this._myVisualResources, this.engine);\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myVisualResources != null) {\r\n this._myVisualResources.myDefaultMaterials.myMesh = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n\r\n this._myVisualResources.myDefaultMaterials.myText = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n\r\n this._myVisualResources.myDefaultMaterials.myRight = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myRight.color = vec4_create(1, 0, 0, 1);\r\n this._myVisualResources.myDefaultMaterials.myUp = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myUp.color = vec4_create(0, 1, 0, 1);\r\n this._myVisualResources.myDefaultMaterials.myForward = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myForward.color = vec4_create(0, 0, 1, 1);\r\n\r\n this._myVisualResources.myDefaultMaterials.myRay = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myRay.color = vec4_create(0, 1, 0, 1);\r\n this._myVisualResources.myDefaultMaterials.myHitNormal = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myHitNormal.color = vec4_create(1, 0, 0, 1);\r\n }\r\n\r\n if (this.myVisualManager != null) {\r\n this.myVisualManager.start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this.myVisualManager != null) {\r\n this.myVisualManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myVisualManager != null && Globals.getVisualManager(this.engine) == this._myVisualManager) {\r\n Globals.removeVisualManager(this.engine);\r\n\r\n this._myVisualManager.destroy();\r\n }\r\n\r\n if (this._myVisualResources != null && Globals.getVisualResources(this.engine) == this._myVisualResources) {\r\n Globals.removeVisualResources(this.engine);\r\n }\r\n }\r\n}", "import { mat3 as gl_mat3, quat as gl_quat, type mat3 as gl_mat3_type, type quat as gl_quat_type } from \"gl-matrix\";\r\nimport { Matrix3, Quaternion, Vector3 } from \"../../type_definitions/array_type_definitions.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\nimport { Vec3Utils } from \"./vec3_utils.js\";\r\n\r\nexport function create(): Matrix3;\r\nexport function create(m00: number, m01: number, m02: number, m10: number, m11: number, m12: number, m20: number, m21: number, m22: number): Matrix3;\r\nexport function create(uniformValue: number): Matrix3;\r\nexport function create(\r\n m00?: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): Matrix3 {\r\n\r\n const out = gl_mat3.create() as unknown as Matrix3;\r\n\r\n if (m00 != null) {\r\n set(out,\r\n m00, m01!, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(matrix: T, m00: number, m01: number, m02: number, m10: number, m11: number, m12: number, m20: number, m21: number, m22: number): T;\r\nexport function set(matrix: T, uniformValue: number): T;\r\nexport function set(matrix: T,\r\n m00: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): T {\r\n\r\n if (m01 == null) {\r\n gl_mat3.set(matrix as unknown as gl_mat3_type,\r\n m00!, m00, m00,\r\n m00, m00, m00,\r\n m00, m00, m00);\r\n } else {\r\n gl_mat3.set(matrix as unknown as gl_mat3_type,\r\n m00, m01, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!);\r\n }\r\n\r\n return matrix;\r\n}\r\n\r\nexport function copy(from: Readonly, to: T): T {\r\n gl_mat3.copy(to as unknown as gl_mat3_type, from as unknown as gl_mat3_type);\r\n return to;\r\n}\r\n\r\n/** The overload where `T extends Vector2` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `T` when `Readonly` is used */\r\nexport function clone(matrix: Readonly): T;\r\nexport function clone(matrix: Readonly): number[];\r\nexport function clone(matrix: T): T;\r\nexport function clone(matrix: Readonly): T {\r\n return matrix.slice(0) as T;\r\n}\r\n\r\nexport const toDegrees = function () {\r\n const quat = quat_utils_create();\r\n\r\n function toDegrees(matrix: Readonly): Vector3;\r\n function toDegrees(matrix: Readonly, out: T): T;\r\n function toDegrees(matrix: Readonly, out: Vector3 | T = Vec3Utils.create()): Vector3 | T {\r\n Mat3Utils.toQuat(matrix, quat);\r\n QuatUtils.toDegrees(quat, out);\r\n return out;\r\n }\r\n\r\n return toDegrees;\r\n}();\r\n\r\nexport const toRadians = function () {\r\n const quat = quat_utils_create();\r\n\r\n function toRadians(matrix: Readonly): Vector3;\r\n function toRadians(matrix: Readonly, out: T): T;\r\n function toRadians(matrix: Readonly, out: Vector3 | T = Vec3Utils.create()): Vector3 | T {\r\n Mat3Utils.toQuat(matrix, quat);\r\n QuatUtils.toRadians(quat, out);\r\n return out;\r\n }\r\n\r\n return toRadians;\r\n}();\r\n\r\nexport function toQuat(matrix: Readonly): Quaternion;\r\nexport function toQuat(matrix: Readonly, out: T): T;\r\nexport function toQuat(matrix: Readonly, out: Quaternion | T = QuatUtils.create()): Quaternion | T {\r\n gl_quat.fromMat3(out as unknown as gl_quat_type, matrix as unknown as gl_mat3_type);\r\n return out;\r\n}\r\n\r\nexport function fromAxes(leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly): Matrix3;\r\nexport function fromAxes(leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly, out: T): T;\r\nexport function fromAxes(leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly, out: Matrix3 | T = Mat3Utils.create()): Matrix3 | T {\r\n Mat3Utils.set(out,\r\n leftAxis[0], leftAxis[1], leftAxis[2],\r\n upAxis[0], upAxis[1], upAxis[2],\r\n forwardAxis[0], forwardAxis[1], forwardAxis[2]);\r\n return out;\r\n}\r\n\r\nexport const Mat3Utils = {\r\n create,\r\n set,\r\n copy,\r\n clone,\r\n toDegrees,\r\n toRadians,\r\n toQuat,\r\n fromAxes\r\n} as const;", "import { mat3 as gl_mat3, quat as gl_quat } from \"gl-matrix\";\r\nimport { EasingFunction, MathUtils } from \"../math_utils.js\";\r\nimport { ArrayUtils } from \"./array_utils.js\";\r\nimport { Mat3Utils, create as mat3_utils_create } from \"./mat3_utils.js\";\r\nimport { Vec3Utils, create as vec3_utils_create } from \"./vec3_utils.js\";\r\n\r\n/**\r\n * TS type inference helper\r\n * \r\n * @return {any}\r\n */\r\nexport function create(x, y, z, w) {\r\n let out = gl_quat.create();\r\n\r\n if (x != null) {\r\n QuatUtils.set(out, x, y, z, w);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(quat, x, y, z, w) {\r\n if (y == null) {\r\n gl_quat.set(quat, x, x, x, x);\r\n } else {\r\n gl_quat.set(quat, x, y, z, w);\r\n }\r\n\r\n return quat;\r\n}\r\n\r\nexport function normalize(quat, out = QuatUtils.create()) {\r\n gl_quat.normalize(out, quat);\r\n return out;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_quat.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function clone(quat, out = QuatUtils.create()) {\r\n QuatUtils.copy(quat, out);\r\n return out;\r\n}\r\n\r\nexport function identity(quat) {\r\n gl_quat.identity(quat);\r\n return quat;\r\n}\r\n\r\nexport function length(quat) {\r\n return gl_quat.length(quat);\r\n}\r\n\r\nexport function lengthSquared(quat) {\r\n return gl_quat.squaredLength(quat);\r\n}\r\n\r\nexport function invert(quat, out = QuatUtils.create()) {\r\n gl_quat.invert(out, quat);\r\n return out;\r\n}\r\n\r\nexport function conjugate(quat, out = QuatUtils.create()) {\r\n gl_quat.conjugate(out, quat);\r\n return out;\r\n}\r\n\r\nexport function mul(first, second, out = QuatUtils.create()) {\r\n gl_quat.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport let getAxis = function () {\r\n let zero = vec3_utils_create(0, 0, 0);\r\n return function getAxis(quat, out = Vec3Utils.create()) {\r\n let angle = gl_quat.getAxisAngle(out, quat);\r\n if (angle <= MathUtils.EPSILON) {\r\n Vec3Utils.copy(zero, out);\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getAngle(quat) {\r\n return QuatUtils.getAngleDegrees(quat);\r\n}\r\n\r\nexport function getAngleDegrees(quat) {\r\n let angle = QuatUtils.getAngleRadians(quat);\r\n return MathUtils.toDegrees(angle);\r\n}\r\n\r\nexport let getAngleRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function getAngleRadians(quat) {\r\n let angle = gl_quat.getAxisAngle(vector, quat);\r\n return angle;\r\n };\r\n}();\r\n\r\nexport function getAxisScaled(quat, out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaledDegrees(quat, out);\r\n}\r\n\r\nexport function getAxisScaledDegrees(quat, out = Vec3Utils.create()) {\r\n QuatUtils.getAxis(quat, out);\r\n let angle = QuatUtils.getAngleDegrees(quat);\r\n Vec3Utils.scale(out, angle, out);\r\n return out;\r\n}\r\n\r\nexport let getAxisScaledRadians = function () {\r\n let zero = vec3_utils_create(0, 0, 0);\r\n return function getAxisScaledRadians(quat, out = Vec3Utils.create()) {\r\n QuatUtils.getAxis(quat, out);\r\n let angle = QuatUtils.getAngleRadians(quat);\r\n if (angle <= MathUtils.EPSILON) {\r\n Vec3Utils.copy(zero, out);\r\n } else {\r\n Vec3Utils.scale(out, angle, out);\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getAxes(quat, out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n QuatUtils.getLeft(quat, out[0]);\r\n QuatUtils.getUp(quat, out[1]);\r\n QuatUtils.getForward(quat, out[2]);\r\n return out;\r\n}\r\n\r\nexport let getForward = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getForward(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[6], rotationMatrix[7], rotationMatrix[8]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getBackward(quat, out) {\r\n out = QuatUtils.getForward(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getLeft = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getLeft(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[0], rotationMatrix[1], rotationMatrix[2]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getRight(quat, out) {\r\n out = QuatUtils.getLeft(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getUp = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getUp(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[3], rotationMatrix[4], rotationMatrix[5]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getDown(quat, out) {\r\n out = QuatUtils.getUp(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function setAxes(quat, left, up, forward) {\r\n if (forward != null) {\r\n return QuatUtils.setForward(quat, forward, up, left);\r\n } else if (up != null) {\r\n return QuatUtils.setUp(quat, up, forward, left);\r\n } else {\r\n return QuatUtils.setLeft(quat, left, up, forward);\r\n }\r\n}\r\n\r\nexport let setForward = function () {\r\n let axes = [null, null, null];\r\n let priority = [2, 1, 0];\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @param {any} up\r\n */\r\n return function setForward(quat, forward, up = null, left = null) {\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setBackward = function () {\r\n let forward = vec3_utils_create();\r\n\r\n let axes = [null, null, null];\r\n let priority = [2, 1, 0];\r\n return function setBackward(quat, backward, up = null, left = null) {\r\n Vec3Utils.negate(backward, forward);\r\n\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setUp = function () {\r\n let axes = [null, null, null];\r\n let priority = [1, 2, 0];\r\n return function setUp(quat, up, forward = null, left = null) {\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setDown = function () {\r\n let up = vec3_utils_create();\r\n\r\n let axes = [null, null, null];\r\n let priority = [1, 2, 0];\r\n return function setDown(quat, down, forward = null, left = null) {\r\n Vec3Utils.negate(down, up);\r\n\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setLeft = function () {\r\n let axes = [null, null, null];\r\n let priority = [0, 1, 2];\r\n return function setLeft(quat, left, up = null, forward = null) {\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setRight = function () {\r\n let left = vec3_utils_create();\r\n\r\n let axes = [null, null, null];\r\n let priority = [0, 1, 2];\r\n return function setRight(quat, right, up = null, forward = null) {\r\n Vec3Utils.negate(right, left);\r\n\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport function toWorld(quat, parentQuat, out = QuatUtils.create()) {\r\n QuatUtils.mul(parentQuat, quat, out);\r\n return out;\r\n}\r\n\r\nexport let toLocal = function () {\r\n let invertQuat = create();\r\n return function toLocal(quat, parentQuat, out = QuatUtils.create()) {\r\n QuatUtils.conjugate(parentQuat, invertQuat);\r\n QuatUtils.mul(invertQuat, quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function fromAxis(angle, axis, out = QuatUtils.create()) {\r\n return QuatUtils.fromAxisDegrees(angle, axis, out);\r\n}\r\n\r\nexport function fromAxisDegrees(angle, axis, out = QuatUtils.create()) {\r\n QuatUtils.fromAxisRadians(MathUtils.toRadians(angle), axis, out);\r\n return out;\r\n}\r\n\r\nexport function fromAxisRadians(angle, axis, out = QuatUtils.create()) {\r\n gl_quat.setAxisAngle(out, axis, angle);\r\n return out;\r\n}\r\n\r\nexport let fromAxes = function () {\r\n let matrix = mat3_utils_create();\r\n return function fromAxes(leftAxis, upAxis, forwardAxis, out = QuatUtils.create()) {\r\n Mat3Utils.fromAxes(leftAxis, upAxis, forwardAxis, matrix);\r\n return Mat3Utils.toQuat(matrix, out);\r\n };\r\n}();\r\n\r\nexport let fromRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function fromRadians(radiansRotation, out = QuatUtils.create()) {\r\n Vec3Utils.toDegrees(radiansRotation, vector);\r\n return QuatUtils.fromDegrees(vector, out);\r\n };\r\n}();\r\n\r\nexport function fromDegrees(degreesRotation, out = QuatUtils.create()) {\r\n gl_quat.fromEuler(out, degreesRotation[0], degreesRotation[1], degreesRotation[2]);\r\n return out;\r\n}\r\n\r\nexport let toRadians = function () {\r\n let matrix = mat3_utils_create();\r\n return function toRadians(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, matrix);\r\n\r\n // Rotation order is ZYX \r\n out[1] = Math.asin(-MathUtils.clamp(matrix[2], -1, 1));\r\n\r\n if (Math.abs(matrix[2]) < (1 - MathUtils.EPSILON)) {\r\n out[0] = Math.atan2(matrix[5], matrix[8]);\r\n out[2] = Math.atan2(matrix[1], matrix[0]);\r\n } else {\r\n out[0] = 0;\r\n out[2] = Math.atan2(-matrix[3], matrix[4]);\r\n }\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function toDegrees(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toRadians(quat, out);\r\n Vec3Utils.toDegrees(out, out);\r\n return out;\r\n}\r\n\r\nexport function isNormalized(quat, epsilon = MathUtils.EPSILON) {\r\n return Math.abs(QuatUtils.lengthSquared(quat) - 1) < epsilon;\r\n}\r\n\r\nexport function addRotation(first, second, out) {\r\n return QuatUtils.addRotationDegrees(first, second, out);\r\n}\r\n\r\nexport let addRotationDegrees = function () {\r\n let secondQuat = create();\r\n return function addRotationDegrees(first, second, out) {\r\n Vec3Utils.degreesToQuat(second, secondQuat);\r\n return QuatUtils.addRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let addRotationRadians = function () {\r\n let secondQuat = create();\r\n return function addRotationRadians(first, second, out) {\r\n Vec3Utils.radiansToQuat(second, secondQuat);\r\n return QuatUtils.addRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport function addRotationQuat(first, second, out = QuatUtils.create()) {\r\n QuatUtils.mul(second, first, out);\r\n return out;\r\n}\r\n\r\nexport function subRotation(first, second, out) {\r\n return QuatUtils.subRotationDegrees(first, second, out);\r\n}\r\n\r\nexport let subRotationDegrees = function () {\r\n let secondQuat = create();\r\n return function subRotationDegrees(first, second, out) {\r\n Vec3Utils.degreesToQuat(second, secondQuat);\r\n return QuatUtils.subRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let subRotationRadians = function () {\r\n let secondQuat = create();\r\n return function subRotationRadians(first, second, out) {\r\n Vec3Utils.radiansToQuat(second, secondQuat);\r\n return QuatUtils.subRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let subRotationQuat = function () {\r\n let inverse = create();\r\n return function subRotationQuat(first, second, out = QuatUtils.create()) {\r\n QuatUtils.invert(second, inverse);\r\n QuatUtils.mul(first, inverse, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function rotationTo(from, to, out) {\r\n return QuatUtils.rotationToDegrees(from, to, out);\r\n}\r\n\r\nexport let rotationToDegrees = function () {\r\n let toQuat = create();\r\n return function rotationToDegrees(from, to, out) {\r\n Vec3Utils.degreesToQuat(to, toQuat);\r\n return QuatUtils.rotationToQuat(from, toQuat, out);\r\n };\r\n}();\r\n\r\nexport let rotationToRadians = function () {\r\n let toQuat = create();\r\n return function rotationToRadians(from, to, out) {\r\n Vec3Utils.radiansToQuat(to, toQuat);\r\n return QuatUtils.rotationToQuat(from, toQuat, out);\r\n };\r\n}();\r\n\r\nexport function rotationToQuat(from, to, out) {\r\n return QuatUtils.normalize(QuatUtils.subRotationQuat(to, from, out), out);\r\n}\r\n\r\nexport function rotationAroundAxis(quat, axis, out) {\r\n return QuatUtils.rotationAroundAxisDegrees(quat, axis, out);\r\n}\r\n\r\nexport let rotationAroundAxisDegrees = function () {\r\n let rotationAroundQuat = create();\r\n return function rotationAroundAxisDegrees(quat, axis, out = Vec3Utils.create()) {\r\n QuatUtils.rotationAroundAxisQuat(quat, axis, rotationAroundQuat);\r\n return QuatUtils.toDegrees(rotationAroundQuat, out);\r\n };\r\n}();\r\n\r\nexport let rotationAroundAxisRadians = function () {\r\n let rotationAroundQuat = create();\r\n return function rotationAroundAxisRadians(quat, axis, out = Vec3Utils.create()) {\r\n QuatUtils.rotationAroundAxisQuat(quat, axis, rotationAroundQuat);\r\n return QuatUtils.toRadians(rotationAroundQuat, out);\r\n };\r\n}();\r\n\r\nexport function rotationAroundAxisQuat(quat, axis, out = QuatUtils.create()) {\r\n return QuatUtils.getTwist(quat, axis, out);\r\n}\r\n\r\nexport let getTwist = function () {\r\n let rotationAxis = vec3_utils_create();\r\n let projection = vec3_utils_create();\r\n let rotationAlongAxis = create();\r\n return function getTwist(quat, axis, out = QuatUtils.create()) {\r\n rotationAxis[0] = quat[0];\r\n rotationAxis[1] = quat[1];\r\n rotationAxis[2] = quat[2];\r\n\r\n let dotProd = Vec3Utils.dot(axis, rotationAxis);\r\n Vec3Utils.scale(axis, dotProd, projection);\r\n rotationAlongAxis[0] = projection[0];\r\n rotationAlongAxis[1] = projection[1];\r\n rotationAlongAxis[2] = projection[2];\r\n rotationAlongAxis[3] = quat[3];\r\n QuatUtils.normalize(rotationAlongAxis, rotationAlongAxis);\r\n if (dotProd < 0) {\r\n rotationAlongAxis[0] = -rotationAlongAxis[0];\r\n rotationAlongAxis[1] = -rotationAlongAxis[1];\r\n rotationAlongAxis[2] = -rotationAlongAxis[2];\r\n rotationAlongAxis[3] = -rotationAlongAxis[3];\r\n }\r\n\r\n return QuatUtils.copy(rotationAlongAxis, out);\r\n };\r\n}();\r\n\r\nexport let getSwing = function () {\r\n let twist = create();\r\n return function getSwing(quat, axis, out = QuatUtils.create()) {\r\n QuatUtils.getTwist(quat, axis, twist);\r\n QuatUtils.getSwingFromTwist(quat, twist, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getSwingFromTwist(quat, twist, out = QuatUtils.create()) {\r\n return QuatUtils.subRotationQuat(quat, twist, out);\r\n}\r\n\r\nexport let getTwistFromSwing = function () {\r\n let inverse = create();\r\n return function getTwistFromSwing(quat, swing, out = QuatUtils.create()) {\r\n QuatUtils.conjugate(swing, inverse);\r\n QuatUtils.addRotationQuat(quat, inverse, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function fromTwistSwing(twist, swing, out = QuatUtils.create()) {\r\n return QuatUtils.addRotationQuat(twist, swing, out);\r\n}\r\n\r\nexport function toMatrix(quat, out = Mat3Utils.create()) {\r\n gl_mat3.fromQuat(out, quat);\r\n return out;\r\n}\r\n\r\nexport function rotate(first, second, out) {\r\n return QuatUtils.rotateDegrees(first, second, out);\r\n}\r\n\r\nexport function rotateDegrees(first, second, out) {\r\n return QuatUtils.addRotationDegrees(first, second, out);\r\n}\r\n\r\nexport function rotateRadians(first, second, out) {\r\n return QuatUtils.addRotationRadians(first, second, out);\r\n}\r\n\r\nexport function rotateQuat(first, second, out) {\r\n return QuatUtils.addRotationQuat(first, second, out);\r\n}\r\n\r\nexport function rotateAxis(quat, angle, axis, out) {\r\n return QuatUtils.rotateAxisDegrees(quat, angle, axis, out);\r\n}\r\n\r\nexport let rotateAxisDegrees = function () {\r\n let secondQuat = create();\r\n return function rotateAxisDegrees(quat, angle, axis, out) {\r\n QuatUtils.fromAxisDegrees(angle, axis, secondQuat);\r\n return QuatUtils.rotateQuat(quat, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let rotateAxisRadians = function () {\r\n let secondQuat = create();\r\n return function rotateAxisRadians(quat, angle, axis, out) {\r\n QuatUtils.fromAxisRadians(angle, axis, secondQuat);\r\n return QuatUtils.rotateQuat(quat, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport function lerp(from, to, interpolationFactor, out = QuatUtils.create()) {\r\n if (interpolationFactor <= 0) {\r\n QuatUtils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n QuatUtils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_quat.lerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function interpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return QuatUtils.lerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport function slerp(from, to, interpolationFactor, out = QuatUtils.create()) {\r\n if (interpolationFactor <= 0) {\r\n QuatUtils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n QuatUtils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_quat.slerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function sinterpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return QuatUtils.slerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let QuatUtils = {\r\n create,\r\n set,\r\n normalize,\r\n copy,\r\n clone,\r\n identity,\r\n length,\r\n lengthSquared,\r\n invert,\r\n conjugate,\r\n mul,\r\n getAxis,\r\n getAngle,\r\n getAngleDegrees,\r\n getAngleRadians,\r\n getAxisScaled,\r\n getAxisScaledDegrees,\r\n getAxisScaledRadians,\r\n getAxes,\r\n getForward,\r\n getBackward,\r\n getLeft,\r\n getRight,\r\n getUp,\r\n getDown,\r\n setAxes,\r\n setForward,\r\n setBackward,\r\n setUp,\r\n setDown,\r\n setLeft,\r\n setRight,\r\n toWorld,\r\n toLocal,\r\n fromAxis,\r\n fromAxisDegrees,\r\n fromAxisRadians,\r\n fromAxes,\r\n fromRadians,\r\n fromDegrees,\r\n toRadians,\r\n toDegrees,\r\n isNormalized,\r\n addRotation,\r\n addRotationDegrees,\r\n addRotationRadians,\r\n addRotationQuat,\r\n subRotation,\r\n subRotationDegrees,\r\n subRotationRadians,\r\n subRotationQuat,\r\n rotationTo,\r\n rotationToDegrees,\r\n rotationToRadians,\r\n rotationToQuat,\r\n rotationAroundAxis,\r\n rotationAroundAxisDegrees,\r\n rotationAroundAxisRadians,\r\n rotationAroundAxisQuat,\r\n getTwist,\r\n getSwing,\r\n getSwingFromTwist,\r\n getTwistFromSwing,\r\n fromTwistSwing,\r\n toMatrix,\r\n rotate,\r\n rotateDegrees,\r\n rotateRadians,\r\n rotateQuat,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n lerp,\r\n interpolate,\r\n slerp,\r\n sinterpolate\r\n};\r\n\r\n\r\n\r\nlet _setAxes = function () {\r\n let fixedAxes = [vec3_utils_create(), vec3_utils_create(), vec3_utils_create()];\r\n\r\n let fixedAxesFixSignMap = [\r\n [1, -1, 1],\r\n [1, 1, -1],\r\n [-1, 1, -1]\r\n ];\r\n\r\n let fixedLeft = vec3_utils_create();\r\n let fixedUp = vec3_utils_create();\r\n let fixedForward = vec3_utils_create();\r\n\r\n let currentAxis = vec3_utils_create();\r\n\r\n let rotationAxis = vec3_utils_create();\r\n let rotationMat = mat3_utils_create();\r\n let rotationQuat = create();\r\n return function _setAxes(quat, axes, priority) {\r\n let firstAxis = axes[priority[0]];\r\n let secondAxis = axes[priority[1]];\r\n let thirdAxis = axes[priority[2]];\r\n\r\n if (firstAxis == null || Vec3Utils.isZero(firstAxis, MathUtils.EPSILON)) {\r\n return;\r\n }\r\n\r\n let secondAxisValid = false;\r\n if (secondAxis != null) {\r\n let angleBetween = Vec3Utils.angleRadians(firstAxis, secondAxis);\r\n if (angleBetween > MathUtils.EPSILON) {\r\n secondAxisValid = true;\r\n }\r\n }\r\n\r\n let thirdAxisValid = false;\r\n if (thirdAxis != null) {\r\n let angleBetween = Vec3Utils.angleRadians(firstAxis, thirdAxis);\r\n if (angleBetween > MathUtils.EPSILON) {\r\n thirdAxisValid = true;\r\n }\r\n }\r\n\r\n if (secondAxisValid || thirdAxisValid) {\r\n let crossAxis = null;\r\n let secondAxisIndex = null;\r\n let thirdAxisIndex = null;\r\n if (secondAxisValid) {\r\n crossAxis = secondAxis;\r\n secondAxisIndex = 1;\r\n thirdAxisIndex = 2;\r\n } else {\r\n crossAxis = thirdAxis;\r\n secondAxisIndex = 2;\r\n thirdAxisIndex = 1;\r\n }\r\n\r\n let fixSignMap = fixedAxesFixSignMap[priority[0]];\r\n\r\n Vec3Utils.cross(firstAxis, crossAxis, fixedAxes[thirdAxisIndex]);\r\n Vec3Utils.scale(fixedAxes[thirdAxisIndex], fixSignMap[priority[thirdAxisIndex]], fixedAxes[thirdAxisIndex]);\r\n\r\n Vec3Utils.cross(firstAxis, fixedAxes[thirdAxisIndex], fixedAxes[secondAxisIndex]);\r\n Vec3Utils.scale(fixedAxes[secondAxisIndex], fixSignMap[priority[secondAxisIndex]], fixedAxes[secondAxisIndex]);\r\n\r\n Vec3Utils.cross(fixedAxes[1], fixedAxes[2], fixedAxes[0]);\r\n Vec3Utils.scale(fixedAxes[0], fixSignMap[priority[0]], fixedAxes[0]);\r\n\r\n Vec3Utils.normalize(fixedAxes[ArrayUtils.findIndexEqual(priority, 0)], fixedLeft);\r\n Vec3Utils.normalize(fixedAxes[ArrayUtils.findIndexEqual(priority, 1)], fixedUp);\r\n Vec3Utils.normalize(fixedAxes[ArrayUtils.findIndexEqual(priority, 2)], fixedForward);\r\n\r\n Mat3Utils.set(rotationMat,\r\n fixedLeft[0], fixedLeft[1], fixedLeft[2],\r\n fixedUp[0], fixedUp[1], fixedUp[2],\r\n fixedForward[0], fixedForward[1], fixedForward[2]\r\n );\r\n\r\n Mat3Utils.toQuat(rotationMat, rotationQuat);\r\n\r\n QuatUtils.copy(rotationQuat, quat);\r\n } else {\r\n if (priority[0] == 0) {\r\n QuatUtils.getLeft(quat, currentAxis);\r\n } else if (priority[0] == 1) {\r\n QuatUtils.getUp(quat, currentAxis);\r\n } else {\r\n QuatUtils.getForward(quat, currentAxis);\r\n }\r\n\r\n let angleBetween = Vec3Utils.angleRadians(firstAxis, currentAxis);\r\n if (angleBetween > MathUtils.EPSILON) {\r\n Vec3Utils.cross(currentAxis, firstAxis, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n\r\n if (Vec3Utils.isZero(rotationAxis)) {\r\n Vec3Utils.perpendicularRandom(currentAxis, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n }\r\n\r\n QuatUtils.fromAxisRadians(angleBetween, rotationAxis, rotationQuat);\r\n QuatUtils.rotateQuat(quat, rotationQuat, quat);\r\n }\r\n }\r\n\r\n return quat;\r\n };\r\n}();", "\r\n\r\nexport type EasingFunction = (valueToEase: number) => number;\r\n/** #CREDITS https://easings.net */\r\nexport const EasingFunction = {\r\n linear: (valueToEase: number): number => valueToEase,\r\n\r\n easeInVeryWeak: (valueToEase: number): number => 1 - Math.cos((valueToEase * Math.PI) / 2),\r\n easeInWeak: (valueToEase: number): number => Math.pow(valueToEase, 2),\r\n easeIn: (valueToEase: number): number => Math.pow(valueToEase, 3),\r\n easeInStrong: (valueToEase: number): number => Math.pow(valueToEase, 4),\r\n easeInVeryStrong: (valueToEase: number): number => Math.pow(valueToEase, 5),\r\n\r\n easeOutVeryWeak: (valueToEase: number): number => Math.sin((valueToEase * Math.PI) / 2),\r\n easeOutWeak: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 2),\r\n easeOut: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 3),\r\n easeOutStrong: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 4),\r\n easeOutVeryStrong: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 5),\r\n\r\n easeInOutVeryWeak: (valueToEase: number): number => -(Math.cos(valueToEase * Math.PI) - 1) / 2,\r\n easeInOutWeak: (valueToEase: number): number => valueToEase < 0.5 ? 2 * Math.pow(valueToEase, 2) : 1 - Math.pow(-2 * valueToEase + 2, 2) / 2,\r\n easeInOut: (valueToEase: number): number => valueToEase < 0.5 ? 4 * Math.pow(valueToEase, 3) : 1 - Math.pow(-2 * valueToEase + 2, 3) / 2,\r\n easeInOutStrong: (valueToEase: number): number => valueToEase < 0.5 ? 8 * Math.pow(valueToEase, 4) : 1 - Math.pow(-2 * valueToEase + 2, 4) / 2,\r\n easeInOutVeryStrong: (valueToEase: number): number => valueToEase < 0.5 ? 16 * Math.pow(valueToEase, 5) : 1 - Math.pow(-2 * valueToEase + 2, 5) / 2\r\n} as const;\r\n\r\nexport type EasingSupportFunction = (inputValue: number) => number;\r\nexport const EasingSupportFunction = {\r\n triangleWave: (inputValue: number): number => (2 / Math.PI) * Math.asin(Math.sin((Math.PI / 2) * inputValue)),\r\n positiveTriangleWave: (inputValue: number): number => 1 - Math.abs((Math.abs(inputValue) % 2) - 1)\r\n} as const;\r\n\r\nexport const EPSILON: number = 0.000001;\r\nexport const EPSILON_SQUARED: number = EPSILON * EPSILON;\r\nexport const EPSILON_DEGREES: number = 0.00001;\r\n\r\nexport function clamp(value: number, start: number, end: number): number {\r\n const fixedStart = (start != null) ? start : -Number.MAX_VALUE;\r\n const fixedEnd = (end != null) ? end : Number.MAX_VALUE;\r\n\r\n const min = Math.min(fixedStart, fixedEnd);\r\n const max = Math.max(fixedStart, fixedEnd);\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nexport function sign(value: number, zeroSign: number = 1): number {\r\n let sign = Math.sign(value);\r\n if (sign == 0) {\r\n sign = Math.sign(zeroSign);\r\n }\r\n return sign;\r\n}\r\n\r\nexport function toDegrees(angle: number): number {\r\n return angle * (180 / Math.PI);\r\n}\r\n\r\nexport function toRadians(angle: number): number {\r\n return angle * (Math.PI / 180);\r\n}\r\n\r\nexport function roundDecimal(number: number, decimalPlaces: number): number {\r\n const factor = Math.pow(10, decimalPlaces);\r\n number = Math.round(number * factor) / factor;\r\n\r\n return number;\r\n}\r\n\r\n/** Start range value doesn't need to be lower than the end one, so you can map from `[0, 1]` to `[3, 2]`, where `3` is greater than `2` */\r\nexport function mapToRange(value: number, originRangeStart: number, originRangeEnd: number, newRangeStart: number, newRangeEnd: number): number {\r\n if (originRangeStart == originRangeEnd) {\r\n return newRangeStart;\r\n }\r\n\r\n const clampedValue = MathUtils.clamp(value, originRangeStart, originRangeEnd);\r\n\r\n if (clampedValue == originRangeStart) {\r\n return newRangeStart;\r\n } else if (clampedValue == originRangeEnd) {\r\n return newRangeEnd;\r\n }\r\n\r\n const newValue = newRangeStart + ((newRangeEnd - newRangeStart) / (originRangeEnd - originRangeStart)) * (clampedValue - originRangeStart);\r\n const clampedNewValue = MathUtils.clamp(newValue, newRangeStart, newRangeEnd);\r\n return clampedNewValue;\r\n}\r\n\r\n/** Range is `[start, end)` */\r\nexport function random(start = 0, end = 1): number {\r\n return Math.random() * (end - start) + start;\r\n}\r\n\r\n/** Range is `[start, end]` */\r\nexport function randomInt(start: number, end: number): number {\r\n const min = Math.min(start, end);\r\n const max = Math.max(start, end);\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n}\r\n\r\nexport function randomBool(): boolean {\r\n return MathUtils.randomInt(0, 1) == 0;\r\n}\r\n\r\n/** Return `1` or `-1` */\r\nexport function randomSign(): number {\r\n return (Math.random() < 0.5) ? 1 : -1;\r\n}\r\n\r\n/** You give it a list of parameters and returns a random one */\r\nexport function randomPick(...args: T[]): T | null {\r\n let random: T | null = null;\r\n\r\n if (args.length > 0) {\r\n if (args.length == 1 && (args[0] as T[]).length != null) {\r\n const arrayArg0 = args[0] as T[];\r\n if (arrayArg0.length > 0) {\r\n const randomIndex = MathUtils.randomInt(0, arrayArg0.length - 1);\r\n random = arrayArg0[randomIndex];\r\n }\r\n } else {\r\n const randomIndex = MathUtils.randomInt(0, args.length - 1);\r\n random = args[randomIndex];\r\n }\r\n }\r\n\r\n return random;\r\n}\r\n\r\nexport const randomUUID = function () {\r\n const uuidRandomValues = new Uint8Array(1);\r\n const uuidSkeleton = (1e7 + \"-\" + 1e3 + \"-\" + 4e3 + \"-\" + 8e3 + \"-\" + 1e11);\r\n const replaceUUIDSkeletonRegex = new RegExp(\"[018]\", \"g\");\r\n const replaceUUIDSkeletonCallback = function (charString: string): string {\r\n const digit = parseInt(charString.charAt(0));\r\n return (digit ^ ((crypto.getRandomValues(uuidRandomValues)[0] & 15)) >> (digit / 4)).toString(16);\r\n };\r\n return function randomUUID(): string {\r\n let uuid = \"\";\r\n\r\n if (crypto.randomUUID != null) {\r\n uuid = crypto.randomUUID();\r\n } else {\r\n uuid = uuidSkeleton.replace(replaceUUIDSkeletonRegex, replaceUUIDSkeletonCallback);\r\n }\r\n\r\n return uuid;\r\n };\r\n}();\r\n\r\n/** `[from, to]` range is mapped to an `interpolationFactor` in the range `[0, 1]` */\r\nexport function lerp(from: number, to: number, interpolationFactor: number): number {\r\n if (interpolationFactor <= 0) {\r\n return from;\r\n } else if (interpolationFactor >= 1) {\r\n return to;\r\n }\r\n\r\n return interpolationFactor * (to - from) + from;\r\n}\r\n\r\n/** `[from, to]` range is mapped to an `interpolationFactor` in the range `[0, 1]` */\r\nexport function interpolate(from: number, to: number, interpolationFactor: number, easingFunction: EasingFunction = EasingFunction.linear): number {\r\n const lerpFactor = easingFunction(interpolationFactor);\r\n return MathUtils.lerp(from, to, lerpFactor);\r\n}\r\n\r\n/** `[from, to]` range is mapped to an `interpolationFactor` in the range `[0, 1]` \r\n `interpolationFactor` can go outside the `[0, 1]` range, periodically repeating the interpolation in the given range */\r\nexport function interpolatePeriodic(from: number, to: number, interpolationFactor: number, easingFunction: EasingFunction = EasingFunction.linear): number {\r\n const adjustedInterpolationFactor = EasingSupportFunction.positiveTriangleWave(interpolationFactor);\r\n return MathUtils.interpolate(from, to, adjustedInterpolationFactor, easingFunction);\r\n}\r\n\r\nexport function angleDistance(from: number, to: number): number {\r\n return MathUtils.angleDistanceDegrees(from, to);\r\n}\r\n\r\nexport function angleDistanceDegrees(from: number, to: number): number {\r\n return Math.abs(MathUtils.angleDistanceSignedDegrees(from, to));\r\n}\r\n\r\nexport function angleDistanceRadians(from: number, to: number): number {\r\n return Math.abs(MathUtils.angleDistanceSignedRadians(from, to));\r\n}\r\n\r\nexport function angleDistanceSigned(from: number, to: number): number {\r\n return MathUtils.angleDistanceSignedDegrees(from, to);\r\n}\r\n\r\nexport function angleDistanceSignedDegrees(from: number, to: number): number {\r\n const clampedFrom = MathUtils.angleClampDegrees(from, true);\r\n const clampedTo = MathUtils.angleClampDegrees(to, true);\r\n\r\n let distance = clampedTo - clampedFrom;\r\n if (clampedTo - clampedFrom > 180) {\r\n distance = (clampedTo - clampedFrom) - 360;\r\n } else if (clampedTo - clampedFrom < -180) {\r\n distance = (clampedTo - clampedFrom) + 360;\r\n }\r\n\r\n return distance;\r\n}\r\n\r\nexport function angleDistanceSignedRadians(from: number, to: number): number {\r\n return MathUtils.toRadians(MathUtils.angleDistanceSignedDegrees(MathUtils.toDegrees(from), MathUtils.toDegrees(to)));\r\n}\r\n\r\n/** Clamp the angle to `-180 / +180`, so that, for example, `270` will be `-90` \r\n If `usePositiveRange` is `true`, the angle will be clamped to `0 / 360` */\r\nexport function angleClamp(angle: number, usePositiveRange = false): number {\r\n return MathUtils.angleClampDegrees(angle, usePositiveRange);\r\n}\r\n\r\n/** Clamp the angle to `-180 / +180`, so that, for example, `270` will be `-90` \r\n If `usePositiveRange` is `true`, the angle will be clamped to `0 / 360` */\r\nexport function angleClampDegrees(angle: number, usePositiveRange: boolean = false): number {\r\n let clampedAngle = angle % 360;\r\n\r\n if (clampedAngle < 0) {\r\n clampedAngle += 360;\r\n }\r\n\r\n if (!usePositiveRange) {\r\n if (clampedAngle > 180) {\r\n clampedAngle -= 360;\r\n }\r\n }\r\n\r\n return clampedAngle;\r\n}\r\n\r\n\r\n/** Clamp the angle to `-PI / +PI`, so that, for example, `1.5PI` will be `-0.5PI` \r\n If `usePositiveRange` is `true`, the angle will be clamped to `0 / 2PI` */\r\nexport function angleClampRadians(angle: number, usePositiveRange: boolean = false): number {\r\n return MathUtils.toRadians(MathUtils.angleClampDegrees(MathUtils.toDegrees(angle), usePositiveRange));\r\n}\r\n\r\n/** The range goes from `start` to `end` by going toward the positive direction (if `useShortestAngle` is `false`) \r\n `[20, 300]` is a `280` degrees range, `[300, 20]` is an `80` degrees range, \r\n `[-150, -170]` = `[210, 190]` is a `240` degrees range, \r\n `[0, -10]` = `[0, 350]` is a `350` degrees range */\r\nexport function isInsideAngleRange(angle: number, start: number, end: number, useShortestAngle: boolean = false): boolean {\r\n return MathUtils.isInsideAngleRangeDegrees(angle, start, end, useShortestAngle);\r\n}\r\n\r\nexport function isInsideAngleRangeDegrees(angle: number, start: number, end: number, useShortestAngle: boolean = false): boolean {\r\n let insideAngleRange = false;\r\n\r\n const anglePositive = MathUtils.angleClampDegrees(angle, true);\r\n let startPositive = MathUtils.angleClampDegrees(start, true);\r\n let endPositive = MathUtils.angleClampDegrees(end, true);\r\n\r\n if (useShortestAngle) {\r\n if (MathUtils.angleDistanceSignedDegrees(startPositive, endPositive) < 0) {\r\n const temp = startPositive;\r\n startPositive = endPositive;\r\n endPositive = temp;\r\n }\r\n }\r\n\r\n if (startPositive < endPositive) {\r\n insideAngleRange = anglePositive >= startPositive && anglePositive <= endPositive;\r\n } else {\r\n insideAngleRange = anglePositive >= startPositive || anglePositive <= endPositive;\r\n }\r\n\r\n return insideAngleRange;\r\n}\r\n\r\nexport function isInsideAngleRangeRadians(angle: number, start: number, end: number, useShortestAngle: boolean = false): boolean {\r\n return MathUtils.isInsideAngleRangeDegrees(MathUtils.toDegrees(angle), MathUtils.toDegrees(start), MathUtils.toDegrees(end), useShortestAngle);\r\n}\r\n\r\nexport const MathUtils = {\r\n EPSILON,\r\n EPSILON_SQUARED,\r\n EPSILON_DEGREES,\r\n clamp,\r\n sign,\r\n toDegrees,\r\n toRadians,\r\n roundDecimal,\r\n mapToRange,\r\n random,\r\n randomInt,\r\n randomBool,\r\n randomSign,\r\n randomPick,\r\n randomUUID,\r\n lerp,\r\n interpolate,\r\n interpolatePeriodic,\r\n angleDistance,\r\n angleDistanceDegrees,\r\n angleDistanceRadians,\r\n angleDistanceSigned,\r\n angleDistanceSignedDegrees,\r\n angleDistanceSignedRadians,\r\n angleClamp,\r\n angleClampDegrees,\r\n angleClampRadians,\r\n isInsideAngleRange,\r\n isInsideAngleRangeDegrees,\r\n isInsideAngleRangeRadians\r\n} as const;", "import { ArrayLike } from \"../../type_definitions/array_type_definitions.js\";\r\n\r\nexport function copy, T>(from: Readonly>, to: ArrayType, copyCallback?: (fromElement: T, toElement: T) => T): ArrayType {\r\n const _to = to as (ArrayType & { pop: () => T | undefined });\r\n if (_to.pop != null) {\r\n while (to.length > from.length) {\r\n _to.pop();\r\n }\r\n }\r\n\r\n for (let i = 0; i < from.length; i++) {\r\n if (copyCallback == null) {\r\n to[i] = from[i];\r\n } else {\r\n to[i] = copyCallback(from[i], to[i]);\r\n }\r\n }\r\n\r\n return to;\r\n}\r\n\r\n/** The overload where `ArrayType extends ArrayLike` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `ArrayType` when `Readonly` */\r\nexport function clone, T>(array: Readonly, cloneCallback?: (elementToClone: T) => T): ArrayType;\r\nexport function clone(array: Readonly, cloneCallback?: (elementToClone: T) => T): T[];\r\nexport function clone>(array: ArrayType, cloneCallback?: (elementToClone: number) => number): ArrayType;\r\nexport function clone, T>(array: Readonly, cloneCallback?: (elementToClone: T) => T): ArrayType {\r\n const clonedArray = array.slice(0) as ArrayType;\r\n\r\n if (cloneCallback != null) {\r\n for (let i = 0; i < array.length; i++) {\r\n clonedArray[i] = cloneCallback(array[i]);\r\n }\r\n }\r\n\r\n return clonedArray;\r\n}\r\n\r\nexport function equals(array: Readonly>, other: Readonly>, elementsEqualCallback?: (arrayElement: T, otherElement: T) => boolean): boolean {\r\n let equals = true;\r\n\r\n if (other != null && array.length == other.length) {\r\n for (let i = 0; i < array.length; i++) {\r\n if ((elementsEqualCallback != null && !elementsEqualCallback(array[i], other[i])) ||\r\n (elementsEqualCallback == null && array[i] != other[i])) {\r\n equals = false;\r\n break;\r\n }\r\n }\r\n } else {\r\n equals = false;\r\n }\r\n\r\n return equals;\r\n}\r\n\r\nexport function first(array: Readonly>): T | undefined {\r\n return array.length > 0 ? array[0] : undefined;\r\n}\r\n\r\nexport function last(array: Readonly>): T | undefined {\r\n return array.length > 0 ? array[array.length - 1] : undefined;\r\n}\r\n\r\nexport function has(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): boolean {\r\n return ArrayUtils.find(array, callback) != undefined;\r\n}\r\n\r\nexport function hasEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): boolean {\r\n return ArrayUtils.findEqual(array, elementToFind, elementsEqualCallback) != undefined;\r\n}\r\n\r\nexport function find(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n let elementFound = undefined;\r\n\r\n const index = ArrayUtils.findIndex(array, callback);\r\n if (index >= 0) {\r\n elementFound = array[index];\r\n }\r\n\r\n return elementFound;\r\n}\r\n\r\nexport function findIndex(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number {\r\n return array.findIndex(callback);\r\n}\r\n\r\nexport function findAll(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n const elementsFound = [];\r\n\r\n for (let i = 0; i < array.length; i++) {\r\n const element = array[i];\r\n if (callback(element, i)) {\r\n elementsFound.push(element);\r\n }\r\n }\r\n\r\n return elementsFound;\r\n}\r\n\r\nexport function findAllIndexes(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number[] {\r\n const indexes = [];\r\n\r\n for (let i = 0; i < array.length; i++) {\r\n const element = array[i];\r\n if (callback(element, i)) {\r\n indexes.push(i);\r\n }\r\n }\r\n\r\n return indexes;\r\n}\r\n\r\nexport function findEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T | undefined {\r\n if (elementsEqualCallback == null) {\r\n const index = ArrayUtils.findIndexEqual(array, elementToFind);\r\n return index < 0 ? undefined : array[index];\r\n }\r\n\r\n let elementFound = undefined;\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n elementFound = currentElement;\r\n break;\r\n }\r\n }\r\n\r\n return elementFound;\r\n}\r\n\r\nexport function findAllEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T[] {\r\n if (elementsEqualCallback == null) {\r\n return _findAllEqualOptimized(array, elementToFind);\r\n }\r\n\r\n const elementsFound = [];\r\n\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n elementsFound.push(currentElement);\r\n }\r\n }\r\n\r\n return elementsFound;\r\n}\r\n\r\nexport function findIndexEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number {\r\n if (elementsEqualCallback == null) {\r\n return array.indexOf(elementToFind);\r\n }\r\n\r\n let indexFound = -1;\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n indexFound = i;\r\n break;\r\n }\r\n }\r\n\r\n return indexFound;\r\n}\r\n\r\nexport function findAllIndexesEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number[] {\r\n if (elementsEqualCallback == null) {\r\n return _findAllIndexesEqualOptimized(array, elementToFind);\r\n }\r\n\r\n const indexesFound = [];\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n indexesFound.push(i);\r\n }\r\n }\r\n return indexesFound;\r\n}\r\n\r\nexport function remove(array: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n let elementRemoved = undefined;\r\n\r\n const index = array.findIndex(callback);\r\n if (index >= 0) {\r\n elementRemoved = ArrayUtils.removeIndex(array, index);\r\n }\r\n\r\n return elementRemoved;\r\n}\r\n\r\nexport function removeIndex(array: T[], index: number): T | undefined {\r\n let elementRemoved = undefined;\r\n\r\n if (index >= 0 && index < array.length) {\r\n const arrayRemoved = array.splice(index, 1);\r\n if (arrayRemoved.length == 1) {\r\n elementRemoved = arrayRemoved[0];\r\n }\r\n }\r\n\r\n return elementRemoved;\r\n}\r\n\r\nexport function removeAll(array: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n const elementsRemoved = [];\r\n\r\n let currentElement = undefined;\r\n do {\r\n currentElement = ArrayUtils.remove(array, callback);\r\n if (currentElement !== undefined) {\r\n elementsRemoved.push(currentElement);\r\n }\r\n } while (currentElement !== undefined);\r\n\r\n return elementsRemoved;\r\n}\r\n\r\nexport function removeAllIndexes(array: T[], indexes: number[]): T[] {\r\n const elementsRemoved = [];\r\n\r\n for (const index of indexes) {\r\n const elementRemoved = ArrayUtils.removeIndex(array, index);\r\n if (elementRemoved !== undefined) {\r\n elementsRemoved.push(elementRemoved);\r\n }\r\n }\r\n\r\n return elementsRemoved;\r\n}\r\n\r\nexport function removeEqual(array: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T | undefined {\r\n return ArrayUtils.removeIndex(array, ArrayUtils.findIndexEqual(array, elementToRemove, elementsEqualCallback));\r\n}\r\n\r\nexport function removeAllEqual(array: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T[] {\r\n return ArrayUtils.removeAllIndexes(array, ArrayUtils.findAllIndexesEqual(array, elementToRemove, elementsEqualCallback));\r\n}\r\n\r\nexport function clear(array: T[]): T[] {\r\n array.length = 0;\r\n\r\n return array;\r\n}\r\n\r\nexport function pushUnique(array: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n let length = array.length;\r\n\r\n const hasElement = ArrayUtils.hasEqual(array, elementToAdd, elementsEqualCallback);\r\n\r\n if (!hasElement) {\r\n length = array.push(elementToAdd);\r\n }\r\n\r\n return length;\r\n}\r\n\r\nexport function unshiftUnique(array: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n let length = array.length;\r\n\r\n const hasElement = ArrayUtils.hasEqual(array, elementToAdd, elementsEqualCallback);\r\n\r\n if (!hasElement) {\r\n length = array.unshift(elementToAdd);\r\n }\r\n\r\n return length;\r\n}\r\n\r\nexport const ArrayUtils = {\r\n copy,\r\n clone,\r\n equals,\r\n first,\r\n last,\r\n has,\r\n hasEqual,\r\n find,\r\n findIndex,\r\n findAll,\r\n findAllIndexes,\r\n findEqual,\r\n findAllEqual,\r\n findIndexEqual,\r\n findAllIndexesEqual,\r\n remove,\r\n removeIndex,\r\n removeAll,\r\n removeAllIndexes,\r\n removeEqual,\r\n removeAllEqual,\r\n clear,\r\n pushUnique,\r\n unshiftUnique\r\n} as const;\r\n\r\n\r\n\r\nfunction _findAllEqualOptimized(array: Readonly>, elementToFind: T): T[] {\r\n // Adapted from: https:// stackoverflow.com/a/20798567\r\n\r\n const elementsFound = [];\r\n\r\n let index = -1;\r\n while ((index = array.indexOf(elementToFind, index + 1)) >= 0) {\r\n elementsFound.push(array[index]);\r\n }\r\n\r\n return elementsFound;\r\n}\r\n\r\nfunction _findAllIndexesEqualOptimized(array: Readonly>, elementToFind: T): number[] {\r\n // Adapted from: https:// stackoverflow.com/a/20798567\r\n\r\n const elementsFound = [];\r\n\r\n let index = -1;\r\n while ((index = array.indexOf(elementToFind, index + 1)) >= 0) {\r\n elementsFound.push(index);\r\n }\r\n\r\n return elementsFound;\r\n}", "import { vec3 as gl_vec3 } from \"gl-matrix\";\r\nimport { EasingFunction, MathUtils } from \"../math_utils.js\";\r\nimport { Mat3Utils } from \"./mat3_utils.js\";\r\nimport { Mat4Utils, create as mat4_utils_create } from \"./mat4_utils.js\";\r\nimport { Quat2Utils } from \"./quat2_utils.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\n\r\nexport function create(x, y, z) {\r\n let out = gl_vec3.create();\r\n\r\n if (x != null) {\r\n set(out, x, y, z);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(vector, x, y, z) {\r\n if (y == null) {\r\n gl_vec3.set(vector, x, x, x);\r\n } else {\r\n gl_vec3.set(vector, x, y, z);\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function normalize(vector, out = Vec3Utils.create()) {\r\n gl_vec3.normalize(out, vector);\r\n return out;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_vec3.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function clone(vector, out = Vec3Utils.create()) {\r\n Vec3Utils.copy(vector, out);\r\n return out;\r\n}\r\n\r\nexport function zero(vector) {\r\n gl_vec3.zero(vector);\r\n return vector;\r\n}\r\n\r\nexport function angle(first, second) {\r\n return Vec3Utils.angleDegrees(first, second);\r\n}\r\n\r\nexport function angleDegrees(first, second) {\r\n return MathUtils.toDegrees(Vec3Utils.angleRadians(first, second));\r\n}\r\n\r\nexport function angleRadians(first, second) {\r\n let firstX = first[0];\r\n let firstY = first[1];\r\n let firstZ = first[2];\r\n\r\n let secondX = second[0];\r\n let secondY = second[1];\r\n let secondZ = second[2];\r\n\r\n let firstLengthSquared = (firstX * firstX + firstY * firstY + firstZ * firstZ);\r\n let secondLengthSquared = (secondX * secondX + secondY * secondY + secondZ * secondZ);\r\n\r\n let lengthSquared = firstLengthSquared * secondLengthSquared;\r\n\r\n let angle = 0;\r\n if (lengthSquared > MathUtils.EPSILON_SQUARED) {\r\n let length = Math.sqrt(lengthSquared);\r\n\r\n let cos = Vec3Utils.dot(first, second) / length;\r\n angle = Math.acos(MathUtils.clamp(cos, -1, 1));\r\n }\r\n\r\n return angle;\r\n}\r\n\r\nexport function equals(first, second, epsilon = 0) {\r\n let equals = first.length == second.length;\r\n\r\n if (equals) {\r\n equals &&= (Math.abs(first[0] - second[0]) <= epsilon);\r\n equals &&= (Math.abs(first[1] - second[1]) <= epsilon);\r\n equals &&= (Math.abs(first[2] - second[2]) <= epsilon);\r\n }\r\n\r\n return equals;\r\n}\r\n\r\nexport function length(vector) {\r\n return gl_vec3.length(vector);\r\n}\r\n\r\nexport function lengthSquared(vector) {\r\n return gl_vec3.squaredLength(vector);\r\n}\r\n\r\nexport function distance(first, second) {\r\n return gl_vec3.dist(first, second);\r\n}\r\n\r\nexport function distanceSquared(first, second) {\r\n return gl_vec3.squaredDistance(first, second);\r\n}\r\n\r\nexport function add(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.add(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function sub(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.sub(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function mul(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function div(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.div(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function scale(vector, value, out = Vec3Utils.create()) {\r\n gl_vec3.scale(out, vector, value);\r\n return out;\r\n}\r\n\r\nexport function dot(first, second) {\r\n return gl_vec3.dot(first, second);\r\n}\r\n\r\nexport function negate(vector, out = Vec3Utils.create()) {\r\n gl_vec3.negate(out, vector);\r\n return out;\r\n}\r\n\r\nexport function cross(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.cross(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function transformQuat(vector, quat, out = Vec3Utils.create()) {\r\n gl_vec3.transformQuat(out, vector, quat);\r\n return out;\r\n}\r\n\r\nexport function transformMat3(vector, matrix, out = Vec3Utils.create()) {\r\n gl_vec3.transformMat3(out, vector, matrix);\r\n return out;\r\n}\r\n\r\nexport function transformMat4(vector, mat4, out = Vec3Utils.create()) {\r\n gl_vec3.transformMat4(out, vector, mat4);\r\n return out;\r\n}\r\n\r\nexport function lengthSigned(vector, positiveDirection) {\r\n let signedLength = Vec3Utils.length(vector);\r\n if (!Vec3Utils.isConcordant(vector, positiveDirection)) {\r\n signedLength *= -1;\r\n }\r\n\r\n return signedLength;\r\n}\r\n\r\nexport function angleSigned(first, second, referenceAxis) {\r\n return Vec3Utils.angleSignedDegrees(first, second, referenceAxis);\r\n}\r\n\r\nexport function angleSignedDegrees(first, second, referenceAxis) {\r\n return MathUtils.toDegrees(Vec3Utils.angleSignedRadians(first, second, referenceAxis));\r\n}\r\n\r\nexport let angleSignedRadians = function () {\r\n let crossAxis = create();\r\n return function angleSignedRadians(first, second, referenceAxis) {\r\n Vec3Utils.cross(first, second, crossAxis);\r\n let angle = Vec3Utils.angleRadians(first, second);\r\n if (!Vec3Utils.isConcordant(crossAxis, referenceAxis)) {\r\n angle = -angle;\r\n }\r\n\r\n return angle;\r\n };\r\n}();\r\n\r\nexport function anglePivoted(first, second, referenceAxis) {\r\n return Vec3Utils.anglePivotedDegrees(first, second, referenceAxis);\r\n}\r\n\r\nexport function anglePivotedDegrees(first, second, referenceAxis) {\r\n return MathUtils.toDegrees(Vec3Utils.anglePivotedRadians(first, second, referenceAxis));\r\n}\r\n\r\nexport let anglePivotedRadians = function () {\r\n let flatFirst = create();\r\n let flatSecond = create();\r\n return function anglePivotedRadians(first, second, referenceAxis) {\r\n Vec3Utils.removeComponentAlongAxis(first, referenceAxis, flatFirst);\r\n Vec3Utils.removeComponentAlongAxis(second, referenceAxis, flatSecond);\r\n\r\n return Vec3Utils.angleRadians(flatFirst, flatSecond);\r\n };\r\n}();\r\n\r\nexport function anglePivotedSigned(first, second, referenceAxis) {\r\n return Vec3Utils.anglePivotedSignedDegrees(first, second, referenceAxis);\r\n}\r\n\r\nexport function anglePivotedSignedDegrees(first, second, referenceAxis) {\r\n return MathUtils.toDegrees(Vec3Utils.anglePivotedSignedRadians(first, second, referenceAxis));\r\n}\r\n\r\nexport let anglePivotedSignedRadians = function () {\r\n let flatFirst = create();\r\n let flatSecond = create();\r\n return function anglePivotedSignedRadians(first, second, referenceAxis) {\r\n Vec3Utils.removeComponentAlongAxis(first, referenceAxis, flatFirst);\r\n Vec3Utils.removeComponentAlongAxis(second, referenceAxis, flatSecond);\r\n\r\n return Vec3Utils.angleSignedRadians(flatFirst, flatSecond, referenceAxis);\r\n };\r\n}();\r\n\r\nexport function toRadians(vector, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, MathUtils.toRadians(vector[0]), MathUtils.toRadians(vector[1]), MathUtils.toRadians(vector[2]));\r\n return out;\r\n}\r\n\r\nexport function toDegrees(vector, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, MathUtils.toDegrees(vector[0]), MathUtils.toDegrees(vector[1]), MathUtils.toDegrees(vector[2]));\r\n return out;\r\n}\r\n\r\nexport function toQuat(vector, out) {\r\n return Vec3Utils.degreesToQuat(vector, out);\r\n}\r\n\r\nexport function radiansToQuat(vector, out = QuatUtils.create()) {\r\n QuatUtils.fromRadians(vector, out);\r\n return out;\r\n}\r\n\r\nexport function degreesToQuat(vector, out = QuatUtils.create()) {\r\n QuatUtils.fromDegrees(vector, out);\r\n return out;\r\n}\r\n\r\nexport function isNormalized(vector, epsilon = MathUtils.EPSILON) {\r\n return Math.abs(Vec3Utils.lengthSquared(vector) - 1) < epsilon;\r\n}\r\n\r\nexport function isZero(vector, epsilon = 0) {\r\n return Vec3Utils.lengthSquared(vector) <= (epsilon * epsilon);\r\n}\r\n\r\nexport function valueAlongAxis(vector, axis) {\r\n let valueAlongAxis = Vec3Utils.dot(vector, axis);\r\n return valueAlongAxis;\r\n}\r\n\r\nexport let valueAlongPlane = function () {\r\n let componentAlong = create();\r\n return function valueAlongPlane(vector, planeNormal) {\r\n Vec3Utils.removeComponentAlongAxis(vector, planeNormal, componentAlong);\r\n return Vec3Utils.length(componentAlong);\r\n };\r\n}();\r\n\r\nexport function componentAlongAxis(vector, axis, out = Vec3Utils.create()) {\r\n let valueAlongAxis = Vec3Utils.valueAlongAxis(vector, axis);\r\n\r\n Vec3Utils.copy(axis, out);\r\n Vec3Utils.scale(out, valueAlongAxis, out);\r\n return out;\r\n}\r\n\r\nexport let removeComponentAlongAxis = function () {\r\n let componentAlong = create();\r\n return function removeComponentAlongAxis(vector, axis, out = Vec3Utils.create()) {\r\n Vec3Utils.componentAlongAxis(vector, axis, componentAlong);\r\n Vec3Utils.sub(vector, componentAlong, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let copyComponentAlongAxis = function () {\r\n let componentAlong = create();\r\n return function copyComponentAlongAxis(from, to, axis, out = Vec3Utils.create()) {\r\n Vec3Utils.removeComponentAlongAxis(to, axis, out);\r\n Vec3Utils.componentAlongAxis(from, axis, componentAlong);\r\n Vec3Utils.add(out, componentAlong, out);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function isConcordant(first, second) {\r\n return Vec3Utils.dot(first, second) >= 0;\r\n}\r\n\r\nexport function isFartherAlongAxis(first, second, axis) {\r\n return Vec3Utils.valueAlongAxis(first, axis) > Vec3Utils.valueAlongAxis(second, axis);\r\n}\r\n\r\nexport function isToTheRight(first, second, referenceAxis) {\r\n return Vec3Utils.signTo(first, second, referenceAxis) >= 0;\r\n}\r\n\r\nexport let signTo = function () {\r\n let componentAlongThis = create();\r\n let componentAlongVector = create();\r\n return function signTo(first, second, referenceAxis, zeroSign = 1) {\r\n Vec3Utils.removeComponentAlongAxis(first, referenceAxis, componentAlongThis);\r\n Vec3Utils.removeComponentAlongAxis(second, referenceAxis, componentAlongVector);\r\n\r\n let angleSignedResult = Vec3Utils.angleSigned(first, second, referenceAxis);\r\n return angleSignedResult > 0 ? 1 : (angleSignedResult == 0 ? zeroSign : -1);\r\n };\r\n}();\r\n\r\nexport function projectOnAxis(vector, axis, out = Vec3Utils.create()) {\r\n Vec3Utils.componentAlongAxis(vector, axis, out);\r\n return out;\r\n}\r\n\r\n// The result can easily be not 100% exact due to precision errors\r\nexport let projectOnAxisAlongAxis = function () {\r\n let up = create();\r\n let vectorProjectedToAxis = create();\r\n let fixedProjectAlongAxis = create();\r\n return function projectOnAxisAlongAxis(vector, axis, projectAlongAxis, out = Vec3Utils.create()) {\r\n\r\n if (Vec3Utils.isOnAxis(vector, axis) || Vec3Utils.isOnAxis(projectAlongAxis, axis)) {\r\n Vec3Utils.copy(vector, out);\r\n } else {\r\n Vec3Utils.cross(projectAlongAxis, axis, up);\r\n Vec3Utils.normalize(up, up);\r\n\r\n if (Vec3Utils.isZero(up)) {\r\n Vec3Utils.perpendicularRandom(projectAlongAxis, up);\r\n Vec3Utils.normalize(up, up);\r\n }\r\n\r\n Vec3Utils.removeComponentAlongAxis(vector, up, out);\r\n if (!Vec3Utils.isOnAxis(out, axis)) {\r\n Vec3Utils.projectOnAxis(out, axis, vectorProjectedToAxis);\r\n Vec3Utils.sub(vectorProjectedToAxis, out, vectorProjectedToAxis);\r\n\r\n if (Vec3Utils.isConcordant(vectorProjectedToAxis, projectAlongAxis)) {\r\n Vec3Utils.copy(projectAlongAxis, fixedProjectAlongAxis);\r\n } else {\r\n Vec3Utils.negate(projectAlongAxis, fixedProjectAlongAxis);\r\n }\r\n\r\n let angleWithAlongAxis = Vec3Utils.angleRadians(fixedProjectAlongAxis, vectorProjectedToAxis);\r\n let lengthToRemove = Vec3Utils.length(vectorProjectedToAxis) / Math.cos(angleWithAlongAxis);\r\n\r\n Vec3Utils.scale(fixedProjectAlongAxis, lengthToRemove, fixedProjectAlongAxis);\r\n Vec3Utils.add(out, fixedProjectAlongAxis, out);\r\n\r\n Vec3Utils.projectOnAxis(out, axis, out); // Snap on the axis, due to float precision error\r\n }\r\n }\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function projectOnPlane(vector, planeNormal, out = Vec3Utils.create()) {\r\n Vec3Utils.removeComponentAlongAxis(vector, planeNormal, out);\r\n return out;\r\n}\r\n\r\n// The result can easily be not 100% exact due to precision errors\r\nexport let projectOnPlaneAlongAxis = function () {\r\n let vectorProjectedToPlane = create();\r\n let fixedProjectAlongAxis = create();\r\n return function projectOnPlaneAlongAxis(vector, planeNormal, projectAlongAxis, out = Vec3Utils.create()) {\r\n if (Vec3Utils.isOnPlane(vector, planeNormal) || Vec3Utils.isOnPlane(projectAlongAxis, planeNormal)) {\r\n Vec3Utils.copy(vector, out);\r\n } else {\r\n Vec3Utils.copy(vector, out);\r\n\r\n Vec3Utils.projectOnPlane(out, planeNormal, vectorProjectedToPlane);\r\n Vec3Utils.sub(vectorProjectedToPlane, out, vectorProjectedToPlane);\r\n\r\n if (Vec3Utils.isConcordant(vectorProjectedToPlane, projectAlongAxis)) {\r\n Vec3Utils.copy(projectAlongAxis, fixedProjectAlongAxis);\r\n } else {\r\n Vec3Utils.negate(projectAlongAxis, fixedProjectAlongAxis);\r\n }\r\n\r\n let angleWithAlongAxis = Vec3Utils.angleRadians(fixedProjectAlongAxis, vectorProjectedToPlane);\r\n let lengthToRemove = Vec3Utils.length(vectorProjectedToPlane) / Math.cos(angleWithAlongAxis);\r\n\r\n Vec3Utils.scale(fixedProjectAlongAxis, lengthToRemove, fixedProjectAlongAxis);\r\n Vec3Utils.add(out, fixedProjectAlongAxis, out);\r\n\r\n Vec3Utils.projectOnPlane(out, planeNormal, out); // Snap on the axis, due to float precision error\r\n }\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function isOnAxis(vector, axis) {\r\n let angleResult = Vec3Utils.angle(vector, axis);\r\n return Math.abs(angleResult) < MathUtils.EPSILON_DEGREES || Math.abs(angleResult - 180) < MathUtils.EPSILON_DEGREES;\r\n}\r\n\r\nexport function isOnPlane(vector, planeNormal) {\r\n let angleResult = Vec3Utils.angle(vector, planeNormal);\r\n return Math.abs(angleResult - 90) < MathUtils.EPSILON_DEGREES;\r\n}\r\n\r\nexport function rotate(vector, rotation, out) {\r\n return Vec3Utils.rotateDegrees(vector, rotation, out);\r\n}\r\n\r\nexport let rotateDegrees = function () {\r\n let zero = create();\r\n return function rotateDegrees(vector, rotation, out) {\r\n return Vec3Utils.rotateAroundDegrees(vector, rotation, zero, out);\r\n };\r\n}();\r\n\r\nexport let rotateRadians = function () {\r\n let zero = create();\r\n return function rotateRadians(vector, rotation, out) {\r\n return Vec3Utils.rotateAroundRadians(vector, rotation, zero, out);\r\n };\r\n}();\r\n\r\nexport let rotateQuat = function () {\r\n let zero = create();\r\n return function rotateQuat(vector, rotation, out) {\r\n return Vec3Utils.rotateAroundQuat(vector, rotation, zero, out);\r\n };\r\n}();\r\n\r\nexport function rotateAxis(vector, angle, axis, out) {\r\n return Vec3Utils.rotateAxisDegrees(vector, angle, axis, out);\r\n}\r\n\r\nexport let rotateAxisDegrees = function () {\r\n let zero = create();\r\n return function rotateAxisDegrees(vector, angle, axis, out) {\r\n return Vec3Utils.rotateAroundAxisDegrees(vector, angle, axis, zero, out);\r\n };\r\n}();\r\n\r\nexport let rotateAxisRadians = function () {\r\n let zero = create();\r\n return function rotateAxisRadians(vector, angle, axis, out) {\r\n return Vec3Utils.rotateAroundAxisRadians(vector, angle, axis, zero, out);\r\n };\r\n}();\r\n\r\nexport function rotateAround(vector, rotation, origin, out) {\r\n return Vec3Utils.rotateAroundDegrees(vector, rotation, origin, out);\r\n}\r\n\r\nexport let rotateAroundDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function rotateAroundDegrees(vector, rotation, origin, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(rotation, quat);\r\n return Vec3Utils.rotateAroundQuat(vector, quat, origin, out);\r\n };\r\n}();\r\n\r\nexport let rotateAroundRadians = function () {\r\n let quat = quat_utils_create();\r\n return function rotateAroundRadians(vector, rotation, origin, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(rotation, quat);\r\n return Vec3Utils.rotateAroundQuat(vector, quat, origin, out);\r\n };\r\n}();\r\n\r\nexport function rotateAroundQuat(vector, rotation, origin, out = Vec3Utils.create()) {\r\n Vec3Utils.sub(vector, origin, out);\r\n Vec3Utils.transformQuat(out, rotation, out);\r\n Vec3Utils.add(out, origin, out);\r\n return out;\r\n}\r\n\r\nexport function rotateAroundAxis(vector, angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxisDegrees(vector, angle, axis, origin, out);\r\n}\r\n\r\nexport function rotateAroundAxisDegrees(vector, angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxisRadians(vector, MathUtils.toRadians(angle), axis, origin, out);\r\n}\r\n\r\nexport let rotateAroundAxisRadians = function () {\r\n let quat = quat_utils_create();\r\n return function rotateAroundAxisRadians(vector, angle, axis, origin, out = Vec3Utils.create()) {\r\n QuatUtils.fromAxisRadians(angle, axis, quat);\r\n return Vec3Utils.rotateAroundQuat(vector, quat, origin, out);\r\n };\r\n}();\r\n\r\nexport function convertPositionToWorld(vector, parentTransform, out) {\r\n return Vec3Utils.convertPositionToWorldMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport function convertPositionToLocal(vector, parentTransform, out) {\r\n return Vec3Utils.convertPositionToLocalMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport function convertPositionToWorldMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Vec3Utils.transformMat4(vector, parentTransform, out);\r\n return out;\r\n}\r\n\r\nexport let convertPositionToLocalMatrix = function () {\r\n let inverse = mat4_utils_create();\r\n return function convertPositionToLocalMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Mat4Utils.invert(parentTransform, inverse);\r\n Vec3Utils.transformMat4(vector, inverse, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let convertPositionToWorldQuat = function () {\r\n let parentTransformMatrix = mat4_utils_create();\r\n let position = create();\r\n let rotation = quat_utils_create();\r\n let one = create();\r\n set(one, 1, 1, 1);\r\n return function convertPositionToWorldQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getPosition(parentTransform, position);\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n Mat4Utils.setPositionRotationQuatScale(parentTransformMatrix, position, rotation, one);\r\n return Vec3Utils.convertPositionToWorldMatrix(vector, parentTransformMatrix, out);\r\n };\r\n}();\r\n\r\nexport let convertPositionToLocalQuat = function () {\r\n let parentTransformMatrix = mat4_utils_create();\r\n let position = create();\r\n let rotation = quat_utils_create();\r\n let one = create();\r\n set(one, 1, 1, 1);\r\n return function convertPositionToLocalQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getPosition(parentTransform, position);\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n Mat4Utils.setPositionRotationQuatScale(parentTransformMatrix, position, rotation, one);\r\n return Vec3Utils.convertPositionToLocalMatrix(vector, parentTransformMatrix, out);\r\n };\r\n}();\r\n\r\nexport function convertDirectionToWorld(vector, parentTransform, out) {\r\n return Vec3Utils.convertDirectionToWorldMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport function convertDirectionToLocal(vector, parentTransform, out) {\r\n return Vec3Utils.convertDirectionToLocalMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport let convertDirectionToWorldMatrix = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToWorldMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(parentTransform, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let convertDirectionToLocalMatrix = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToLocalMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(parentTransform, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\n\r\nexport let convertDirectionToWorldQuat = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToWorldQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let convertDirectionToLocalQuat = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToLocalQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function addRotation(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotation(vector, rotation, out);\r\n}\r\n\r\nexport function addRotationDegrees(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationDegrees(vector, rotation, out);\r\n}\r\n\r\nexport function addRotationRadians(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationRadians(vector, rotation, out);\r\n}\r\n\r\nexport function addRotationQuat(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationQuat(vector, rotation, out);\r\n}\r\n\r\nexport function degreesAddRotation(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationDegrees(vector, rotation, out);\r\n}\r\n\r\nexport let degreesAddRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function degreesAddRotationDegrees(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toDegrees(QuatUtils.addRotationDegrees(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let degreesAddRotationRadians = function () {\r\n let quat = quat_utils_create();\r\n return function degreesAddRotationRadians(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toDegrees(QuatUtils.addRotationRadians(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let degreesAddRotationQuat = function () {\r\n let quat = quat_utils_create();\r\n return function degreesAddRotationQuat(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toDegrees(QuatUtils.addRotationQuat(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport function radiansAddRotation(vector, rotation, out) {\r\n return Vec3Utils.radiansAddRotationDegrees(vector, rotation, out);\r\n}\r\n\r\nexport let radiansAddRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function radiansAddRotationDegrees(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toRadians(QuatUtils.addRotationDegrees(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let radiansAddRotationRadians = function () {\r\n let quat = quat_utils_create();\r\n return function radiansAddRotationRadians(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toRadians(QuatUtils.addRotationRadians(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let radiansAddRotationQuat = function () {\r\n let quat = quat_utils_create();\r\n return function radiansAddRotationQuat(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toRadians(QuatUtils.addRotationQuat(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport function toMatrix(vector, out = Mat3Utils.create()) {\r\n return Vec3Utils.degreesToMatrix(vector, out);\r\n}\r\n\r\nexport let degreesToMatrix = function () {\r\n let quat = quat_utils_create();\r\n return function degreesToMatrix(vector, out = Mat3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toMatrix(quat, out);\r\n };\r\n}();\r\n\r\nexport let radiansToMatrix = function () {\r\n let quat = quat_utils_create();\r\n return function radiansToMatrix(vector, out = Mat3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toMatrix(quat, out);\r\n };\r\n}();\r\n\r\nexport function rotationTo(from, to, out) {\r\n return Vec3Utils.rotationToDegrees(from, to, out);\r\n}\r\n\r\nexport let rotationToDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToDegrees(from, to, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToQuat(from, to, rotationQuat);\r\n QuatUtils.toDegrees(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToRadians(from, to, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToQuat(from, to, rotationQuat);\r\n QuatUtils.toRadians(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToQuat = function () {\r\n let rotationAxis = create();\r\n return function rotationToQuat(from, to, out = QuatUtils.create()) {\r\n Vec3Utils.cross(from, to, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n\r\n if (Vec3Utils.isZero(rotationAxis)) {\r\n Vec3Utils.perpendicularRandom(from, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n }\r\n\r\n let signedAngle = Vec3Utils.angleSigned(from, to, rotationAxis);\r\n QuatUtils.fromAxisRadians(signedAngle, rotationAxis, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function rotationToPivoted(from, to, pivotAxis, out) {\r\n return Vec3Utils.rotationToPivotedDegrees(from, to, pivotAxis, out);\r\n}\r\n\r\nexport let rotationToPivotedDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToPivotedDegrees(from, to, pivotAxis, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToPivotedQuat(from, to, pivotAxis, rotationQuat);\r\n QuatUtils.toDegrees(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToPivotedRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToPivotedRadians(from, to, pivotAxis, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToPivotedQuat(from, to, pivotAxis, rotationQuat);\r\n QuatUtils.toRadians(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToPivotedQuat = function () {\r\n let fromFlat = create();\r\n let toFlat = create();\r\n let rotationAxis = create();\r\n return function rotationToPivotedQuat(from, to, pivotAxis, out = QuatUtils.create()) {\r\n Vec3Utils.removeComponentAlongAxis(from, pivotAxis, fromFlat);\r\n Vec3Utils.removeComponentAlongAxis(to, pivotAxis, toFlat);\r\n\r\n Vec3Utils.cross(fromFlat, toFlat, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n\r\n if (Vec3Utils.isZero(rotationAxis)) {\r\n Vec3Utils.perpendicularRandom(fromFlat, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n }\r\n\r\n let signedAngle = Vec3Utils.angleSignedRadians(fromFlat, toFlat, rotationAxis);\r\n QuatUtils.fromAxisRadians(signedAngle, rotationAxis, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function lerp(from, to, interpolationFactor, out = Vec3Utils.create()) {\r\n if (interpolationFactor <= 0) {\r\n Vec3Utils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n Vec3Utils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_vec3.lerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function interpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = Vec3Utils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return Vec3Utils.lerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let perpendicularRandom = function () {\r\n let notVector = create();\r\n return function perpendicularRandom(vector, out = Vec3Utils.create()) {\r\n if (Vec3Utils.isZero(vector)) {\r\n return Vec3Utils.zero(out);\r\n }\r\n\r\n Vec3Utils.copy(vector, notVector);\r\n\r\n let zeroAmount = false;\r\n for (let i = 0; i < 3; i++) {\r\n if (vector[i] == 0) {\r\n zeroAmount++;\r\n }\r\n }\r\n\r\n if (zeroAmount == 2) {\r\n if (notVector[0] == 0) {\r\n notVector[0] = 1;\r\n } else if (notVector[1] == 0) {\r\n notVector[1] = 1;\r\n } else if (notVector[2] == 0) {\r\n notVector[2] = 1;\r\n }\r\n } else {\r\n if (notVector[0] != 0) {\r\n notVector[0] = -notVector[0];\r\n } else if (notVector[1] != 0) {\r\n notVector[1] = -notVector[1];\r\n } else if (notVector[2] != 0) {\r\n notVector[2] = -notVector[2];\r\n }\r\n }\r\n\r\n Vec3Utils.cross(notVector, vector, out);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport let Vec3Utils = {\r\n create,\r\n set,\r\n normalize,\r\n copy,\r\n clone,\r\n zero,\r\n angle,\r\n angleDegrees,\r\n angleRadians,\r\n equals,\r\n length,\r\n lengthSquared,\r\n distance,\r\n distanceSquared,\r\n add,\r\n sub,\r\n mul,\r\n div,\r\n scale,\r\n dot,\r\n negate,\r\n cross,\r\n transformQuat,\r\n transformMat3,\r\n transformMat4,\r\n lengthSigned,\r\n angleSigned,\r\n angleSignedDegrees,\r\n angleSignedRadians,\r\n anglePivoted,\r\n anglePivotedDegrees,\r\n anglePivotedRadians,\r\n anglePivotedSigned,\r\n anglePivotedSignedDegrees,\r\n anglePivotedSignedRadians,\r\n toRadians,\r\n toDegrees,\r\n toQuat,\r\n radiansToQuat,\r\n degreesToQuat,\r\n isNormalized,\r\n isZero,\r\n valueAlongAxis,\r\n valueAlongPlane,\r\n componentAlongAxis,\r\n removeComponentAlongAxis,\r\n copyComponentAlongAxis,\r\n isConcordant,\r\n isFartherAlongAxis,\r\n isToTheRight,\r\n signTo,\r\n projectOnAxis,\r\n projectOnAxisAlongAxis,\r\n projectOnPlane,\r\n projectOnPlaneAlongAxis,\r\n isOnAxis,\r\n isOnPlane,\r\n rotate,\r\n rotateDegrees,\r\n rotateRadians,\r\n rotateQuat,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n rotateAround,\r\n rotateAroundDegrees,\r\n rotateAroundRadians,\r\n rotateAroundQuat,\r\n rotateAroundAxis,\r\n rotateAroundAxisDegrees,\r\n rotateAroundAxisRadians,\r\n convertPositionToWorld,\r\n convertPositionToLocal,\r\n convertPositionToWorldMatrix,\r\n convertPositionToLocalMatrix,\r\n convertPositionToWorldQuat,\r\n convertPositionToLocalQuat,\r\n convertDirectionToWorld,\r\n convertDirectionToLocal,\r\n convertDirectionToWorldMatrix,\r\n convertDirectionToLocalMatrix,\r\n convertDirectionToWorldQuat,\r\n convertDirectionToLocalQuat,\r\n addRotation,\r\n addRotationDegrees,\r\n addRotationRadians,\r\n addRotationQuat,\r\n degreesAddRotation,\r\n degreesAddRotationDegrees,\r\n degreesAddRotationRadians,\r\n degreesAddRotationQuat,\r\n radiansAddRotation,\r\n radiansAddRotationDegrees,\r\n radiansAddRotationRadians,\r\n radiansAddRotationQuat,\r\n toMatrix,\r\n degreesToMatrix,\r\n radiansToMatrix,\r\n rotationTo,\r\n rotationToDegrees,\r\n rotationToRadians,\r\n rotationToQuat,\r\n rotationToPivoted,\r\n rotationToPivotedDegrees,\r\n rotationToPivotedRadians,\r\n rotationToPivotedQuat,\r\n lerp,\r\n interpolate,\r\n perpendicularRandom\r\n};", "\r\nimport { mat4 as gl_mat4 } from \"gl-matrix\";\r\nimport { MathUtils } from \"../math_utils.js\";\r\nimport { Quat2Utils } from \"./quat2_utils.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\nimport { Vec3Utils, create as vec3_utils_create, set as vec3_utils_set } from \"./vec3_utils.js\";\r\n\r\nexport function create(\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33) {\r\n let out = gl_mat4.create();\r\n if (m00 != null) {\r\n set(\r\n out,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33);\r\n }\r\n return out;\r\n}\r\n\r\nexport function set(matrix,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33) {\r\n if (m01 == null) {\r\n gl_mat4.set(matrix,\r\n m00, m00, m00, m00,\r\n m00, m00, m00, m00,\r\n m00, m00, m00, m00,\r\n m00, m00, m00, m00);\r\n } else {\r\n gl_mat4.set(matrix,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33);\r\n }\r\n return matrix;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_mat4.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function identity(matrix) {\r\n gl_mat4.identity(matrix);\r\n return matrix;\r\n}\r\n\r\nexport function invert(matrix, out = Mat4Utils.create()) {\r\n gl_mat4.invert(out, matrix);\r\n return out;\r\n}\r\n\r\nexport function mul(first, second, out = Mat4Utils.create()) {\r\n gl_mat4.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function scale(matrix, vector, out = Mat4Utils.create()) {\r\n gl_mat4.scale(out, matrix, vector);\r\n return out;\r\n}\r\n\r\nexport function clone(matrix, out = Mat4Utils.create()) {\r\n Mat4Utils.copy(matrix, out);\r\n return out;\r\n}\r\n\r\nexport function getPosition(matrix, out = Vec3Utils.create()) {\r\n gl_mat4.getTranslation(out, matrix);\r\n return out;\r\n}\r\n\r\nexport function getRotation(matrix, out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotationDegrees(matrix, out);\r\n}\r\n\r\nexport let getRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function getRotationDegrees(matrix, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(matrix, quat);\r\n QuatUtils.toDegrees(quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let getRotationRadians = function () {\r\n let quat = quat_utils_create();\r\n return function getRotationRadians(matrix, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(matrix, quat);\r\n QuatUtils.toRadians(quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let getRotationQuat = function () {\r\n let tempScale = vec3_utils_create();\r\n let transformMatrixNoScale = create();\r\n let inverseScale = vec3_utils_create();\r\n let one = vec3_utils_create();\r\n vec3_utils_set(one, 1, 1, 1);\r\n return function getRotationQuat(matrix, out = QuatUtils.create()) {\r\n Mat4Utils.getScale(matrix, tempScale);\r\n Vec3Utils.div(one, tempScale, inverseScale);\r\n Mat4Utils.scale(matrix, inverseScale, transformMatrixNoScale);\r\n _customGLMatrixGetRotation(out, transformMatrixNoScale);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getScale(matrix, out = Vec3Utils.create()) {\r\n gl_mat4.getScaling(out, matrix);\r\n return out;\r\n}\r\n\r\nexport function setPosition(matrix, position) {\r\n matrix[12] = position[0];\r\n matrix[13] = position[1];\r\n matrix[14] = position[2];\r\n return matrix;\r\n}\r\n\r\nexport function setRotation(matrix, rotation) {\r\n Mat4Utils.setRotationDegrees(matrix, rotation);\r\n return matrix;\r\n}\r\n\r\nexport let setRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function setRotationDegrees(matrix, rotation) {\r\n Mat4Utils.setRotationQuat(matrix, Vec3Utils.degreesToQuat(rotation, quat));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setRotationRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function setRotationRadians(matrix, rotation) {\r\n Mat4Utils.setRotationDegrees(matrix, Vec3Utils.toDegrees(rotation, vector));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setRotationQuat = function () {\r\n let position = vec3_utils_create();\r\n let scale = vec3_utils_create();\r\n return function setRotationQuat(matrix, rotation) {\r\n Mat4Utils.getPosition(matrix, position);\r\n Mat4Utils.getScale(matrix, scale);\r\n Mat4Utils.setPositionRotationQuatScale(matrix, position, rotation, scale);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setScale = function () {\r\n let tempScale = vec3_utils_create();\r\n return function setScale(matrix, scaleToSet) {\r\n Mat4Utils.getScale(matrix, tempScale);\r\n Vec3Utils.div(scaleToSet, tempScale, tempScale);\r\n Mat4Utils.scale(matrix, tempScale, matrix);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationScale(matrix, position, rotation, scale) {\r\n Mat4Utils.setPositionRotationDegreesScale(matrix, position, rotation, scale);\r\n return matrix;\r\n}\r\n\r\nexport let setPositionRotationDegreesScale = function () {\r\n let quat = quat_utils_create();\r\n return function setPositionRotationDegreesScale(matrix, position, rotation, scale) {\r\n Mat4Utils.setPositionRotationQuatScale(matrix, position, Vec3Utils.degreesToQuat(rotation, quat), scale);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setPositionRotationRadiansScale = function () {\r\n let vector = vec3_utils_create();\r\n return function setPositionRotationRadiansScale(matrix, position, rotation, scale) {\r\n Mat4Utils.setPositionRotationDegreesScale(matrix, position, Vec3Utils.toDegrees(rotation, vector), scale);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationQuatScale(matrix, position, rotation, scale) {\r\n gl_mat4.fromRotationTranslationScale(matrix, rotation, position, scale);\r\n return matrix;\r\n}\r\n\r\nexport function setPositionRotation(matrix, position, rotation) {\r\n Mat4Utils.setPositionRotationDegrees(matrix, position, rotation);\r\n return matrix;\r\n}\r\n\r\nexport let setPositionRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function setPositionRotationDegrees(matrix, position, rotation) {\r\n Mat4Utils.setPositionRotationQuat(matrix, position, Vec3Utils.degreesToQuat(rotation, quat));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setPositionRotationRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function setPositionRotationRadians(matrix, position, rotation) {\r\n Mat4Utils.setPositionRotationDegrees(matrix, position, Vec3Utils.toDegrees(rotation, vector));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationQuat(matrix, position, rotation) {\r\n gl_mat4.fromRotationTranslation(matrix, rotation, position);\r\n return matrix;\r\n}\r\n\r\nexport function getAxes(matrix, out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n Mat4Utils.getLeft(matrix, out[0]);\r\n Mat4Utils.getUp(matrix, out[1]);\r\n Mat4Utils.getForward(matrix, out[2]);\r\n\r\n return out;\r\n}\r\n\r\nexport function getForward(matrix, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, matrix[8], matrix[9], matrix[10]);\r\n Vec3Utils.normalize(out, out);\r\n return out;\r\n}\r\n\r\nexport function getBackward(matrix, out) {\r\n out = Mat4Utils.getForward(matrix, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function getLeft(matrix, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, matrix[0], matrix[1], matrix[2]);\r\n Vec3Utils.normalize(out, out);\r\n return out;\r\n}\r\n\r\nexport function getRight(matrix, out) {\r\n out = Mat4Utils.getLeft(matrix, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function getUp(matrix, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, matrix[4], matrix[5], matrix[6]);\r\n Vec3Utils.normalize(out, out);\r\n return out;\r\n}\r\n\r\nexport function getDown(matrix, out) {\r\n out = Mat4Utils.getUp(matrix, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let toWorld = function () {\r\n let convertTransform = create();\r\n let position = vec3_utils_create();\r\n let tempScale = vec3_utils_create();\r\n let inverseScale = vec3_utils_create();\r\n let one = vec3_utils_create();\r\n vec3_utils_set(one, 1, 1, 1);\r\n return function toWorld(matrix, parentTransformMatrix, out = Mat4Utils.create()) {\r\n if (Mat4Utils.hasUniformScale(parentTransformMatrix)) {\r\n Mat4Utils.mul(parentTransformMatrix, matrix, out);\r\n } else {\r\n Vec3Utils.set(position, matrix[12], matrix[13], matrix[14]);\r\n Vec3Utils.convertPositionToWorldMatrix(position, parentTransformMatrix, position);\r\n\r\n Mat4Utils.getScale(parentTransformMatrix, tempScale);\r\n Vec3Utils.div(one, tempScale, inverseScale);\r\n Mat4Utils.scale(parentTransformMatrix, inverseScale, convertTransform);\r\n\r\n Mat4Utils.mul(convertTransform, matrix, out);\r\n Mat4Utils.scale(out, tempScale, out);\r\n\r\n out[12] = position[0];\r\n out[13] = position[1];\r\n out[14] = position[2];\r\n out[15] = 1;\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport let toLocal = function () {\r\n let convertTransform = create();\r\n let position = vec3_utils_create();\r\n let tempScale = vec3_utils_create();\r\n let inverseScale = vec3_utils_create();\r\n let one = vec3_utils_create();\r\n vec3_utils_set(one, 1, 1, 1);\r\n return function toLocal(matrix, parentTransformMatrix, out = Mat4Utils.create()) {\r\n if (Mat4Utils.hasUniformScale(parentTransformMatrix)) {\r\n Mat4Utils.invert(parentTransformMatrix, convertTransform);\r\n Mat4Utils.mul(convertTransform, matrix, out);\r\n } else {\r\n Vec3Utils.set(position, matrix[12], matrix[13], matrix[14]);\r\n Vec3Utils.convertPositionToLocalMatrix(position, parentTransformMatrix, position);\r\n\r\n Mat4Utils.getScale(parentTransformMatrix, tempScale);\r\n Vec3Utils.div(one, tempScale, inverseScale);\r\n Mat4Utils.scale(parentTransformMatrix, inverseScale, convertTransform);\r\n\r\n Mat4Utils.invert(convertTransform, convertTransform);\r\n Mat4Utils.mul(convertTransform, matrix, out);\r\n Mat4Utils.scale(out, inverseScale, out);\r\n\r\n out[12] = position[0];\r\n out[13] = position[1];\r\n out[14] = position[2];\r\n out[15] = 1;\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport let hasUniformScale = function () {\r\n let scale = vec3_utils_create();\r\n return function hasUniformScale(matrix) {\r\n Mat4Utils.getScale(matrix, scale);\r\n return Math.abs(scale[0] - scale[1]) < MathUtils.EPSILON && Math.abs(scale[1] - scale[2]) < MathUtils.EPSILON && Math.abs(scale[0] - scale[2]) < MathUtils.EPSILON;\r\n };\r\n}();\r\n\r\nexport let toQuat = function () {\r\n let position = vec3_utils_create();\r\n let rotation = quat_utils_create();\r\n return function toQuat(matrix, out = Quat2Utils.create()) {\r\n Mat4Utils.getPosition(matrix, position);\r\n Mat4Utils.getRotationQuat(matrix, rotation);\r\n Quat2Utils.setPositionRotationQuat(out, position, rotation);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function fromQuat(quat, out = Mat4Utils.create()) {\r\n Quat2Utils.toMatrix(quat, out);\r\n return out;\r\n}\r\n\r\nexport let Mat4Utils = {\r\n create,\r\n set,\r\n copy,\r\n identity,\r\n invert,\r\n mul,\r\n scale,\r\n clone,\r\n getPosition,\r\n getRotation,\r\n getRotationDegrees,\r\n getRotationRadians,\r\n getRotationQuat,\r\n getScale,\r\n setPosition,\r\n setRotation,\r\n setRotationDegrees,\r\n setRotationRadians,\r\n setRotationQuat,\r\n setScale,\r\n setPositionRotationScale,\r\n setPositionRotationDegreesScale,\r\n setPositionRotationRadiansScale,\r\n setPositionRotationQuatScale,\r\n setPositionRotation,\r\n setPositionRotationDegrees,\r\n setPositionRotationRadians,\r\n setPositionRotationQuat,\r\n getAxes,\r\n getForward,\r\n getBackward,\r\n getLeft,\r\n getRight,\r\n getUp,\r\n getDown,\r\n toWorld,\r\n toLocal,\r\n hasUniformScale,\r\n toQuat,\r\n fromQuat\r\n};\r\n\r\n\r\n\r\n\r\n// This is used in place of the glMatrix one to avoid the array allocation\r\nlet _customGLMatrixGetRotation = function () {\r\n let scaling = vec3_utils_create();\r\n return function _customGLMatrixGetRotation(out, mat) {\r\n gl_mat4.getScaling(scaling, mat);\r\n\r\n let is1 = 1 / scaling[0];\r\n let is2 = 1 / scaling[1];\r\n let is3 = 1 / scaling[2];\r\n\r\n let sm11 = mat[0] * is1;\r\n let sm12 = mat[1] * is2;\r\n let sm13 = mat[2] * is3;\r\n let sm21 = mat[4] * is1;\r\n let sm22 = mat[5] * is2;\r\n let sm23 = mat[6] * is3;\r\n let sm31 = mat[8] * is1;\r\n let sm32 = mat[9] * is2;\r\n let sm33 = mat[10] * is3;\r\n\r\n let trace = sm11 + sm22 + sm33;\r\n\r\n if (trace > 0) {\r\n let s = Math.sqrt(trace + 1.0) * 2;\r\n out[3] = 0.25 * s;\r\n out[0] = (sm23 - sm32) / s;\r\n out[1] = (sm31 - sm13) / s;\r\n out[2] = (sm12 - sm21) / s;\r\n } else if (sm11 > sm22 && sm11 > sm33) {\r\n let s = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\r\n out[3] = (sm23 - sm32) / s;\r\n out[0] = 0.25 * s;\r\n out[1] = (sm12 + sm21) / s;\r\n out[2] = (sm31 + sm13) / s;\r\n } else if (sm22 > sm33) {\r\n let s = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\r\n out[3] = (sm31 - sm13) / s;\r\n out[0] = (sm12 + sm21) / s;\r\n out[1] = 0.25 * s;\r\n out[2] = (sm23 + sm32) / s;\r\n } else {\r\n let s = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\r\n out[3] = (sm12 - sm21) / s;\r\n out[0] = (sm31 + sm13) / s;\r\n out[1] = (sm23 + sm32) / s;\r\n out[2] = 0.25 * s;\r\n }\r\n\r\n return out;\r\n };\r\n}();", "import { mat4 as gl_mat4, quat2 as gl_quat2 } from \"gl-matrix\";\r\nimport { EasingFunction, MathUtils } from \"../math_utils.js\";\r\nimport { create as mat3_utils_create } from \"./mat3_utils.js\";\r\nimport { Mat4Utils } from \"./mat4_utils.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\nimport { Vec3Utils, create as vec3_utils_create } from \"./vec3_utils.js\";\r\n\r\nexport function create(x1, y1, z1, w1, x2, y2, z2, w2) {\r\n let out = gl_quat2.create();\r\n if (x1 != null) {\r\n set(out, x1, y1, z1, w1, x2, y2, z2, w2);\r\n }\r\n return out;\r\n}\r\n\r\nexport function set(quat, x1, y1, z1, w1, x2, y2, z2, w2) {\r\n if (y1 == null) {\r\n gl_quat2.set(quat, x1, x1, x1, x1, x1, x1, x1, x1);\r\n } else {\r\n gl_quat2.set(quat, x1, y1, z1, w1, x2, y2, z2, w2);\r\n }\r\n\r\n return quat;\r\n}\r\n\r\nexport function normalize(quat, out = Quat2Utils.create()) {\r\n gl_quat2.normalize(out, quat);\r\n return out;\r\n}\r\n\r\nexport function invert(quat, out = Quat2Utils.create()) {\r\n gl_quat2.invert(out, quat);\r\n return out;\r\n}\r\n\r\nexport function conjugate(quat, out = Quat2Utils.create()) {\r\n gl_quat2.conjugate(out, quat);\r\n return out;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_quat2.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function identity(quat) {\r\n gl_quat2.identity(quat);\r\n return quat;\r\n}\r\n\r\nexport function getPosition(quat, out = Vec3Utils.create()) {\r\n gl_quat2.getTranslation(out, quat);\r\n return out;\r\n}\r\n\r\nexport function getRotation(quat, out) {\r\n return Quat2Utils.getRotationDegrees(quat, out);\r\n}\r\n\r\nexport let getRotationDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function getRotationDegrees(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toDegrees(Quat2Utils.getRotationQuat(quat, rotationQuat), out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let getRotationRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function getRotationRadians(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toRadians(Quat2Utils.getRotationQuat(quat, rotationQuat), out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getRotationQuat(quat, out = QuatUtils.create()) {\r\n QuatUtils.copy(quat, out);\r\n return out;\r\n}\r\n\r\nexport let setPosition = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function setPosition(quat, position) {\r\n Quat2Utils.getRotationQuat(quat, rotationQuat);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotationQuat);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport function setRotation(quat, rotation) {\r\n return Quat2Utils.setRotationDegrees(quat, rotation);\r\n}\r\n\r\nexport let setRotationDegrees = function () {\r\n let position = vec3_utils_create();\r\n return function setRotationDegrees(quat, rotation) {\r\n Quat2Utils.getPosition(quat, position);\r\n Quat2Utils.setPositionRotationDegrees(quat, position, rotation);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport let setRotationRadians = function () {\r\n let position = vec3_utils_create();\r\n return function setRotationRadians(quat, rotation) {\r\n Quat2Utils.getPosition(quat, position);\r\n Quat2Utils.setPositionRotationRadians(quat, position, rotation);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport let setRotationQuat = function () {\r\n let position = vec3_utils_create();\r\n return function setRotationQuat(quat, rotation) {\r\n Quat2Utils.getPosition(quat, position);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotation);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport function setPositionRotation(quat, position, rotation) {\r\n return Quat2Utils.setPositionRotationDegrees(quat, position, rotation);\r\n}\r\n\r\nexport let setPositionRotationDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function setPositionRotationDegrees(quat, position, rotation) {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotationQuat);\r\n\r\n return quat;\r\n };\r\n}();\r\n\r\nexport let setPositionRotationRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function setPositionRotationRadians(quat, position, rotation) {\r\n Vec3Utils.radiansToQuat(rotation, rotationQuat);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotationQuat);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationQuat(quat, position, rotation) {\r\n gl_quat2.fromRotationTranslation(quat, rotation, position);\r\n return quat;\r\n}\r\n\r\nexport function isNormalized(quat, epsilon = MathUtils.EPSILON) {\r\n return Math.abs(Quat2Utils.lengthSquared(quat) - 1) < epsilon;\r\n}\r\n\r\nexport function length(quat) {\r\n return gl_quat2.length(quat);\r\n}\r\n\r\nexport function lengthSquared(quat) {\r\n return gl_quat2.squaredLength(quat);\r\n}\r\n\r\nexport function mul(first, second, out = Quat2Utils.create()) {\r\n gl_quat2.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function getAxes(quat, out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n Quat2Utils.getLeft(quat, out[0]);\r\n Quat2Utils.getUp(quat, out[1]);\r\n Quat2Utils.getForward(quat, out[2]);\r\n return out;\r\n}\r\n\r\nexport let getForward = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getForward(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[6], rotationMatrix[7], rotationMatrix[8]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getBackward(quat, out) {\r\n out = Quat2Utils.getForward(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getLeft = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getLeft(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[0], rotationMatrix[1], rotationMatrix[2]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getRight(quat, out) {\r\n out = Quat2Utils.getLeft(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getUp = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getUp(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[3], rotationMatrix[4], rotationMatrix[5]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getDown(quat, out) {\r\n out = Quat2Utils.getUp(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function toWorld(quat, parentTransformQuat, out = Quat2Utils.create()) {\r\n Quat2Utils.mul(parentTransformQuat, quat, out);\r\n return out;\r\n}\r\n\r\nexport let toLocal = function () {\r\n let invertQuat = create();\r\n return function toLocal(quat, parentTransformQuat, out = Quat2Utils.create()) {\r\n Quat2Utils.conjugate(parentTransformQuat, invertQuat);\r\n Quat2Utils.mul(invertQuat, quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function rotateAxis(quat, angle, axis, out) {\r\n return Quat2Utils.rotateAxisDegrees(quat, angle, axis, out);\r\n}\r\n\r\nexport function rotateAxisDegrees(quat, angle, axis, out) {\r\n return Quat2Utils.rotateAxisRadians(quat, MathUtils.toRadians(angle), axis, out);\r\n}\r\n\r\nexport let rotateAxisRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotateAxisRadians(quat, angle, axis, out = Quat2Utils.create()) {\r\n Quat2Utils.getRotationQuat(quat, rotationQuat);\r\n QuatUtils.rotateAxisRadians(rotationQuat, angle, axis, rotationQuat);\r\n Quat2Utils.copy(quat, out);\r\n Quat2Utils.setRotationQuat(out, rotationQuat);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function toMatrix(quat, out = Mat4Utils.create()) {\r\n _customGLMatrixFromQuat2(out, quat);\r\n return out;\r\n}\r\n\r\nexport function fromMatrix(matrix, out = Quat2Utils.create()) {\r\n Mat4Utils.toQuat(matrix, out);\r\n return out;\r\n}\r\n\r\nexport function lerp(from, to, interpolationFactor, out = Quat2Utils.create()) {\r\n if (interpolationFactor <= 0) {\r\n Quat2Utils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n Quat2Utils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_quat2.lerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function interpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return Quat2Utils.lerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let slerp = function () {\r\n let fromPosition = vec3_utils_create();\r\n let toPosition = vec3_utils_create();\r\n let interpolatedPosition = vec3_utils_create();\r\n let fromRotationQuat = quat_utils_create();\r\n let toRotationQuat = quat_utils_create();\r\n let interpolatedRotationQuat = quat_utils_create();\r\n return function slerp(from, to, interpolationFactor, out = Quat2Utils.create()) {\r\n if (interpolationFactor <= 0) {\r\n Quat2Utils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n Quat2Utils.copy(to, out);\r\n return out;\r\n }\r\n\r\n Quat2Utils.getPosition(from, fromPosition);\r\n Quat2Utils.getPosition(to, toPosition);\r\n\r\n Quat2Utils.getRotationQuat(from, fromRotationQuat);\r\n Quat2Utils.getRotationQuat(to, toRotationQuat);\r\n\r\n Vec3Utils.lerp(fromPosition, toPosition, interpolationFactor, interpolatedPosition);\r\n QuatUtils.slerp(fromRotationQuat, toRotationQuat, interpolationFactor, interpolatedRotationQuat);\r\n\r\n Quat2Utils.setPositionRotationQuat(out, interpolatedPosition, interpolatedRotationQuat);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function sinterpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return Quat2Utils.slerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let Quat2Utils = {\r\n create,\r\n set,\r\n normalize,\r\n invert,\r\n conjugate,\r\n copy,\r\n identity,\r\n getPosition,\r\n getRotation,\r\n getRotationDegrees,\r\n getRotationRadians,\r\n getRotationQuat,\r\n setPosition,\r\n setRotation,\r\n setRotationDegrees,\r\n setRotationRadians,\r\n setRotationQuat,\r\n setPositionRotation,\r\n setPositionRotationDegrees,\r\n setPositionRotationRadians,\r\n setPositionRotationQuat,\r\n isNormalized,\r\n length,\r\n lengthSquared,\r\n mul,\r\n getAxes,\r\n getForward,\r\n getBackward,\r\n getLeft,\r\n getRight,\r\n getUp,\r\n getDown,\r\n toWorld,\r\n toLocal,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n toMatrix,\r\n fromMatrix,\r\n lerp,\r\n interpolate,\r\n slerp,\r\n sinterpolate\r\n};\r\n\r\n\r\n\r\n\r\n// This is used in place of the glMatrix one to avoid the array allocation\r\nlet _customGLMatrixFromQuat2 = function () {\r\n let translation = vec3_utils_create();\r\n return function _customGLMatrixFromQuat2(out, a) {\r\n let bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7];\r\n\r\n let magnitude = bx * bx + by * by + bz * bz + bw * bw;\r\n //Only scale if it makes sense\r\n if (magnitude > 0) {\r\n translation[0] = ((ax * bw + aw * bx + ay * bz - az * by) * 2) / magnitude;\r\n translation[1] = ((ay * bw + aw * by + az * bx - ax * bz) * 2) / magnitude;\r\n translation[2] = ((az * bw + aw * bz + ax * by - ay * bx) * 2) / magnitude;\r\n } else {\r\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\r\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\r\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\r\n }\r\n gl_mat4.fromRotationTranslation(out, a, translation);\r\n return out;\r\n };\r\n}();", "import { vec2 as gl_vec2, type vec2 as gl_vec2_type } from \"gl-matrix\";\r\nimport { Vector2 } from \"../../type_definitions/array_type_definitions.js\";\r\n\r\nexport function create(): Vector2;\r\nexport function create(x: number, y: number): Vector2;\r\nexport function create(uniformValue: number): Vector2;\r\nexport function create(x?: number, y?: number): Vector2 {\r\n const out = gl_vec2.create() as unknown as Vector2;\r\n\r\n if (x != null) {\r\n set(out, x, y!);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(vector: T, x: number, y: number): T;\r\nexport function set(vector: T, uniformValue: number): T;\r\nexport function set(vector: T, x: number, y?: number): T {\r\n if (y == null) {\r\n gl_vec2.set(vector as unknown as gl_vec2_type, x, x);\r\n } else {\r\n gl_vec2.set(vector as unknown as gl_vec2_type, x, y);\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function copy(from: Readonly, to: T): T {\r\n gl_vec2.copy(to as unknown as gl_vec2_type, from as unknown as gl_vec2_type);\r\n return to;\r\n}\r\n\r\n/** The overload where `T extends Vector2` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `T` when `Readonly` is used */\r\nexport function clone(vector: Readonly): T;\r\nexport function clone(vector: Readonly): number[];\r\nexport function clone(vector: T): T;\r\nexport function clone(vector: Readonly): T {\r\n return vector.slice(0) as T;\r\n}\r\n\r\nexport function length(vector: Readonly): number {\r\n return gl_vec2.length(vector as unknown as gl_vec2_type);\r\n}\r\n\r\nexport function normalize(vector: Readonly): T;\r\nexport function normalize(vector: Readonly, out: S): S;\r\nexport function normalize(vector: Readonly, out: T | S = Vec2Utils.clone(vector)): T | S {\r\n gl_vec2.normalize(out as unknown as gl_vec2_type, vector as unknown as gl_vec2_type);\r\n return out;\r\n}\r\n\r\nexport function zero(vector: T): T {\r\n gl_vec2.zero(vector as unknown as gl_vec2_type);\r\n return vector;\r\n}\r\n\r\nexport function isZero(vector: Readonly, epsilon: number = 0): boolean {\r\n return Vec2Utils.length(vector) <= epsilon;\r\n}\r\n\r\nexport const Vec2Utils = {\r\n create,\r\n set,\r\n copy,\r\n clone,\r\n length,\r\n normalize,\r\n zero,\r\n isZero\r\n} as const;", "import { vec4 as gl_vec4 } from \"gl-matrix\";\r\n\r\nexport function create(x, y, z, w) {\r\n let out = gl_vec4.create();\r\n\r\n if (x != null) {\r\n set(out, x, y, z, w);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(vector, x, y, z, w) {\r\n if (y == null) {\r\n gl_vec4.set(vector, x, x, x, x);\r\n } else {\r\n gl_vec4.set(vector, x, y, z, w);\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_vec4.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function clone(vector, out = create()) {\r\n Vec4Utils.copy(vector, out);\r\n return out;\r\n}\r\n\r\nexport let Vec4Utils = {\r\n create,\r\n set,\r\n copy,\r\n clone\r\n};", "import { Matrix3, Matrix4, Quaternion, Quaternion2, Vector2, Vector3, Vector4 } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../../../cauldron/utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../../../cauldron/utils/array/quat_utils.js\";\r\nimport { Vec2Utils } from \"../../../../cauldron/utils/array/vec2_utils.js\";\r\nimport { Vec3Utils } from \"../../../../cauldron/utils/array/vec3_utils.js\";\r\nimport { Vec4Utils } from \"../../../../cauldron/utils/array/vec4_utils.js\";\r\n\r\nexport function vec2_create(): Vector2;\r\nexport function vec2_create(x: number, y: number): Vector2;\r\nexport function vec2_create(uniformValue: number): Vector2;\r\nexport function vec2_create(x?: number, y?: number): Vector2 {\r\n return Vec2Utils.create(x!, y!);\r\n}\r\n\r\nexport function vec3_create(): Vector3;\r\nexport function vec3_create(x: number, y: number, z: number): Vector3;\r\nexport function vec3_create(uniformValue: number): Vector3;\r\nexport function vec3_create(x?: number, y?: number, z?: number): Vector3 {\r\n return Vec3Utils.create(x, y, z);\r\n}\r\n\r\nexport function vec4_create(): Vector4;\r\nexport function vec4_create(x: number, y: number, z: number, w: number): Vector4;\r\nexport function vec4_create(uniformValue: number): Vector4;\r\nexport function vec4_create(x?: number, y?: number, z?: number, w?: number): Vector4 {\r\n return Vec4Utils.create(x, y, z, w);\r\n}\r\n\r\nexport function quat_create(): Quaternion;\r\nexport function quat_create(x: number, y: number, z: number, w: number): Quaternion;\r\nexport function quat_create(uniformValue: number): Quaternion;\r\nexport function quat_create(x?: number, y?: number, z?: number, w?: number): Quaternion {\r\n return QuatUtils.create(x, y, z, w);\r\n}\r\n\r\nexport function quat2_create(): Quaternion2;\r\nexport function quat2_create(x1: number, y1: number, z1: number, w1: number, x2: number, y2: number, z2: number, w2: number): Quaternion2;\r\nexport function quat2_create(uniformValue: number): Quaternion2;\r\nexport function quat2_create(x1?: number, y1?: number, z1?: number, w1?: number, x2?: number, y2?: number, z2?: number, w2?: number): Quaternion2 {\r\n return Quat2Utils.create(x1, y1, z1, w1, x2, y2, z2, w2);\r\n}\r\n\r\nexport function mat3_create(): Matrix3;\r\nexport function mat3_create(\r\n m00: number, m01: number, m02: number,\r\n m10: number, m11: number, m12: number,\r\n m20: number, m21: number, m22: number): Matrix3;\r\nexport function mat3_create(uniformValue: number): Matrix3;\r\nexport function mat3_create(\r\n m00?: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): Matrix3 {\r\n return Mat3Utils.create(\r\n m00!, m01!, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!\r\n );\r\n}\r\n\r\nexport function mat4_create(): Matrix4;\r\nexport function mat4_create(\r\n m00: number, m01: number, m02: number, m03: number,\r\n m10: number, m11: number, m12: number, m13: number,\r\n m20: number, m21: number, m22: number, m23: number,\r\n m30: number, m31: number, m32: number, m33: number): Matrix4;\r\nexport function mat4_create(uniformValue: number): Matrix4;\r\nexport function mat4_create(\r\n m00?: number, m01?: number, m02?: number, m03?: number,\r\n m10?: number, m11?: number, m12?: number, m13?: number,\r\n m20?: number, m21?: number, m22?: number, m23?: number,\r\n m30?: number, m31?: number, m32?: number, m33?: number): Matrix4 {\r\n return Mat4Utils.create(\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33\r\n );\r\n}", "export class ObjectPoolParams {\r\n\r\n constructor() {\r\n this.myInitialPoolSize = 0;\r\n this.myAmountToAddWhenEmpty = 0; // If all the objects are busy, this amount will be added to the pool\r\n this.myPercentageToAddWhenEmpty = 0; // If all the objects are busy, this percentage of the current pool size will be added to the pool \r\n\r\n this.myCloneParams = undefined;\r\n\r\n this.myOptimizeObjectsAllocation = true; // If true it will pre-allocate the memory before adding new objects to the pool\r\n\r\n // These extra functions can be used if u want to use the pool with objects that are not from WL (WL Object)\r\n this.myCloneCallback = null; // Signature: callback(object, cloneParams) -> clonedObject\r\n this.mySetActiveCallback = null; // Signature: callback(object, active)\r\n this.myEqualCallback = null; // Signature: callback(firstObject, secondObject) -> bool\r\n this.myDestroyCallback = null; // Signature: callback(object)\r\n this.myOptimizeObjectsAllocationCallback = null; // Signature: callback(object, numberOfObjectsToAllocate)\r\n\r\n this.myLogEnabled = false;\r\n }\r\n}\r\n\r\nexport class ObjectPool {\r\n\r\n constructor(objectPrototype, objectPoolParams) {\r\n this._myObjectPoolParams = objectPoolParams;\r\n\r\n this._myObjectPrototype = objectPrototype;\r\n\r\n this._myAvailableObjects = [];\r\n this._myBusyObjects = [];\r\n\r\n this._addToPool(objectPoolParams.myInitialPoolSize, false);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n get() {\r\n let object = this._myAvailableObjects.shift();\r\n\r\n if (object == null) {\r\n let amountToAdd = Math.ceil(this._myBusyObjects.length * this._myObjectPoolParams.myPercentageToAddWhenEmpty);\r\n amountToAdd += this._myObjectPoolParams.myAmountToAddWhenEmpty;\r\n this._addToPool(amountToAdd, this._myObjectPoolParams.myLogEnabled);\r\n object = this._myAvailableObjects.shift();\r\n }\r\n\r\n // Object could still be null if the amountToAdd is 0\r\n if (object != null) {\r\n this._myBusyObjects.push(object);\r\n }\r\n\r\n return object;\r\n }\r\n\r\n has(object) {\r\n let hasObject = false;\r\n\r\n if (this.isBusy(object) || this.isAvailable(object)) {\r\n hasObject = true;\r\n }\r\n\r\n return hasObject;\r\n }\r\n\r\n isBusy(object) {\r\n return this._myBusyObjects.pp_has(this._equals.bind(this, object));\r\n }\r\n\r\n isAvailable(object) {\r\n return this._myAvailableObjects.pp_has(this._equals.bind(this, object));\r\n }\r\n\r\n release(object) {\r\n let released = this._myBusyObjects.pp_remove(this._equals.bind(this, object));\r\n if (released != null) {\r\n this._setActive(released, false);\r\n this._myAvailableObjects.push(released);\r\n }\r\n }\r\n\r\n releaseAll() {\r\n for (let busyObject of this._myBusyObjects) {\r\n this._setActive(busyObject, false);\r\n this._myAvailableObjects.push(busyObject);\r\n }\r\n }\r\n\r\n increase(amount) {\r\n this._addToPool(amount, false);\r\n }\r\n\r\n increasePercentage(percentage) {\r\n let amount = Math.ceil((this.getSize()) * percentage);\r\n this._addToPool(amount, false);\r\n }\r\n\r\n getObjects() {\r\n let objects = [];\r\n objects.push(...this._myAvailableObjects);\r\n objects.push(...this._myBusyObjects);\r\n\r\n return objects;\r\n }\r\n\r\n getSize() {\r\n return this._myBusyObjects.length + this._myAvailableObjects.length;\r\n }\r\n\r\n getAvailableObjects() {\r\n return this._myAvailableObjects;\r\n }\r\n\r\n getAvailableSize() {\r\n return this._myAvailableObjects.length;\r\n }\r\n\r\n getBusyObjects() {\r\n return this._myBusyObjects;\r\n }\r\n\r\n getBusySize() {\r\n return this._myBusyObjects.length;\r\n }\r\n\r\n _addToPool(size, logEnabled) {\r\n if (size <= 0) {\r\n return;\r\n }\r\n\r\n if (this._myObjectPoolParams.myOptimizeObjectsAllocation) {\r\n if (this._myObjectPoolParams.myOptimizeObjectsAllocationCallback != null) {\r\n this._myObjectPoolParams.myOptimizeObjectsAllocationCallback(this._myObjectPrototype, size);\r\n } else if (this._myObjectPrototype.pp_reserveObjects != null) {\r\n this._myObjectPrototype.pp_reserveObjects(size);\r\n }\r\n }\r\n\r\n for (let i = 0; i < size; i++) {\r\n this._myAvailableObjects.push(this._clone(this._myObjectPrototype));\r\n }\r\n\r\n if (logEnabled) {\r\n console.warn(\"Added new elements to the pool:\", size);\r\n }\r\n }\r\n\r\n _clone(object) {\r\n let clone = null;\r\n\r\n if (this._myObjectPoolParams.myCloneCallback != null) {\r\n clone = this._myObjectPoolParams.myCloneCallback(object, this._myObjectPoolParams.myCloneParams);\r\n } else if (object.pp_clone != null) {\r\n clone = object.pp_clone(this._myObjectPoolParams.myCloneParams);\r\n } else if (object.clone != null) {\r\n clone = object.clone(this._myObjectPoolParams.myCloneParams);\r\n }\r\n\r\n if (clone == null) {\r\n console.error(\"Object not cloneable, pool will return null\");\r\n } else {\r\n this._setActive(clone, false);\r\n }\r\n\r\n return clone;\r\n }\r\n\r\n _setActive(object, active) {\r\n if (this._myObjectPoolParams.mySetActiveCallback != null) {\r\n this._myObjectPoolParams.mySetActiveCallback(object, active);\r\n } else if (object.pp_setActive != null) {\r\n object.pp_setActive(active);\r\n } else if (object.setActive != null) {\r\n object.setActive(active);\r\n }\r\n }\r\n\r\n _equals(first, second) {\r\n let equals = false;\r\n\r\n if (this._myObjectPoolParams.myEqualCallback != null) {\r\n equals = this._myObjectPoolParams.myEqualCallback(first, second);\r\n } else if (first.pp_equals != null) {\r\n equals = first.pp_equals(second);\r\n } else if (first.equals != null) {\r\n equals = first.equals(second);\r\n } else {\r\n equals = first == second;\r\n }\r\n\r\n return equals;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let object of this._myAvailableObjects) {\r\n this._destroyObject(object);\r\n }\r\n\r\n for (let object of this._myBusyObjects) {\r\n this._destroyObject(object);\r\n }\r\n\r\n this._destroyObject(this._myObjectPrototype);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n\r\n _destroyObject(object) {\r\n if (this._myObjectPoolParams.myDestroyCallback != null) {\r\n this._myObjectPoolParams.myDestroyCallback(object);\r\n } else if (object.pp_destroy != null) {\r\n object.pp_destroy();\r\n } else if (object.destroy != null) {\r\n object.destroy();\r\n }\r\n }\r\n}", "/*\r\nlet visualParams = new VisualArrowParams();\r\nvisualParams.myStart.vec3_copy(start);\r\nvisualParams.myDirection.vec3_copy(direction);\r\nvisualParams.myLength = 0.2;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualArrow = new VisualArrow(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\nimport { VisualLine, VisualLineParams } from \"./visual_line.js\";\r\n\r\nexport class VisualArrowParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myStart = vec3_create();\r\n this.myDirection = vec3_create(0, 0, 1);\r\n this.myLength = 0;\r\n\r\n this.myThickness = 0.005;\r\n\r\n this.myArrowThickness = null; // null means this.myThickness * 1.5 will be used\r\n this.myArrowLength = null; // null means this.myThickness * 3.5 will be used\r\n\r\n this.myShareArrowLengthWithLineWhenArrowLongerThanLength = true;\r\n\r\n this.myLineMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCylinder\r\n this.myArrowMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCone\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.ARROW;\r\n }\r\n\r\n setStartEnd(start, end) {\r\n end.vec3_sub(start, this.myDirection);\r\n this.myLength = this.myDirection.vec3_length();\r\n this.myDirection.vec3_normalize(this.myDirection);\r\n this.myStart.vec3_copy(start);\r\n\r\n return this;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualArrow {\r\n\r\n constructor(params = new VisualArrowParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myVisualLine = new VisualLine(new VisualLineParams(this._myParams.myParent.pp_getEngine()));\r\n this._myVisualLine.setAutoRefresh(false);\r\n\r\n this._myArrowParentObject = null;\r\n this._myArrowObject = null;\r\n this._myArrowMeshComponent = null;\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myVisualLine.setVisible(visible);\r\n this._myArrowParentObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n this._myVisualLine.forceRefresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n this._myDirty = false;\r\n }\r\n\r\n this._myVisualLine.update(dt);\r\n }\r\n\r\n _build() {\r\n this._myArrowParentObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n this._myArrowObject = this._myArrowParentObject.pp_addObject();\r\n\r\n this._myArrowMeshComponent = this._myArrowObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualArrowParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualArrow(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualLine.destroy();\r\n this._myArrowParentObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualArrow.prototype._refresh = function () {\r\n let arrowPosition = vec3_create();\r\n let parentTranslate = vec3_create();\r\n let arrowScale = vec3_create();\r\n\r\n let forward = vec3_create(0, 1, 0);\r\n return function _refresh() {\r\n this._myArrowParentObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n let arrowThickness = (this._myParams.myArrowThickness != null) ? this._myParams.myArrowThickness : this._myParams.myThickness * 1.5;\r\n let arrowLength = (this._myParams.myArrowLength != null) ? this._myParams.myArrowLength : this._myParams.myThickness * 3.5;\r\n\r\n if (this._myParams.myShareArrowLengthWithLineWhenArrowLongerThanLength && arrowLength > this._myParams.myLength / 2) {\r\n arrowLength = this._myParams.myLength / 2;\r\n }\r\n\r\n arrowLength = Math.min(arrowLength, this._myParams.myLength);\r\n\r\n arrowScale.vec3_set(arrowThickness, arrowLength / 2, arrowThickness);\r\n\r\n let lineLength = this._myParams.myLength - arrowLength;\r\n\r\n this._myParams.myDirection.vec3_scale(lineLength, arrowPosition);\r\n arrowPosition.vec3_add(this._myParams.myStart, arrowPosition);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myArrowParentObject.pp_setPositionLocal(arrowPosition);\r\n this._myArrowParentObject.pp_setUpLocal(this._myParams.myDirection, forward);\r\n } else {\r\n this._myArrowParentObject.pp_setPosition(arrowPosition);\r\n this._myArrowParentObject.pp_setUp(this._myParams.myDirection, forward);\r\n }\r\n\r\n parentTranslate.vec3_set(0, (arrowLength / 2) - 0.00001, 0);\r\n this._myArrowParentObject.pp_translateObject(parentTranslate);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myArrowObject.pp_setScaleLocal(arrowScale);\r\n } else {\r\n this._myArrowObject.pp_setScale(arrowScale);\r\n }\r\n\r\n if (this._myParams.myArrowMesh != null) {\r\n this._myArrowMeshComponent.mesh = this._myParams.myArrowMesh;\r\n } else {\r\n this._myArrowMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).myCone;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myArrowMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n this._myArrowMeshComponent.material = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myArrowMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n\r\n let visualLineParams = this._myVisualLine.getParams();\r\n visualLineParams.myStart.vec3_copy(this._myParams.myStart);\r\n visualLineParams.myDirection.vec3_copy(this._myParams.myDirection);\r\n visualLineParams.myLength = lineLength;\r\n visualLineParams.myThickness = this._myParams.myThickness;\r\n visualLineParams.myMesh = this._myParams.myLineMesh;\r\n\r\n visualLineParams.myMaterial = this._myArrowMeshComponent.material;\r\n\r\n visualLineParams.myParent = this._myParams.myParent;\r\n visualLineParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualLine.paramsUpdated();\r\n };\r\n}();\r\n\r\nVisualArrowParams.prototype.copy = function copy(other) {\r\n this.myStart.vec3_copy(other.myStart);\r\n this.myDirection.vec3_copy(other.myDirection);\r\n this.myLength = other.myLength;\r\n this.myThickness = other.myThickness;\r\n\r\n this.myArrowThickness = other.myArrowThickness;\r\n this.myArrowLength = other.myArrowLength;\r\n\r\n this.myShareArrowLengthWithLineWhenArrowLongerThanLength = other.myShareArrowLengthWithLineWhenArrowLongerThanLength;\r\n\r\n this.myArrowMesh = other.myArrowMesh;\r\n this.myLineMesh = other.myLineMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "export let VisualElementType = {\r\n MESH: 0,\r\n LINE: 1,\r\n POINT: 2,\r\n TEXT: 3,\r\n ARROW: 4,\r\n TRANSFORM: 5,\r\n RAYCAST: 6,\r\n TORUS: 7\r\n};", "/*\r\nlet visualParams = new VisualLineParams();\r\nvisualParams.myStart.vec3_copy(start);\r\nvisualParams.myDirection.vec3_copy(direction);\r\nvisualParams.myLength = 0.2;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualLine = new VisualLine(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualLineParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myStart = vec3_create();\r\n this.myDirection = vec3_create(0, 0, 1);\r\n this.myLength = 0;\r\n\r\n this.myThickness = 0.005;\r\n\r\n this.myMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCylinder\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.LINE;\r\n }\r\n\r\n setStartEnd(start, end) {\r\n end.vec3_sub(start, this.myDirection);\r\n this.myLength = this.myDirection.vec3_length();\r\n this.myDirection.vec3_normalize(this.myDirection);\r\n this.myStart.vec3_copy(start);\r\n\r\n return this;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualLine {\r\n\r\n constructor(params = new VisualLineParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myLineParentObject = null;\r\n this._myLineObject = null;\r\n this._myLineMeshComponent = null;\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myLineParentObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _build() {\r\n this._myLineParentObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n this._myLineObject = this._myLineParentObject.pp_addObject();\r\n\r\n this._myLineMeshComponent = this._myLineObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualLineParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualLine(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myLineParentObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualLine.prototype._refresh = function () {\r\n let scaleLine = vec3_create();\r\n let translateLine = vec3_create();\r\n\r\n let forward = vec3_create(0, 1, 0);\r\n return function _refresh() {\r\n this._myLineParentObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myLineParentObject.pp_setPositionLocal(this._myParams.myStart);\r\n } else {\r\n this._myLineParentObject.pp_setPosition(this._myParams.myStart);\r\n }\r\n\r\n scaleLine.vec3_set(this._myParams.myThickness / 2, this._myParams.myLength / 2, this._myParams.myThickness / 2);\r\n if (this._myParams.myLocal) {\r\n this._myLineObject.pp_setScaleLocal(scaleLine);\r\n } else {\r\n this._myLineObject.pp_setScale(scaleLine);\r\n }\r\n\r\n if (this._myParams.myLocal) {\r\n this._myLineObject.pp_setUpLocal(this._myParams.myDirection, forward);\r\n } else {\r\n this._myLineObject.pp_setUp(this._myParams.myDirection, forward);\r\n }\r\n\r\n this._myLineObject.pp_resetPositionLocal();\r\n translateLine.vec3_set(0, this._myParams.myLength / 2, 0);\r\n this._myLineObject.pp_translateObject(translateLine);\r\n\r\n if (this._myParams.myMesh != null) {\r\n this._myLineMeshComponent.mesh = this._myParams.myMesh;\r\n } else {\r\n this._myLineMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).myCylinder;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myLineMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n this._myLineMeshComponent.material = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myLineMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n };\r\n}();\r\n\r\nVisualLineParams.prototype.copy = function copy(other) {\r\n this.myStart.vec3_copy(other.myStart);\r\n this.myDirection.vec3_copy(other.myDirection);\r\n this.myLength = other.myLength;\r\n this.myThickness = other.myThickness;\r\n\r\n this.myMesh = other.myMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualMeshParams();\r\nvisualParams.myTransform = transform;\r\nvisualParams.myMesh = myDefaultResources.myMeshes.mySphere;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualMesh = new VisualMesh(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { mat4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualMeshParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myTransform = mat4_create();\r\n\r\n this.myMesh = null;\r\n this.myMaterial = null;\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.MESH;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualMesh {\r\n\r\n constructor(params = new VisualMeshParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myMeshObject = null;\r\n this._myMeshComponent = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myMeshObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _refresh() {\r\n this._myMeshObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myMeshObject.pp_setTransformLocal(this._myParams.myTransform);\r\n } else {\r\n this._myMeshObject.pp_setTransform(this._myParams.myTransform);\r\n }\r\n\r\n if (this._myParams.myMesh == null) {\r\n this._myMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).mySphere;\r\n } else {\r\n this._myMeshComponent.mesh = this._myParams.myMesh;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n this._myMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n this._myMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n }\r\n\r\n _build() {\r\n this._myMeshObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n\r\n this._myMeshComponent = this._myMeshObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualMeshParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualMesh(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myMeshObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualMeshParams.prototype.copy = function copy(other) {\r\n this.myTransform.pp_copy(other.myTransform);\r\n\r\n if (other.myMesh != null) {\r\n this.myMesh = other.myMesh;\r\n } else {\r\n this.myMesh = null;\r\n }\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualPointParams();\r\nvisualParams.myPosition.vec3_copy(position);\r\nvisualParams.myRadius = 0.005;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualPoint = new VisualPoint(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualPointParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPosition = vec3_create();\r\n this.myRadius = 0.005;\r\n\r\n this.myMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.mySphere\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.POINT;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualPoint {\r\n\r\n constructor(params = new VisualPointParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myPointObject = null;\r\n this._myPointMeshComponent = null;\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myPointObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _build() {\r\n this._myPointObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n\r\n this._myPointMeshComponent = this._myPointObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualPointParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualPoint(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myPointObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualPoint.prototype._refresh = function () {\r\n let rotation = vec3_create(0, 0, 0);\r\n return function _refresh() {\r\n this._myPointObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myPointObject.pp_setPositionLocal(this._myParams.myPosition);\r\n this._myPointObject.pp_setRotationLocal(rotation);\r\n this._myPointObject.pp_setScaleLocal(this._myParams.myRadius);\r\n } else {\r\n this._myPointObject.pp_setPosition(this._myParams.myPosition);\r\n this._myPointObject.pp_setRotation(rotation);\r\n this._myPointObject.pp_setScale(this._myParams.myRadius);\r\n }\r\n\r\n if (this._myParams.myMesh != null) {\r\n this._myPointMeshComponent.mesh = this._myParams.myMesh;\r\n } else {\r\n this._myPointMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).mySphere;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myPointMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n this._myPointMeshComponent.material = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myPointMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n };\r\n}();\r\n\r\nVisualPointParams.prototype.copy = function copy(other) {\r\n this.myPosition.vec3_copy(other.myPosition);\r\n this.myRadius = other.myRadius;\r\n\r\n this.myMesh = other.myMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "import { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { RaycastHit, RaycastParams, RaycastResults } from \"./physics_raycast_params.js\";\r\n\r\nlet _myLayerFlagsNames = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\r\n\r\nlet _myRaycastCount = new WeakMap();\r\nlet _myRaycastVisualDebugEnabled = new WeakMap();\r\n\r\nexport function setLayerFlagsNames(layerFlagsNames) {\r\n _myLayerFlagsNames = layerFlagsNames;\r\n}\r\n\r\nexport function getLayerFlagsNames() {\r\n return _myLayerFlagsNames;\r\n}\r\n\r\nexport function getRaycastCount(physics = Globals.getPhysics()) {\r\n let raycastCount = _myRaycastCount.get(physics);\r\n return raycastCount != null ? raycastCount : 0;\r\n}\r\n\r\nexport function resetRaycastCount(physics = Globals.getPhysics()) {\r\n _myRaycastCount.set(physics, 0);\r\n}\r\n\r\nexport function isRaycastVisualDebugEnabled(physics = Globals.getPhysics()) {\r\n return _myRaycastVisualDebugEnabled.get(physics);\r\n}\r\n\r\nexport function setRaycastVisualDebugEnabled(visualDebugEnabled, physics = Globals.getPhysics()) {\r\n _myRaycastVisualDebugEnabled.set(physics, visualDebugEnabled);\r\n}\r\n\r\nexport let raycast = function () {\r\n // These initializations assume that there can't be more than @maxHitCount hits within a single rayCast call\r\n // if the hitCount is greater, these arrays will be allocated again\r\n let maxHitCount = 20;\r\n let objects = new Array(maxHitCount);\r\n let distances = new Float32Array(maxHitCount);\r\n let locations = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n let normals = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n\r\n let insideCheckSubVector = vec3_create();\r\n let invertedRaycastDirection = vec3_create();\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function raycast(raycastParams, raycastResults = new RaycastResults()) {\r\n let internalRaycastResults = raycastParams.myPhysics.rayCast(raycastParams.myOrigin, raycastParams.myDirection, raycastParams.myBlockLayerFlags.getMask(), raycastParams.myDistance);\r\n\r\n if (raycastResults.myRaycastParams == null) {\r\n raycastResults.myRaycastParams = new RaycastParams(raycastParams.myPhysics);\r\n }\r\n\r\n raycastResults.myRaycastParams.copy(raycastParams);\r\n\r\n let currentValidHitIndex = 0;\r\n let validHitsCount = 0;\r\n\r\n let hitCount = internalRaycastResults.hitCount;\r\n if (hitCount != 0) {\r\n if (hitCount > maxHitCount) {\r\n console.warn(\"Raycast hitcount is more than the expected one: \" + hitCount + \" - Allocation of needed resources performed\");\r\n\r\n maxHitCount = Math.ceil(hitCount + hitCount * 0.5);\r\n objects = new Array(maxHitCount);\r\n distances = new Float32Array(maxHitCount);\r\n locations = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n normals = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n }\r\n\r\n let objectsAlreadyGet = false;\r\n let distancesAlreadyGet = false;\r\n let locationsAlreadyGet = false;\r\n let normalsAlreadyGet = false;\r\n\r\n invertedRaycastDirection = raycastParams.myDirection.vec3_negate(invertedRaycastDirection);\r\n\r\n for (let i = 0; i < hitCount; i++) {\r\n if (raycastParams.myObjectsToIgnore.length != 0) {\r\n if (!objectsAlreadyGet) {\r\n objectsAlreadyGet = true;\r\n internalRaycastResults.pp_getObjects(objects);\r\n }\r\n\r\n if (raycastParams.myObjectsToIgnore.pp_hasEqual(objects[i], objectsEqualCallback)) {\r\n continue;\r\n }\r\n }\r\n\r\n if (!distancesAlreadyGet) {\r\n distancesAlreadyGet = true;\r\n internalRaycastResults.pp_getDistances(distances);\r\n }\r\n\r\n let hitInsideCollision = distances[i] == 0;\r\n if (hitInsideCollision) {\r\n if (!locationsAlreadyGet) {\r\n locationsAlreadyGet = true;\r\n internalRaycastResults.pp_getLocations(locations);\r\n }\r\n\r\n hitInsideCollision &&= raycastParams.myOrigin.vec3_sub(locations[i], insideCheckSubVector).vec3_isZero(Math.PP_EPSILON);\r\n\r\n if (hitInsideCollision) {\r\n if (!normalsAlreadyGet) {\r\n normalsAlreadyGet = true;\r\n internalRaycastResults.pp_getNormals(normals);\r\n }\r\n\r\n hitInsideCollision &&= invertedRaycastDirection.vec3_equals(normals[i], Math.PP_EPSILON_DEGREES);\r\n }\r\n }\r\n\r\n if (!raycastParams.myIgnoreHitsInsideCollision || !hitInsideCollision) {\r\n let hit = null;\r\n\r\n if (currentValidHitIndex < raycastResults.myHits.length) {\r\n hit = raycastResults.myHits[currentValidHitIndex];\r\n } else if (raycastResults._myUnusedHits != null && raycastResults._myUnusedHits.length > 0) {\r\n hit = raycastResults._myUnusedHits.pop();\r\n raycastResults.myHits.push(hit);\r\n } else {\r\n hit = new RaycastHit();\r\n raycastResults.myHits.push(hit);\r\n }\r\n\r\n if (!objectsAlreadyGet) {\r\n objectsAlreadyGet = true;\r\n internalRaycastResults.pp_getObjects(objects);\r\n }\r\n\r\n if (!locationsAlreadyGet) {\r\n locationsAlreadyGet = true;\r\n internalRaycastResults.pp_getLocations(locations);\r\n }\r\n\r\n if (!normalsAlreadyGet) {\r\n normalsAlreadyGet = true;\r\n internalRaycastResults.pp_getNormals(normals);\r\n }\r\n\r\n hit.myPosition.vec3_copy(locations[i]);\r\n hit.myNormal.vec3_copy(normals[i]);\r\n hit.myDistance = distances[i];\r\n hit.myObject = objects[i];\r\n hit.myInsideCollision = hitInsideCollision;\r\n\r\n validHitsCount++;\r\n currentValidHitIndex++;\r\n }\r\n }\r\n }\r\n\r\n if (raycastResults.myHits.length > validHitsCount) {\r\n if (raycastResults._myUnusedHits == null) {\r\n raycastResults._myUnusedHits = [];\r\n }\r\n\r\n let hitsToRemove = raycastResults.myHits.length - validHitsCount;\r\n for (let i = 0; i < hitsToRemove; i++) {\r\n raycastResults._myUnusedHits.push(raycastResults.myHits.pop());\r\n }\r\n }\r\n\r\n if (Globals.isDebugEnabled(raycastParams.myPhysics.pp_getEngine())) {\r\n if (PhysicsUtils.isRaycastVisualDebugEnabled(raycastParams.myPhysics)) {\r\n Globals.getDebugVisualManager(raycastParams.myPhysics.pp_getEngine()).drawRaycast(0, raycastResults);\r\n }\r\n\r\n _increaseRaycastCount(raycastParams.myPhysics);\r\n }\r\n\r\n return raycastResults;\r\n };\r\n}();\r\n\r\nexport let PhysicsUtils = {\r\n setLayerFlagsNames,\r\n getLayerFlagsNames,\r\n getRaycastCount,\r\n resetRaycastCount,\r\n isRaycastVisualDebugEnabled,\r\n setRaycastVisualDebugEnabled,\r\n raycast\r\n};\r\n\r\n\r\n\r\nfunction _increaseRaycastCount(physics = Globals.getPhysics()) {\r\n let raycastCount = _myRaycastCount.get(physics);\r\n\r\n if (raycastCount == null) {\r\n _myRaycastCount.set(physics, 1);\r\n } else {\r\n _myRaycastCount.set(physics, raycastCount + 1);\r\n }\r\n}", "import { PhysicsUtils } from \"./physics_utils.js\";\r\n\r\nexport class PhysicsLayerFlags {\r\n\r\n constructor() {\r\n this._myLayerMask = 0;\r\n }\r\n\r\n setFlagActive(indexOrName, active) {\r\n let index = indexOrName;\r\n if (isNaN(indexOrName)) {\r\n index = PhysicsUtils.getLayerFlagsNames().pp_findIndexEqual(indexOrName);\r\n }\r\n\r\n if (index >= 0 && index < PhysicsUtils.getLayerFlagsNames().length) {\r\n let mask = 1 << index;\r\n\r\n if (active) {\r\n this._myLayerMask = this._myLayerMask | mask;\r\n } else {\r\n this._myLayerMask = this._myLayerMask & ~mask;\r\n }\r\n }\r\n }\r\n\r\n isFlagActive(indexOrName) {\r\n let index = indexOrName;\r\n if (isNaN(indexOrName)) {\r\n index = PhysicsUtils.getLayerFlagsNames().pp_findIndexEqual(indexOrName);\r\n }\r\n\r\n let active = false;\r\n\r\n if (index >= 0 && index < PhysicsUtils.getLayerFlagsNames().length) {\r\n let mask = 1 << index;\r\n active = !!(this._myLayerMask & mask);\r\n }\r\n\r\n return active;\r\n }\r\n\r\n setAllFlagsActive(active) {\r\n if (!active) {\r\n this._myLayerMask = 0;\r\n } else {\r\n this._myLayerMask = Math.pow(2, PhysicsUtils.getLayerFlagsNames().length) - 1;\r\n }\r\n }\r\n\r\n add(layerFlags) {\r\n this._myLayerMask = this._myLayerMask | layerFlags.getMask();\r\n }\r\n\r\n remove(layerFlags) {\r\n this._myLayerMask = this._myLayerMask & ~(layerFlags.getMask());\r\n }\r\n\r\n intersect(layerFlags) {\r\n this._myLayerMask = this._myLayerMask & layerFlags.getMask();\r\n }\r\n\r\n copy(layerFlags) {\r\n this._myLayerMask = layerFlags._myLayerMask;\r\n }\r\n\r\n getMask() {\r\n return this._myLayerMask;\r\n }\r\n\r\n setMask(layerMask) {\r\n this._myLayerMask = layerMask;\r\n }\r\n}", "/*\r\nlet raycastParams = new RaycastParams();\r\n\r\nraycastParams.myOrigin.vec3_copy(origin);\r\nraycastParams.myDirection.vec3_copy(direction);\r\nraycastParams.myDistance = distance;\r\nraycastParams.myBlockLayerFlags.setMask(flags);\r\nraycastParams.myObjectsToIgnore.pp_clear();\r\nraycastParams.myIgnoreHitsInsideCollision = false;\r\n\r\nlet raycastResults = PhysicsUtils.raycast(raycastParams);\r\n*/\r\n\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { PhysicsLayerFlags } from \"./physics_layer_flags.js\";\r\n\r\nexport class RaycastParams {\r\n\r\n constructor(physics = Globals.getPhysics()) {\r\n this.myOrigin = vec3_create();\r\n this.myDirection = vec3_create();\r\n this.myDistance = 0;\r\n\r\n this.myBlockLayerFlags = new PhysicsLayerFlags();\r\n\r\n this.myObjectsToIgnore = [];\r\n this.myIgnoreHitsInsideCollision = false;\r\n\r\n this.myPhysics = physics;\r\n }\r\n\r\n copy(other) {\r\n this.myOrigin.vec3_copy(other.myOrigin);\r\n this.myDirection.vec3_copy(other.myDirection);\r\n this.myDistance = other.myDistance;\r\n\r\n this.myBlockLayerFlags.copy(other.myBlockLayerFlags);\r\n\r\n this.myObjectsToIgnore.pp_copy(other.myObjectsToIgnore);\r\n this.myIgnoreHitsInsideCollision = other.myIgnoreHitsInsideCollision;\r\n\r\n this.myPhysics = other.myPhysics;\r\n }\r\n\r\n reset() {\r\n this.myOrigin.vec3_zero();\r\n this.myDirection.vec3_zero();\r\n this.myDistance = 0;\r\n\r\n this.myBlockLayerFlags.setAllFlagsActive(false);\r\n\r\n this.myObjectsToIgnore.pp_clear();\r\n this.myIgnoreHitsInsideCollision = false;\r\n }\r\n}\r\n\r\nexport class RaycastResults {\r\n\r\n constructor() {\r\n this.myRaycastParams = null;\r\n this.myHits = [];\r\n\r\n this._myUnusedHits = null;\r\n }\r\n\r\n isColliding(ignoreHitsInsideCollision = false) {\r\n return ignoreHitsInsideCollision ? this.getFirstHitOutsideCollision() != null : this.myHits.length > 0;\r\n }\r\n\r\n getFirstHitInsideCollision() {\r\n let firstHit = null;\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (hit.myInsideCollision) {\r\n firstHit = hit;\r\n break;\r\n }\r\n }\r\n\r\n return firstHit;\r\n }\r\n\r\n getFirstHitOutsideCollision() {\r\n let firstHit = null;\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (!hit.myInsideCollision) {\r\n firstHit = hit;\r\n break;\r\n }\r\n }\r\n\r\n return firstHit;\r\n }\r\n\r\n getHitsInsideCollision() {\r\n let hits = [];\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (hit.myInsideCollision) {\r\n hits.push(hit);\r\n }\r\n }\r\n\r\n return hits;\r\n }\r\n\r\n getHitsOutsideCollision() {\r\n let hits = [];\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (!hit.myInsideCollision) {\r\n hits.push(hit);\r\n }\r\n }\r\n\r\n return hits;\r\n }\r\n\r\n removeHit(hitIndex) {\r\n let removedHit = this.myHits.pp_removeIndex(hitIndex);\r\n\r\n if (removedHit != null) {\r\n if (this._myUnusedHits == null) {\r\n this._myUnusedHits = [];\r\n }\r\n\r\n this._myUnusedHits.push(removedHit);\r\n }\r\n\r\n return removedHit;\r\n }\r\n\r\n removeAllHits() {\r\n if (this._myUnusedHits == null) {\r\n this._myUnusedHits = [];\r\n }\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n this._myUnusedHits.push(this.myHits[i]);\r\n }\r\n\r\n this.myHits.pp_clear();\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n\r\n reset() {\r\n if (this.myRaycastParams != null) {\r\n this.myRaycastParams.reset();\r\n }\r\n\r\n this.removeAllHits();\r\n }\r\n}\r\n\r\nexport class RaycastHit {\r\n\r\n constructor() {\r\n this.myPosition = vec3_create();\r\n this.myNormal = vec3_create();\r\n this.myDistance = 0;\r\n this.myObject = null;\r\n\r\n this.myInsideCollision = false;\r\n }\r\n\r\n isValid() {\r\n return this.myObject != null;\r\n }\r\n\r\n copy(other) {\r\n this.myPosition.vec3_copy(other.myPosition);\r\n this.myNormal.vec3_copy(other.myNormal);\r\n this.myDistance = other.myDistance;\r\n this.myObject = other.myObject;\r\n this.myInsideCollision = other.myInsideCollision;\r\n }\r\n\r\n reset() {\r\n this.myPosition.vec3_zero();\r\n this.myNormal.vec3_zero();\r\n this.myDistance = 0;\r\n this.myObject = null;\r\n this.myInsideCollision = false;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nRaycastResults.prototype.copy = function () {\r\n let copyHitCallback = function (elementToCopy, currentElement) {\r\n if (currentElement == null) {\r\n currentElement = new RaycastHit();\r\n }\r\n\r\n currentElement.copy(elementToCopy);\r\n\r\n return currentElement;\r\n };\r\n\r\n return function copy(other) {\r\n if (other.myRaycastParams == null) {\r\n this.myRaycastParams = null;\r\n } else {\r\n if (this.myRaycastParams == null) {\r\n this.myRaycastParams = new RaycastParams(other.myRaycastParams.myPhysics);\r\n }\r\n\r\n this.myRaycastParams.copy(other.myRaycastParams);\r\n }\r\n\r\n if (this.myHits.length > other.myHits.length) {\r\n if (this._myUnusedHits == null) {\r\n this._myUnusedHits = [];\r\n }\r\n\r\n for (let i = 0; i < this.myHits.length - other.myHits.length; i++) {\r\n this._myUnusedHits.push(this.myHits.pop());\r\n }\r\n } else if (this.myHits.length < other.myHits.length) {\r\n if (this._myUnusedHits != null) {\r\n let length = Math.min(this._myUnusedHits.length, other.myHits.length - this.myHits.length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n this.myHits.push(this._myUnusedHits.pop());\r\n }\r\n }\r\n }\r\n\r\n this.myHits.pp_copy(other.myHits, copyHitCallback);\r\n };\r\n}();", "/*\r\nlet visualParams = new VisualRaycastParams();\r\nvisualParams.myRaycastResults = raycastResults;\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualRaycast = new VisualRaycast(visualParams);\r\n*/\r\n\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { RaycastResults } from \"../../physics/physics_raycast_params.js\";\r\nimport { VisualArrow, VisualArrowParams } from \"./visual_arrow.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualRaycastParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myRaycastResults = new RaycastResults();\r\n\r\n this.myHitNormalLength = 0.2;\r\n this.myThickness = 0.005;\r\n\r\n this.myShowOnlyFirstHit = true;\r\n\r\n this.myRayMaterial = null;\r\n this.myHitNormalMaterial = null;\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.RAYCAST;\r\n }\r\n\r\n get myRaycastResults() {\r\n return this._myRaycastResults;\r\n }\r\n\r\n set myRaycastResults(result) {\r\n this._myRaycastResults.copy(result);\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualRaycast {\r\n\r\n constructor(params = new VisualRaycastParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myVisualRaycast = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n this._myVisualRaycast.setAutoRefresh(false);\r\n\r\n this._myVisualRaycastHitList = [];\r\n\r\n this._myDestroyed = false;\r\n\r\n this._addVisualRaycastHit();\r\n\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myVisible) {\r\n if (this._myParams.myRaycastResults.myRaycastParams != null) {\r\n this._myVisualRaycast.setVisible(true);\r\n }\r\n\r\n if (this._myParams.myRaycastResults.myHits.length > 0) {\r\n let hitsToShow = Math.min(this._myParams.myRaycastResults.myHits.length, this._myVisualRaycastHitList.length);\r\n\r\n for (let i = 0; i < hitsToShow; i++) {\r\n let visualRaycastHit = this._myVisualRaycastHitList[i];\r\n visualRaycastHit.setVisible(true);\r\n }\r\n }\r\n } else {\r\n this._myVisualRaycast.setVisible(false);\r\n\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.setVisible(false);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n this._myVisualRaycast.forceRefresh();\r\n\r\n if (this._myParams.myRaycastResults.myHits.length > 0) {\r\n let hitsToRefresh = Math.min(this._myParams.myRaycastResults.myHits.length, this._myVisualRaycastHitList.length);\r\n\r\n for (let i = 0; i < hitsToRefresh; i++) {\r\n let visualRaycastHit = this._myVisualRaycastHitList[i];\r\n visualRaycastHit.forceRefresh();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n this._myDirty = false;\r\n }\r\n\r\n this._myVisualRaycast.update(dt);\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.update(dt);\r\n }\r\n }\r\n\r\n _refresh() {\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.setVisible(false);\r\n }\r\n\r\n if (this._myParams.myRaycastResults.myHits.length > 0) {\r\n let raycastDistance = this._myParams.myShowOnlyFirstHit ?\r\n this._myParams.myRaycastResults.myHits.pp_first().myDistance :\r\n this._myParams.myRaycastResults.myHits.pp_last().myDistance;\r\n\r\n {\r\n let visualRaycastParams = this._myVisualRaycast.getParams();\r\n visualRaycastParams.myStart.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myOrigin);\r\n visualRaycastParams.myDirection.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myDirection);\r\n visualRaycastParams.myLength = raycastDistance;\r\n visualRaycastParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myRayMaterial == null) {\r\n visualRaycastParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myRay;\r\n } else {\r\n visualRaycastParams.myMaterial = this._myParams.myRayMaterial;\r\n }\r\n\r\n visualRaycastParams.myParent = this._myParams.myParent;\r\n visualRaycastParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualRaycast.paramsUpdated();\r\n\r\n this._myVisualRaycast.setVisible(this._myVisible);\r\n }\r\n\r\n let hitsToShow = this._myParams.myShowOnlyFirstHit ? 1 : this._myParams.myRaycastResults.myHits.length;\r\n while (hitsToShow > this._myVisualRaycastHitList.length) {\r\n this._addVisualRaycastHit();\r\n }\r\n\r\n for (let i = 0; i < hitsToShow; i++) {\r\n let visualRaycastHit = this._myVisualRaycastHitList[i];\r\n\r\n {\r\n let visualRaycastHitParams = visualRaycastHit.getParams();\r\n visualRaycastHitParams.myStart.vec3_copy(this._myParams.myRaycastResults.myHits[i].myPosition);\r\n visualRaycastHitParams.myDirection.vec3_copy(this._myParams.myRaycastResults.myHits[i].myNormal);\r\n visualRaycastHitParams.myLength = this._myParams.myHitNormalLength;\r\n visualRaycastHitParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myHitNormalMaterial == null) {\r\n visualRaycastHitParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myHitNormal;\r\n } else {\r\n visualRaycastHitParams.myMaterial = this._myParams.myHitNormalMaterial;\r\n }\r\n\r\n visualRaycastHitParams.myParent = this._myParams.myParent;\r\n visualRaycastHitParams.myLocal = this._myParams.myLocal;\r\n\r\n visualRaycastHit.paramsUpdated();\r\n\r\n visualRaycastHit.setVisible(this._myVisible);\r\n }\r\n }\r\n\r\n } else if (this._myParams.myRaycastResults.myRaycastParams != null) {\r\n {\r\n let visualRaycastParams = this._myVisualRaycast.getParams();\r\n visualRaycastParams.myStart.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myOrigin);\r\n visualRaycastParams.myDirection.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myDirection);\r\n visualRaycastParams.myLength = this._myParams.myRaycastResults.myRaycastParams.myDistance;\r\n visualRaycastParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myRayMaterial == null) {\r\n visualRaycastParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myRay;\r\n } else {\r\n visualRaycastParams.myMaterial = this._myParams.myRayMaterial;\r\n }\r\n\r\n visualRaycastParams.myParent = this._myParams.myParent;\r\n visualRaycastParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualRaycast.paramsUpdated();\r\n\r\n this._myVisualRaycast.setVisible(this._myVisible);\r\n }\r\n } else {\r\n this._myVisualRaycast.setVisible(false);\r\n }\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualRaycastParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualRaycast(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _addVisualRaycastHit() {\r\n let visualRaycastHit = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n visualRaycastHit.setAutoRefresh(false);\r\n visualRaycastHit.setVisible(false);\r\n\r\n this._myVisualRaycastHitList.push(visualRaycastHit);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualRaycast.destroy();\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualRaycastParams.prototype.copy = function copy(other) {\r\n this.myRaycastResults = other.myRaycastResults;\r\n this.myHitNormalLength = other.myHitNormalLength;\r\n this.myThickness = other.myThickness;\r\n this.myShowOnlyFirstHit = other.myShowOnlyFirstHit;\r\n\r\n if (other.myRayMaterial != null) {\r\n this.myRayMaterial = other.myRayMaterial.clone();\r\n } else {\r\n this.myRayMaterial = null;\r\n }\r\n\r\n if (other.myHitNormalMaterial != null) {\r\n this.myHitNormalMaterial = other.myHitNormalMaterial.clone();\r\n } else {\r\n this.myHitNormalMaterial = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualTextParams();\r\nvisualParams.myText = text;\r\nvisualParams.myTransform.mat4_copy(transform);\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myText.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualText = new VisualText(visualParams);\r\n*/\r\n\r\nimport { Alignment, Justification, TextComponent } from \"@wonderlandengine/api\";\r\nimport { mat4_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualTextParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myText = \"\";\r\n this.myAlignment = Alignment.Center;\r\n this.myJustification = Justification.Middle;\r\n\r\n this.myTransform = mat4_create();\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myDefaultTextMaterial\r\n\r\n this.myColor = null; // If this is set and material is null, it will use the default text material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myLookAtObject = null;\r\n\r\n this.myType = VisualElementType.TEXT;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualText {\r\n\r\n constructor(params = new VisualTextParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myTextObject = null;\r\n this._myTextComponent = null;\r\n\r\n this._myTextMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myTextObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty || this._myParams.myLookAtObject != null) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _build() {\r\n this._myTextObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n this._myTextComponent = this._myTextObject.pp_addComponent(TextComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualTextParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualText(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myTextObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualTextParams.prototype.copy = function copy(other) {\r\n this.myText = other.myText;\r\n this.myAlignment = other.myAlignment;\r\n this.myJustification = other.myJustification;\r\n\r\n this.myTransform.mat4_copy(other.myTransform);\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myLookAtObject = other.myLookAtObject;\r\n\r\n this.myType = other.myType;\r\n};\r\n\r\nVisualText.prototype._refresh = function () {\r\n let lookAtPosition = vec3_create();\r\n return function _refresh() {\r\n this._myTextObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myTextObject.pp_setTransformLocal(this._myParams.myTransform);\r\n } else {\r\n this._myTextObject.pp_setTransform(this._myParams.myTransform);\r\n }\r\n\r\n if (this._myParams.myLookAtObject != null) {\r\n this._myParams.myLookAtObject.pp_getPosition(lookAtPosition);\r\n this._myTextObject.pp_lookAt(lookAtPosition);\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myTextComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myText;\r\n } else {\r\n if (this._myTextMaterial == null) {\r\n this._myTextMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myText.clone();\r\n }\r\n this._myTextComponent.material = this._myTextMaterial;\r\n this._myTextMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myTextComponent.material = this._myParams.myMaterial;\r\n }\r\n\r\n this._myTextComponent.text = this._myParams.myText;\r\n this._myTextComponent.alignment = this._myParams.myAlignment;\r\n this._myTextComponent.justification = this._myParams.myJustification;\r\n\r\n this._myDirty = false;\r\n };\r\n}();", "/*\r\nlet visualParams = new VisualTorusParams();\r\nvisualParams.myRadius = 1;\r\nvisualParams.mySegmentsAmount = 12;\r\nvisualParams.mySegmentThickness = 0.05;\r\nvisualParams.myTransform.mat4_copy(transform);\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualTorus = new VisualTorus(visualParams);\r\n*/\r\n\r\nimport { mat4_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\nimport { VisualLine, VisualLineParams } from \"./visual_line.js\";\r\n\r\nexport class VisualTorusParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myTransform = mat4_create();\r\n this.myRadius = 0;\r\n\r\n this.mySegmentsAmount = 12;\r\n this.mySegmentThickness = 0.05;\r\n\r\n this.mySegmentMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCylinder\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.TORUS;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualTorus {\r\n\r\n constructor(params = new VisualTorusParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myTorusParentObject = null;\r\n\r\n this._myVisualSegmentList = [];\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myVisible) {\r\n let segmentToShow = Math.min(this._myParams.mySegmentsAmount, this._myVisualSegmentList.length);\r\n\r\n for (let i = 0; i < segmentToShow; i++) {\r\n let visualSegment = this._myVisualSegmentList[i];\r\n visualSegment.setVisible(true);\r\n }\r\n } else {\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.setVisible(false);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n let segmentToRefresh = Math.min(this._myParams.mySegmentsAmount, this._myVisualSegmentList.length);\r\n\r\n for (let i = 0; i < segmentToRefresh; i++) {\r\n let visualSegment = this._myVisualSegmentList[i];\r\n visualSegment.forceRefresh();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.update(dt);\r\n }\r\n }\r\n\r\n _build() {\r\n this._myTorusParentObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n\r\n this._fillSegmentList();\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n _fillSegmentList() {\r\n while (this._myVisualSegmentList.length < this._myParams.mySegmentsAmount) {\r\n let visualSegment = new VisualLine(new VisualLineParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n visualSegment.setAutoRefresh(false);\r\n visualSegment.setVisible(false);\r\n\r\n visualSegment.getParams().myParent = this._myTorusParentObject;\r\n visualSegment.getParams().myLocal = true;\r\n\r\n this._myVisualSegmentList.push(visualSegment);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualTorusParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualTorus(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.destroy();\r\n }\r\n this._myTorusParentObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualTorus.prototype._refresh = function () {\r\n let segmentStart = vec3_create();\r\n let segmentEnd = vec3_create();\r\n\r\n let segmentDirection = vec3_create();\r\n\r\n let fixedSegmentStart = vec3_create();\r\n let fixedSegmentEnd = vec3_create();\r\n\r\n let up = vec3_create(0, 1, 0);\r\n return function _refresh() {\r\n this._fillSegmentList();\r\n\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.setVisible(false);\r\n }\r\n\r\n this._myTorusParentObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myTorusParentObject.pp_setTransformLocal(this._myParams.myTransform);\r\n } else {\r\n this._myTorusParentObject.pp_setTransform(this._myParams.myTransform);\r\n }\r\n\r\n let sliceAngle = 2 * Math.PI / this._myParams.mySegmentsAmount;\r\n segmentStart.vec3_set(this._myParams.myRadius, 0, 0);\r\n for (let i = 0; i < this._myParams.mySegmentsAmount; i++) {\r\n segmentEnd = segmentStart.vec3_rotateAxisRadians(sliceAngle, up, segmentEnd);\r\n\r\n segmentDirection = segmentEnd.vec3_sub(segmentStart, segmentDirection).vec3_normalize(segmentDirection);\r\n\r\n let extraLength = Math.tan(sliceAngle / 2) * this._myParams.mySegmentThickness / 2;\r\n\r\n fixedSegmentStart = segmentStart.vec3_sub(segmentDirection.vec3_scale(extraLength, fixedSegmentStart), fixedSegmentStart);\r\n fixedSegmentEnd = segmentEnd.vec3_add(segmentDirection.vec3_scale(extraLength, fixedSegmentEnd), fixedSegmentEnd);\r\n\r\n let visualSegment = this._myVisualSegmentList[i];\r\n\r\n let visualSegmentParams = visualSegment.getParams();\r\n visualSegmentParams.setStartEnd(fixedSegmentStart, fixedSegmentEnd);\r\n visualSegmentParams.myThickness = this._myParams.mySegmentThickness;\r\n\r\n visualSegmentParams.myMesh = this._myParams.mySegmentMesh;\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n visualSegmentParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n visualSegmentParams.myMaterial = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n visualSegmentParams.myMaterial = this._myParams.myMaterial;\r\n }\r\n\r\n visualSegment.paramsUpdated();\r\n\r\n visualSegment.setVisible(this._myVisible);\r\n\r\n segmentStart.vec3_copy(segmentEnd);\r\n }\r\n };\r\n}();\r\n\r\nVisualTorusParams.prototype.copy = function copy(other) {\r\n this.myRadius = other.myRadius;\r\n this.mySegmentsAmount = other.mySegmentsAmount;\r\n this.mySegmentThickness = other.mySegmentThickness;\r\n\r\n this.myTransform.mat4_copy(other.myTransform);\r\n\r\n this.mySegmentMesh = other.mySegmentMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualTransformParams();\r\nvisualParams.myTransform.mat4_copy(transform);\r\nvisualParams.myLength = 0.2;\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualTransform = new VisualTransform(visualParams);\r\n*/\r\n\r\nimport { mat4_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualArrow, VisualArrowParams } from \"./visual_arrow.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualTransformParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myTransform = mat4_create();\r\n this.myLength = 0.2;\r\n this.myThickness = 0.005;\r\n\r\n this.myForwardMaterial = null;\r\n this.myUpMaterial = null;\r\n this.myRightMaterial = null;\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.TRANSFORM;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualTransform {\r\n\r\n constructor(params = new VisualTransformParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myVisualRight = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n this._myVisualUp = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n this._myVisualForward = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n this._myVisualRight.setAutoRefresh(false);\r\n this._myVisualUp.setAutoRefresh(false);\r\n this._myVisualForward.setAutoRefresh(false);\r\n\r\n this._myDestroyed = false;\r\n\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myVisualRight.setVisible(visible);\r\n this._myVisualUp.setVisible(visible);\r\n this._myVisualForward.setVisible(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n this._myVisualRight.forceRefresh();\r\n this._myVisualUp.forceRefresh();\r\n this._myVisualForward.forceRefresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n\r\n this._myVisualRight.update(dt);\r\n this._myVisualUp.update(dt);\r\n this._myVisualForward.update(dt);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualTransformParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualTransform(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualRight.destroy();\r\n this._myVisualUp.destroy();\r\n this._myVisualForward.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualTransform.prototype._refresh = function () {\r\n let axes = [vec3_create(), vec3_create(), vec3_create()];\r\n let scale = vec3_create();\r\n let position = vec3_create();\r\n return function _refresh() {\r\n axes = this._myParams.myTransform.mat4_getAxes(axes);\r\n scale = this._myParams.myTransform.mat4_getScale(scale);\r\n let maxValue = 0;\r\n for (let value of scale) {\r\n maxValue = Math.max(value, maxValue);\r\n }\r\n\r\n if (maxValue == 0) {\r\n scale[0] = 1;\r\n scale[1] = 1;\r\n scale[2] = 1;\r\n } else {\r\n scale[0] = scale[0] / maxValue;\r\n scale[1] = scale[1] / maxValue;\r\n scale[2] = scale[2] / maxValue;\r\n }\r\n\r\n position = this._myParams.myTransform.mat4_getPosition(position);\r\n\r\n {\r\n let visualArrowParams = this._myVisualRight.getParams();\r\n visualArrowParams.myStart.vec3_copy(position);\r\n visualArrowParams.myDirection = axes[0].vec3_negate(visualArrowParams.myDirection).vec3_normalize(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = Math.max(this._myParams.myLength * scale[0], 0.001);\r\n visualArrowParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myRightMaterial == null) {\r\n visualArrowParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myRight;\r\n } else {\r\n visualArrowParams.myMaterial = this._myParams.myRightMaterial;\r\n }\r\n\r\n visualArrowParams.myParent = this._myParams.myParent;\r\n visualArrowParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualRight.paramsUpdated();\r\n }\r\n\r\n {\r\n let visualArrowParams = this._myVisualUp.getParams();\r\n visualArrowParams.myStart.vec3_copy(position);\r\n visualArrowParams.myDirection = axes[1].vec3_normalize(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = Math.max(this._myParams.myLength * scale[1], 0.001);\r\n visualArrowParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myUpMaterial == null) {\r\n visualArrowParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myUp;\r\n } else {\r\n visualArrowParams.myMaterial = this._myParams.myUpMaterial;\r\n }\r\n\r\n visualArrowParams.myParent = this._myParams.myParent;\r\n visualArrowParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualUp.paramsUpdated();\r\n }\r\n\r\n {\r\n let visualArrowParams = this._myVisualForward.getParams();\r\n visualArrowParams.myStart.vec3_copy(position);\r\n visualArrowParams.myDirection = axes[2].vec3_normalize(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = Math.max(this._myParams.myLength * scale[2], 0.001);\r\n visualArrowParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myForwardMaterial == null) {\r\n visualArrowParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myForward;\r\n } else {\r\n visualArrowParams.myMaterial = this._myParams.myForwardMaterial;\r\n }\r\n\r\n visualArrowParams.myParent = this._myParams.myParent;\r\n visualArrowParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualForward.paramsUpdated();\r\n }\r\n };\r\n}();\r\n\r\nVisualTransformParams.prototype.copy = function copy(other) {\r\n this.myTransform.mat4_copy(other.myTransform);\r\n this.myLength = other.myLength;\r\n this.myThickness = other.myThickness;\r\n\r\n if (other.myRightMaterial != null) {\r\n this.myRightMaterial = other.myRightMaterial.clone();\r\n } else {\r\n this.myRightMaterial = null;\r\n }\r\n\r\n if (other.myUpMaterial != null) {\r\n this.myUpMaterial = other.myUpMaterial.clone();\r\n } else {\r\n this.myUpMaterial = null;\r\n }\r\n\r\n if (other.myForwardMaterial != null) {\r\n this.myForwardMaterial = other.myForwardMaterial.clone();\r\n } else {\r\n this.myForwardMaterial = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "import { Globals } from \"../../pp/globals.js\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\nimport { ObjectPool, ObjectPoolParams } from \"../object_pool/object_pool.js\";\r\nimport { VisualArrow, VisualArrowParams } from \"./elements/visual_arrow.js\";\r\nimport { VisualElementType } from \"./elements/visual_element_types.js\";\r\nimport { VisualLine, VisualLineParams } from \"./elements/visual_line.js\";\r\nimport { VisualMesh, VisualMeshParams } from \"./elements/visual_mesh.js\";\r\nimport { VisualPoint, VisualPointParams } from \"./elements/visual_point.js\";\r\nimport { VisualRaycast, VisualRaycastParams } from \"./elements/visual_raycast.js\";\r\nimport { VisualText, VisualTextParams } from \"./elements/visual_text.js\";\r\nimport { VisualTorus, VisualTorusParams } from \"./elements/visual_torus.js\";\r\nimport { VisualTransform, VisualTransformParams } from \"./elements/visual_transform.js\";\r\n\r\nexport class VisualManager {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myVisualElementPrototypeCreationCallbacks = new Map();\r\n\r\n this._myVisualElementsTypeMap = new Map();\r\n this._myVisualElementLastID = 0;\r\n this._myVisualElementsToShow = [];\r\n\r\n this._myActive = true;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._myObjectPoolManagerPrefix = this._getClassName() + \"_\" + Math.pp_randomUUID() + \"_visual_element_type_\";\r\n this._myTypePoolIDs = new Map();\r\n\r\n this._addStandardVisualElementTypes();\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this._myActive = active;\r\n }\r\n }\r\n\r\n isActive() {\r\n return this._myActive;\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n update(dt) {\r\n if (this._myActive) {\r\n this._updateDraw(dt);\r\n }\r\n }\r\n\r\n // lifetimeSeconds can be null, in that case the element will be drawn until cleared\r\n draw(visualElementParams, lifetimeSeconds = 0, idToReuse = null) {\r\n if (!this._myActive) {\r\n return null;\r\n }\r\n\r\n let visualElement = null;\r\n let idReused = false;\r\n if (idToReuse != null) {\r\n if (this._myVisualElementsTypeMap.has(visualElementParams.myType)) {\r\n let visualElements = this._myVisualElementsTypeMap.get(visualElementParams.myType);\r\n if (visualElements.has(idToReuse)) {\r\n visualElement = visualElements.get(idToReuse)[0];\r\n visualElement.copyParams(visualElementParams);\r\n visualElement.setVisible(false);\r\n idReused = true;\r\n }\r\n }\r\n }\r\n\r\n if (visualElement == null) {\r\n visualElement = this._getVisualElementFromPool(visualElementParams);\r\n }\r\n\r\n if (visualElement == null) {\r\n console.error(\"Couldn't create the requested visual element\");\r\n return null;\r\n }\r\n\r\n if (!this._myVisualElementsTypeMap.has(visualElementParams.myType)) {\r\n this._myVisualElementsTypeMap.set(visualElementParams.myType, new Map());\r\n }\r\n let visualElements = this._myVisualElementsTypeMap.get(visualElementParams.myType);\r\n\r\n let elementID = null;\r\n if (!idReused) {\r\n elementID = this._myVisualElementLastID + 1;\r\n this._myVisualElementLastID = elementID;\r\n\r\n visualElements.set(elementID, [visualElement, new Timer(lifetimeSeconds, lifetimeSeconds != null)]);\r\n } else {\r\n elementID = idToReuse;\r\n let visualElementPair = visualElements.get(elementID);\r\n visualElementPair[0] = visualElement;\r\n visualElementPair[1].reset(lifetimeSeconds);\r\n if (lifetimeSeconds != null) {\r\n visualElementPair[1].start();\r\n }\r\n }\r\n\r\n this._myVisualElementsToShow.push(visualElement);\r\n\r\n return elementID;\r\n }\r\n\r\n getVisualElement(elementID) {\r\n let visualElement = null;\r\n\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n if (visualElements.has(elementID)) {\r\n let visualElementPair = visualElements.get(elementID);\r\n visualElement = visualElementPair[0];\r\n break;\r\n }\r\n }\r\n\r\n return visualElement;\r\n }\r\n\r\n getVisualElementParams(elementID) {\r\n return this.getVisualElement(elementID).getParams();\r\n }\r\n\r\n getVisualElementID(visualElement) {\r\n let elementID = null;\r\n for (let currentVisualElements of this._myVisualElementsTypeMap.values()) {\r\n for (let [currentElementID, currentVisualElement] of currentVisualElements.entries()) {\r\n if (currentVisualElement[0] == visualElement) {\r\n elementID = currentElementID;\r\n break;\r\n }\r\n }\r\n\r\n if (elementID != null) {\r\n break;\r\n }\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n clearVisualElement(elementID = null) {\r\n if (elementID == null) {\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n for (let visualElement of visualElements.values()) {\r\n this._releaseElement(visualElement[0]);\r\n }\r\n }\r\n\r\n this._myVisualElementsToShow = [];\r\n this._myVisualElementsTypeMap = new Map();\r\n this._myVisualElementLastID = 0;\r\n } else {\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n if (visualElements.has(elementID)) {\r\n let visualElementPair = visualElements.get(elementID);\r\n this._releaseElement(visualElementPair[0]);\r\n visualElements.delete(elementID);\r\n\r\n this._myVisualElementsToShow.pp_removeEqual(visualElementPair[0]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n allocateVisualElementType(visualElementType, amount) {\r\n if (!Globals.getObjectPoolManager(this._myEngine).hasPool(this._getTypePoolID(visualElementType))) {\r\n this._addVisualElementTypeToPool(visualElementType);\r\n }\r\n\r\n let pool = Globals.getObjectPoolManager(this._myEngine).getPool(this._getTypePoolID(visualElementType));\r\n\r\n let difference = pool.getAvailableSize() - amount;\r\n if (difference < 0) {\r\n pool.increase(-difference);\r\n }\r\n }\r\n\r\n addVisualElementType(visualElementType, visuaElementPrototypeCreationCallback) {\r\n this._myVisualElementPrototypeCreationCallbacks.set(visualElementType, visuaElementPrototypeCreationCallback);\r\n }\r\n\r\n removeVisualElementType(visualElementType) {\r\n this._myVisualElementPrototypeCreationCallbacks.delete(visualElementType);\r\n }\r\n\r\n _updateDraw(dt) {\r\n for (let visualElement of this._myVisualElementsToShow) {\r\n visualElement.setVisible(true);\r\n }\r\n this._myVisualElementsToShow.pp_clear();\r\n\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n let idsToRemove = [];\r\n for (let visualElementsEntry of visualElements.entries()) {\r\n let visualElement = visualElementsEntry[1];\r\n if (visualElement[1].isDone()) {\r\n this._releaseElement(visualElement[0]);\r\n idsToRemove.push(visualElementsEntry[0]);\r\n } else {\r\n visualElement[0].update(dt);\r\n visualElement[1].update(dt);\r\n }\r\n }\r\n\r\n for (let id of idsToRemove) {\r\n visualElements.delete(id);\r\n }\r\n }\r\n }\r\n\r\n _getVisualElementFromPool(params) {\r\n let element = null;\r\n\r\n if (!Globals.getObjectPoolManager(this._myEngine).hasPool(this._getTypePoolID(params.myType))) {\r\n this._addVisualElementTypeToPool(params.myType);\r\n }\r\n\r\n element = Globals.getObjectPoolManager(this._myEngine).get(this._getTypePoolID(params.myType));\r\n\r\n if (element != null) {\r\n element.copyParams(params);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n _addVisualElementTypeToPool(type) {\r\n let objectPoolParams = new ObjectPoolParams();\r\n objectPoolParams.myInitialPoolSize = 10;\r\n objectPoolParams.myAmountToAddWhenEmpty = 0;\r\n objectPoolParams.myPercentageToAddWhenEmpty = 0.5;\r\n objectPoolParams.mySetActiveCallback = function (object, active) {\r\n object.setVisible(active);\r\n };\r\n\r\n let visualElementPrototype = null;\r\n if (this._myVisualElementPrototypeCreationCallbacks.has(type)) {\r\n visualElementPrototype = this._myVisualElementPrototypeCreationCallbacks.get(type)();\r\n }\r\n\r\n if (visualElementPrototype != null) {\r\n visualElementPrototype.setVisible(false);\r\n visualElementPrototype.setAutoRefresh(true);\r\n\r\n Globals.getObjectPoolManager(this._myEngine).addPool(this._getTypePoolID(type), new ObjectPool(visualElementPrototype, objectPoolParams));\r\n } else {\r\n console.error(\"Visual element type not supported\");\r\n }\r\n }\r\n\r\n _addStandardVisualElementTypes() {\r\n this.addVisualElementType(VisualElementType.LINE, () => new VisualLine(new VisualLineParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.MESH, () => new VisualMesh(new VisualMeshParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.POINT, () => new VisualPoint(new VisualPointParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.ARROW, () => new VisualArrow(new VisualArrowParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.TEXT, () => new VisualText(new VisualTextParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.TRANSFORM, () => new VisualTransform(new VisualTransformParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.RAYCAST, () => new VisualRaycast(new VisualRaycastParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.TORUS, () => new VisualTorus(new VisualTorusParams(this._myEngine)));\r\n }\r\n\r\n _getTypePoolID(type) {\r\n let typePoolID = this._myTypePoolIDs.get(type);\r\n\r\n if (typePoolID == null) {\r\n typePoolID = this._myObjectPoolManagerPrefix + type;\r\n this._myTypePoolIDs.set(type, typePoolID);\r\n }\r\n\r\n return typePoolID;\r\n }\r\n\r\n _releaseElement(visualElement) {\r\n let defaultElementsParent = Globals.getSceneObjects(this._myEngine).myVisualElements;\r\n if (visualElement.getParams().myParent != defaultElementsParent) {\r\n visualElement.getParams().myParent = defaultElementsParent;\r\n visualElement.forceRefresh(); // just used to trigger the parent change, I'm lazy\r\n }\r\n\r\n Globals.getObjectPoolManager(this._myEngine).release(this._getTypePoolID(visualElement.getParams().myType), visualElement);\r\n }\r\n\r\n _getClassName() {\r\n return \"visual_manager\";\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let poolID of this._myTypePoolIDs.values()) {\r\n Globals.getObjectPoolManager(this._myEngine)?.destroyPool(poolID);\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "export class VisualResources {\r\n\r\n constructor() {\r\n this.myDefaultMaterials = new VisualResourcesMaterials();\r\n }\r\n}\r\n\r\nexport class VisualResourcesMaterials {\r\n\r\n constructor() {\r\n this.myMesh = null;\r\n this.myText = null;\r\n this.myRight = null;\r\n this.myUp = null;\r\n this.myForward = null;\r\n this.myRay = null;\r\n this.myHitNormal = null;\r\n }\r\n}", "import * as WLAPI from \"@wonderlandengine/api\";\r\nimport { Component, Property } from \"@wonderlandengine/api\";\r\nimport * as WLComponents from \"@wonderlandengine/components\";\r\n\r\nexport class AddWLToWindowComponent extends Component {\r\n static TypeName = \"pp-add-wl-to-window\";\r\n static Properties = {\r\n _myAdd: Property.bool(true)\r\n };\r\n\r\n init() {\r\n if (this._myAdd) {\r\n window.WL = {};\r\n this._addProperties(WLAPI);\r\n this._addProperties(WLComponents);\r\n }\r\n }\r\n\r\n _addProperties(object) {\r\n let propertyNames = Object.getOwnPropertyNames(object);\r\n for (let propertyName of propertyNames) {\r\n if (object[propertyName] != undefined) {\r\n window.WL[propertyName] = object[propertyName];\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n window.WL = undefined;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { MeshUtils } from \"../../utils/mesh_utils.js\";\r\nimport { DefaultResources } from \"../default_resources.js\";\r\n\r\nexport class GetDefaultResourcesComponent extends Component {\r\n static TypeName = \"pp-get-default-resources\";\r\n static Properties = {\r\n _myPlane: Property.mesh(),\r\n _myCube: Property.mesh(),\r\n _mySphere: Property.mesh(),\r\n _myCone: Property.mesh(),\r\n _myCylinder: Property.mesh(),\r\n _myCircle: Property.mesh(),\r\n\r\n _myFlatOpaque: Property.material(),\r\n _myFlatTransparentNoDepth: Property.material(),\r\n _myPhongOpaque: Property.material(),\r\n _myText: Property.material()\r\n };\r\n\r\n init() {\r\n this._myDefaultResources = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasDefaultResources(this.engine)) {\r\n this._myDefaultResources = new DefaultResources();\r\n this._myDefaultResources.myMeshes.myPlane = MeshUtils.clone(this._myPlane);\r\n this._myDefaultResources.myMeshes.myCube = MeshUtils.clone(this._myCube);\r\n this._myDefaultResources.myMeshes.mySphere = MeshUtils.clone(this._mySphere);\r\n this._myDefaultResources.myMeshes.myCone = MeshUtils.clone(this._myCone);\r\n this._myDefaultResources.myMeshes.myCylinder = MeshUtils.clone(this._myCylinder);\r\n this._myDefaultResources.myMeshes.myCircle = MeshUtils.clone(this._myCircle);\r\n\r\n this._myDefaultResources.myMeshes.myInvertedCube = MeshUtils.invert(this._myCube);\r\n this._myDefaultResources.myMeshes.myInvertedSphere = MeshUtils.invert(this._mySphere);\r\n this._myDefaultResources.myMeshes.myInvertedCone = MeshUtils.invert(this._myCone);\r\n this._myDefaultResources.myMeshes.myInvertedCylinder = MeshUtils.invert(this._myCylinder);\r\n\r\n this._myDefaultResources.myMeshes.myDoubleSidedPlane = MeshUtils.makeDoubleSided(this._myPlane);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCube = MeshUtils.makeDoubleSided(this._myCube);\r\n this._myDefaultResources.myMeshes.myDoubleSidedSphere = MeshUtils.makeDoubleSided(this._mySphere);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCone = MeshUtils.makeDoubleSided(this._myCone);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCylinder = MeshUtils.makeDoubleSided(this._myCylinder);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCircle = MeshUtils.makeDoubleSided(this._myCircle);\r\n\r\n if (this._myFlatOpaque != null) {\r\n this._myDefaultResources.myMaterials.myFlatOpaque = this._myFlatOpaque.clone();\r\n }\r\n\r\n if (this._myFlatTransparentNoDepth != null) {\r\n this._myDefaultResources.myMaterials.myFlatTransparentNoDepth = this._myFlatTransparentNoDepth.clone();\r\n }\r\n\r\n if (this._myPhongOpaque != null) {\r\n this._myDefaultResources.myMaterials.myPhongOpaque = this._myPhongOpaque.clone();\r\n }\r\n\r\n if (this._myText != null) {\r\n this._myDefaultResources.myMaterials.myText = this._myText.clone();\r\n }\r\n\r\n Globals.setDefaultResources(this._myDefaultResources, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myDefaultResources != null && Globals.getDefaultResources(this.engine) == this._myDefaultResources) {\r\n Globals.removeDefaultResources(this.engine);\r\n }\r\n }\r\n}", "import { Mesh, MeshAttribute, MeshIndexType } from \"@wonderlandengine/api\";\r\nimport { vec2_create, vec3_create, vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class MeshCreationVertexParams {\r\n\r\n constructor() {\r\n this.myPosition = null; // @Vec3\r\n this.myTextureCoordinates = null; // @Vec2\r\n this.myNormal = null; // @Vec3\r\n this.myColor = null; // @Vec4\r\n }\r\n}\r\n\r\nexport class MeshCreationTriangleParams {\r\n\r\n constructor() {\r\n this.myIndexes = new Uint32Array(3);\r\n }\r\n}\r\n\r\nexport class MeshCreationParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myVertexes = [];\r\n this.myTriangles = [];\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport function create(meshCreationParams) {\r\n let indexData = [];\r\n for (let triangle of meshCreationParams.myTriangles) {\r\n indexData.push(triangle.myIndexes[0]);\r\n indexData.push(triangle.myIndexes[1]);\r\n indexData.push(triangle.myIndexes[2]);\r\n }\r\n\r\n let indexDataUnsignedInt = new Uint32Array(indexData.length);\r\n indexDataUnsignedInt.pp_copy(indexData);\r\n\r\n let vertexCount = meshCreationParams.myVertexes.length;\r\n let mesh = new Mesh(meshCreationParams.myEngine, {\r\n vertexCount: vertexCount,\r\n indexData: indexDataUnsignedInt,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < meshCreationParams.myVertexes.length; i++) {\r\n let vertex = meshCreationParams.myVertexes[i];\r\n if (positionAttribute != null && vertex.myPosition) {\r\n positionAttribute.set(i, vertex.myPosition);\r\n }\r\n if (textureCoordinatesAttribute != null && vertex.myTextureCoordinates) {\r\n textureCoordinatesAttribute.set(i, vertex.myTextureCoordinates);\r\n }\r\n if (normalAttribute != null && vertex.myNormal) {\r\n normalAttribute.set(i, vertex.myNormal);\r\n }\r\n if (colorAttribute != null && vertex.myColor) {\r\n colorAttribute.set(i, vertex.myColor);\r\n }\r\n }\r\n\r\n return mesh;\r\n}\r\n\r\nexport let clone = function () {\r\n let position = vec3_create();\r\n let textureCoordinates = vec2_create();\r\n let normal = vec3_create();\r\n let color = vec4_create();\r\n\r\n return function clone(mesh) {\r\n if (mesh == null) {\r\n return null;\r\n }\r\n\r\n let clonedIndexData = mesh.indexData.pp_clone();\r\n\r\n let clonedMesh = new Mesh(mesh.engine, {\r\n vertexCount: mesh.vertexCount,\r\n indexData: clonedIndexData,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n let clonedPositionAttribute = null;\r\n let clonedTextureCoordinatesAttribute = null;\r\n let clonedNormalAttribute = null;\r\n let clonedColorAttribute = null;\r\n\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n clonedPositionAttribute = clonedMesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n clonedPositionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n clonedTextureCoordinatesAttribute = clonedMesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n clonedTextureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n clonedNormalAttribute = clonedMesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n clonedNormalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n clonedColorAttribute = clonedMesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n clonedColorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < mesh.vertexCount; i++) {\r\n if (positionAttribute != null && clonedPositionAttribute != null) {\r\n clonedPositionAttribute.set(i, positionAttribute.get(i, position));\r\n }\r\n if (textureCoordinatesAttribute != null && clonedTextureCoordinatesAttribute != null) {\r\n clonedTextureCoordinatesAttribute.set(i, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n }\r\n if (normalAttribute != null && clonedNormalAttribute != null) {\r\n clonedNormalAttribute.set(i, normalAttribute.get(i, normal));\r\n }\r\n if (colorAttribute != null && clonedColorAttribute != null) {\r\n clonedColorAttribute.set(i, colorAttribute.get(i, color));\r\n }\r\n }\r\n\r\n return clonedMesh;\r\n };\r\n}();\r\n\r\nexport let invert = function () {\r\n let position = vec3_create();\r\n let textureCoordinates = vec2_create();\r\n let normal = vec3_create();\r\n let color = vec4_create();\r\n\r\n return function invert(mesh) {\r\n if (mesh == null) {\r\n return null;\r\n }\r\n\r\n let invertedIndexData = new Uint32Array(mesh.indexData.length);\r\n for (let i = 0; i < mesh.indexData.length / 3; i++) {\r\n invertedIndexData[i * 3 + 0] = mesh.indexData[i * 3 + 2];\r\n invertedIndexData[i * 3 + 1] = mesh.indexData[i * 3 + 1];\r\n invertedIndexData[i * 3 + 2] = mesh.indexData[i * 3 + 0];\r\n }\r\n\r\n let invertedMesh = new Mesh(mesh.engine, {\r\n vertexCount: mesh.vertexCount,\r\n indexData: invertedIndexData,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n let invertedPositionAttribute = null;\r\n let invertedTextureCoordinatesAttribute = null;\r\n let invertedNormalAttribute = null;\r\n let invertedColorAttribute = null;\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n invertedPositionAttribute = invertedMesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n invertedPositionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n invertedTextureCoordinatesAttribute = invertedMesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n invertedTextureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n invertedNormalAttribute = invertedMesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n invertedNormalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n invertedColorAttribute = invertedMesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n invertedColorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < mesh.vertexCount; i++) {\r\n if (positionAttribute != null && invertedPositionAttribute != null) {\r\n invertedPositionAttribute.set(i, positionAttribute.get(i, position));\r\n }\r\n\r\n if (textureCoordinatesAttribute != null && invertedTextureCoordinatesAttribute != null) {\r\n invertedTextureCoordinatesAttribute.set(i, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n }\r\n\r\n if (normalAttribute != null && invertedNormalAttribute != null) {\r\n normalAttribute.get(i, normal);\r\n normal.vec3_negate(normal);\r\n invertedNormalAttribute.set(i, normal);\r\n }\r\n\r\n if (colorAttribute != null && invertedColorAttribute != null) {\r\n invertedColorAttribute.set(i, colorAttribute.get(i, color));\r\n }\r\n }\r\n\r\n return invertedMesh;\r\n };\r\n}();\r\n\r\nexport let makeDoubleSided = function () {\r\n let position = vec3_create();\r\n let textureCoordinates = vec2_create();\r\n let normal = vec3_create();\r\n let color = vec4_create();\r\n\r\n return function makeDoubleSided(mesh) {\r\n if (mesh == null) {\r\n return null;\r\n }\r\n\r\n let doubleSidedIndexData = new Uint32Array(mesh.indexData.length * 2);\r\n for (let i = 0; i < doubleSidedIndexData.length / 3; i++) {\r\n doubleSidedIndexData[i * 3 * 2 + 0] = mesh.indexData[i * 3 + 0] * 2;\r\n doubleSidedIndexData[i * 3 * 2 + 1] = mesh.indexData[i * 3 + 1] * 2;\r\n doubleSidedIndexData[i * 3 * 2 + 2] = mesh.indexData[i * 3 + 2] * 2;\r\n\r\n doubleSidedIndexData[i * 3 * 2 + 3] = mesh.indexData[i * 3 + 2] * 2 + 1;\r\n doubleSidedIndexData[i * 3 * 2 + 4] = mesh.indexData[i * 3 + 1] * 2 + 1;\r\n doubleSidedIndexData[i * 3 * 2 + 5] = mesh.indexData[i * 3 + 0] * 2 + 1;\r\n }\r\n\r\n let doubleSidedMesh = new Mesh(mesh.engine, {\r\n vertexCount: mesh.vertexCount * 2,\r\n indexData: doubleSidedIndexData,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n let doubleSidedPositionAttribute = null;\r\n let doubleSidedTextureCoordinatesAttribute = null;\r\n let doubleSidedNormalAttribute = null;\r\n let doubleSidedColorAttribute = null;\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n doubleSidedPositionAttribute = doubleSidedMesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n doubleSidedPositionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n doubleSidedTextureCoordinatesAttribute = doubleSidedMesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n doubleSidedTextureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n doubleSidedNormalAttribute = doubleSidedMesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n doubleSidedNormalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n doubleSidedColorAttribute = doubleSidedMesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n doubleSidedColorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < mesh.vertexCount; i++) {\r\n if (positionAttribute != null && doubleSidedPositionAttribute != null) {\r\n doubleSidedPositionAttribute.set(i * 2, positionAttribute.get(i, position));\r\n doubleSidedPositionAttribute.set(i * 2 + 1, positionAttribute.get(i, position));\r\n }\r\n\r\n if (textureCoordinatesAttribute != null && doubleSidedTextureCoordinatesAttribute != null) {\r\n doubleSidedTextureCoordinatesAttribute.set(i * 2, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n doubleSidedTextureCoordinatesAttribute.set(i * 2 + 1, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n }\r\n\r\n if (normalAttribute != null && doubleSidedNormalAttribute != null) {\r\n normalAttribute.get(i, normal);\r\n doubleSidedNormalAttribute.set(i * 2, normal);\r\n\r\n let invertedNormal = normal.vec3_negate();\r\n doubleSidedNormalAttribute.set(i * 2 + 1, invertedNormal);\r\n }\r\n\r\n if (colorAttribute != null && doubleSidedColorAttribute != null) {\r\n doubleSidedColorAttribute.set(i * 2, colorAttribute.get(i, color));\r\n doubleSidedColorAttribute.set(i * 2 + 1, colorAttribute.get(i, color));\r\n }\r\n }\r\n\r\n return doubleSidedMesh;\r\n };\r\n}();\r\n\r\nexport function createPlane(engine = Globals.getMainEngine()) {\r\n let vertexCount = 4;\r\n\r\n let meshCreationParams = new MeshCreationParams(engine);\r\n\r\n for (let i = 0; i < vertexCount; ++i) {\r\n let vertexCreationParams = new MeshCreationVertexParams();\r\n\r\n vertexCreationParams.myPosition = new vec3_create();\r\n vertexCreationParams.myPosition[0] = -1 + (i & 1) * 2;\r\n vertexCreationParams.myPosition[1] = -1 + ((i & 2) >> 1) * 2; // This is a quick way to have positions (-1,-1) (1,-1) (1,-1) (1,1)\r\n vertexCreationParams.myPosition[2] = 0;\r\n\r\n vertexCreationParams.myTextureCoordinates = new vec2_create();\r\n vertexCreationParams.myTextureCoordinates[0] = (i & 1);\r\n vertexCreationParams.myTextureCoordinates[1] = ((i & 2) >> 1);\r\n\r\n vertexCreationParams.myNormal = new vec3_create();\r\n vertexCreationParams.myNormal[0] = 0;\r\n vertexCreationParams.myNormal[1] = 0;\r\n vertexCreationParams.myNormal[2] = 1;\r\n\r\n meshCreationParams.myVertexes.push(vertexCreationParams);\r\n }\r\n\r\n let firstTriangle = new MeshCreationTriangleParams();\r\n firstTriangle.myIndexes[0] = 0;\r\n firstTriangle.myIndexes[1] = 1;\r\n firstTriangle.myIndexes[2] = 2;\r\n\r\n let secondTriangle = new MeshCreationTriangleParams();\r\n secondTriangle.myIndexes[0] = 2;\r\n secondTriangle.myIndexes[1] = 1;\r\n secondTriangle.myIndexes[2] = 3;\r\n\r\n meshCreationParams.myTriangles.push(firstTriangle);\r\n meshCreationParams.myTriangles.push(secondTriangle);\r\n\r\n let mesh = MeshUtils.create(meshCreationParams);\r\n\r\n return mesh;\r\n}\r\n\r\nexport let MeshUtils = {\r\n create,\r\n clone,\r\n invert,\r\n makeDoubleSided,\r\n createPlane\r\n};", "import { Material, Mesh } from \"@wonderlandengine/api\";\r\n\r\nexport class DefaultResources {\r\n\r\n public myMeshes: DefaultResourcesMeshes = new DefaultResourcesMeshes();\r\n public myMaterials: DefaultResourcesMaterials = new DefaultResourcesMaterials();\r\n}\r\n\r\nexport class DefaultResourcesMeshes {\r\n\r\n public myPlane: Mesh | null = null;\r\n public myCube: Mesh | null = null;\r\n public mySphere: Mesh | null = null;\r\n public myCone: Mesh | null = null;\r\n public myCylinder: Mesh | null = null;\r\n public myCircle: Mesh | null = null;\r\n\r\n public myInvertedCube: Mesh | null = null;\r\n public myInvertedSphere: Mesh | null = null;\r\n public myInvertedCone: Mesh | null = null;\r\n public myInvertedCylinder: Mesh | null = null;\r\n\r\n public myDoubleSidedPlane: Mesh | null = null;\r\n public myDoubleSidedCube: Mesh | null = null;\r\n public myDoubleSidedSphere: Mesh | null = null;\r\n public myDoubleSidedCone: Mesh | null = null;\r\n public myDoubleSidedCylinder: Mesh | null = null;\r\n public myDoubleSidedCircle: Mesh | null = null;\r\n}\r\n\r\nexport class DefaultResourcesMaterials {\r\n\r\n public myFlatOpaque: Material | null = null;\r\n /** For now, the pipeline associated to this material needs to be the last one to make it work properly */\r\n public myFlatTransparentNoDepth: Material | null = null;\r\n public myPhongOpaque: Material | null = null;\r\n public myText: Material | null = null;\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Handedness } from \"../../../../input/cauldron/input_types.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { SceneObjects } from \"../scene_objects.js\";\r\n\r\nexport class GetSceneObjectsComponent extends Component {\r\n static TypeName = \"pp-get-scene-objects\";\r\n static Properties = {\r\n _myRoot: Property.object(),\r\n\r\n _myScene: Property.object(),\r\n\r\n _myPlayer: Property.object(),\r\n _myReferenceSpace: Property.object(), // If u don't have a pivot under the player you set this to null, by default will be the same as the player\r\n _myCameraNonXR: Property.object(),\r\n _myEyeLeft: Property.object(),\r\n _myEyeRight: Property.object(),\r\n _myHandLeft: Property.object(),\r\n _myHandRight: Property.object(),\r\n _myHead: Property.object()\r\n };\r\n\r\n init() {\r\n this._mySceneObjects = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasSceneObjects(this.engine)) {\r\n this._mySceneObjects = new SceneObjects();\r\n\r\n this._mySceneObjects.myRoot = this._myRoot;\r\n\r\n this._mySceneObjects.myScene = this._myScene;\r\n\r\n this._mySceneObjects.myPlayerObjects.myPlayer = this._myPlayer;\r\n this._mySceneObjects.myPlayerObjects.myReferenceSpace = this._myReferenceSpace;\r\n\r\n this._mySceneObjects.myPlayerObjects.myCameraNonXR = this._myCameraNonXR;\r\n\r\n this._mySceneObjects.myPlayerObjects.myEyeLeft = this._myEyeLeft;\r\n this._mySceneObjects.myPlayerObjects.myEyeRight = this._myEyeRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myHandLeft = this._myHandLeft;\r\n this._mySceneObjects.myPlayerObjects.myHandRight = this._myHandRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myEyes[Handedness.LEFT] = this._myEyeLeft;\r\n this._mySceneObjects.myPlayerObjects.myEyes[Handedness.RIGHT] = this._myEyeRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myHands[Handedness.LEFT] = this._myHandLeft;\r\n this._mySceneObjects.myPlayerObjects.myHands[Handedness.RIGHT] = this._myHandRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myHead = this._myHead;\r\n\r\n if (this._mySceneObjects.myPlayerObjects.myReferenceSpace == null) {\r\n this._mySceneObjects.myPlayerObjects.myReferenceSpace = this._mySceneObjects.myPlayerObjects.myPlayer;\r\n }\r\n\r\n this._mySceneObjects.myCauldron = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myCauldron.pp_setName(\"Cauldron\");\r\n this._mySceneObjects.myDynamics = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myDynamics.pp_setName(\"Dynamics\");\r\n this._mySceneObjects.myParticles = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myParticles.pp_setName(\"Particles\");\r\n this._mySceneObjects.myVisualElements = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myVisualElements.pp_setName(\"Visual Elements\");\r\n this._mySceneObjects.myTools = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myTools.pp_setName(\"Tools\");\r\n\r\n this._mySceneObjects.myPlayerObjects.myCauldron = this._mySceneObjects.myPlayerObjects.myPlayer.pp_addObject();\r\n this._mySceneObjects.myPlayerObjects.myCauldron.pp_setName(\"Cauldron\");\r\n this._mySceneObjects.myPlayerObjects.myHeadDebugs = this._mySceneObjects.myPlayerObjects.myHead.pp_addObject();\r\n this._mySceneObjects.myPlayerObjects.myHeadDebugs.pp_setName(\"Head Debugs\");\r\n\r\n Globals.setSceneObjects(this._mySceneObjects, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._mySceneObjects != null && Globals.getSceneObjects(this.engine) == this._mySceneObjects) {\r\n Globals.removeSceneObjects(this.engine);\r\n }\r\n }\r\n}", "export enum Handedness {\r\n LEFT = \"left\",\r\n RIGHT = \"right\"\r\n}\r\n\r\nexport enum HandednessIndex {\r\n LEFT = 0,\r\n RIGHT = 1\r\n}\r\n\r\nexport enum InputSourceType {\r\n GAMEPAD = 0,\r\n TRACKED_HAND = 1\r\n}\r\n\r\nexport enum TrackedHandJointID {\r\n WRIST = \"wrist\",\r\n\r\n THUMB_METACARPAL = \"thumb-metacarpal\",\r\n THUMB_PHALANX_PROXIMAL = \"thumb-phalanx-proximal\",\r\n THUMB_PHALANX_DISTAL = \"thumb-phalanx-distal\",\r\n THUMB_TIP = \"thumb-tip\",\r\n\r\n INDEX_FINGER_METACARPAL = \"index-finger-metacarpal\",\r\n INDEX_FINGER_PHALANX_PROXIMAL = \"index-finger-phalanx-proximal\",\r\n INDEX_FINGER_PHALANX_INTERMEDIATE = \"index-finger-phalanx-intermediate\",\r\n INDEX_FINGER_PHALANX_DISTAL = \"index-finger-phalanx-distal\",\r\n INDEX_FINGER_TIP = \"index-finger-tip\",\r\n\r\n MIDDLE_FINGER_METACARPAL = \"middle-finger-metacarpal\",\r\n MIDDLE_FINGER_PHALANX_PROXIMAL = \"middle-finger-phalanx-proximal\",\r\n MIDDLE_FINGER_PHALANX_INTERMEDIATE = \"middle-finger-phalanx-intermediate\",\r\n MIDDLE_FINGER_PHALANX_DISTAL = \"middle-finger-phalanx-distal\",\r\n MIDDLE_FINGER_TIP = \"middle-finger-tip\",\r\n\r\n RING_FINGER_METACARPAL = \"ring-finger-metacarpal\",\r\n RING_FINGER_PHALANX_PROXIMAL = \"ring-finger-phalanx-proximal\",\r\n RING_FINGER_PHALANX_INTERMEDIATE = \"ring-finger-phalanx-intermediate\",\r\n RING_FINGER_PHALANX_DISTAL = \"ring-finger-phalanx-distal\",\r\n RING_FINGER_TIP = \"ring-finger-tip\",\r\n\r\n PINKY_FINGER_METACARPAL = \"pinky-finger-metacarpal\",\r\n PINKY_FINGER_PHALANX_PROXIMAL = \"pinky-finger-phalanx-proximal\",\r\n PINKY_FINGER_PHALANX_INTERMEDIATE = \"pinky-finger-phalanx-intermediate\",\r\n PINKY_FINGER_PHALANX_DISTAL = \"pinky-finger-phalanx-distal\",\r\n PINKY_FINGER_TIP = \"pinky-finger-tip\",\r\n}\r\n\r\nexport enum TrackedHandJointIDIndex {\r\n WRIST = 0,\r\n\r\n THUMB_METACARPAL = 1,\r\n THUMB_PHALANX_PROXIMAL = 2,\r\n THUMB_PHALANX_DISTAL = 3,\r\n THUMB_TIP = 4,\r\n\r\n INDEX_FINGER_METACARPAL = 5,\r\n INDEX_FINGER_PHALANX_PROXIMAL = 6,\r\n INDEX_FINGER_PHALANX_INTERMEDIATE = 7,\r\n INDEX_FINGER_PHALANX_DISTAL = 8,\r\n INDEX_FINGER_TIP = 9,\r\n\r\n MIDDLE_FINGER_METACARPAL = 10,\r\n MIDDLE_FINGER_PHALANX_PROXIMAL = 11,\r\n MIDDLE_FINGER_PHALANX_INTERMEDIATE = 12,\r\n MIDDLE_FINGER_PHALANX_DISTAL = 13,\r\n MIDDLE_FINGER_TIP = 14,\r\n\r\n RING_FINGER_METACARPAL = 15,\r\n RING_FINGER_PHALANX_PROXIMAL = 16,\r\n RING_FINGER_PHALANX_INTERMEDIATE = 17,\r\n RING_FINGER_PHALANX_DISTAL = 18,\r\n RING_FINGER_TIP = 19,\r\n\r\n PINKY_FINGER_METACARPAL = 20,\r\n PINKY_FINGER_PHALANX_PROXIMAL = 21,\r\n PINKY_FINGER_PHALANX_INTERMEDIATE = 22,\r\n PINKY_FINGER_PHALANX_DISTAL = 23,\r\n PINKY_FINGER_TIP = 24\r\n}", "import { Object3D } from \"@wonderlandengine/api\";\r\nimport { Handedness } from \"../../../input/cauldron/input_types.js\";\r\n\r\nexport class SceneObjects {\r\n\r\n public myRoot: Object3D | null = null;\r\n\r\n public myScene: Object3D | null = null;\r\n\r\n public myCauldron: Object3D | null = null;\r\n public myDynamics: Object3D | null = null;\r\n public myParticles: Object3D | null = null;\r\n public myVisualElements: Object3D | null = null;\r\n public myTools: Object3D | null = null;\r\n\r\n public myPlayerObjects: PlayerObjects = new PlayerObjects();\r\n}\r\n\r\nexport class PlayerObjects {\r\n\r\n public myPlayer: Object3D | null = null;\r\n\r\n public myCauldron: Object3D | null = null;\r\n public myReferenceSpace: Object3D | null = null;\r\n\r\n public myCameraNonXR: Object3D | null = null;\r\n\r\n public myEyes: Record = { [Handedness.LEFT]: null, [Handedness.RIGHT]: null };\r\n public myEyeLeft: Object3D | null = null;\r\n public myEyeRight: Object3D | null = null;\r\n\r\n public myHands: Record = { [Handedness.LEFT]: null, [Handedness.RIGHT]: null };\r\n public myHandLeft: Object3D | null = null;\r\n public myHandRight: Object3D | null = null;\r\n\r\n public myHead: Object3D | null = null;\r\n public myHeadDebugs: Object3D | null = null;\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { DebugManager } from \"../debug_manager.js\";\r\n\r\nexport class DebugManagerComponent extends Component {\r\n static TypeName = \"pp-debug-manager\";\r\n\r\n init() {\r\n this._myDebugManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasDebugManager(this.engine)) {\r\n this._myDebugManager = new DebugManager(this.engine);\r\n\r\n Globals.setDebugManager(this._myDebugManager, this.engine);\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myDebugManager != null) {\r\n this._myDebugManager.start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myDebugManager != null) {\r\n this._myDebugManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myDebugManager != null && Globals.getDebugManager(this.engine) == this._myDebugManager) {\r\n Globals.removeDebugManager(this.engine);\r\n\r\n this._myDebugManager.destroy();\r\n }\r\n }\r\n}", "import { Alignment, Justification } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../cauldron/utils/xr_utils.js\";\r\nimport { VisualArrowParams } from \"../cauldron/visual/elements/visual_arrow.js\";\r\nimport { VisualLineParams } from \"../cauldron/visual/elements/visual_line.js\";\r\nimport { VisualPointParams } from \"../cauldron/visual/elements/visual_point.js\";\r\nimport { VisualRaycastParams } from \"../cauldron/visual/elements/visual_raycast.js\";\r\nimport { VisualTextParams } from \"../cauldron/visual/elements/visual_text.js\";\r\nimport { VisualTransformParams } from \"../cauldron/visual/elements/visual_transform.js\";\r\nimport { VisualManager } from \"../cauldron/visual/visual_manager.js\";\r\nimport { quat_create, vec3_create, vec4_create } from \"../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../pp/globals.js\";\r\n\r\nexport class DebugVisualManager extends VisualManager {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n\r\n this._myDefaultColor = vec4_create(1, 0, 1, 1);\r\n this._myDefaultLineThickness = 0.005;\r\n this._myDefaultPointRadius = 0.01;\r\n this._myDefaultAxisLength = 0.2;\r\n\r\n this._myDefaultTextLookAtPlayer = true;\r\n this._myDefaultTextAlignment = Alignment.Center;\r\n this._myDefaultTextJustification = Justification.Middle;\r\n\r\n this._myDefaultUITextAlignment = Alignment.Center;\r\n this._myDefaultUITextJustification = Justification.Middle;\r\n this._myDefaultUITextScale = 1;\r\n\r\n this._myDefaultUITextScreenPosition = vec3_create(1, 1, 1);\r\n }\r\n\r\n drawLine(lifetimeSeconds, start, direction, length, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualLineParams(this._myEngine);\r\n visualParams.myStart.vec3_copy(start);\r\n visualParams.myDirection.vec3_copy(direction);\r\n visualParams.myLength = length;\r\n visualParams.myThickness = thickness;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawLineEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n // Implemented outside class definition\r\n }\r\n\r\n drawArrow(lifetimeSeconds, start, direction, length, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualArrowParams(this._myEngine);\r\n visualParams.myStart.vec3_copy(start);\r\n visualParams.myDirection.vec3_copy(direction);\r\n visualParams.myLength = length;\r\n visualParams.myThickness = thickness;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawArrowEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n // Implemented outside class definition\r\n }\r\n\r\n drawPoint(lifetimeSeconds, position, color = this._myDefaultColor, radius = this._myDefaultPointRadius) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualPointParams(this._myEngine);\r\n visualParams.myPosition.vec3_copy(position);\r\n visualParams.myRadius = radius;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawText(lifetimeSeconds, text, transform, color = this._myDefaultColor, lookAtPlayer = this._myDefaultTextLookAtPlayer, alignment = this._myDefaultTextAlignment, justification = this._myDefaultTextJustification) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualTextParams(this._myEngine);\r\n visualParams.myText = text;\r\n visualParams.myAlignment = alignment;\r\n visualParams.myJustification = justification;\r\n visualParams.myTransform.mat4_copy(transform);\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n\r\n if (lookAtPlayer) {\r\n visualParams.myLookAtObject = Globals.getPlayerObjects(this._myEngine).myHead;\r\n }\r\n\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawRaycast(lifetimeSeconds, raycastResult, showOnlyFirstHit = true, hitNormalLength = this._myDefaultAxisLength, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualRaycastParams(this._myEngine);\r\n visualParams.myRaycastResults = raycastResult;\r\n visualParams.myShowOnlyFirstHit = showOnlyFirstHit;\r\n visualParams.myHitNormalLength = hitNormalLength;\r\n visualParams.myThickness = thickness;\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawTransform(lifetimeSeconds, transform, length = this._myDefaultAxisLength, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualTransformParams(this._myEngine);\r\n visualParams.myTransform.mat4_copy(transform);\r\n visualParams.myLength = length;\r\n visualParams.myThickness = thickness;\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawUIText(lifetimeSeconds, text, screenPosition, scale = this._myDefaultUITextScale, color = this._myDefaultColor, alignment = this._myDefaultUITextAlignment, justification = this._myDefaultUITextJustification) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _getClassName() {\r\n return \"debug_visual_manager\";\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nDebugVisualManager.prototype.drawLineEnd = function () {\r\n let direction = vec3_create();\r\n return function drawLineEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n direction = end.vec3_sub(start, direction);\r\n let length = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n elementID = this.drawLine(lifetimeSeconds, start, direction, length, color, thickness);\r\n }\r\n\r\n return elementID;\r\n };\r\n}();\r\n\r\nDebugVisualManager.prototype.drawArrowEnd = function () {\r\n let direction = vec3_create();\r\n return function drawArrowEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n direction = end.vec3_sub(start, direction);\r\n let length = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n elementID = this.drawArrow(lifetimeSeconds, start, direction, length, color, thickness);\r\n }\r\n\r\n return elementID;\r\n };\r\n}();\r\n\r\nDebugVisualManager.prototype.drawUIText = function () {\r\n let textRotationQuat = quat_create();\r\n let up = vec3_create(0, 1, 0);\r\n let lookToForward = vec3_create();\r\n\r\n let screenPositionNormalizedXR = vec3_create(-0.12 * 1, 0.12 * 1, 0.35);\r\n let screenPositionNormalizedNonXR = vec3_create(-0.27 * 1.15, 0.13 * 1.05, 0.35);\r\n\r\n let textPosition = vec3_create();\r\n let textRotation = vec3_create();\r\n let textScale = vec3_create();\r\n return function drawUIText(lifetimeSeconds, text, screenPosition = this._myDefaultUITextScreenPosition, scale = this._myDefaultUITextScale, color = this._myDefaultColor, alignment = this._myDefaultUITextAlignment, justification = this._myDefaultUITextJustification) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualTextParams(this._myEngine);\r\n visualParams.myText = text;\r\n visualParams.myAlignment = alignment;\r\n visualParams.myJustification = justification;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n\r\n let scaleNormalized = 0.2;\r\n\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n visualParams.myTransform.mat4_setPositionRotationScale(\r\n screenPositionNormalizedXR.vec3_mul(screenPosition, textPosition),\r\n textRotation.vec3_set(0, 180, 0),\r\n textScale.vec3_set(scaleNormalized * scale, scaleNormalized * scale, scaleNormalized * scale));\r\n\r\n lookToForward = visualParams.myTransform.mat4_getPosition(lookToForward).vec3_negate(lookToForward).vec3_normalize(lookToForward);\r\n textRotationQuat = visualParams.myTransform.mat4_getRotationQuat(textRotationQuat);\r\n textRotationQuat.quat_setForward(lookToForward, up, textRotationQuat);\r\n visualParams.myTransform.mat4_setRotationQuat(textRotationQuat);\r\n } else {\r\n visualParams.myTransform.mat4_setPositionRotationScale(\r\n screenPositionNormalizedNonXR.vec3_mul(screenPosition, textPosition),\r\n textRotation.vec3_set(0, 180, 0),\r\n textScale.vec3_set(scaleNormalized * scale, scaleNormalized * scale, scaleNormalized * scale));\r\n }\r\n\r\n visualParams.myParent = Globals.getPlayerObjects(this._myEngine).myHeadDebugs;\r\n visualParams.myLocal = true;\r\n\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n };\r\n}();", "import { Globals } from \"../pp/globals.js\";\r\nimport { DebugVisualManager } from \"./debug_visual_manager.js\";\r\n\r\nexport class DebugManager {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n this._myDebugVisualManager = new DebugVisualManager(this._myEngine);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getDebugVisualManager() {\r\n return this._myDebugVisualManager;\r\n }\r\n\r\n start() {\r\n this._myDebugVisualManager.start();\r\n }\r\n\r\n update(dt) {\r\n this._myDebugVisualManager.setActive(Globals.isDebugEnabled(this._myEngine));\r\n this._myDebugVisualManager.update(dt);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myDebugVisualManager.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class EnableDebugComponent extends Component {\r\n static TypeName = \"pp-enable-debug\";\r\n static Properties = {\r\n _myEnable: Property.bool(true),\r\n };\r\n\r\n init() {\r\n this._myDebugEnabled = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasDebugEnabled(this.engine)) {\r\n this._myDebugEnabled = this._myEnable;\r\n\r\n Globals.setDebugEnabled(this._myDebugEnabled, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myDebugEnabled != null && Globals.isDebugEnabled(this.engine) == this._myDebugEnabled) {\r\n Globals.removeDebugEnabled(this.engine);\r\n }\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { CharacterCollisionSystem } from \"../character_collision_system.js\";\r\n\r\nexport class CharacterCollisionSystemComponent extends Component {\r\n static TypeName = \"pp-character-collision-system\";\r\n\r\n init() {\r\n this._myCharacterCollisionSystem = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasCharacterCollisionSystem(this.engine)) {\r\n this._myCharacterCollisionSystem = new CharacterCollisionSystem(this.engine);\r\n\r\n Globals.setCharacterCollisionSystem(this._myCharacterCollisionSystem, this.engine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myCharacterCollisionSystem != null) {\r\n this._myCharacterCollisionSystem.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myCharacterCollisionSystem != null && Globals.getCharacterCollisionSystem(this.engine) == this._myCharacterCollisionSystem) {\r\n Globals.removeCharacterCollisionSystem(this.engine);\r\n }\r\n }\r\n}", "import { RaycastHit } from \"../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class CharacterCollisionResults {\r\n\r\n constructor() {\r\n this.myCheckType = null;\r\n\r\n this.myTransformResults = new CharacterCollisionTransformResults();\r\n\r\n this.myMovementResults = new CharacterCollisionMovementResults();\r\n this.myHorizontalMovementResults = new CharacterCollisionMovementResults();\r\n this.myVerticalMovementResults = new CharacterCollisionMovementResults();\r\n\r\n this.myTeleportResults = new CharacterCollisionTeleportResults();\r\n\r\n this.myCheckTransformResults = new CharacterCollisionCheckTransformResults();\r\n\r\n this.myWallSlideResults = new CharacterCollisionWallSlideResults();\r\n\r\n this.myGroundInfo = new CharacterCollisionSurfaceInfo();\r\n this.myCeilingInfo = new CharacterCollisionSurfaceInfo();\r\n\r\n this.myGroundResults = new CharacterCollisionSurfaceResults();\r\n this.myCeilingResults = new CharacterCollisionSurfaceResults();\r\n\r\n this.mySplitMovementResults = new CharacterCollisionSplitMovementResults();\r\n\r\n this.myDebugResults = new CharacterCollisionDebugResults();\r\n\r\n this.myInternalResults = new CharacterCollisionInternalResults();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport let CharacterCollisionCheckType = {\r\n CHECK_MOVEMENT: 0,\r\n CHECK_TELEPORT: 1,\r\n CHECK_TRANSFORM: 2,\r\n UPDATE_SURFACE_INFO: 3,\r\n UPDATE_GROUND_INFO: 4,\r\n UPDATE_CEILING_INFO: 5\r\n};\r\n\r\nexport class CharacterCollisionSurfaceInfo {\r\n\r\n constructor() {\r\n this.myOnSurface = false;\r\n\r\n this.mySurfaceReferenceCollisionHit = new RaycastHit();\r\n\r\n this.mySurfaceAngle = 0;\r\n this.mySurfacePerceivedAngle = 0;\r\n this.mySurfaceNormal = vec3_create();\r\n\r\n this.mySurfaceHitMaxAngle = 0;\r\n this.mySurfaceHitMaxNormal = vec3_create();\r\n\r\n this.mySurfaceDistance = null;\r\n\r\n this.myBaseInsideCollision = false;\r\n this.myOnSurfaceDueToBasePartiallyInsideCollision = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionWallSlideResults {\r\n\r\n constructor() {\r\n this.myHasSlid = false;\r\n this.mySlideMovementAngle = 0; // Signed angle between the start movement and the wall slide movement, basically telling you how much u had to change direction to slide\r\n this.mySlideMovementWallAngle = 0; // Signed angle between the inverted surface normal and the wall slide movement\r\n this.myWallNormal = vec3_create();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionTransformResults {\r\n\r\n constructor() {\r\n this.myInitialTransformQuat = quat2_create();\r\n this.myFinalTransformQuat = quat2_create();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionMovementResults {\r\n\r\n constructor() {\r\n this.myInitialMovement = vec3_create();\r\n this.myFinalMovement = vec3_create();\r\n this.myMovementFailed = false;\r\n this.myMovementCollided = false;\r\n this.myReferenceCollisionHit = new RaycastHit();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionTeleportResults {\r\n\r\n constructor() {\r\n this.myInitialTeleportTransformQuat = quat2_create();\r\n this.myFinalTeleportTransformQuat = quat2_create();\r\n this.myTeleportFailed = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionCheckTransformResults {\r\n\r\n constructor() {\r\n this.myInitialCheckTransformQuat = quat2_create();\r\n this.myFinalCheckTransformQuat = quat2_create();\r\n this.myCheckTransformFailed = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionSurfaceResults {\r\n\r\n constructor() {\r\n this.myHasSnappedOnSurface = false;\r\n this.myHasPoppedOutSurface = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = false;\r\n this.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionSplitMovementResults {\r\n\r\n constructor() {\r\n this.myStepsToPerform = 0;\r\n this.myStepsPerformed = 0;\r\n this.myMovementInterrupted = false;\r\n this.myMovementChecked = vec3_create();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionDebugResults {\r\n\r\n constructor() {\r\n this._myRaycastsPerformed = 0;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionInternalResults {\r\n\r\n constructor() {\r\n this.myLastRelevantInitialHorizontalMovement = vec3_create();\r\n this.myLastRelevantAdjustedInitialHorizontalMovement = vec3_create();\r\n this.myLastRelevantFinalHorizontalMovement = vec3_create();\r\n\r\n this.myLastRelevantInitialVerticalMovement = vec3_create();\r\n this.myLastRelevantAdjustedInitialVerticalMovement = vec3_create();\r\n this.myLastRelevantFinalVerticalMovement = vec3_create();\r\n\r\n this.myLastRelevantHasWallSlid = false;\r\n this.myHasWallSlidTowardOppositeDirection = false;\r\n this.myLastRelevantWallSlideFlickerPrevented = false;\r\n this.myWallSlideFlickerPreventionForceCheckCounter = 0;\r\n this.myWallSlide90DegreesDirectionSign = 0;\r\n this.myWallSlide90DegreesRecomputeDirectionSign = true;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCharacterCollisionResults.prototype.reset = function reset() {\r\n this.myCheckType = null;\r\n\r\n this.myTransformResults.reset();\r\n\r\n this.myMovementResults.reset();\r\n this.myHorizontalMovementResults.reset();\r\n this.myVerticalMovementResults.reset();\r\n\r\n this.myTeleportResults.reset();\r\n\r\n this.myCheckTransformResults.reset();\r\n\r\n this.myWallSlideResults.reset();\r\n\r\n this.myGroundInfo.reset();\r\n this.myCeilingInfo.reset();\r\n\r\n this.myGroundResults.reset();\r\n this.myCeilingResults.reset();\r\n\r\n this.mySplitMovementResults.reset();\r\n\r\n this.myInternalResults.reset();\r\n};\r\n\r\nCharacterCollisionResults.prototype.copy = function copy(other) {\r\n this.myCheckType = other.myCheckType;\r\n\r\n this.myTransformResults.copy(other.myTransformResults);\r\n\r\n this.myMovementResults.copy(other.myMovementResults);\r\n this.myHorizontalMovementResults.copy(other.myHorizontalMovementResults);\r\n this.myVerticalMovementResults.copy(other.myVerticalMovementResults);\r\n\r\n this.myTeleportResults.copy(other.myTeleportResults);\r\n\r\n this.myCheckTransformResults.copy(other.myCheckTransformResults);\r\n\r\n this.myWallSlideResults.copy(other.myWallSlideResults);\r\n\r\n this.myGroundInfo.copy(other.myGroundInfo);\r\n this.myCeilingInfo.copy(other.myCeilingInfo);\r\n\r\n this.myGroundResults.copy(other.myGroundResults);\r\n this.myCeilingResults.copy(other.myCeilingResults);\r\n\r\n this.mySplitMovementResults.copy(other.mySplitMovementResults);\r\n\r\n this.myInternalResults.copy(other.myInternalResults);\r\n};\r\n\r\nCharacterCollisionSurfaceInfo.prototype.reset = function reset() {\r\n this.myOnSurface = false;\r\n\r\n this.mySurfaceAngle = 0;\r\n this.mySurfacePerceivedAngle = 0;\r\n this.mySurfaceNormal.vec3_zero();\r\n\r\n this.mySurfaceReferenceCollisionHit.reset();\r\n\r\n this.mySurfaceHitMaxAngle = 0;\r\n this.mySurfaceHitMaxNormal.vec3_zero();\r\n\r\n this.mySurfaceDistance = null;\r\n\r\n this.myBaseInsideCollision = false;\r\n this.myOnSurfaceDueToBasePartiallyInsideCollision = false;\r\n};\r\n\r\nCharacterCollisionSurfaceInfo.prototype.copy = function copy(other) {\r\n this.myOnSurface = other.myOnSurface;\r\n\r\n this.mySurfaceAngle = other.mySurfaceAngle;\r\n this.mySurfacePerceivedAngle = other.mySurfacePerceivedAngle;\r\n this.mySurfaceNormal.vec3_copy(other.mySurfaceNormal);\r\n\r\n this.mySurfaceReferenceCollisionHit.copy(other.mySurfaceReferenceCollisionHit);\r\n\r\n this.mySurfaceHitMaxAngle = other.mySurfaceHitMaxAngle;\r\n this.mySurfaceHitMaxNormal.vec3_copy(other.mySurfaceHitMaxNormal);\r\n\r\n this.mySurfaceDistance = other.mySurfaceDistance;\r\n\r\n this.myBaseInsideCollision = other.myBaseInsideCollision;\r\n this.myOnSurfaceDueToBasePartiallyInsideCollision = other.myOnSurfaceDueToBasePartiallyInsideCollision;\r\n};\r\n\r\nCharacterCollisionWallSlideResults.prototype.reset = function reset() {\r\n this.myHasSlid = false;\r\n this.mySlideMovementAngle = 0;\r\n this.mySlideMovementWallAngle = 0;\r\n this.myWallNormal.vec3_zero();\r\n};\r\n\r\nCharacterCollisionWallSlideResults.prototype.copy = function copy(other) {\r\n this.myHasSlid = other.myHasSlid;\r\n this.mySlideMovementAngle = other.mySlideMovementAngle;\r\n this.mySlideMovementWallAngle = other.mySlideMovementWallAngle;\r\n this.myWallNormal.vec3_copy(other.myWallNormal);\r\n};\r\n\r\nCharacterCollisionTransformResults.prototype.reset = function reset() {\r\n this.myInitialTransformQuat.quat2_identity();\r\n this.myFinalTransformQuat.quat2_identity();\r\n};\r\n\r\nCharacterCollisionTransformResults.prototype.copy = function copy(other) {\r\n this.myInitialTransformQuat.quat2_copy(other.myInitialTransformQuat);\r\n this.myFinalTransformQuat.quat2_copy(other.myFinalTransformQuat);\r\n};\r\n\r\nCharacterCollisionMovementResults.prototype.reset = function reset() {\r\n this.myInitialMovement.vec3_zero();\r\n this.myFinalMovement.vec3_zero();\r\n this.myMovementFailed = false;\r\n this.myMovementCollided = false;\r\n this.myReferenceCollisionHit.reset();\r\n};\r\n\r\nCharacterCollisionMovementResults.prototype.copy = function copy(other) {\r\n this.myInitialMovement.vec3_copy(other.myInitialMovement);\r\n this.myFinalMovement.vec3_copy(other.myFinalMovement);\r\n this.myMovementFailed = other.myMovementFailed;\r\n this.myMovementCollided = other.myMovementCollided;\r\n this.myReferenceCollisionHit.copy(other.myReferenceCollisionHit);\r\n};\r\n\r\nCharacterCollisionTeleportResults.prototype.reset = function reset() {\r\n this.myInitialTeleportTransformQuat.quat2_identity();\r\n this.myFinalTeleportTransformQuat.quat2_identity();\r\n this.myTeleportFailed = false;\r\n};\r\n\r\nCharacterCollisionTeleportResults.prototype.copy = function copy(other) {\r\n this.myInitialTeleportTransformQuat.quat2_copy(other.myInitialTeleportTransformQuat);\r\n this.myFinalTeleportTransformQuat.quat2_copy(other.myFinalTeleportTransformQuat);\r\n this.myTeleportFailed = other.myTeleportFailed;\r\n};\r\n\r\nCharacterCollisionCheckTransformResults.prototype.reset = function reset() {\r\n this.myInitialCheckTransformQuat.quat2_identity();\r\n this.myFinalCheckTransformQuat.quat2_identity();\r\n this.myCheckTransformFailed = false;\r\n};\r\n\r\nCharacterCollisionCheckTransformResults.prototype.copy = function copy(other) {\r\n this.myInitialCheckTransformQuat.quat2_copy(other.myInitialCheckTransformQuat);\r\n this.myFinalCheckTransformQuat.quat2_copy(other.myFinalCheckTransformQuat);\r\n this.myCheckTransformFailed = other.myCheckTransformFailed;\r\n};\r\n\r\nCharacterCollisionSurfaceResults.prototype.reset = function reset() {\r\n this.myHasSnappedOnSurface = false;\r\n this.myHasPoppedOutSurface = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = false;\r\n this.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = false;\r\n};\r\n\r\nCharacterCollisionSurfaceResults.prototype.copy = function copy(other) {\r\n this.myHasSnappedOnSurface = other.myHasSnappedOnSurface;\r\n this.myHasPoppedOutSurface = other.myHasPoppedOutSurface;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = other.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = other.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill;\r\n this.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = other.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill;\r\n};\r\n\r\nCharacterCollisionSplitMovementResults.prototype.reset = function reset() {\r\n this.myStepsToPerform = 0;\r\n this.myStepsPerformed = 0;\r\n this.myMovementInterrupted = false;\r\n this.myMovementChecked.vec3_zero();\r\n};\r\n\r\nCharacterCollisionSplitMovementResults.prototype.copy = function copy(other) {\r\n this.myStepsToPerform = other.myStepsToPerform;\r\n this.myStepsPerformed = other.myStepsPerformed;\r\n this.myMovementInterrupted = other.myMovementInterrupted;\r\n this.myMovementChecked.vec3_copy(other.myMovementChecked);\r\n};\r\n\r\nCharacterCollisionDebugResults.prototype.reset = function reset() {\r\n this._myRaycastsPerformed = 0;\r\n};\r\n\r\nCharacterCollisionDebugResults.prototype.copy = function copy(other) {\r\n this._myRaycastsPerformed = other._myRaycastsPerformed;\r\n};\r\n\r\nCharacterCollisionInternalResults.prototype.reset = function reset() {\r\n};\r\n\r\nCharacterCollisionInternalResults.prototype.copy = function copy(other) {\r\n this.myLastRelevantInitialHorizontalMovement.vec3_copy(other.myLastRelevantInitialHorizontalMovement);\r\n this.myLastRelevantAdjustedInitialHorizontalMovement.vec3_copy(other.myLastRelevantAdjustedInitialHorizontalMovement);\r\n this.myLastRelevantFinalHorizontalMovement.vec3_copy(other.myLastRelevantFinalHorizontalMovement);\r\n\r\n this.myLastRelevantInitialVerticalMovement.vec3_copy(other.myLastRelevantInitialVerticalMovement);\r\n this.myLastRelevantAdjustedInitialVerticalMovement.vec3_copy(other.myLastRelevantAdjustedInitialVerticalMovement);\r\n this.myLastRelevantFinalVerticalMovement.vec3_copy(other.myLastRelevantFinalVerticalMovement);\r\n\r\n this.myLastRelevantHasWallSlid = other.myLastRelevantHasWallSlid;\r\n this.myHasWallSlidTowardOppositeDirection = other.myHasWallSlidTowardOppositeDirection;\r\n this.myLastRelevantWallSlideFlickerPrevented = other.myLastRelevantWallSlideFlickerPrevented;\r\n this.myWallSlideFlickerPreventionForceCheckCounter = other.myWallSlideFlickerPreventionForceCheckCounter;\r\n this.myWallSlide90DegreesDirectionSign = other.myWallSlide90DegreesDirectionSign;\r\n this.myWallSlide90DegreesRecomputeDirectionSign = other.myWallSlide90DegreesRecomputeDirectionSign;\r\n};", "import { PhysicsLayerFlags } from \"../../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { quat_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class CollisionCheckParams {\r\n\r\n constructor() {\r\n this.mySplitMovementEnabled = false;\r\n this.mySplitMovementMaxLength = 0;\r\n this.mySplitMovementMaxLengthEnabled = false;\r\n this.mySplitMovementMaxSteps = 0;\r\n this.mySplitMovementMaxStepsEnabled = false;\r\n this.mySplitMovementMinLength = 0;\r\n this.mySplitMovementMinLengthEnabled = false;\r\n this.mySplitMovementStopWhenHorizontalMovementCanceled = false;\r\n this.mySplitMovementStopWhenVerticalMovementCanceled = false;\r\n this.mySplitMovementStopCallback = null; // Signature: callback(collisionRuntimeParams)\r\n this.mySplitMovementStopReturnPrevious = false;\r\n\r\n this.myRadius = 0;\r\n this.myDistanceFromFeetToIgnore = 0;\r\n this.myDistanceFromHeadToIgnore = 0;\r\n\r\n this.myPositionOffsetLocal = vec3_create();\r\n this.myRotationOffsetLocalQuat = quat_create();\r\n\r\n this.myHorizontalMovementCheckEnabled = false;\r\n\r\n // Usually the horizontal movement is very small and it could be simply skipped has a check, the horizontal position check will be enough\r\n // With small I mean that it's very unlikely that in 10 cm of movement in a frame u are going to hit something in between but not in the final position\r\n // If u feel like the movement is bigger or want to be sure u can always enabled this\r\n // If the movement is really that big it's probably better to use the mySplitMovementEnabled flag and split the movement check into smaller movements\r\n this.myHorizontalMovementStepEnabled = false;\r\n this.myHorizontalMovementStepMaxLength = 0;\r\n\r\n this.myHorizontalMovementRadialStepAmount = 0;\r\n this.myHorizontalMovementCheckDiagonalOutward = false;\r\n this.myHorizontalMovementCheckDiagonalInward = false;\r\n this.myHorizontalMovementCheckStraight = false;\r\n this.myHorizontalMovementCheckHorizontalBorder = false;\r\n this.myHorizontalMovementCheckVerticalStraight = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardInward = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardOutward = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardInward = false;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalUpward = false;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalDownward = false;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward = false;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward = false;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = false;\r\n\r\n this.myHorizontalPositionCheckEnabled = false;\r\n\r\n this.myHalfConeAngle = 0;\r\n this.myHalfConeSliceAmount = 0;\r\n this.myCheckConeBorder = false;\r\n this.myCheckConeRay = false;\r\n this.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = true; // True gives less issues(tm), but may also collide a bit more, resulting in less sliding\r\n this.myHorizontalPositionCheckVerticalDirectionType = 0; // Somewhat expensive, 2 times the check for the vertical check of the horizontal movement!\r\n // 0: check upward, gives less issues(tm) (hitting a very small step at the end of a slope /-) with a grounded movement (not fly or snapped to ceiling), but may also collide a bit more, resulting in less sliding\r\n // 1: check downard, gives less issues(tm) with a ceiling-ed movement (not fly or snapped to ground), but may also collide a bit more, resulting in less sliding and more stuck in front of a wall\r\n // 2: check both directions, more expensive and better prevent collision, sliding more, but is more expensive and gives more issues \r\n // ___\r\n // The issues(tm) means that a small step at the end of a slope, maybe due to 2 rectangles, one for the floor and the other for the slope like this -> / \r\n // can create a small step if the floor rectangle is a bit above the end of the slope, this will make the character get stuck thinking it's a wall\r\n // 0 avoid this issue for a grounded movement, 2 instead do a more \"aggressive\" vertical check that makes the character get less stuck in other situations, but can get stuck in this one\r\n // The better solution is to properly create the level, and if possible combine the 2 rectangles by having the floor a little below the end of the slope\r\n // The step that is created \"on the other side\" in fact can easily be ignored thanks to the myDistanceFromFeetToIgnore field\r\n // If the level is properly created the best solution should be myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = false and myHorizontalPositionCheckVerticalDirectionType = 0\r\n\r\n this.myCheckHorizontalFixedForwardEnabled = false; // This is basically only useful if the cone angle is 180 degrees\r\n this.myCheckHorizontalFixedForward = vec3_create();\r\n\r\n this.myVerticalMovementCheckEnabled = false;\r\n this.myVerticalPositionCheckEnabled = false;\r\n this.myFeetRadius = 0;\r\n\r\n this.myAdjustVerticalMovementWithGroundAngleDownhill = false;\r\n this.myAdjustVerticalMovementWithGroundAngleUphill = false;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle = null;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle = null;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhill = false;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle = null;\r\n\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhill = false;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphill = false;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = null;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhill = false;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle = null;\r\n\r\n this.myCheckVerticalFixedForwardEnabled = false;\r\n this.myCheckVerticalFixedForward = vec3_create();\r\n this.myCheckVerticalBothDirection = false;\r\n\r\n this.mySnapOnGroundEnabled = false;\r\n this.mySnapOnGroundExtraDistance = 0;\r\n this.mySnapOnCeilingEnabled = false;\r\n this.mySnapOnCeilingExtraDistance = 0;\r\n\r\n this.myGroundPopOutEnabled = false;\r\n this.myGroundPopOutExtraDistance = 0;\r\n this.myCeilingPopOutEnabled = false;\r\n this.myCeilingPopOutExtraDistance = 0;\r\n\r\n this.myVerticalMovementReduceEnabled = false;\r\n\r\n this.myGroundCircumferenceAddCenter = false;\r\n this.myGroundCircumferenceSliceAmount = 0;\r\n this.myGroundCircumferenceStepAmount = 0;\r\n this.myGroundCircumferenceRotationPerStep = 0;\r\n this.myVerticalAllowHitInsideCollisionIfOneOk = false;\r\n\r\n this.myCheckHeight = false;\r\n this.myCheckHeightVerticalMovement = false;\r\n this.myCheckHeightVerticalPosition = false;\r\n this.myCheckHeightTopMovement = false;\r\n this.myCheckHeightTopPosition = false;\r\n this.myCheckHeightConeOnCollision = false;\r\n this.myCheckHeightConeOnCollisionKeepHit = false;\r\n // If true and myCheckHeightConeOnCollision is true, if the cone does not hit the height hit will be restored\r\n // The fact that the cone does not hit could be due to the fact that it thinks that the collision can be ignored though, sop restoring can be a bit safer but also collide more\r\n\r\n this.myHeightCheckStepAmountMovement = 0;\r\n this.myHeightCheckStepAmountPosition = 0;\r\n this.myCheckVerticalStraight = false;\r\n this.myCheckVerticalDiagonalRayOutward = false;\r\n this.myCheckVerticalDiagonalRayInward = false;\r\n this.myCheckVerticalDiagonalBorderOutward = false;\r\n this.myCheckVerticalDiagonalBorderInward = false;\r\n this.myCheckVerticalDiagonalBorderRayOutward = false;\r\n this.myCheckVerticalDiagonalBorderRayInward = false;\r\n this.myCheckVerticalSearchFartherVerticalHit = false; // Somewhat expensive, but can help fix sime sliding issues\r\n\r\n this.myGroundAngleToIgnore = 0;\r\n this.myGroundAngleToIgnoreWithPerceivedAngle = null;\r\n this.myCeilingAngleToIgnore = 0;\r\n this.myCeilingAngleToIgnoreWithPerceivedAngle = null;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreHeight = null;\r\n this.myHorizontalMovementCeilingAngleIgnoreHeight = null;\r\n this.myHorizontalPositionGroundAngleIgnoreHeight = null;\r\n this.myHorizontalPositionCeilingAngleIgnoreHeight = null;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = null;\r\n this.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft = null;\r\n\r\n this.myHeight = 0;\r\n\r\n this.myComputeGroundInfoEnabled = false;\r\n this.myComputeCeilingInfoEnabled = false;\r\n this.myDistanceToBeOnGround = 0;\r\n this.myDistanceToComputeGroundInfo = 0;\r\n this.myDistanceToBeOnCeiling = 0;\r\n this.myDistanceToComputeCeilingInfo = 0;\r\n this.myVerticalFixToBeOnGround = 0;\r\n this.myVerticalFixToComputeGroundInfo = 0;\r\n this.myVerticalFixToBeOnCeiling = 0;\r\n this.myVerticalFixToComputeCeilingInfo = 0;\r\n this.myGroundIsBaseInsideCollisionCheckEnabled = false;\r\n this.myCeilingIsBaseInsideCollisionCheckEnabled = false;\r\n this.myIsOnGroundIfInsideHit = false;\r\n this.myIsOnCeilingIfInsideHit = false;\r\n this.myIsOnGroundMaxSurfaceAngle = null;\r\n this.myIsOnCeilingMaxSurfaceAngle = null;\r\n this.myFindGroundDistanceMaxOutsideDistance = 0;\r\n this.myFindGroundDistanceMaxInsideDistance = 0;\r\n this.myFindCeilingDistanceMaxOutsideDistance = 0;\r\n this.myFindCeilingDistanceMaxInsideDistance = 0;\r\n this.myCollectGroundCollisionHitOutsideDistance = 0;\r\n this.myCollectGroundCollisionHitInsideDistance = 0;\r\n this.myCollectCeilingCollisionHitOutsideDistance = 0;\r\n this.myCollectCeilingCollisionHitInsideDistance = 0;\r\n\r\n this.myAllowGroundSteepFix = false;\r\n this.myAllowCeilingSteepFix = false;\r\n this.myMustStayOnGround = false;\r\n this.myMustStayOnCeiling = false;\r\n this.myMustStayOnValidGroundAngleDownhill = false;\r\n this.myMustStayOnValidCeilingAngleDownhill = false;\r\n this.myRegatherGroundInfoOnSurfaceCheckFail = false;\r\n this.myRegatherCeilingInfoOnSurfaceCheckFail = false;\r\n this.myMustStayBelowIgnorableGroundAngleDownhill = false;\r\n this.myMustStayBelowIgnorableCeilingAngleDownhill = false;\r\n this.myMustStayBelowGroundAngleDownhill = null;\r\n this.myMustStayBelowCeilingAngleDownhill = null;\r\n this.myMovementMustStayOnGroundHitAngle = null;\r\n this.myMovementMustStayOnCeilingHitAngle = null;\r\n\r\n this.myTeleportMustBeOnIgnorableGroundAngle = false;\r\n this.myCheckTransformMustBeOnIgnorableGroundAngle = false;\r\n this.myTeleportMustBeOnIgnorableCeilingAngle = false;\r\n this.myCheckTransformMustBeOnIgnorableCeilingAngle = false;\r\n\r\n this.myTeleportMustBeOnGroundAngle = null;\r\n this.myCheckTransformMustBeOnGroundAngle = null;\r\n this.myTeleportMustBeOnCeilingAngle = null;\r\n this.myCheckTransformMustBeOnCeilingAngle = null;\r\n\r\n this.myTeleportMustBeOnGround = false;\r\n this.myCheckTransformMustBeOnGround = false;\r\n this.myTeleportMustBeOnCeiling = false;\r\n this.myCheckTransformMustBeOnCeiling = false;\r\n\r\n this.mySlidingEnabled = false;\r\n this.mySlidingHorizontalMovementCheckBetterNormal = false;\r\n this.mySlidingMaxAttempts = 0;\r\n this.mySlidingCheckBothDirections = false; // Expensive, 2 times the check for the whole horizontal movement!\r\n // This can fix some edge cases in which u can get stuck instead of sliding\r\n // It basically require that u also add flicker prevention\r\n\r\n this.mySlidingFlickeringPreventionType = 0; // Expensive, 2 times the check for the whole horizontal movement!\r\n // 0: no prevention\r\n // 1: use previous frame data to understand if the sliding could flicker, this avoid stopping the movement when the flicker would just last some frames, \r\n // but also allows a bit of flicker that stabilize after 2-3 frames\r\n // 2: check when sliding collision angle is more then 90 degrees, prevents most flicker apart those on almost flat surfaces\r\n // 3: check 2 + check when sliding movement angle is more then 85 degrees, prevents almost all flicker, even on almost flat surfaces\r\n // 4: check every time\r\n //\r\n // From 3 and above you could have that the flicker prevents the movement when u expect it, because it's a more aggressive prevention\r\n // In case a fluid movement is more important than a bit of flicker from time to time, 1 is a better choice (which is also less expensive than 3 and above)\r\n // 2 is just a less expensive version of 3 (check less times) but also less precise, allowing more flickering\r\n\r\n this.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding = false;\r\n // This flag make it so the prevention is done only if it was already sliding, this can lead to a few frames of flicker if u go toward a corner directly\r\n // but allow the movement to be more fluid, avoiding getting stuck\r\n\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = 0;\r\n // If the collision think it needs to check for flicker, it will keep checking for the next X frames based on this value even if the condition are not met anymore\r\n // This help in catching the flicker when the direction is not changing every frame but every 2-3 for example\r\n // It's especially useful if combo-ed with mySlidingFlickeringPreventionType == 1, making it a bit less fluid but also less flickering\r\n\r\n this.mySlidingAdjustSign90Degrees = false;\r\n\r\n this.myHorizontalBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHorizontalObjectsToIgnore = [];\r\n\r\n this.myVerticalBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myVerticalObjectsToIgnore = [];\r\n\r\n this.myExtraMovementCheckCallback = null; // Signature: callback(startMovement, endMovement, currentPosition, currentTransformUp, currentTransformForward, currentHeight, collisionCheckParams, prevCollisionRuntimeParams, outCollisionRuntimeParams, outFixedMovement) -> outFixedMovement\r\n this.myExtraTeleportCheckCallback = null; // Signature: callback(collisionRuntimeParams) -> bool\r\n this.myExtraCheckTransformCheckCallback = null; // Signature: callback(collisionRuntimeParams) -> bool\r\n\r\n this.myDebugEnabled = false;\r\n\r\n this.myDebugHorizontalMovementEnabled = false;\r\n this.myDebugHorizontalPositionEnabled = false;\r\n this.myDebugVerticalMovementEnabled = false;\r\n this.myDebugVerticalPositionEnabled = false;\r\n this.myDebugSlidingEnabled = false;\r\n this.myDebugGroundInfoEnabled = false;\r\n this.myDebugCeilingInfoEnabled = false;\r\n this.myDebugRuntimeParamsEnabled = false;\r\n this.myDebugMovementEnabled = false;\r\n }\r\n\r\n copy(other) {\r\n this.mySplitMovementEnabled = other.mySplitMovementEnabled;\r\n this.mySplitMovementMaxLength = other.mySplitMovementMaxLength;\r\n this.mySplitMovementMaxLengthEnabled = other.mySplitMovementMaxLengthEnabled;\r\n this.mySplitMovementMaxSteps = other.mySplitMovementMaxSteps;\r\n this.mySplitMovementMaxStepsEnabled = other.mySplitMovementMaxStepsEnabled;\r\n this.mySplitMovementMinLength = other.mySplitMovementMinLength;\r\n this.mySplitMovementMinLengthEnabled = other.mySplitMovementMinLengthEnabled;\r\n this.mySplitMovementStopWhenHorizontalMovementCanceled = other.mySplitMovementStopWhenHorizontalMovementCanceled;\r\n this.mySplitMovementStopWhenVerticalMovementCanceled = other.mySplitMovementStopWhenVerticalMovementCanceled;\r\n this.mySplitMovementStopCallback = other.mySplitMovementStopCallback;\r\n this.mySplitMovementStopReturnPrevious = other.mySplitMovementStopReturnPrevious;\r\n\r\n this.myRadius = other.myRadius;\r\n this.myDistanceFromFeetToIgnore = other.myDistanceFromFeetToIgnore;\r\n this.myDistanceFromHeadToIgnore = other.myDistanceFromHeadToIgnore;\r\n\r\n this.myPositionOffsetLocal.vec3_copy(other.myPositionOffsetLocal);\r\n this.myRotationOffsetLocalQuat.quat_copy(other.myRotationOffsetLocalQuat);\r\n\r\n this.myHorizontalMovementCheckEnabled = other.myHorizontalMovementCheckEnabled;\r\n this.myHorizontalMovementStepEnabled = other.myHorizontalMovementStepEnabled;\r\n this.myHorizontalMovementStepMaxLength = other.myHorizontalMovementStepMaxLength;\r\n this.myHorizontalMovementRadialStepAmount = other.myHorizontalMovementRadialStepAmount;\r\n this.myHorizontalMovementCheckDiagonalOutward = other.myHorizontalMovementCheckDiagonalOutward;\r\n this.myHorizontalMovementCheckDiagonalInward = other.myHorizontalMovementCheckDiagonalInward;\r\n this.myHorizontalMovementCheckStraight = other.myHorizontalMovementCheckStraight;\r\n this.myHorizontalMovementCheckHorizontalBorder = other.myHorizontalMovementCheckHorizontalBorder;\r\n this.myHorizontalMovementCheckVerticalStraight = other.myHorizontalMovementCheckVerticalStraight;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = other.myHorizontalMovementCheckVerticalDiagonalUpwardOutward;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardInward = other.myHorizontalMovementCheckVerticalDiagonalUpwardInward;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardOutward = other.myHorizontalMovementCheckVerticalDiagonalDownwardOutward;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardInward = other.myHorizontalMovementCheckVerticalDiagonalDownwardInward;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalUpward = other.myHorizontalMovementCheckVerticalStraightDiagonalUpward;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalDownward = other.myHorizontalMovementCheckVerticalStraightDiagonalDownward;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward = other.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward = other.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = other.myHorizontalMovementHorizontalStraightCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = other.myHorizontalMovementVerticalStraightCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled;\r\n\r\n this.myHorizontalPositionCheckEnabled = other.myHorizontalPositionCheckEnabled;\r\n this.myHalfConeAngle = other.myHalfConeAngle;\r\n this.myHalfConeSliceAmount = other.myHalfConeSliceAmount;\r\n this.myCheckConeBorder = other.myCheckConeBorder;\r\n this.myCheckConeRay = other.myCheckConeRay;\r\n this.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = other.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision;\r\n this.myHorizontalPositionCheckVerticalDirectionType = other.myHorizontalPositionCheckVerticalDirectionType;\r\n\r\n this.myVerticalMovementCheckEnabled = other.myVerticalMovementCheckEnabled;\r\n this.myVerticalPositionCheckEnabled = other.myVerticalPositionCheckEnabled;\r\n this.myFeetRadius = other.myFeetRadius;\r\n\r\n this.myAdjustVerticalMovementWithGroundAngleDownhill = other.myAdjustVerticalMovementWithGroundAngleDownhill;\r\n this.myAdjustVerticalMovementWithGroundAngleUphill = other.myAdjustVerticalMovementWithGroundAngleUphill;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle = other.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle = other.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle = other.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle = other.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhill = other.myAdjustHorizontalMovementWithGroundAngleDownhill;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle = other.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle;\r\n\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhill = other.myAdjustVerticalMovementWithCeilingAngleDownhill;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphill = other.myAdjustVerticalMovementWithCeilingAngleUphill;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhill = other.myAdjustHorizontalMovementWithCeilingAngleDownhill;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle = other.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle;\r\n\r\n this.myCheckVerticalFixedForwardEnabled = other.myCheckVerticalFixedForwardEnabled;\r\n this.myCheckVerticalFixedForward.vec3_copy(other.myCheckVerticalFixedForward);\r\n this.myCheckVerticalBothDirection = other.myCheckVerticalBothDirection;\r\n\r\n this.mySnapOnGroundEnabled = other.mySnapOnGroundEnabled;\r\n this.mySnapOnGroundExtraDistance = other.mySnapOnGroundExtraDistance;\r\n this.mySnapOnCeilingEnabled = other.mySnapOnCeilingEnabled;\r\n this.mySnapOnCeilingExtraDistance = other.mySnapOnCeilingExtraDistance;\r\n\r\n this.myGroundPopOutEnabled = other.myGroundPopOutEnabled;\r\n this.myGroundPopOutExtraDistance = other.myGroundPopOutExtraDistance;\r\n this.myCeilingPopOutEnabled = other.myCeilingPopOutEnabled;\r\n this.myCeilingPopOutExtraDistance = other.myCeilingPopOutExtraDistance;\r\n\r\n this.myVerticalMovementReduceEnabled = other.myVerticalMovementReduceEnabled;\r\n\r\n this.myGroundCircumferenceAddCenter = other.myGroundCircumferenceAddCenter;\r\n this.myGroundCircumferenceSliceAmount = other.myGroundCircumferenceSliceAmount;\r\n this.myGroundCircumferenceStepAmount = other.myGroundCircumferenceStepAmount;\r\n this.myGroundCircumferenceRotationPerStep = other.myGroundCircumferenceRotationPerStep;\r\n this.myVerticalAllowHitInsideCollisionIfOneOk = other.myVerticalAllowHitInsideCollisionIfOneOk;\r\n\r\n this.myCheckHeight = other.myCheckHeight;\r\n this.myCheckHeightVerticalMovement = other.myCheckHeightVerticalMovement;\r\n this.myCheckHeightVerticalPosition = other.myCheckHeightVerticalPosition;\r\n this.myCheckHeightTopMovement = other.myCheckHeightTopMovement;\r\n this.myCheckHeightTopPosition = other.myCheckHeightTopPosition;\r\n this.myCheckHeightConeOnCollision = other.myCheckHeightConeOnCollision;\r\n this.myCheckHeightConeOnCollisionKeepHit = other.myCheckHeightConeOnCollisionKeepHit;\r\n this.myHeightCheckStepAmountMovement = other.myHeightCheckStepAmountMovement;\r\n this.myHeightCheckStepAmountPosition = other.myHeightCheckStepAmountPosition;\r\n this.myCheckVerticalStraight = other.myCheckVerticalStraight;\r\n this.myCheckVerticalDiagonalRayOutward = other.myCheckVerticalDiagonalRayOutward;\r\n this.myCheckVerticalDiagonalRayInward = other.myCheckVerticalDiagonalRayInward;\r\n this.myCheckVerticalDiagonalBorderOutward = other.myCheckVerticalDiagonalBorderOutward;\r\n this.myCheckVerticalDiagonalBorderInward = other.myCheckVerticalDiagonalBorderInward;\r\n this.myCheckVerticalDiagonalBorderRayOutward = other.myCheckVerticalDiagonalBorderRayOutward;\r\n this.myCheckVerticalDiagonalBorderRayInward = other.myCheckVerticalDiagonalBorderRayInward;\r\n this.myCheckVerticalSearchFartherVerticalHit = other.myCheckVerticalSearchFartherVerticalHit;\r\n\r\n this.myGroundAngleToIgnore = other.myGroundAngleToIgnore;\r\n this.myGroundAngleToIgnoreWithPerceivedAngle = other.myGroundAngleToIgnoreWithPerceivedAngle;\r\n this.myCeilingAngleToIgnore = other.myCeilingAngleToIgnore;\r\n this.myCeilingAngleToIgnoreWithPerceivedAngle = other.myCeilingAngleToIgnoreWithPerceivedAngle;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreHeight = other.myHorizontalMovementGroundAngleIgnoreHeight;\r\n this.myHorizontalMovementCeilingAngleIgnoreHeight = other.myHorizontalMovementCeilingAngleIgnoreHeight;\r\n this.myHorizontalPositionGroundAngleIgnoreHeight = other.myHorizontalPositionGroundAngleIgnoreHeight;\r\n this.myHorizontalPositionCeilingAngleIgnoreHeight = other.myHorizontalPositionCeilingAngleIgnoreHeight;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = other.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n this.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft = other.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft;\r\n\r\n this.myHeight = other.myHeight;\r\n\r\n this.myComputeGroundInfoEnabled = other.myComputeGroundInfoEnabled;\r\n this.myComputeCeilingInfoEnabled = other.myComputeCeilingInfoEnabled;\r\n this.myDistanceToBeOnGround = other.myDistanceToBeOnGround;\r\n this.myDistanceToComputeGroundInfo = other.myDistanceToComputeGroundInfo;\r\n this.myDistanceToBeOnCeiling = other.myDistanceToBeOnCeiling;\r\n this.myDistanceToComputeCeilingInfo = other.myDistanceToComputeCeilingInfo;\r\n this.myVerticalFixToBeOnGround = other.myVerticalFixToBeOnGround;\r\n this.myVerticalFixToComputeGroundInfo = other.myVerticalFixToComputeGroundInfo;\r\n this.myVerticalFixToBeOnCeiling = other.myVerticalFixToBeOnCeiling;\r\n this.myVerticalFixToComputeCeilingInfo = other.myVerticalFixToComputeCeilingInfo;\r\n this.myGroundIsBaseInsideCollisionCheckEnabled = other.myGroundIsBaseInsideCollisionCheckEnabled;\r\n this.myCeilingIsBaseInsideCollisionCheckEnabled = other.myCeilingIsBaseInsideCollisionCheckEnabled;\r\n this.myIsOnGroundIfInsideHit = other.myIsOnGroundIfInsideHit;\r\n this.myIsOnCeilingIfInsideHit = other.myIsOnCeilingIfInsideHit;\r\n this.myIsOnGroundMaxSurfaceAngle = other.myIsOnGroundMaxSurfaceAngle;\r\n this.myIsOnCeilingMaxSurfaceAngle = other.myIsOnCeilingMaxSurfaceAngle;\r\n this.myFindGroundDistanceMaxOutsideDistance = other.myFindGroundDistanceMaxOutsideDistance;\r\n this.myFindGroundDistanceMaxInsideDistance = other.myFindGroundDistanceMaxInsideDistance;\r\n this.myFindCeilingDistanceMaxOutsideDistance = other.myFindCeilingDistanceMaxOutsideDistance;\r\n this.myFindCeilingDistanceMaxInsideDistance = other.myFindCeilingDistanceMaxInsideDistance;\r\n this.myCollectGroundCollisionHitOutsideDistance = other.myCollectGroundCollisionHitOutsideDistance;\r\n this.myCollectGroundCollisionHitInsideDistance = other.myCollectGroundCollisionHitInsideDistance;\r\n this.myCollectCeilingCollisionHitOutsideDistance = other.myCollectCeilingCollisionHitOutsideDistance;\r\n this.myCollectCeilingCollisionHitInsideDistance = other.myCollectCeilingCollisionHitInsideDistance;\r\n\r\n this.myAllowGroundSteepFix = other.myAllowGroundSteepFix;\r\n this.myAllowCeilingSteepFix = other.myAllowCeilingSteepFix;\r\n this.myMustStayOnGround = other.myMustStayOnGround;\r\n this.myMustStayOnCeiling = other.myMustStayOnCeiling;\r\n this.myMustStayOnValidGroundAngleDownhill = other.myMustStayOnValidGroundAngleDownhill;\r\n this.myMustStayOnValidCeilingAngleDownhill = other.myMustStayOnValidCeilingAngleDownhill;\r\n this.myRegatherGroundInfoOnSurfaceCheckFail = other.myRegatherGroundInfoOnSurfaceCheckFail;\r\n this.myRegatherCeilingInfoOnSurfaceCheckFail = other.myRegatherCeilingInfoOnSurfaceCheckFail;\r\n this.myMustStayBelowGroundAngleDownhill = other.myMustStayBelowGroundAngleDownhill;\r\n this.myMustStayBelowCeilingAngleDownhill = other.myMustStayBelowCeilingAngleDownhill;\r\n this.myMustStayBelowIgnorableGroundAngleDownhill = other.myMustStayBelowIgnorableGroundAngleDownhill;\r\n this.myMustStayBelowIgnorableCeilingAngleDownhill = other.myMustStayBelowIgnorableCeilingAngleDownhill;\r\n this.myMovementMustStayOnGroundHitAngle = other.myMovementMustStayOnGroundHitAngle;\r\n this.myMovementMustStayOnCeilingHitAngle = other.myMovementMustStayOnCeilingHitAngle;\r\n\r\n this.myTeleportMustBeOnIgnorableGroundAngle = other.myTeleportMustBeOnIgnorableGroundAngle;\r\n this.myCheckTransformMustBeOnIgnorableGroundAngle = other.myCheckTransformMustBeOnIgnorableGroundAngle;\r\n this.myTeleportMustBeOnIgnorableCeilingAngle = other.myTeleportMustBeOnIgnorableCeilingAngle;\r\n this.myCheckTransformMustBeOnIgnorableCeilingAngle = other.myCheckTransformMustBeOnIgnorableCeilingAngle;\r\n\r\n this.myTeleportMustBeOnGroundAngle = other.myTeleportMustBeOnGroundAngle;\r\n this.myCheckTransformMustBeOnGroundAngle = other.myCheckTransformMustBeOnGroundAngle;\r\n this.myTeleportMustBeOnCeilingAngle = other.myTeleportMustBeOnCeilingAngle;\r\n this.myCheckTransformMustBeOnCeilingAngle = other.myCheckTransformMustBeOnCeilingAngle;\r\n\r\n this.myTeleportMustBeOnGround = other.myTeleportMustBeOnGround;\r\n this.myCheckTransformMustBeOnGround = other.myCheckTransformMustBeOnGround;\r\n this.myTeleportMustBeOnCeiling = other.myTeleportMustBeOnCeiling;\r\n this.myCheckTransformMustBeOnCeiling = other.myCheckTransformMustBeOnCeiling;\r\n\r\n this.mySlidingEnabled = other.mySlidingEnabled;\r\n this.mySlidingHorizontalMovementCheckBetterNormal = other.mySlidingHorizontalMovementCheckBetterNormal;\r\n this.mySlidingMaxAttempts = other.mySlidingMaxAttempts;\r\n this.mySlidingCheckBothDirections = other.mySlidingCheckBothDirections;\r\n this.mySlidingFlickeringPreventionType = other.mySlidingFlickeringPreventionType;\r\n this.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding = other.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = other.mySlidingFlickerPreventionCheckAnywayCounter;\r\n\r\n this.mySlidingAdjustSign90Degrees = other.mySlidingAdjustSign90Degrees;\r\n\r\n this.myHorizontalBlockLayerFlags.copy(other.myHorizontalBlockLayerFlags);\r\n this.myHorizontalObjectsToIgnore.pp_copy(other.myHorizontalObjectsToIgnore);\r\n\r\n this.myVerticalBlockLayerFlags.copy(other.myVerticalBlockLayerFlags);\r\n this.myVerticalObjectsToIgnore.pp_copy(other.myVerticalObjectsToIgnore);\r\n\r\n this.myExtraMovementCheckCallback = other.myExtraMovementCheckCallback;\r\n this.myExtraTeleportCheckCallback = other.myExtraTeleportCheckCallback;\r\n this.myExtraCheckTransformCheckCallback = other.myExtraCheckTransformCheckCallback;\r\n\r\n this.myDebugEnabled = other.myDebugEnabled;\r\n\r\n this.myDebugHorizontalMovementEnabled = other.myDebugHorizontalMovementEnabled;\r\n this.myDebugHorizontalPositionEnabled = other.myDebugHorizontalPositionEnabled;\r\n this.myDebugVerticalMovementEnabled = other.myDebugVerticalMovementEnabled;\r\n this.myDebugVerticalPositionEnabled = other.myDebugVerticalPositionEnabled;\r\n this.myDebugSlidingEnabled = other.myDebugSlidingEnabled;\r\n this.myDebugGroundInfoEnabled = other.myDebugGroundInfoEnabled;\r\n this.myDebugCeilingInfoEnabled = other.myDebugCeilingInfoEnabled;\r\n this.myDebugRuntimeParamsEnabled = other.myDebugRuntimeParamsEnabled;\r\n this.myDebugMovementEnabled = other.myDebugMovementEnabled;\r\n }\r\n}\r\n\r\nexport class CollisionRuntimeParams {\r\n\r\n constructor() {\r\n this.myOriginalPosition = vec3_create();\r\n this.myNewPosition = vec3_create();\r\n\r\n this.myOriginalHeight = 0;\r\n\r\n this.myOriginalForward = vec3_create();\r\n this.myOriginalUp = vec3_create();\r\n\r\n this.myOffsetUp = vec3_create();\r\n\r\n this.myOriginalMovement = vec3_create();\r\n this.myFixedMovement = vec3_create();\r\n\r\n this.myLastValidOriginalHorizontalMovement = vec3_create();\r\n this.myLastValidOriginalVerticalMovement = vec3_create();\r\n this.myLastValidSurfaceAdjustedHorizontalMovement = vec3_create();\r\n this.myLastValidSurfaceAdjustedVerticalMovement = vec3_create();\r\n this.myLastValidEndHorizontalMovement = vec3_create();\r\n this.myLastValidEndVerticalMovement = vec3_create();\r\n\r\n this.myIsOnGround = false;\r\n this.myGroundCollisionHit = new RaycastHit();\r\n this.myGroundAngle = 0;\r\n this.myGroundPerceivedAngle = 0;\r\n this.myGroundNormal = vec3_create();\r\n this.myGroundHitMaxAngle = 0;\r\n this.myGroundHitMaxNormal = vec3_create();\r\n this.myGroundDistance = null;\r\n this.myGroundIsBaseInsideCollision = false;\r\n\r\n this.myIsOnCeiling = false;\r\n this.myCeilingCollisionHit = new RaycastHit();\r\n this.myCeilingAngle = 0;\r\n this.myCeilingPerceivedAngle = 0;\r\n this.myCeilingNormal = vec3_create();\r\n this.myCeilingHitMaxAngle = 0;\r\n this.myCeilingHitMaxNormal = vec3_create();\r\n this.myCeilingDistance = null;\r\n this.myCeilingIsBaseInsideCollision = false;\r\n\r\n this.myHorizontalMovementCanceled = false; // Could add HorizontalMovementCanceledReason\r\n this.myIsCollidingHorizontally = false;\r\n this.myHorizontalCollisionHit = new RaycastHit();\r\n\r\n this.myVerticalMovementCanceled = false;\r\n this.myIsCollidingVertically = false;\r\n this.myVerticalCollisionHit = new RaycastHit();\r\n\r\n this.myHasSnappedOnGround = false;\r\n this.myHasSnappedOnCeiling = false;\r\n this.myHasPoppedOutGround = false;\r\n this.myHasPoppedOutCeiling = false;\r\n this.myHasReducedVerticalMovement = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = false;\r\n\r\n this.myIsSliding = false;\r\n this.myIsSlidingIntoOppositeDirection = false;\r\n this.myIsSlidingFlickerPrevented = false;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = 0;\r\n this.mySlidingMovementAngle = 0;\r\n this.mySlidingCollisionAngle = 0;\r\n this.mySlidingCollisionHit = new RaycastHit();\r\n this.mySlidingWallNormal = new vec3_create();\r\n this.mySliding90DegreesSign = 0;\r\n this.mySlidingRecompute90DegreesSign = true;\r\n this.myLastValidIsSliding = false;\r\n this.mySlidingPreviousHorizontalMovement = vec3_create();\r\n\r\n this.myOriginalTeleportPosition = vec3_create();\r\n this.myFixedTeleportPosition = vec3_create();\r\n\r\n this.myOriginalPositionCheckPosition = vec3_create();\r\n this.myFixedPositionCheckPosition = vec3_create();\r\n\r\n this.myTeleportCanceled = false;\r\n\r\n this.myIsPositionOk = false;\r\n\r\n this.myIsTeleport = false; // Could be a single bool but not sure if there should be an option and don't want to create an enum for now\r\n this.myIsMove = false;\r\n this.myIsPositionCheck = false;\r\n this.myIsPositionCheckAllowAdjustments = false;\r\n\r\n this.mySplitMovementSteps = 0;\r\n this.mySplitMovementStepsPerformed = 0;\r\n this.mySplitMovementStop = false;\r\n this.mySplitMovementMovementChecked = vec3_create();\r\n\r\n this.myRealIsOnGround = false;\r\n this.myRealIsOnCeiling = false;\r\n }\r\n\r\n reset() {\r\n this.myOriginalPosition.vec3_zero();\r\n this.myNewPosition.vec3_zero();\r\n\r\n this.myOriginalHeight = 0;\r\n\r\n this.myOriginalForward.vec3_zero();\r\n this.myOriginalUp.vec3_zero();\r\n\r\n this.myOffsetUp.vec3_zero();\r\n\r\n this.myOriginalMovement.vec3_zero();\r\n this.myFixedMovement.vec3_zero();\r\n\r\n this.myLastValidOriginalHorizontalMovement.vec3_zero();\r\n this.myLastValidOriginalVerticalMovement.vec3_zero();\r\n this.myLastValidSurfaceAdjustedHorizontalMovement.vec3_zero();\r\n this.myLastValidSurfaceAdjustedVerticalMovement.vec3_zero();\r\n this.myLastValidEndHorizontalMovement.vec3_zero();\r\n this.myLastValidEndVerticalMovement.vec3_zero();\r\n\r\n\r\n this.myIsOnGround = false;\r\n this.myGroundCollisionHit.reset();\r\n this.myGroundAngle = 0;\r\n this.myGroundPerceivedAngle = 0;\r\n this.myGroundNormal.vec3_zero();\r\n this.myGroundHitMaxAngle = 0;\r\n this.myGroundHitMaxNormal.vec3_zero();\r\n this.myGroundDistance = null;\r\n this.myGroundIsBaseInsideCollision = false;\r\n\r\n this.myIsOnCeiling = false;\r\n this.myCeilingCollisionHit.reset();\r\n this.myCeilingAngle = 0;\r\n this.myCeilingPerceivedAngle = 0;\r\n this.myCeilingNormal.vec3_zero();\r\n this.myCeilingHitMaxAngle = 0;\r\n this.myCeilingHitMaxNormal.vec3_zero();\r\n this.myCeilingDistance = null;\r\n this.myCeilingIsBaseInsideCollision = false;\r\n\r\n this.myHorizontalMovementCanceled = false;\r\n this.myIsCollidingHorizontally = false;\r\n this.myHorizontalCollisionHit.reset();\r\n\r\n this.myVerticalMovementCanceled = false;\r\n this.myIsCollidingVertically = false;\r\n this.myVerticalCollisionHit.reset();\r\n\r\n this.myHasSnappedOnGround = false;\r\n this.myHasSnappedOnCeiling = false;\r\n this.myHasPoppedOutGround = false;\r\n this.myHasPoppedOutCeiling = false;\r\n this.myHasReducedVerticalMovement = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = false;\r\n\r\n this.myIsSliding = false;\r\n this.myIsSlidingIntoOppositeDirection = false;\r\n this.myIsSlidingFlickerPrevented = false;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = 0;\r\n this.mySlidingMovementAngle = 0;\r\n this.mySlidingCollisionAngle = 0;\r\n this.mySlidingCollisionHit.reset();\r\n this.mySliding90DegreesSign = 0;\r\n this.mySlidingRecompute90DegreesSign = true;\r\n this.myLastValidIsSliding = false;\r\n this.mySlidingPreviousHorizontalMovement.vec3_zero();\r\n this.mySlidingWallNormal.vec3_zero();\r\n\r\n this.myOriginalTeleportPosition.vec3_zero();\r\n this.myFixedTeleportPosition.vec3_zero();\r\n\r\n this.myOriginalPositionCheckPosition.vec3_zero();\r\n this.myFixedPositionCheckPosition.vec3_zero();\r\n\r\n this.myTeleportCanceled = false;\r\n\r\n this.myIsPositionOk = false;\r\n\r\n this.myIsTeleport = false;\r\n this.myIsMove = false;\r\n this.myIsPositionCheck = false;\r\n this.myIsPositionCheckAllowAdjustments = false;\r\n\r\n this.mySplitMovementSteps = 0;\r\n this.mySplitMovementStepsPerformed = 0;\r\n this.mySplitMovementStop = false;\r\n this.mySplitMovementMovementChecked.vec3_zero();\r\n\r\n this.myRealIsOnGround = false;\r\n this.myRealIsOnCeiling = false;\r\n }\r\n\r\n copy(other) {\r\n this.myOriginalPosition.vec3_copy(other.myOriginalPosition);\r\n this.myNewPosition.vec3_copy(other.myNewPosition);\r\n\r\n this.myOriginalHeight = other.myOriginalHeight;\r\n\r\n this.myOriginalForward.vec3_copy(other.myOriginalForward);\r\n this.myOriginalUp.vec3_copy(other.myOriginalUp);\r\n\r\n this.myOffsetUp.vec3_copy(other.myOffsetUp);\r\n\r\n this.myOriginalMovement.vec3_copy(other.myOriginalMovement);\r\n this.myFixedMovement.vec3_copy(other.myFixedMovement);\r\n\r\n this.myLastValidOriginalHorizontalMovement.vec3_copy(other.myLastValidOriginalHorizontalMovement);\r\n this.myLastValidOriginalVerticalMovement.vec3_copy(other.myLastValidOriginalVerticalMovement);\r\n this.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(other.myLastValidSurfaceAdjustedHorizontalMovement);\r\n this.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(other.myLastValidSurfaceAdjustedVerticalMovement);\r\n this.myLastValidEndHorizontalMovement.vec3_copy(other.myLastValidEndHorizontalMovement);\r\n this.myLastValidEndVerticalMovement.vec3_copy(other.myLastValidEndVerticalMovement);\r\n\r\n this.myIsOnGround = other.myIsOnGround;\r\n this.myGroundCollisionHit.copy(other.myGroundCollisionHit);\r\n this.myGroundAngle = other.myGroundAngle;\r\n this.myGroundPerceivedAngle = other.myGroundPerceivedAngle;\r\n this.myGroundNormal.vec3_copy(other.myGroundNormal);\r\n this.myGroundHitMaxAngle = other.myGroundHitMaxAngle;\r\n this.myGroundHitMaxNormal.vec3_copy(other.myGroundHitMaxNormal);\r\n this.myGroundDistance = other.myGroundDistance;\r\n this.myGroundIsBaseInsideCollision = other.myGroundIsBaseInsideCollision;\r\n\r\n this.myIsOnCeiling = other.myIsOnCeiling;\r\n this.myCeilingCollisionHit.copy(other.myCeilingCollisionHit);\r\n this.myCeilingAngle = other.myCeilingAngle;\r\n this.myCeilingPerceivedAngle = other.myCeilingPerceivedAngle;\r\n this.myCeilingNormal.vec3_copy(other.myCeilingNormal);\r\n this.myCeilingHitMaxAngle = other.myCeilingHitMaxAngle;\r\n this.myCeilingHitMaxNormal.vec3_copy(other.myCeilingHitMaxNormal);\r\n this.myCeilingDistance = other.myCeilingDistance;\r\n this.myCeilingIsBaseInsideCollision = other.myCeilingIsBaseInsideCollision;\r\n\r\n this.myHorizontalMovementCanceled = other.myHorizontalMovementCanceled;\r\n this.myIsCollidingHorizontally = other.myIsCollidingHorizontally;\r\n this.myHorizontalCollisionHit.copy(other.myHorizontalCollisionHit);\r\n\r\n this.myVerticalMovementCanceled = other.myVerticalMovementCanceled;\r\n this.myIsCollidingVertically = other.myIsCollidingVertically;\r\n this.myVerticalCollisionHit.copy(other.myVerticalCollisionHit);\r\n\r\n this.myHasSnappedOnGround = other.myHasSnappedOnGround;\r\n this.myHasSnappedOnCeiling = other.myHasSnappedOnCeiling;\r\n this.myHasPoppedOutGround = other.myHasPoppedOutGround;\r\n this.myHasPoppedOutCeiling = other.myHasPoppedOutCeiling;\r\n this.myHasReducedVerticalMovement = other.myHasReducedVerticalMovement;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = other.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = other.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = other.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = other.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = other.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = other.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill;\r\n\r\n this.myIsSliding = other.myIsSliding;\r\n this.myIsSlidingIntoOppositeDirection = other.myIsSlidingIntoOppositeDirection;\r\n this.myIsSlidingFlickerPrevented = other.myIsSlidingFlickerPrevented;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = other.mySlidingFlickerPreventionCheckAnywayCounter;\r\n this.mySlidingMovementAngle = other.mySlidingMovementAngle;\r\n this.mySlidingCollisionAngle = other.mySlidingCollisionAngle;\r\n this.mySlidingCollisionHit.copy(other.mySlidingCollisionHit);\r\n this.mySliding90DegreesSign = other.mySliding90DegreesSign;\r\n this.mySlidingRecompute90DegreesSign = other.mySlidingRecompute90DegreesSign;\r\n this.myLastValidIsSliding = other.myLastValidIsSliding;\r\n this.mySlidingPreviousHorizontalMovement.vec3_copy(other.mySlidingPreviousHorizontalMovement);\r\n this.mySlidingWallNormal.vec3_copy(other.mySlidingWallNormal);\r\n\r\n this.myOriginalTeleportPosition.vec3_copy(other.myOriginalTeleportPosition);\r\n this.myFixedTeleportPosition.vec3_copy(other.myFixedTeleportPosition);\r\n this.myTeleportCanceled = other.myTeleportCanceled;\r\n\r\n this.myIsPositionOk = other.myIsPositionOk;\r\n\r\n this.myOriginalPositionCheckPosition.vec3_copy(other.myOriginalPositionCheckPosition);\r\n this.myFixedPositionCheckPosition.vec3_copy(other.myFixedPositionCheckPosition);\r\n\r\n this.myIsTeleport = other.myIsTeleport;\r\n this.myIsMove = other.myIsMove;\r\n this.myIsPositionCheck = other.myIsPositionCheck;\r\n this.myIsPositionCheckAllowAdjustments = other.myIsPositionCheckAllowAdjustments;\r\n\r\n this.mySplitMovementSteps = other.mySplitMovementSteps;\r\n this.mySplitMovementStepsPerformed = other.mySplitMovementStepsPerformed;\r\n this.mySplitMovementStop = other.mySplitMovementStop;\r\n this.mySplitMovementMovementChecked.vec3_copy(other.mySplitMovementMovementChecked);\r\n\r\n this.myRealIsOnGround = other.myRealIsOnGround;\r\n this.myRealIsOnCeiling = other.myRealIsOnCeiling;\r\n }\r\n}", "import { RaycastHit, RaycastParams, RaycastResults } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../../../../../../cauldron/physics/physics_utils.js\";\r\nimport { quat2_create, vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionRuntimeParams } from \"./collision_params.js\";\r\n\r\nexport class CollisionCheckBase {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myRaycastParams = new RaycastParams(Globals.getPhysics(this._myEngine));\r\n this._myRaycastResult = new RaycastResults();\r\n this._myFixRaycastResult = new RaycastResults();\r\n\r\n this._myBackupRaycastHit = new RaycastHit();\r\n\r\n this._myPrevCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n this._mySlidingCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myInternalSlidingCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingFlickeringFixCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingFlickeringFixSlidingCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingOppositeDirectionCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingOnVerticalCheckCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n this._myCollisionCheckDisabled = false;\r\n\r\n this._myDebugEnabled = false;\r\n\r\n this._myTotalRaycasts = 0;\r\n }\r\n\r\n isCollisionCheckDisabled() {\r\n return this._myCollisionCheckDisabled;\r\n }\r\n\r\n setCollisionCheckDisabled(collisionCheckDisabled) {\r\n this._myCollisionCheckDisabled = collisionCheckDisabled;\r\n }\r\n\r\n _raycastAndDebug(origin, direction, distance, ignoreHitsInsideCollision, isHorizontal, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForMoveCollisionCheckDisabled(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForTeleportCollisionCheckDisabled(position, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForPositionCheckCollisionCheckDisabled(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _debugMovement(movement, fixedMovement, feetPosition, up, collisionCheckParams) {\r\n let originalHorizontalMovement = movement.vec3_removeComponentAlongAxis(up);\r\n\r\n let horizontalMovement = fixedMovement.vec3_removeComponentAlongAxis(up);\r\n let verticalMovement = fixedMovement.vec3_componentAlongAxis(up);\r\n\r\n let feetPositionPlusOffset = feetPosition.vec3_add(up.vec3_scale(collisionCheckParams.myDistanceFromFeetToIgnore + 0.001));\r\n\r\n if (!originalHorizontalMovement.vec3_isZero()) {\r\n originalHorizontalMovement.vec3_normalize(originalHorizontalMovement);\r\n\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPositionPlusOffset, originalHorizontalMovement, 0.2, vec4_create(0.5, 0.5, 1, 1));\r\n }\r\n\r\n if (!horizontalMovement.vec3_isZero()) {\r\n horizontalMovement.vec3_normalize(horizontalMovement);\r\n\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPositionPlusOffset, horizontalMovement, 0.2, vec4_create(0, 0, 1, 1));\r\n }\r\n\r\n if (!verticalMovement.vec3_isZero()) {\r\n verticalMovement.vec3_normalize(verticalMovement);\r\n\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPosition, verticalMovement, 0.2, vec4_create(0, 0, 1, 1));\r\n }\r\n }\r\n\r\n _debugRuntimeParams(collisionRuntimeParams) {\r\n if (collisionRuntimeParams.myHorizontalCollisionHit.isValid()) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0,\r\n collisionRuntimeParams.myHorizontalCollisionHit.myPosition,\r\n collisionRuntimeParams.myHorizontalCollisionHit.myNormal, 0.2, vec4_create(1, 0, 0, 1));\r\n }\r\n\r\n if (collisionRuntimeParams.mySlidingCollisionHit.isValid()) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0,\r\n collisionRuntimeParams.mySlidingCollisionHit.myPosition,\r\n collisionRuntimeParams.mySlidingCollisionHit.myNormal, 0.2, vec4_create(1, 0, 0, 1));\r\n }\r\n\r\n if (collisionRuntimeParams.myVerticalCollisionHit.isValid()) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0,\r\n collisionRuntimeParams.myVerticalCollisionHit.myPosition,\r\n collisionRuntimeParams.myVerticalCollisionHit.myNormal, 0.2, vec4_create(1, 0, 0, 1));\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckBase.prototype._raycastAndDebug = function () {\r\n let tempRaycastResult = new RaycastResults();\r\n return function _raycastAndDebug(origin, direction, distance, ignoreHitsInsideCollision, isHorizontal, collisionCheckParams, collisionRuntimeParams) {\r\n this._myRaycastParams.myOrigin.vec3_copy(origin);\r\n this._myRaycastParams.myDirection.vec3_copy(direction);\r\n this._myRaycastParams.myDistance = distance;\r\n\r\n if (isHorizontal) {\r\n this._myRaycastParams.myBlockLayerFlags.copy(collisionCheckParams.myHorizontalBlockLayerFlags);\r\n this._myRaycastParams.myObjectsToIgnore = collisionCheckParams.myHorizontalObjectsToIgnore;\r\n } else {\r\n this._myRaycastParams.myBlockLayerFlags.copy(collisionCheckParams.myVerticalBlockLayerFlags);\r\n this._myRaycastParams.myObjectsToIgnore = collisionCheckParams.myVerticalObjectsToIgnore;\r\n }\r\n\r\n this._myRaycastParams.myIgnoreHitsInsideCollision = ignoreHitsInsideCollision;\r\n\r\n let raycastResult = null;\r\n\r\n let raycastPerformanceDebugEnabled = false;\r\n if (raycastPerformanceDebugEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n // Quick debug to remove raycasts and/or let all raycasts fail\r\n\r\n let raycastAlways = false;\r\n if (raycastAlways || !this._myRaycastResult.isColliding()) {\r\n raycastResult = PhysicsUtils.raycast(this._myRaycastParams, tempRaycastResult);\r\n }\r\n\r\n if (!this._myRaycastResult.isColliding() && tempRaycastResult.isColliding()) {\r\n this._myRaycastResult.copy(tempRaycastResult);\r\n }\r\n\r\n raycastResult = this._myRaycastResult;\r\n } else {\r\n raycastResult = PhysicsUtils.raycast(this._myRaycastParams, this._myRaycastResult);\r\n }\r\n\r\n\r\n this._myTotalRaycasts++;\r\n\r\n if (this._myDebugEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n Globals.getDebugVisualManager(this._myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n return raycastResult;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForMoveCollisionCheckDisabled = function () {\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n return function _setRuntimeParamsForMoveCollisionCheckDisabled(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n collisionRuntimeParams.reset();\r\n\r\n collisionRuntimeParams.myRealIsOnGround = true;\r\n collisionRuntimeParams.myIsOnGround = true;\r\n collisionRuntimeParams.myGroundCollisionHit.reset();\r\n collisionRuntimeParams.myGroundAngle = 0;\r\n collisionRuntimeParams.myGroundPerceivedAngle = 0;\r\n collisionRuntimeParams.myGroundNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myGroundHitMaxAngle = collisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundDistance = 0;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myRealIsOnCeiling = false;\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n collisionRuntimeParams.myCeilingCollisionHit.reset();\r\n collisionRuntimeParams.myCeilingAngle = 0;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = 0;\r\n collisionRuntimeParams.myCeilingNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = collisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingDistance = 0;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.mySplitMovementSteps = 1;\r\n collisionRuntimeParams.mySplitMovementStepsPerformed = 1;\r\n collisionRuntimeParams.mySplitMovementStop = false;\r\n collisionRuntimeParams.mySplitMovementMovementChecked.vec3_copy(movement);\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n collisionRuntimeParams.myOffsetUp = offsetTransformQuat.quat2_getUp(collisionRuntimeParams.myOffsetUp);\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalMovement.vec3_copy(movement);\r\n collisionRuntimeParams.myFixedMovement.vec3_copy(movement);\r\n\r\n collisionRuntimeParams.myNewPosition = collisionRuntimeParams.myOriginalPosition.vec3_add(collisionRuntimeParams.myFixedMovement, collisionRuntimeParams.myNewPosition);\r\n\r\n collisionRuntimeParams.myIsMove = true;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForTeleportCollisionCheckDisabled = function () {\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n return function _setRuntimeParamsForTeleportCollisionCheckDisabled(position, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n collisionRuntimeParams.reset();\r\n\r\n collisionRuntimeParams.myRealIsOnGround = true;\r\n collisionRuntimeParams.myIsOnGround = true;\r\n collisionRuntimeParams.myGroundCollisionHit.reset();\r\n collisionRuntimeParams.myGroundAngle = 0;\r\n collisionRuntimeParams.myGroundPerceivedAngle = 0;\r\n collisionRuntimeParams.myGroundNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myGroundHitMaxAngle = collisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundDistance = 0;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myRealIsOnCeiling = false;\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n collisionRuntimeParams.myCeilingCollisionHit.reset();\r\n collisionRuntimeParams.myCeilingAngle = 0;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = 0;\r\n collisionRuntimeParams.myCeilingNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = collisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingDistance = 0;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n collisionRuntimeParams.myOffsetUp = offsetTransformQuat.quat2_getUp(collisionRuntimeParams.myOffsetUp);\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_copy(position);\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_copy(position);\r\n\r\n collisionRuntimeParams.myNewPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n\r\n collisionRuntimeParams.myIsTeleport = true;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForPositionCheckCollisionCheckDisabled = function () {\r\n let feetPosition = vec3_create();\r\n return function _setRuntimeParamsForPositionCheckCollisionCheckDisabled(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n feetPosition = transformQuat.quat2_getPosition(feetPosition);\r\n this._setRuntimeParamsForTeleportCollisionCheckDisabled(feetPosition, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n\r\n collisionRuntimeParams.myIsPositionOk = true;\r\n collisionRuntimeParams.myIsPositionCheck = true;\r\n\r\n collisionRuntimeParams.myOriginalPositionCheckPosition.vec3_copy(collisionRuntimeParams.myOriginalTeleportPosition);\r\n collisionRuntimeParams.myFixedPositionCheckPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n collisionRuntimeParams.myIsPositionCheckAllowAdjustments = allowFix;\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myTeleportCanceled = false;\r\n collisionRuntimeParams.myIsTeleport = false;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled = function () {\r\n return function _setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n collisionRuntimeParams.myRealIsOnGround = true;\r\n collisionRuntimeParams.myIsOnGround = true;\r\n collisionRuntimeParams.myGroundCollisionHit.reset();\r\n collisionRuntimeParams.myGroundAngle = 0;\r\n collisionRuntimeParams.myGroundPerceivedAngle = 0;\r\n collisionRuntimeParams.myGroundNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myGroundHitMaxAngle = collisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundDistance = 0;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myRealIsOnCeiling = false;\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n collisionRuntimeParams.myCeilingCollisionHit.reset();\r\n collisionRuntimeParams.myCeilingAngle = 0;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = 0;\r\n collisionRuntimeParams.myCeilingNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = collisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingDistance = 0;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = false;\r\n };\r\n}();", "import { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckBase } from \"./collision_check_base.js\";\r\n\r\nexport class CollisionCheckSurface extends CollisionCheckBase {\r\n\r\n updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled(transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n computeSurfacePerceivedAngle(surfaceNormal, forward, up, isGround = true) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _postSurfaceCheck(fixedHorizontalMovement, originalVerticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _surfaceTooSteep(up, direction, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _adjustVerticalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedVerticalMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _adjustHorizontalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedHorizontalMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _computeExtraSurfaceVerticalMovement(horizontalMovement, up, collisionCheckParams, collisionRuntimeParams, outExtraSurfaceVerticalMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _gatherSurfaceInfo(feetPosition, height, up, forwardForPerceivedAngle, forwardForVertical, isGround, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckSurface.prototype._updateSurfaceInfo = function () {\r\n let transformUp = vec3_create();\r\n let transformForward = vec3_create();\r\n let feetPosition = vec3_create();\r\n\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n\r\n let forwardForPerceivedAngle = vec3_create();\r\n let forwardForVertical = vec3_create();\r\n\r\n let zAxis = vec3_create(0, 0, 1);\r\n let xAxis = vec3_create(1, 0, 0);\r\n return function _updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n\r\n transformUp = offsetTransformQuat.quat2_getUp(transformUp);\r\n transformForward = offsetTransformQuat.quat2_getForward(transformForward);\r\n feetPosition = offsetTransformQuat.quat2_getPosition(feetPosition);\r\n\r\n let height = collisionCheckParams.myHeight;\r\n height = height - 0.00001; // This makes it easier to setup things at the same exact height of a character so that it can go under it\r\n if (height < 0.00001) {\r\n height = 0;\r\n }\r\n\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n forwardForVertical.vec3_copy(transformForward);\r\n } else {\r\n if (collisionCheckParams.myCheckVerticalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForVertical.vec3_copy(xAxis);\r\n } else {\r\n forwardForVertical.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForVertical = forwardForVertical.vec3_removeComponentAlongAxis(transformUp, forwardForVertical);\r\n forwardForVertical = forwardForVertical.vec3_normalize(forwardForVertical);\r\n\r\n if (forwardForVertical.vec_equals(collisionCheckParams.myCheckVerticalFixedForward, 0.00001)) {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled) {\r\n this._gatherSurfaceInfo(feetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled) {\r\n this._gatherSurfaceInfo(feetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._postSurfaceCheck = function () {\r\n let horizontalDirection = vec3_create();\r\n return function _postSurfaceCheck(fixedHorizontalMovement, originalVerticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n\r\n let isVerticalMovementZero = originalVerticalMovement.vec3_isZero(0.00001);\r\n let isVerticalMovemenDownward = Math.pp_sign(originalVerticalMovement.vec3_lengthSigned(transformUp), -1) < 0;\r\n\r\n let horizontalMovementIsZero = fixedHorizontalMovement.vec3_isZero(0.00001);\r\n horizontalDirection = fixedHorizontalMovement.vec3_normalize(horizontalDirection);\r\n\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(collisionRuntimeParams.myGroundNormal, horizontalDirection, transformUp, true);\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(collisionRuntimeParams.myCeilingNormal, horizontalDirection, transformUp, false);\r\n\r\n let mustRemainOnGroundOk = true;\r\n if (collisionCheckParams.myMustStayOnGround) {\r\n if (previousCollisionRuntimeParams.myIsOnGround && !collisionRuntimeParams.myIsOnGround && (isVerticalMovementZero || isVerticalMovemenDownward)) {\r\n mustRemainOnGroundOk = false;\r\n }\r\n }\r\n\r\n let mustRemainOnCeilingOk = true;\r\n if (collisionCheckParams.myMustStayOnCeiling) {\r\n if (previousCollisionRuntimeParams.myIsOnCeiling && !collisionRuntimeParams.myIsOnCeiling && (isVerticalMovementZero || isVerticalMovemenDownward)) {\r\n mustRemainOnCeilingOk = false;\r\n }\r\n }\r\n\r\n let mustStayBelowGroundAngleOk = true;\r\n if (collisionCheckParams.myMustStayBelowGroundAngleDownhill != null || collisionCheckParams.myMustStayBelowIgnorableGroundAngleDownhill) {\r\n let minAngle = null;\r\n if (!collisionCheckParams.myMustStayBelowIgnorableGroundAngleDownhill) {\r\n minAngle = collisionCheckParams.myMustStayBelowGroundAngleDownhill;\r\n } else if (collisionCheckParams.myMustStayBelowGroundAngleDownhill == null) {\r\n minAngle = collisionCheckParams.myGroundAngleToIgnore;\r\n } else {\r\n minAngle = Math.min(collisionCheckParams.myMustStayBelowGroundAngleDownhill, collisionCheckParams.myGroundAngleToIgnore);\r\n }\r\n\r\n if (!horizontalMovementIsZero && groundPerceivedAngle < 0 && previousCollisionRuntimeParams.myIsOnGround &&\r\n previousCollisionRuntimeParams.myGroundAngle <= minAngle &&\r\n collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle > minAngle + 0.0001) {\r\n mustStayBelowGroundAngleOk = false;\r\n }\r\n }\r\n\r\n let mustStayBelowCeilingAngleOk = true;\r\n if (collisionCheckParams.myMustStayBelowCeilingAngleDownhill != null || collisionCheckParams.myMustStayBelowIgnorableCeilingAngleDownhill) {\r\n let minAngle = null;\r\n if (!collisionCheckParams.myMustStayBelowIgnorableCeilingAngleDownhill) {\r\n minAngle = collisionCheckParams.myMustStayBelowCeilingAngleDownhill;\r\n } else if (collisionCheckParams.myMustStayBelowCeilingAngleDownhill == null) {\r\n minAngle = collisionCheckParams.myCeilingAngleToIgnore;\r\n } else {\r\n minAngle = Math.min(collisionCheckParams.myMustStayBelowCeilingAngleDownhill, collisionCheckParams.myCeilingAngleToIgnore);\r\n }\r\n\r\n if (!horizontalMovementIsZero && groundPerceivedAngle < 0 && previousCollisionRuntimeParams.myIsOnCeiling &&\r\n previousCollisionRuntimeParams.myCeilingAngle <= minAngle &&\r\n collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle > minAngle + 0.0001) {\r\n mustStayBelowCeilingAngleOk = false;\r\n }\r\n }\r\n\r\n let mustStayOnGroundHitAngleOk = true;\r\n if (collisionCheckParams.myMovementMustStayOnGroundHitAngle != null) {\r\n if (!horizontalMovementIsZero && previousCollisionRuntimeParams.myIsOnGround &&\r\n previousCollisionRuntimeParams.myGroundHitMaxAngle <= collisionCheckParams.myMovementMustStayOnGroundHitAngle &&\r\n collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundHitMaxAngle > collisionCheckParams.myMovementMustStayOnGroundHitAngle + 0.0001) {\r\n mustStayOnGroundHitAngleOk = false;\r\n }\r\n }\r\n\r\n let mustStayOnCeilingHitAngleOk = true;\r\n if (collisionCheckParams.myMovementMustStayOnCeilingHitAngle != null) {\r\n if (!horizontalMovementIsZero && previousCollisionRuntimeParams.myIsOnCeiling &&\r\n previousCollisionRuntimeParams.myCeilingHitMaxAngle <= collisionCheckParams.myMovementMustStayOnCeilingHitAngle &&\r\n collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingHitMaxAngle > collisionCheckParams.myMovementMustStayOnCeilingHitAngle + 0.0001) {\r\n mustStayOnCeilingHitAngleOk = false;\r\n }\r\n }\r\n\r\n let isOnValidGroundAngleUphill = true;\r\n let isOnValidGroundAngleDownhill = true;\r\n if (collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle > collisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n if (previousCollisionRuntimeParams.myIsOnGround && !horizontalMovementIsZero) {\r\n if (groundPerceivedAngle > 0) {\r\n isOnValidGroundAngleUphill = false;\r\n if (collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myGroundAngle <= collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n isOnValidGroundAngleUphill = Math.abs(groundPerceivedAngle) <= collisionCheckParams.myGroundAngleToIgnore + 0.0001;\r\n }\r\n } else if (groundPerceivedAngle < 0) {\r\n if (previousCollisionRuntimeParams.myGroundAngle <= collisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n if (collisionCheckParams.myMustStayOnValidGroundAngleDownhill) {\r\n isOnValidGroundAngleDownhill = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n let isOnValidCeilingAngleUphill = true;\r\n let isOnValidCeilingAngleDownhill = true;\r\n if (collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle > collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n if (previousCollisionRuntimeParams.myIsOnCeiling && !horizontalMovementIsZero) {\r\n if (ceilingPerceivedAngle > 0) {\r\n isOnValidCeilingAngleUphill = false;\r\n if (collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n isOnValidCeilingAngleUphill = Math.abs(ceilingPerceivedAngle) <= collisionCheckParams.myCeilingAngleToIgnore + 0.0001;\r\n }\r\n } else if (ceilingPerceivedAngle < 0) {\r\n if (previousCollisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n if (collisionCheckParams.myMustStayOnValidCeilingAngleDownhill) {\r\n isOnValidCeilingAngleDownhill = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return mustRemainOnGroundOk && mustRemainOnCeilingOk && mustStayBelowGroundAngleOk && mustStayBelowCeilingAngleOk && mustStayOnGroundHitAngleOk && mustStayOnCeilingHitAngleOk && isOnValidGroundAngleUphill && isOnValidGroundAngleDownhill && isOnValidCeilingAngleUphill && isOnValidCeilingAngleDownhill;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._surfaceTooSteep = function () {\r\n let surfaceSteepResults = [false, false];\r\n return function _surfaceTooSteep(up, direction, collisionCheckParams, collisionRuntimeParams) {\r\n let groundTooSteep = false;\r\n let ceilingTooSteep = false;\r\n\r\n if (collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle > collisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myGroundNormal,\r\n direction, up, true);\r\n\r\n groundTooSteep = groundPerceivedAngle > 0;\r\n if (groundTooSteep &&\r\n collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myGroundAngle <= collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n groundTooSteep = Math.abs(groundPerceivedAngle) > collisionCheckParams.myGroundAngleToIgnore + 0.0001;\r\n }\r\n }\r\n\r\n if (!groundTooSteep) {\r\n if (collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle > collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myCeilingNormal,\r\n direction, up, false);\r\n\r\n ceilingTooSteep = ceilingPerceivedAngle > 0;\r\n if (ceilingTooSteep &&\r\n collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n ceilingTooSteep = Math.abs(ceilingPerceivedAngle) > collisionCheckParams.myCeilingAngleToIgnore + 0.0001;\r\n }\r\n }\r\n }\r\n\r\n surfaceSteepResults[0] = groundTooSteep;\r\n surfaceSteepResults[1] = ceilingTooSteep;\r\n return surfaceSteepResults;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._adjustVerticalMovementWithSurface = function () {\r\n let horizontalDirection = vec3_create();\r\n let extraVerticalMovement = vec3_create();\r\n return function _adjustVerticalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedVerticalMovement) {\r\n outAdjustedVerticalMovement.vec3_copy(verticalMovement);\r\n\r\n if (horizontalMovement.vec3_isZero(0.00001)) {\r\n return outAdjustedVerticalMovement;\r\n }\r\n\r\n let extraVerticalLength = 0;\r\n horizontalDirection = horizontalMovement.vec3_normalize(horizontalDirection);\r\n if (previousCollisionRuntimeParams.myIsOnGround) {\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n previousCollisionRuntimeParams.myGroundNormal,\r\n horizontalDirection, up, true);\r\n\r\n let groundExtraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(groundPerceivedAngle)));\r\n groundExtraVerticalLength *= Math.pp_sign(groundPerceivedAngle);\r\n\r\n if (Math.abs(groundExtraVerticalLength) > 0.00001) {\r\n if (groundPerceivedAngle > 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle == null || Math.abs(groundPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle == null || previousCollisionRuntimeParams.myGroundAngle <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle)) {\r\n extraVerticalLength = groundExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = true;\r\n }\r\n } else if (groundPerceivedAngle < 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle == null || Math.abs(groundPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle == null || previousCollisionRuntimeParams.myGroundAngle <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle)) {\r\n extraVerticalLength = groundExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (previousCollisionRuntimeParams.myIsOnCeiling) {\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n previousCollisionRuntimeParams.myCeilingNormal,\r\n horizontalDirection, up, false);\r\n\r\n let ceilingExtraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(ceilingPerceivedAngle)));\r\n ceilingExtraVerticalLength *= Math.pp_sign(ceilingPerceivedAngle);\r\n\r\n if (Math.abs(ceilingExtraVerticalLength) > 0.00001) {\r\n let sameSignThanGround = Math.pp_sign(extraVerticalLength) == Math.pp_sign(ceilingExtraVerticalLength);\r\n if (extraVerticalLength == 0 || (sameSignThanGround && Math.abs(ceilingExtraVerticalLength) > Math.abs(extraVerticalLength))) {\r\n if (ceilingPerceivedAngle > 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxPerceivedAngle == null || Math.abs(ceilingPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle == null || previousCollisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle)) {\r\n extraVerticalLength = ceilingExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = true;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n }\r\n } else if (ceilingPerceivedAngle < 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxPerceivedAngle == null || Math.abs(ceilingPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle == null || previousCollisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle)) {\r\n extraVerticalLength = ceilingExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = true;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (Math.abs(extraVerticalLength) > 0.00001) {\r\n let verticalMovementLength = verticalMovement.vec3_lengthSigned(up);\r\n let sameSignThanExtra = Math.pp_sign(extraVerticalLength) == Math.pp_sign(verticalMovementLength);\r\n extraVerticalMovement = up.vec3_scale(extraVerticalLength, extraVerticalMovement);\r\n if (verticalMovement.vec3_isZero(0.00001)) {\r\n outAdjustedVerticalMovement.vec3_copy(extraVerticalMovement);\r\n } else if (sameSignThanExtra) {\r\n outAdjustedVerticalMovement = verticalMovement.vec3_add(extraVerticalMovement, outAdjustedVerticalMovement);\r\n } else if (!sameSignThanExtra && (\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill ||\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill)) {\r\n // Do not add for downhill, since it means the vertical movement was about to go away from surface and u should not cancel that\r\n outAdjustedVerticalMovement = verticalMovement.vec3_add(extraVerticalMovement, outAdjustedVerticalMovement);\r\n } else {\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = false;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = false;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n }\r\n }\r\n\r\n if (outAdjustedVerticalMovement.vec3_isZero(0.000001)) {\r\n outAdjustedVerticalMovement.vec3_zero();\r\n }\r\n\r\n return outAdjustedVerticalMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._adjustHorizontalMovementWithSurface = function () {\r\n let extraHorizontalMovement = vec3_create();\r\n let groundHorizontalDirection = vec3_create();\r\n let ceilingHorizontalDirection = vec3_create();\r\n let scaledCeilingHorizontalDirection = vec3_create();\r\n let scaledCeilingHorizontalDirectionAlongGroundHorizontalDirection = vec3_create();\r\n let scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection = vec3_create();\r\n return function _adjustHorizontalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedHorizontalMovement) {\r\n outAdjustedHorizontalMovement.vec3_copy(horizontalMovement);\r\n\r\n if (verticalMovement.vec3_isZero(0.00001)) {\r\n return outAdjustedHorizontalMovement;\r\n }\r\n\r\n let isMovementDownward = !verticalMovement.vec3_isConcordant(up);\r\n\r\n extraHorizontalMovement.vec3_zero();\r\n groundHorizontalDirection.vec3_zero();\r\n\r\n if (previousCollisionRuntimeParams.myIsOnGround) {\r\n groundHorizontalDirection = previousCollisionRuntimeParams.myGroundNormal.vec3_removeComponentAlongAxis(up, groundHorizontalDirection);\r\n if (!groundHorizontalDirection.vec3_isZero(0.00001)) {\r\n groundHorizontalDirection.vec3_normalize(groundHorizontalDirection);\r\n\r\n let groundExtraHorizontalLength = verticalMovement.vec3_length() / Math.tan(Math.pp_toRadians(previousCollisionRuntimeParams.myGroundAngle));\r\n groundExtraHorizontalLength *= (isMovementDownward) ? 1 : -1;\r\n\r\n if (Math.abs(groundExtraHorizontalLength) > 0.00001) {\r\n if (isMovementDownward) {\r\n if (collisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhill &&\r\n (collisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle == null || previousCollisionRuntimeParams.myGroundAngle >= collisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle)) {\r\n extraHorizontalMovement = groundHorizontalDirection.vec3_scale(groundExtraHorizontalLength, extraHorizontalMovement);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (previousCollisionRuntimeParams.myIsOnCeiling) {\r\n ceilingHorizontalDirection = previousCollisionRuntimeParams.myCeilingNormal.vec3_removeComponentAlongAxis(up, ceilingHorizontalDirection);\r\n if (!ceilingHorizontalDirection.vec3_isZero(0.00001)) {\r\n ceilingHorizontalDirection.vec3_normalize(ceilingHorizontalDirection);\r\n\r\n let ceilingExtraHorizontalLength = verticalMovement.vec3_length() / Math.tan(Math.pp_toRadians(previousCollisionRuntimeParams.myCeilingAngle));\r\n ceilingExtraHorizontalLength *= (isMovementDownward) ? -1 : 1;\r\n\r\n if (Math.abs(ceilingExtraHorizontalLength) > 0.00001) {\r\n let sameDirectionAsGround = ceilingHorizontalDirection.vec3_isConcordant(groundHorizontalDirection);\r\n if (extraHorizontalMovement.vec3_isZero() || sameDirectionAsGround) {\r\n if (!isMovementDownward) {\r\n if (collisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhill &&\r\n (collisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle == null || previousCollisionRuntimeParams.myCeilingAngle >= collisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle)) {\r\n scaledCeilingHorizontalDirection = ceilingHorizontalDirection.vec3_scale(ceilingExtraHorizontalLength, scaledCeilingHorizontalDirection);\r\n if (!groundHorizontalDirection.vec3_isZero()) {\r\n scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection = scaledCeilingHorizontalDirection.vec3_removeComponentAlongAxis(scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection);\r\n scaledCeilingHorizontalDirectionAlongGroundHorizontalDirection = scaledCeilingHorizontalDirection.vec3_componentAlongAxis(scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection);\r\n\r\n if (scaledCeilingHorizontalDirectionAlongGroundHorizontalDirection.vec3_isFartherAlongAxis(extraHorizontalMovement, groundHorizontalDirection)) {\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = false;\r\n extraHorizontalMovement.vec3_copy(scaledCeilingHorizontalDirection);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = true;\r\n } else if (!scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection.vec3_isZero(0.00001)) {\r\n extraHorizontalMovement = extraHorizontalMovement.vec3_add(scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection, extraHorizontalMovement);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = true;\r\n }\r\n } else {\r\n extraHorizontalMovement.vec3_copy(scaledCeilingHorizontalDirection);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!extraHorizontalMovement.vec3_isZero()) {\r\n if (horizontalMovement.vec3_isZero(0.00001)) {\r\n outAdjustedHorizontalMovement.vec3_copy(extraHorizontalMovement);\r\n } else if (extraHorizontalMovement.vec3_isConcordant(horizontalMovement)) {\r\n outAdjustedHorizontalMovement = horizontalMovement.vec3_add(extraHorizontalMovement, outAdjustedHorizontalMovement);\r\n } else {\r\n outAdjustedHorizontalMovement = horizontalMovement.vec3_add(extraHorizontalMovement, outAdjustedHorizontalMovement);\r\n }\r\n }\r\n\r\n if (outAdjustedHorizontalMovement.vec3_isZero(0.000001)) {\r\n outAdjustedHorizontalMovement.vec3_zero();\r\n }\r\n\r\n return outAdjustedHorizontalMovement;\r\n };\r\n}();\r\n\r\n// Useless now\r\nCollisionCheckSurface.prototype._computeExtraSurfaceVerticalMovement = function () {\r\n let direction = vec3_create();\r\n let tempVector = vec3_create();\r\n return function _computeExtraSurfaceVerticalMovement(horizontalMovement, up, collisionCheckParams, collisionRuntimeParams, outExtraSurfaceVerticalMovement) {\r\n outExtraSurfaceVerticalMovement.vec3_zero();\r\n\r\n if (!horizontalMovement.vec3_isZero()) {\r\n if (collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle != 0) {\r\n direction = horizontalMovement.vec3_normalize(direction);\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myGroundNormal,\r\n direction, up, true);\r\n\r\n let extraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(groundPerceivedAngle)));\r\n extraVerticalLength *= Math.pp_sign(groundPerceivedAngle);\r\n\r\n if (Math.abs(extraVerticalLength) > 0.00001 && (collisionCheckParams.mySnapOnGroundEnabled || extraVerticalLength > 0)) {\r\n outExtraSurfaceVerticalMovement.vec3_add(up.vec3_scale(extraVerticalLength, tempVector), outExtraSurfaceVerticalMovement);\r\n }\r\n } else if (collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle != 0) {\r\n direction = horizontalMovement.vec3_normalize(direction);\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myCeilingNormal,\r\n direction, up, false);\r\n\r\n let extraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(ceilingPerceivedAngle)));\r\n extraVerticalLength *= Math.pp_sign(ceilingPerceivedAngle);\r\n extraVerticalLength *= -1;\r\n\r\n if (Math.abs(extraVerticalLength) > 0.00001 && (collisionCheckParams.mySnapOnCeilingEnabled || extraVerticalLength < 0)) {\r\n outExtraSurfaceVerticalMovement.vec3_add(up.vec3_scale(extraVerticalLength, tempVector), outExtraSurfaceVerticalMovement);\r\n }\r\n }\r\n }\r\n\r\n return outExtraSurfaceVerticalMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._gatherSurfaceInfo = function () {\r\n let verticalDirection = vec3_create();\r\n let startOffset = vec3_create();\r\n let endOffset = vec3_create();\r\n let heightOffset = vec3_create();\r\n let smallOffset = vec3_create();\r\n let smallStartPosition = vec3_create();\r\n let smallEndPosition = vec3_create();\r\n let surfaceNormal = vec3_create();\r\n let surfaceHitMaxNormal = vec3_create();\r\n let hitFromCurrentPosition = vec3_create();\r\n let startPosition = vec3_create();\r\n let endPosition = vec3_create();\r\n let direction = vec3_create();\r\n\r\n let surfaceCollisionHit = new RaycastHit();\r\n let surfaceCollisionHitForBaseInsideCollision = new RaycastHit();\r\n return function _gatherSurfaceInfo(feetPosition, height, up, forwardForPerceivedAngle, forwardForVertical, isGround, collisionCheckParams, collisionRuntimeParams) {\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && ((isGround && collisionCheckParams.myDebugGroundInfoEnabled) || (!isGround && collisionCheckParams.myDebugCeilingInfoEnabled));\r\n\r\n let checkPositions = this._getVerticalCheckPositions(feetPosition, up, forwardForVertical, collisionCheckParams, collisionRuntimeParams);\r\n\r\n verticalDirection.vec3_copy(up);\r\n let distanceToBeOnSurface = collisionCheckParams.myDistanceToBeOnGround;\r\n let distanceToComputeSurfaceInfo = collisionCheckParams.myDistanceToComputeGroundInfo;\r\n let distanceToFindSurfaceDistance = collisionCheckParams.myFindGroundDistanceMaxOutsideDistance;\r\n let distanceToCollectCollisionHit = collisionCheckParams.myCollectGroundCollisionHitOutsideDistance;\r\n let verticalFixToBeOnSurface = collisionCheckParams.myVerticalFixToBeOnGround;\r\n let verticalFixToComputeSurfaceInfo = collisionCheckParams.myVerticalFixToComputeGroundInfo;\r\n let verticalFixToFindSurfaceDistance = collisionCheckParams.myFindGroundDistanceMaxInsideDistance;\r\n let verticalFixToCollectCollisionHit = collisionCheckParams.myCollectGroundCollisionHitInsideDistance;\r\n let isOnSurfaceIfInsideHit = collisionCheckParams.myIsOnGroundIfInsideHit;\r\n let isBaseInsideCollisionCheckEnabled = collisionCheckParams.myGroundIsBaseInsideCollisionCheckEnabled;\r\n if (!isGround) {\r\n verticalDirection.vec3_negate(verticalDirection);\r\n distanceToBeOnSurface = collisionCheckParams.myDistanceToBeOnCeiling;\r\n distanceToComputeSurfaceInfo = collisionCheckParams.myDistanceToComputeCeilingInfo;\r\n distanceToFindSurfaceDistance = collisionCheckParams.myFindCeilingDistanceMaxOutsideDistance;\r\n distanceToCollectCollisionHit = collisionCheckParams.myCollectCeilingCollisionHitOutsideDistance;\r\n verticalFixToBeOnSurface = collisionCheckParams.myVerticalFixToBeOnCeiling;\r\n verticalFixToComputeSurfaceInfo = collisionCheckParams.myVerticalFixToComputeCeilingInfo;\r\n verticalFixToFindSurfaceDistance = collisionCheckParams.myFindCeilingDistanceMaxInsideDistance;\r\n verticalFixToCollectCollisionHit = collisionCheckParams.myCollectCeilingCollisionHitInsideDistance;\r\n isOnSurfaceIfInsideHit = collisionCheckParams.myIsOnCeilingIfInsideHit;\r\n isBaseInsideCollisionCheckEnabled = collisionCheckParams.myCeilingIsBaseInsideCollisionCheckEnabled;\r\n }\r\n\r\n startOffset = verticalDirection.vec3_scale(Math.max(verticalFixToBeOnSurface, verticalFixToComputeSurfaceInfo, verticalFixToFindSurfaceDistance, 0.00001), startOffset);\r\n endOffset = verticalDirection.vec3_negate(endOffset).vec3_scale(Math.max(distanceToBeOnSurface, distanceToComputeSurfaceInfo, distanceToFindSurfaceDistance, 0.00001), endOffset);\r\n\r\n heightOffset.vec3_zero();\r\n if (!isGround) {\r\n heightOffset = up.vec3_scale(height, heightOffset);\r\n }\r\n\r\n smallOffset = verticalDirection.vec3_scale(0.0001, smallOffset);\r\n\r\n let isOnSurface = false;\r\n let isActuallyOnSurface = false;\r\n let surfaceAngle = 0;\r\n let surfacePerceivedAngle = 0;\r\n surfaceNormal.vec3_zero();\r\n surfaceCollisionHit.reset();\r\n surfaceCollisionHitForBaseInsideCollision.reset();\r\n\r\n let surfaceHitMaxAngle = 0;\r\n surfaceHitMaxNormal.vec3_zero();\r\n\r\n let surfaceDistance = null;\r\n let surfaceDistanceForCollectCollisionHit = null;\r\n let isBaseInsideCollision = checkPositions.length > 0;\r\n\r\n for (let i = 0; i < checkPositions.length; i++) {\r\n let currentPosition = checkPositions[i];\r\n currentPosition.vec3_add(heightOffset, currentPosition);\r\n\r\n let baseHitIsInsideCollision = false;\r\n if (isBaseInsideCollisionCheckEnabled) {\r\n smallStartPosition = currentPosition.vec3_add(smallOffset, smallStartPosition);\r\n smallEndPosition = currentPosition.vec3_sub(smallOffset, smallEndPosition);\r\n\r\n let origin = smallStartPosition;\r\n direction = smallEndPosition.vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, false, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.isColliding()) {\r\n baseHitIsInsideCollision = raycastResult.myHits[0].myInsideCollision;\r\n surfaceCollisionHitForBaseInsideCollision.copy(raycastResult.myHits[0]);\r\n }\r\n }\r\n\r\n isBaseInsideCollision &&= baseHitIsInsideCollision;\r\n\r\n if (!baseHitIsInsideCollision) {\r\n startPosition = currentPosition.vec3_add(startOffset, startPosition);\r\n endPosition = currentPosition.vec3_add(endOffset, endPosition);\r\n\r\n let origin = startPosition;\r\n direction = endPosition.vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, true, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.isColliding()) {\r\n hitFromCurrentPosition = raycastResult.myHits[0].myPosition.vec3_sub(currentPosition, hitFromCurrentPosition);\r\n let hitFromCurrentPositionLength = hitFromCurrentPosition.vec3_lengthSigned(verticalDirection);\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToBeOnSurface + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToBeOnSurface + 0.00001)) {\r\n isOnSurface = true;\r\n isActuallyOnSurface = true;\r\n }\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToComputeSurfaceInfo + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToComputeSurfaceInfo + 0.00001)) {\r\n let currentSurfaceNormal = raycastResult.myHits[0].myNormal;\r\n surfaceNormal.vec3_add(currentSurfaceNormal, surfaceNormal);\r\n\r\n let surfaceHitAngle = currentSurfaceNormal.vec3_angle(verticalDirection);\r\n if (surfaceHitAngle > surfaceHitMaxAngle) {\r\n surfaceHitMaxAngle = surfaceHitAngle;\r\n surfaceHitMaxNormal.vec3_copy(currentSurfaceNormal);\r\n }\r\n }\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToFindSurfaceDistance + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToFindSurfaceDistance + 0.00001)) {\r\n if (surfaceDistance == null) {\r\n surfaceDistance = -hitFromCurrentPositionLength;\r\n } else {\r\n if (Math.abs(hitFromCurrentPositionLength) < Math.abs(surfaceDistance)) {\r\n surfaceDistance = -hitFromCurrentPositionLength;\r\n }\r\n }\r\n }\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToCollectCollisionHit + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToCollectCollisionHit + 0.00001)) {\r\n if (surfaceDistanceForCollectCollisionHit == null) {\r\n surfaceDistanceForCollectCollisionHit = -hitFromCurrentPositionLength;\r\n surfaceCollisionHit.copy(raycastResult.myHits[0]);\r\n } else {\r\n if (Math.abs(hitFromCurrentPositionLength) < Math.abs(surfaceDistanceForCollectCollisionHit)) {\r\n surfaceDistanceForCollectCollisionHit = -hitFromCurrentPositionLength;\r\n surfaceCollisionHit.copy(raycastResult.myHits[0]);\r\n }\r\n }\r\n }\r\n }\r\n } else if (isOnSurfaceIfInsideHit) {\r\n if (!isOnSurface) {\r\n isOnSurface = true;\r\n if (!surfaceCollisionHit.isValid()) {\r\n surfaceCollisionHit.copy(surfaceCollisionHitForBaseInsideCollision);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!surfaceNormal.vec3_isZero()) {\r\n surfaceNormal.vec3_normalize(surfaceNormal);\r\n surfaceAngle = surfaceNormal.vec3_angle(verticalDirection);\r\n\r\n if (surfaceAngle <= 0.0001) {\r\n surfaceAngle = 0;\r\n surfaceNormal.vec3_copy(verticalDirection);\r\n } else if (surfaceAngle >= 180 - 0.0001) {\r\n surfaceAngle = 180;\r\n surfaceNormal = verticalDirection.vec3_negate(surfaceNormal);\r\n }\r\n\r\n surfacePerceivedAngle = this.computeSurfacePerceivedAngle(surfaceNormal, forwardForPerceivedAngle, up, isGround);\r\n }\r\n\r\n if (isGround) {\r\n collisionRuntimeParams.myRealIsOnGround = isOnSurface;\r\n\r\n collisionRuntimeParams.myGroundCollisionHit.copy(surfaceCollisionHit);\r\n\r\n collisionRuntimeParams.myGroundAngle = surfaceAngle;\r\n collisionRuntimeParams.myGroundPerceivedAngle = surfacePerceivedAngle;\r\n collisionRuntimeParams.myGroundNormal.vec3_copy(surfaceNormal);\r\n\r\n collisionRuntimeParams.myGroundHitMaxAngle = surfaceHitMaxAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(surfaceHitMaxNormal);\r\n\r\n collisionRuntimeParams.myGroundDistance = surfaceDistance;\r\n\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = isBaseInsideCollision;\r\n\r\n if (isOnSurface && (collisionCheckParams.myIsOnGroundMaxSurfaceAngle == null || collisionRuntimeParams.myGroundAngle <= collisionCheckParams.myIsOnGroundMaxSurfaceAngle)) {\r\n collisionRuntimeParams.myIsOnGround = true;\r\n } else {\r\n collisionRuntimeParams.myIsOnGround = false;\r\n }\r\n\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = isOnSurface && !isActuallyOnSurface;\r\n } else {\r\n collisionRuntimeParams.myRealIsOnCeiling = isOnSurface;\r\n\r\n collisionRuntimeParams.myCeilingCollisionHit.copy(surfaceCollisionHit);\r\n\r\n collisionRuntimeParams.myCeilingAngle = surfaceAngle;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = surfacePerceivedAngle;\r\n collisionRuntimeParams.myCeilingNormal.vec3_copy(surfaceNormal);\r\n\r\n collisionRuntimeParams.myCeilingHitMaxAngle = surfaceHitMaxAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(surfaceHitMaxNormal);\r\n\r\n collisionRuntimeParams.myCeilingDistance = surfaceDistance;\r\n\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = isBaseInsideCollision;\r\n\r\n if (isOnSurface && (collisionCheckParams.myIsOnCeilingMaxSurfaceAngle == null || collisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myIsOnCeilingMaxSurfaceAngle)) {\r\n collisionRuntimeParams.myIsOnCeiling = true;\r\n } else {\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n }\r\n\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = isOnSurface && !isActuallyOnSurface;\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype.computeSurfacePerceivedAngle = function () {\r\n let forwardOnSurface = vec3_create();\r\n let verticalDirection = vec3_create();\r\n return function computeSurfacePerceivedAngle(surfaceNormal, forward, up, isGround = true) {\r\n let surfacePerceivedAngle = 0;\r\n\r\n verticalDirection.vec3_copy(up);\r\n if (!isGround) {\r\n verticalDirection.vec3_negate(verticalDirection);\r\n }\r\n\r\n let surfaceAngle = surfaceNormal.vec3_angle(verticalDirection);\r\n if (surfaceAngle <= Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 0;\r\n } else if (surfaceAngle >= 180 - Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 180;\r\n }\r\n\r\n forwardOnSurface = forward.vec3_projectOnPlaneAlongAxis(surfaceNormal, up, forwardOnSurface);\r\n surfacePerceivedAngle = forwardOnSurface.vec3_angle(forward);\r\n\r\n let isFartherOnUp = forwardOnSurface.vec3_isFartherAlongAxis(forward, up);\r\n if ((!isFartherOnUp && isGround) || (isFartherOnUp && !isGround)) {\r\n surfacePerceivedAngle *= -1;\r\n }\r\n\r\n if (Math.abs(surfacePerceivedAngle) >= surfaceAngle) {\r\n if (surfaceAngle != 0 && surfaceAngle != 180) {\r\n surfacePerceivedAngle = surfaceAngle * Math.pp_sign(surfacePerceivedAngle);\r\n } else {\r\n surfacePerceivedAngle = surfaceAngle;\r\n }\r\n }\r\n\r\n return surfacePerceivedAngle;\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckSurface } from \"./collision_check_surface.js\";\r\n\r\nexport class CollisionCheckHorizontalBase extends CollisionCheckSurface {\r\n\r\n _horizontalCheckRaycast(startPosition, endPosition, movementDirection, up,\r\n ignoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, fixHitOnCollision,\r\n collisionCheckParams, collisionRuntimeParams, checkAllHits = false, ignoreHitsInsideCollisionIfObjectToIgnore = false) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _ignoreSurfaceAngle(feetPosition, height, movementOrForward, objectsToIgnore, outIgnoredObjects, isGround, isMovementCheck, up, collisionCheckParams, hit, ignoreHitsInsideCollisionIfObjectToIgnore) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalBase.prototype._horizontalCheckRaycast = function () {\r\n let direction = vec3_create();\r\n let fixedFeetPosition = vec3_create();\r\n let fixedHitPosition = vec3_create();\r\n return function _horizontalCheckRaycast(startPosition, endPosition, movementDirection, up,\r\n ignoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, fixHitOnCollision,\r\n collisionCheckParams, collisionRuntimeParams, checkAllHits = false, ignoreHitsInsideCollisionIfObjectToIgnore = false) {\r\n\r\n let origin = startPosition;\r\n direction = endPosition.vec3_sub(origin, direction);\r\n\r\n if (movementDirection != null && !direction.vec3_isConcordant(movementDirection)) {\r\n direction.vec3_negate(direction);\r\n origin = endPosition;\r\n }\r\n\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, ignoreHitsInsideCollision, true, collisionCheckParams, collisionRuntimeParams);\r\n\r\n let isOk = true;\r\n\r\n if (raycastResult.isColliding()) {\r\n let hitsToControl = checkAllHits ? raycastResult.myHits.length : 1;\r\n let validHitIndex = 0;\r\n for (let i = 0; i < hitsToControl; i++) {\r\n let hit = raycastResult.myHits[i];\r\n if ((ignoreGroundAngleCallback == null || !ignoreGroundAngleCallback(hit, ignoreHitsInsideCollisionIfObjectToIgnore)) &&\r\n (ignoreCeilingAngleCallback == null || !ignoreCeilingAngleCallback(hit, ignoreHitsInsideCollisionIfObjectToIgnore))) {\r\n isOk = false;\r\n validHitIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n if (!isOk && validHitIndex > 0) {\r\n for (let i = 0; i < validHitIndex; i++) {\r\n raycastResult.removeHit(0);\r\n }\r\n }\r\n }\r\n\r\n if (!isOk && fixHitOnCollision) {\r\n let hitPosition = raycastResult.myHits[0].myPosition;\r\n\r\n fixedFeetPosition = feetPosition.vec3_copyComponentAlongAxis(hitPosition, up, fixedFeetPosition);\r\n fixedHitPosition.vec3_copy(hitPosition);\r\n\r\n let directionOffsetEpsilonValue = 0.0001;\r\n direction = direction.vec3_componentAlongAxis(up, direction);\r\n if (!direction.vec3_isZero(0.000001)) {\r\n // If the check has an up part move the hit a bit on the that direction\r\n direction.vec3_normalize(direction);\r\n direction.vec3_scale(directionOffsetEpsilonValue, direction);\r\n\r\n // This offset is a workaround for objects that in the editor are aligned but due to clamp get a bit tilted when in the game\r\n // and therefore trying an horizontal cast on the vertical hit position could result in hitting the bottom which in theory should be parallel and therefore not possible\r\n fixedFeetPosition.vec3_add(direction, fixedFeetPosition);\r\n fixedHitPosition.vec3_add(direction, fixedHitPosition);\r\n }\r\n\r\n // Move the hit a bit further to prevent miss\r\n direction = fixedHitPosition.vec3_sub(fixedFeetPosition, direction);\r\n direction.vec3_normalize(direction);\r\n direction.vec3_scale(directionOffsetEpsilonValue, direction);\r\n fixedHitPosition = fixedHitPosition.vec3_add(direction, fixedHitPosition);\r\n\r\n let swapRaycastResult = this._myRaycastResult;\r\n this._myRaycastResult = this._myFixRaycastResult;\r\n\r\n isOk = this._horizontalCheckRaycast(fixedFeetPosition, fixedHitPosition, null, up,\r\n false, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, false,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (this._myRaycastResult.isColliding()) {\r\n this._myFixRaycastResult = swapRaycastResult;\r\n } else {\r\n isOk = false;\r\n this._myRaycastResult = swapRaycastResult;\r\n }\r\n }\r\n\r\n return isOk;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalBase.prototype._ignoreSurfaceAngle = function () {\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n\r\n let movementDirection = vec3_create();\r\n let hitDirection = vec3_create();\r\n let hitMovement = vec3_create();\r\n let projectAlongAxis = vec3_create();\r\n return function _ignoreSurfaceAngle(feetPosition, height, movementOrForward, objectsToIgnore, outIgnoredObjects, isGround, isMovementCheck, up, collisionCheckParams, hit, ignoreHitsInsideCollisionIfObjectToIgnore) {\r\n let isIgnorable = false;\r\n\r\n let surfaceIgnoreHeight = null;\r\n let groundIgnoreHeight = isMovementCheck ? collisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight : collisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight;\r\n let ceilingIgnoreHeight = isMovementCheck ? collisionCheckParams.myHorizontalMovementCeilingAngleIgnoreHeight : collisionCheckParams.myHorizontalPositionCeilingAngleIgnoreHeight;\r\n if (isGround && groundIgnoreHeight != null) {\r\n surfaceIgnoreHeight = Math.pp_clamp(groundIgnoreHeight + 0.0002, 0, height);\r\n } else if (!isGround && ceilingIgnoreHeight != null) {\r\n surfaceIgnoreHeight = Math.pp_clamp(height - ceilingIgnoreHeight - 0.0002, 0, height);\r\n }\r\n\r\n let surfaceIgnoreMaxMovementLeft = null;\r\n if (isMovementCheck) {\r\n if (isGround && collisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft != null) {\r\n surfaceIgnoreMaxMovementLeft = collisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n } else if (!isGround && collisionCheckParams.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft != null) {\r\n surfaceIgnoreMaxMovementLeft = collisionCheckParams.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft;\r\n }\r\n }\r\n\r\n if (!hit.myInsideCollision) {\r\n movementDirection = movementOrForward.vec3_normalize(movementDirection);\r\n\r\n let surfaceAngle = hit.myNormal.vec3_angle(up);\r\n if (!isGround) {\r\n surfaceAngle = 180 - surfaceAngle;\r\n }\r\n\r\n if (isGround && collisionCheckParams.myGroundAngleToIgnore > 0 && (surfaceAngle > collisionCheckParams.myGroundAngleToIgnore + 0.0001)) {\r\n if (collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle != null &&\r\n surfaceAngle <= collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n let perceivedAngle = this.computeSurfacePerceivedAngle(\r\n hit.myNormal,\r\n movementDirection, up, true);\r\n surfaceAngle = Math.abs(perceivedAngle);\r\n }\r\n } else if (!isGround && collisionCheckParams.myCeilingAngleToIgnore > 0 && surfaceAngle > collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n if (collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle != null &&\r\n surfaceAngle <= collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n let perceivedAngle = this.computeSurfacePerceivedAngle(\r\n hit.myNormal,\r\n movementDirection, up, false);\r\n surfaceAngle = Math.abs(perceivedAngle);\r\n }\r\n }\r\n\r\n if ((isGround && (collisionCheckParams.myGroundAngleToIgnore > 0 && surfaceAngle <= collisionCheckParams.myGroundAngleToIgnore + 0.0001)) ||\r\n (!isGround && (collisionCheckParams.myCeilingAngleToIgnore > 0 && surfaceAngle <= collisionCheckParams.myCeilingAngleToIgnore + 0.0001))) {\r\n if (objectsToIgnore == null || objectsToIgnore.pp_hasEqual(hit.myObject, objectsEqualCallback)) {\r\n let surfaceHeightCheckOk = true;\r\n let maxMovementLeftCheckOk = true;\r\n\r\n if (surfaceIgnoreHeight != null) {\r\n surfaceHeightCheckOk = false;\r\n\r\n let feetPositionUp = feetPosition.vec3_valueAlongAxis(up);\r\n let hitUp = hit.myPosition.vec3_valueAlongAxis(up);\r\n let hitHeight = hitUp - feetPositionUp;\r\n if ((isGround && hitHeight <= surfaceIgnoreHeight) || (!isGround && hitHeight >= surfaceIgnoreHeight)) {\r\n surfaceHeightCheckOk = true;\r\n } else {\r\n //console.error(hitHeight.toFixed(6));\r\n }\r\n }\r\n\r\n if (surfaceHeightCheckOk && isMovementCheck) {\r\n if (surfaceIgnoreMaxMovementLeft != null) {\r\n let movementLength = movementOrForward.vec3_length();\r\n if (movementLength > surfaceIgnoreMaxMovementLeft) {\r\n maxMovementLeftCheckOk = false;\r\n\r\n let hitPosition = hit.myPosition;\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 90);\r\n hitDirection = hitPosition.vec3_sub(feetPosition, hitDirection);\r\n\r\n if (hitDirection.vec3_isToTheRight(movementDirection, up)) {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(-halfConeAngle, up, projectAlongAxis);\r\n } else {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(halfConeAngle, up, projectAlongAxis);\r\n }\r\n\r\n hitMovement = hitDirection.vec3_projectOnAxisAlongAxis(movementDirection, projectAlongAxis, hitMovement);\r\n\r\n let hitMovementLength = hitMovement.vec3_length();\r\n let movementLeft = movementLength - hitMovementLength;\r\n\r\n if (movementLeft <= surfaceIgnoreMaxMovementLeft) {\r\n maxMovementLeftCheckOk = true;\r\n } else {\r\n //console.error(movementLeft.toFixed(3));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (surfaceHeightCheckOk && maxMovementLeftCheckOk) {\r\n isIgnorable = true;\r\n }\r\n }\r\n }\r\n } else if (ignoreHitsInsideCollisionIfObjectToIgnore) {\r\n // #TODO When raycast pierce will work, if it gives the normal even when inside check if the angle is ok and only ignore if that's the case\r\n if (objectsToIgnore == null || objectsToIgnore.pp_hasEqual(hit.myObject, objectsEqualCallback)) {\r\n isIgnorable = true;\r\n }\r\n }\r\n\r\n if (isIgnorable) {\r\n if (outIgnoredObjects != null) {\r\n outIgnoredObjects.pp_pushUnique(hit.myObject, objectsEqualCallback);\r\n }\r\n }\r\n\r\n\r\n return isIgnorable;\r\n };\r\n}();", "import { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontalBase } from \"./collision_check_horizontal_base.js\";\r\n\r\nexport class CollisionCheckHorizontalPosition extends CollisionCheckHorizontalBase {\r\n\r\n _horizontalPositionCheck(originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalPositionVerticalCheck(feetPosition, checkPositions, heightOffset, heightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalPosition.prototype._horizontalPositionCheck = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let _localGroundObjectsToIgnore = [];\r\n let _localCeilingObjectsToIgnore = [];\r\n let _localGroundCeilingObjectsToIgnore = [];\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n\r\n let heightOffset = vec3_create();\r\n let heightStep = vec3_create();\r\n let currentHeightOffset = vec3_create();\r\n let hitHeightOffset = vec3_create();\r\n let hitHeightOffsetEpsilon = vec3_create();\r\n let downwardHeightOffset = vec3_create();\r\n let downwardHeightStep = vec3_create();\r\n\r\n let verticalDirection = vec3_create();\r\n\r\n let vertilCheckHit = new RaycastHit();\r\n\r\n return function _horizontalPositionCheck(originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugHorizontalPositionEnabled;\r\n\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 180);\r\n let sliceAngle = halfConeAngle / collisionCheckParams.myHalfConeSliceAmount;\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n checkPositions.push(feetPosition.vec3_add(forward.vec3_scale(collisionCheckParams.myRadius, tempCheckPosition), tempCheckPosition));\r\n for (let i = 1; i <= collisionCheckParams.myHalfConeSliceAmount; i++) {\r\n let currentAngle = i * sliceAngle;\r\n\r\n tempCheckPosition = _localGetCachedCheckPosition();\r\n let radialDirection = forward.vec3_rotateAxis(-currentAngle, up, tempCheckPosition);\r\n checkPositions.push(feetPosition.vec3_add(radialDirection.vec3_scale(collisionCheckParams.myRadius, radialDirection), radialDirection));\r\n\r\n tempCheckPosition = _localGetCachedCheckPosition();\r\n radialDirection = forward.vec3_rotateAxis(currentAngle, up, tempCheckPosition);\r\n checkPositions.push(feetPosition.vec3_add(radialDirection.vec3_scale(collisionCheckParams.myRadius, radialDirection), radialDirection));\r\n }\r\n\r\n let groundObjectsToIgnore = null;\r\n let ceilingObjectsToIgnore = null;\r\n let groundCeilingObjectsToIgnore = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n // Gather ground objects to ignore\r\n groundObjectsToIgnore = _localGroundObjectsToIgnore;\r\n groundObjectsToIgnore.length = 0;\r\n groundCeilingObjectsToIgnore = _localGroundCeilingObjectsToIgnore;\r\n groundCeilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, null, groundObjectsToIgnore, true, false, up, collisionCheckParams);\r\n\r\n let ignoreCeilingAngleCallback = null;\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, null, groundCeilingObjectsToIgnore, false, false, up, collisionCheckParams);\r\n }\r\n\r\n heightOffset.vec3_zero();\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n // Gather ceiling objects to ignore\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeight) {\r\n ceilingObjectsToIgnore = _localCeilingObjectsToIgnore;\r\n ceilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = null;\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, groundObjectsToIgnore, null, true, false, up, collisionCheckParams);\r\n }\r\n\r\n let ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, null, ceilingObjectsToIgnore, false, false, up, collisionCheckParams);\r\n\r\n heightOffset = up.vec3_scale(height, heightOffset);\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n\r\n let groundCeilingCheckIsFine = true;\r\n\r\n if (groundCeilingObjectsToIgnore != null) {\r\n // Check that the ceiling objects ignored by the ground are the correct ones, that is the one ignored by the upper check\r\n for (let object of groundCeilingObjectsToIgnore) {\r\n if (!ceilingObjectsToIgnore.pp_hasEqual(object, objectsEqualCallback)) {\r\n groundCeilingCheckIsFine = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let ignoreGroundAngleCallback = null;\r\n let ignoreCeilingAngleCallback = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, groundObjectsToIgnore, null, true, false, up, collisionCheckParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, ceilingObjectsToIgnore, null, false, false, up, collisionCheckParams);\r\n }\r\n\r\n let heightStepAmount = 0;\r\n if (collisionCheckParams.myCheckHeight && collisionCheckParams.myHeightCheckStepAmountPosition > 0 && height > 0) {\r\n heightStepAmount = collisionCheckParams.myHeightCheckStepAmountPosition;\r\n up.vec3_scale(height / heightStepAmount, heightStep);\r\n }\r\n\r\n for (let i = 0; i <= heightStepAmount; i++) {\r\n currentHeightOffset = heightStep.vec3_scale(i, currentHeightOffset);\r\n\r\n // We can skip the ground check since we have already done that, but if there was an error do it again with the proper set of objects to ignore\r\n // The ceiling check can always be ignored, it used the proper ground objects already\r\n if (collisionCheckParams.myCheckHeightTopPosition || i == 0) {\r\n if ((i != 0 && i != heightStepAmount) ||\r\n (i == 0 && !groundCeilingCheckIsFine) ||\r\n (i == 0 && collisionCheckParams.myGroundAngleToIgnore == 0) ||\r\n (i != 0 && i == heightStepAmount && collisionCheckParams.myCeilingAngleToIgnore == 0)) {\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, currentHeightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (i > 0) {\r\n if (collisionCheckParams.myCheckHeightVerticalPosition) {\r\n // This offset is a workaround for objects that in the editor are aligned but due to clamp get a bit tilted when in the game\r\n // and therefore trying an horizontal cast on the vertical hit position could result in hitting the bottom which in theory should be parallel and therefore not possible\r\n let hitHeightOffsetEpsilonValue = 0.0001;\r\n\r\n if (collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 0 || collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 2) {\r\n verticalDirection.vec3_copy(up);\r\n this._horizontalPositionVerticalCheck(feetPosition, checkPositions, currentHeightOffset, heightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeightConeOnCollision) {\r\n hitHeightOffset = collisionRuntimeParams.myHorizontalCollisionHit.myPosition.vec3_sub(feetPosition, hitHeightOffset).vec3_componentAlongAxis(up, hitHeightOffset);\r\n hitHeightOffset.vec3_add(verticalDirection.vec3_scale(hitHeightOffsetEpsilonValue, hitHeightOffsetEpsilon), hitHeightOffset);\r\n\r\n collisionRuntimeParams.myIsCollidingHorizontally = false;\r\n if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n vertilCheckHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n }\r\n collisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, hitHeightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n } else if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(vertilCheckHit);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n if (collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 1 || collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 2) {\r\n verticalDirection = up.vec3_negate(verticalDirection);\r\n downwardHeightOffset = currentHeightOffset.vec3_sub(heightStep, downwardHeightOffset);\r\n downwardHeightStep = heightStep.vec3_negate(downwardHeightStep);\r\n this._horizontalPositionVerticalCheck(feetPosition, checkPositions, downwardHeightOffset, downwardHeightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeightConeOnCollision) {\r\n hitHeightOffset = collisionRuntimeParams.myHorizontalCollisionHit.myPosition.vec3_sub(feetPosition, hitHeightOffset).vec3_componentAlongAxis(up, hitHeightOffset);\r\n hitHeightOffset.vec3_add(verticalDirection.vec3_scale(hitHeightOffsetEpsilonValue, hitHeightOffsetEpsilon), hitHeightOffset);\r\n\r\n collisionRuntimeParams.myIsCollidingHorizontally = false;\r\n if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n vertilCheckHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n }\r\n collisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, hitHeightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n } else if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(vertilCheckHit);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return !collisionRuntimeParams.myIsCollidingHorizontally;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalPosition.prototype._horizontalPositionHorizontalCheck = function () {\r\n let basePosition = vec3_create();\r\n let forwardNegate = vec3_create();\r\n let currentRadialPosition = vec3_create();\r\n let previousRadialPosition = vec3_create();\r\n return function _horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n basePosition = feetPosition.vec3_add(heightOffset, basePosition);\r\n\r\n let halfRadialPositions = Math.floor(checkPositions.length / 2) + 1;\r\n for (let j = 0; j < halfRadialPositions; j++) {\r\n if (j > 0) {\r\n let leftIndex = Math.max(0, j * 2);\r\n let rightIndex = Math.max(0, (j * 2 - 1));\r\n let leftAndRightEqual = checkPositions[leftIndex].vec_equals(checkPositions[rightIndex], 0.000001);\r\n\r\n if (collisionCheckParams.myCheckConeBorder) {\r\n for (let r = 0; r < 2; r++) {\r\n let currentIndex = r == 0 ? leftIndex : rightIndex;\r\n\r\n currentRadialPosition = checkPositions[currentIndex].vec3_add(heightOffset, currentRadialPosition);\r\n\r\n let previousIndex = Math.max(0, currentIndex - 2);\r\n previousRadialPosition = checkPositions[previousIndex].vec3_add(heightOffset, previousRadialPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, currentRadialPosition, forward.vec3_negate(forwardNegate), up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myCheckConeRay && isHorizontalCheckOk) {\r\n for (let r = 0; r < 2; r++) {\r\n if (r == 1 && leftAndRightEqual) {\r\n break;\r\n }\r\n\r\n let currentIndex = r == 0 ? leftIndex : rightIndex;\r\n\r\n currentRadialPosition = checkPositions[currentIndex].vec3_add(heightOffset, currentRadialPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(basePosition, currentRadialPosition, null, up,\r\n false, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, false,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckConeRay) {\r\n currentRadialPosition = checkPositions[j].vec3_add(heightOffset, currentRadialPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(basePosition, currentRadialPosition, null, up,\r\n false, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, false,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n break;\r\n }\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n return isHorizontalCheckOk;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalPosition.prototype._horizontalPositionVerticalCheck = function () {\r\n let basePosition = vec3_create();\r\n let previousBasePosition = vec3_create();\r\n let currentRadialPosition = vec3_create();\r\n let previousRadialPosition = vec3_create();\r\n let previousCurrentRadialPosition = vec3_create();\r\n let previousPreviousRadialPosition = vec3_create();\r\n return function _horizontalPositionVerticalCheck(feetPosition, checkPositions, heightOffset, heightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n basePosition = feetPosition.vec3_add(heightOffset, basePosition);\r\n previousBasePosition = basePosition.vec3_sub(heightStep, previousBasePosition);\r\n\r\n for (let j = 0; j <= checkPositions.length; j++) {\r\n let previousCheckPositionIsEqual = false;\r\n\r\n if (j == checkPositions.length) {\r\n currentRadialPosition.vec3_copy(basePosition);\r\n previousRadialPosition.vec3_copy(previousBasePosition);\r\n } else {\r\n currentRadialPosition = checkPositions[j].vec3_add(heightOffset, currentRadialPosition);\r\n previousRadialPosition = currentRadialPosition.vec3_sub(heightStep, previousRadialPosition);\r\n\r\n if (j > 0) {\r\n previousCheckPositionIsEqual = checkPositions[j].vec_equals(checkPositions[j - 1], 0.000001);\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myCheckVerticalStraight && !previousCheckPositionIsEqual) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, currentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (j < checkPositions.length) {\r\n if ((collisionCheckParams.myCheckVerticalDiagonalRayOutward ||\r\n (collisionCheckParams.myCheckVerticalDiagonalBorderRayOutward && (j == checkPositions.length - 2 || j == checkPositions.length - 1))) &&\r\n !previousCheckPositionIsEqual) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousBasePosition, currentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if ((collisionCheckParams.myCheckVerticalDiagonalRayInward ||\r\n (collisionCheckParams.myCheckVerticalDiagonalBorderRayInward && (j == checkPositions.length - 2 || j == checkPositions.length - 1))) &&\r\n !previousCheckPositionIsEqual) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, basePosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (j > 0) {\r\n if (collisionCheckParams.myCheckVerticalDiagonalBorderOutward || collisionCheckParams.myCheckVerticalDiagonalBorderInward) {\r\n let previousIndex = Math.max(0, j - 2);\r\n previousCurrentRadialPosition = checkPositions[previousIndex].vec3_add(heightOffset, previousCurrentRadialPosition);\r\n previousPreviousRadialPosition = previousCurrentRadialPosition.vec3_sub(heightStep, previousPreviousRadialPosition);\r\n\r\n if (collisionCheckParams.myCheckVerticalDiagonalBorderOutward) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousPreviousRadialPosition, currentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myCheckVerticalDiagonalBorderInward) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, previousCurrentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return !collisionRuntimeParams.myIsCollidingHorizontally;\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontalPosition } from \"./collision_check_horizontal_position.js\";\r\n\r\nexport class CollisionCheckHorizontalMovement extends CollisionCheckHorizontalPosition {\r\n\r\n _horizontalMovementCheck(movement, originalFeetPosition, originalHeight, feetPosition, height, up, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalMovementVerticalCheck(movement, feetPosition, checkPositions, heightOffset, heightStep, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalMovement.prototype._horizontalMovementCheck = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let _localGroundObjectsToIgnore = [];\r\n let _localCeilingObjectsToIgnore = [];\r\n let _localGroundCeilingObjectsToIgnore = [];\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n\r\n let movementDirection = vec3_create();\r\n let heightOffset = vec3_create();\r\n let heightStep = vec3_create();\r\n let currentHeightOffset = vec3_create();\r\n let leftRadialDirection = vec3_create();\r\n let rightRadialDirection = vec3_create();\r\n return function _horizontalMovementCheck(movement, originalFeetPosition, originalHeight, feetPosition, height, up, collisionCheckParams, collisionRuntimeParams) {\r\n // #TODO Add a flag in the params to specify if u want to allow movement inside collision (to hope that it will end up in a non collision position)\r\n // Also vertical check should check all hits like the position check\r\n // For now is ok as it is, the movement check is not as important and could also be disabled it the movement per frame is very small\r\n\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugHorizontalMovementEnabled;\r\n\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 90);\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n let steplength = collisionCheckParams.myRadius / collisionCheckParams.myHorizontalMovementRadialStepAmount;\r\n\r\n {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n tempCheckPosition.vec3_copy(feetPosition);\r\n checkPositions.push(tempCheckPosition);\r\n }\r\n\r\n {\r\n leftRadialDirection = movementDirection.vec3_rotateAxis(halfConeAngle, up, leftRadialDirection);\r\n rightRadialDirection = movementDirection.vec3_rotateAxis(-halfConeAngle, up, rightRadialDirection);\r\n for (let i = 1; i <= collisionCheckParams.myHorizontalMovementRadialStepAmount; i++) {\r\n // Left\r\n {\r\n let currentStep = i * steplength;\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let currentRadialPosition = leftRadialDirection.vec3_scale(currentStep, tempCheckPosition);\r\n let currentCheckPosition = currentRadialPosition.vec3_add(feetPosition, currentRadialPosition);\r\n checkPositions.push(currentCheckPosition);\r\n }\r\n\r\n // Right\r\n {\r\n let currentStep = i * steplength;\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let currentRadialPosition = rightRadialDirection.vec3_scale(currentStep, tempCheckPosition);\r\n let currentCheckPosition = currentRadialPosition.vec3_add(feetPosition, currentRadialPosition);\r\n checkPositions.push(currentCheckPosition);\r\n }\r\n }\r\n }\r\n\r\n // If result is inside a collision it's ignored, so that at least you can exit it before seeing if the new position works now\r\n\r\n let groundObjectsToIgnore = null;\r\n let ceilingObjectsToIgnore = null;\r\n let groundCeilingObjectsToIgnore = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n // Gather ground objects to ignore\r\n groundObjectsToIgnore = _localGroundObjectsToIgnore;\r\n groundObjectsToIgnore.length = 0;\r\n groundCeilingObjectsToIgnore = _localGroundCeilingObjectsToIgnore;\r\n groundCeilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, null, groundObjectsToIgnore, true, true, up, collisionCheckParams);\r\n\r\n let ignoreCeilingAngleCallback = null;\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, null, groundCeilingObjectsToIgnore, false, true, up, collisionCheckParams);\r\n }\r\n\r\n heightOffset.vec3_zero();\r\n this._horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n // Gather ceiling objects to ignore\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeight) {\r\n ceilingObjectsToIgnore = _localCeilingObjectsToIgnore;\r\n ceilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = null;\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, groundObjectsToIgnore, null, true, true, up, collisionCheckParams);\r\n }\r\n\r\n let ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, null, ceilingObjectsToIgnore, false, true, up, collisionCheckParams);\r\n\r\n heightOffset = up.vec3_scale(height, heightOffset);\r\n this._horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n\r\n let groundCeilingCheckIsFine = true;\r\n\r\n if (groundCeilingObjectsToIgnore != null) {\r\n // Check that the ceiling objects ignored by the ground are the correct ones, that is the one ignored by the upper check\r\n for (let object of groundCeilingObjectsToIgnore) {\r\n if (!ceilingObjectsToIgnore.pp_hasEqual(object, objectsEqualCallback)) {\r\n groundCeilingCheckIsFine = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let ignoreGroundAngleCallback = null;\r\n let ignoreCeilingAngleCallback = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, groundObjectsToIgnore, null, true, true, up, collisionCheckParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, ceilingObjectsToIgnore, null, false, true, up, collisionCheckParams);\r\n }\r\n\r\n let heightStepAmount = 0;\r\n if (collisionCheckParams.myCheckHeight && collisionCheckParams.myHeightCheckStepAmountMovement > 0 && height > 0.000001) {\r\n heightStepAmount = collisionCheckParams.myHeightCheckStepAmountMovement;\r\n heightStep = up.vec3_scale(height / heightStepAmount, heightStep);\r\n }\r\n\r\n for (let i = 0; i <= heightStepAmount; i++) {\r\n currentHeightOffset = heightStep.vec3_scale(i, currentHeightOffset);\r\n\r\n // We can skip the ground check since we have already done that, but if there was an error do it again with the proper set of objects to ignore\r\n // The ceiling check can always be ignored, it used the proper ground objects already\r\n if (collisionCheckParams.myCheckHeightTopMovement || i == 0) {\r\n if ((i != 0 && i != heightStepAmount) ||\r\n (i == 0 && !groundCeilingCheckIsFine) ||\r\n (i == 0 && collisionCheckParams.myGroundAngleToIgnore == 0) ||\r\n (i == heightStepAmount && collisionCheckParams.myCeilingAngleToIgnore == 0)) {\r\n this._horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, currentHeightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (i > 0) {\r\n if (collisionCheckParams.myCheckHeightVerticalMovement) {\r\n this._horizontalMovementVerticalCheck(movement, feetPosition, checkPositions, currentHeightOffset, heightStep, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return !collisionRuntimeParams.myIsCollidingHorizontally;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalMovement.prototype._horizontalMovementVerticalCheck = function () {\r\n let movementStep = vec3_create();\r\n let movementDirection = vec3_create();\r\n let firstPosition = vec3_create();\r\n let secondPosition = vec3_create();\r\n let firstMovementPosition = vec3_create();\r\n let secondMovementPosition = vec3_create();\r\n let firstHeightPosition = vec3_create();\r\n let secondHeightPosition = vec3_create();\r\n let firstHeightMovementPosition = vec3_create();\r\n let secondHeightMovementPosition = vec3_create();\r\n return function _horizontalMovementVerticalCheck(movement, feetPosition, checkPositions, heightOffset, heightStep, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movement);\r\n\r\n if (collisionCheckParams.myHorizontalMovementStepEnabled) {\r\n movementStepAmount = Math.max(1, Math.ceil(movement.vec3_length() / collisionCheckParams.myHorizontalMovementStepMaxLength));\r\n movement.vec3_scale(1 / movementStepAmount, movementStep);\r\n }\r\n\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n for (let m = 0; m < movementStepAmount; m++) {\r\n for (let j = 0; j < checkPositions.length; j++) {\r\n firstPosition = checkPositions[j].vec3_add(movementStep.vec3_scale(m, firstPosition), firstPosition).vec3_add(heightOffset, firstPosition);\r\n\r\n if (j > 0) {\r\n let secondIndex = Math.max(0, j - 2);\r\n secondPosition = checkPositions[secondIndex].vec3_add(movementStep.vec3_scale(m, secondPosition), secondPosition).vec3_add(heightOffset, secondPosition);\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardOutward) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n secondHeightPosition = secondPosition.vec3_sub(heightStep, secondHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondHeightPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardInward) {\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n firstHeightPosition = firstPosition.vec3_sub(heightStep, firstHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, secondMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardOutward) {\r\n firstHeightMovementPosition = firstPosition.vec3_add(movementStep, firstHeightMovementPosition);\r\n firstHeightMovementPosition = firstHeightMovementPosition.vec3_sub(heightStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondPosition, firstHeightMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardInward) {\r\n secondHeightMovementPosition = secondPosition.vec3_add(movementStep, secondHeightMovementPosition);\r\n secondHeightMovementPosition = secondHeightMovementPosition.vec3_sub(heightStep, secondHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, secondHeightMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (m == 0) {\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward) {\r\n secondHeightPosition = secondPosition.vec3_sub(heightStep, secondHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondHeightPosition, firstPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward) {\r\n let firstHeightPosition = firstPosition.vec3_sub(heightStep);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, secondPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n secondHeightMovementPosition = secondPosition.vec3_sub(heightStep, secondHeightMovementPosition).vec3_add(movementStep, secondHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondHeightMovementPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward) {\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n firstHeightMovementPosition = firstPosition.vec3_sub(heightStep, firstHeightMovementPosition).vec3_add(movementStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightMovementPosition, secondMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalStraight ||\r\n (collisionCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled && j == 0)) {\r\n if (m == 0) {\r\n firstHeightPosition = firstPosition.vec3_sub(heightStep, firstHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, firstPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n firstHeightMovementPosition = firstMovementPosition.vec3_sub(heightStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightMovementPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalUpward ||\r\n (collisionCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled && j == 0)) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n firstHeightPosition = firstPosition.vec3_sub(heightStep, firstHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalDownward ||\r\n (collisionCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled && j == 0)) {\r\n firstHeightMovementPosition = firstPosition.vec3_sub(heightStep, firstHeightMovementPosition).vec3_add(movementStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, firstHeightMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return isHorizontalCheckOk;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalMovement.prototype._horizontalMovementHorizontalCheck = function () {\r\n let movementStep = vec3_create();\r\n let movementDirection = vec3_create();\r\n let firstPosition = vec3_create();\r\n let secondPosition = vec3_create();\r\n let firstMovementPosition = vec3_create();\r\n let secondMovementPosition = vec3_create();\r\n return function _horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movement);\r\n\r\n if (collisionCheckParams.myHorizontalMovementStepEnabled) {\r\n movementStepAmount = Math.max(1, Math.ceil(movement.vec3_length() / collisionCheckParams.myHorizontalMovementStepMaxLength));\r\n movement.vec3_scale(1 / movementStepAmount, movementStep);\r\n }\r\n\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n for (let m = 0; m < movementStepAmount; m++) {\r\n for (let j = 0; j < checkPositions.length; j++) {\r\n firstPosition = checkPositions[j].vec3_add(movementStep.vec3_scale(m, firstPosition), firstPosition).vec3_add(heightOffset, firstPosition);\r\n\r\n if (j > 0) {\r\n let secondIndex = Math.max(0, j - 2);\r\n secondPosition = checkPositions[secondIndex].vec3_add(movementStep.vec3_scale(m, secondPosition), secondPosition).vec3_add(heightOffset, secondPosition);\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckDiagonalOutward) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n\r\n // #TODO Ignore hits if inside could be a paramter, so you can specify if u want to be able to exit from a collision\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckDiagonalInward) {\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, secondMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckHorizontalBorder) {\r\n if (m == 0) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondPosition, firstPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondMovementPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckStraight ||\r\n (collisionCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled && j == 0)) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, firstMovementPosition, null, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n break;\r\n }\r\n }\r\n\r\n return isHorizontalCheckOk;\r\n };\r\n}();", "import { vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckHorizontalMovement } from \"./collision_check_horizontal_movement.js\";\r\n\r\nexport class CollisionCheckHorizontalSliding extends CollisionCheckHorizontalMovement {\r\n\r\n _horizontalSlide(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalSlideCheckOpposite(movement, feetPosition, height, up, forward, previousHorizontalMovement, previousIsSliding, allowSurfaceSteepFix, collisionCheckParams, preSlideCollisionRuntimeParams, postSlideCollisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalSlideFlickerCheck(movement, slideMovement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, checkOppositeDirection, outSlideMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalCheckBetterSlideNormal(movement, originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isSlidingNormalValid(movement, up, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalSlide = function () {\r\n let previousHorizontalMovement = vec3_create();\r\n return function _horizontalSlide(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n if (movement.vec3_isZero(0.00001)) {\r\n return outSlideMovement.vec3_zero();\r\n }\r\n\r\n this._mySlidingCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n\r\n previousHorizontalMovement.vec3_copy(collisionRuntimeParams.mySlidingPreviousHorizontalMovement);\r\n outSlideMovement = this._internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingCollisionRuntimeParams, previousCollisionRuntimeParams, false, outSlideMovement);\r\n\r\n if (collisionCheckParams.mySlidingCheckBothDirections) {\r\n this._horizontalSlideCheckOpposite(movement, feetPosition, height, up, forward, previousHorizontalMovement, this._myPrevCollisionRuntimeParams.myIsSliding, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, this._mySlidingCollisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement);\r\n\r\n //console.error(\"post oppo:\", outSlideMovement.vec_toString());\r\n }\r\n\r\n //console.error(\" \");\r\n\r\n if (this._mySlidingCollisionRuntimeParams.myIsSliding && collisionCheckParams.mySlidingFlickeringPreventionType > 0) {\r\n let isFlickering = this._horizontalSlideFlickerCheck(movement, outSlideMovement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingCollisionRuntimeParams, previousCollisionRuntimeParams);\r\n this._mySlidingCollisionRuntimeParams.myIsSliding = !isFlickering;\r\n }\r\n\r\n if (this._mySlidingCollisionRuntimeParams.myIsSliding) {\r\n let backupFlickerPrevented = collisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n collisionRuntimeParams.copy(this._mySlidingCollisionRuntimeParams);\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = backupFlickerPrevented || this._mySlidingCollisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n } else {\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = collisionRuntimeParams.myIsSlidingFlickerPrevented || this._mySlidingCollisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n //console.error(\"slide cancel\");\r\n outSlideMovement.vec3_zero();\r\n }\r\n\r\n return outSlideMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalSlideCheckOpposite = function () {\r\n let horizontalCollisionNormal = vec3_create();\r\n let oppositeSlideMovement = vec3_create();\r\n //let hitNormal = vec3_create();\r\n return function _horizontalSlideCheckOpposite(movement, feetPosition, height, up, forward, previousHorizontalMovement, previousIsSliding, allowSurfaceSteepFix, collisionCheckParams, preSlideCollisionRuntimeParams, postSlideCollisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n horizontalCollisionNormal = preSlideCollisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, horizontalCollisionNormal);\r\n horizontalCollisionNormal.vec3_normalize(horizontalCollisionNormal);\r\n\r\n //console.error(\"oppo\", outSlideMovement.vec_toString(), movement.vec_toString(15));\r\n let angleNormalWithMovementThreshold = 20;\r\n if (horizontalCollisionNormal.vec3_angle(movement) > 180 - angleNormalWithMovementThreshold) {\r\n //console.error(\"opposite normal ok\");\r\n return;\r\n } else if (previousIsSliding && postSlideCollisionRuntimeParams.myIsSliding && outSlideMovement.vec3_isConcordant(previousHorizontalMovement)) {\r\n //console.error(\"previous direction ok\");\r\n //console.error(postSlideCollisionRuntimeParams.myIsSliding, outSlideMovement.vec3_isConcordant(previousHorizontalMovement), outSlideMovement.vec_toString(), previousHorizontalMovement.vec_toString());\r\n return;\r\n } else {\r\n //console.error(\"no fast exit\");\r\n }\r\n\r\n //console.error(horizontalCollisionNormal.vec3_angle(movement));\r\n\r\n this._mySlidingOppositeDirectionCollisionRuntimeParams.copy(preSlideCollisionRuntimeParams);\r\n\r\n oppositeSlideMovement = this._internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingOppositeDirectionCollisionRuntimeParams, previousCollisionRuntimeParams, true, oppositeSlideMovement);\r\n\r\n //console.error(previousHorizontalMovement.vec_toString(), outSlideMovement.vec_toString(), oppositeSlideMovement.vec_toString());\r\n if (this._mySlidingOppositeDirectionCollisionRuntimeParams.myIsSliding) {\r\n\r\n let isOppositeBetter = false;\r\n if (postSlideCollisionRuntimeParams.myIsSliding) {\r\n if (movement.vec3_angle(oppositeSlideMovement) < movement.vec3_angle(outSlideMovement) - 0.0001) {\r\n //console.error(\"oppo minor\");\r\n isOppositeBetter = true;\r\n } else {\r\n if (Math.abs(movement.vec3_angle(oppositeSlideMovement) - movement.vec3_angle(outSlideMovement)) <= 0.0001) {\r\n if (previousHorizontalMovement.vec3_angle(oppositeSlideMovement) < previousHorizontalMovement.vec3_angle(outSlideMovement) - 0.0001) {\r\n let angleNormalWithMovementThreshold = 5;\r\n if (horizontalCollisionNormal.vec3_angle(movement) < 90 + angleNormalWithMovementThreshold) {\r\n //console.error(\"oppo equal\");\r\n isOppositeBetter = true;\r\n }\r\n }\r\n }\r\n }\r\n //console.error(movement.vec3_angle(outSlideMovement), movement.vec3_angle(oppositeSlideMovement));\r\n\r\n } else {\r\n let angleEpsilon = 0.001;\r\n if (movement.vec3_isConcordant(oppositeSlideMovement) && movement.vec3_angle(oppositeSlideMovement) < 90 - angleEpsilon) {\r\n //console.error(\"oppo not\");\r\n isOppositeBetter = true;\r\n } else {\r\n //console.error(\"oppo not prevention\");\r\n }\r\n }\r\n\r\n if (isOppositeBetter) {\r\n /* {\r\n hitNormal.vec3_copy(preSlideCollisionRuntimeParams.myHorizontalCollisionHit.myNormal);\r\n \r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = slideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(0, 0, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 1);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = oppositeSlideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 0, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 1);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = hitNormal.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 1);\r\n } */\r\n\r\n outSlideMovement.vec3_copy(oppositeSlideMovement);\r\n postSlideCollisionRuntimeParams.copy(this._mySlidingOppositeDirectionCollisionRuntimeParams);\r\n } else {\r\n //console.error(\"normal\", previousHorizontalMovement.vec_toString(), outSlideMovement.vec_toString(), oppositeSlideMovement.vec_toString());\r\n }\r\n } else {\r\n //console.error(\"oppo not sliding\");\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalSlideFlickerCheck = function () {\r\n let previousHorizontalMovement = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let fixedMovement = vec3_create();\r\n let flickerFixSlideMovement = vec3_create();\r\n return function _horizontalSlideFlickerCheck(movement, slideMovement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n let isFlickering = false;\r\n\r\n previousHorizontalMovement.vec3_copy(collisionRuntimeParams.mySlidingPreviousHorizontalMovement);\r\n let shouldCheckFlicker =\r\n this._myPrevCollisionRuntimeParams.myIsSlidingFlickerPrevented ||\r\n previousHorizontalMovement.vec3_isZero(0.00001);\r\n\r\n if (!shouldCheckFlicker) {\r\n if (this._myPrevCollisionRuntimeParams.myIsSliding || !collisionCheckParams.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding) {\r\n let flickerCollisionAngle = 90;\r\n let flickerMovementAngle = 85;\r\n switch (collisionCheckParams.mySlidingFlickeringPreventionType) {\r\n case 1:\r\n shouldCheckFlicker = previousHorizontalMovement.vec3_signTo(movement, up, 0) != slideMovement.vec3_signTo(movement, up, 0);\r\n break;\r\n case 2:\r\n shouldCheckFlicker = collisionCheckParams.mySlidingCheckBothDirections && collisionRuntimeParams.myIsSlidingIntoOppositeDirection;\r\n shouldCheckFlicker = shouldCheckFlicker || Math.abs(collisionRuntimeParams.mySlidingCollisionAngle) > flickerCollisionAngle + 0.00001;\r\n break;\r\n case 3:\r\n shouldCheckFlicker = collisionCheckParams.mySlidingCheckBothDirections && collisionRuntimeParams.myIsSlidingIntoOppositeDirection;\r\n shouldCheckFlicker = shouldCheckFlicker || Math.abs(collisionRuntimeParams.mySlidingCollisionAngle) > flickerCollisionAngle + 0.00001;\r\n\r\n shouldCheckFlicker = shouldCheckFlicker || (\r\n Math.abs(Math.abs(collisionRuntimeParams.mySlidingCollisionAngle) - flickerCollisionAngle) < 0.00001 &&\r\n Math.abs(collisionRuntimeParams.mySlidingMovementAngle) > flickerMovementAngle + 0.00001);\r\n break;\r\n case 4:\r\n shouldCheckFlicker = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n //console.error(this._myPrevCollisionRuntimeParams.myIsSlidingFlickerPrevented);\r\n if (shouldCheckFlicker || this._myPrevCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter > 0) {\r\n if (shouldCheckFlicker) {\r\n collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter = collisionCheckParams.mySlidingFlickerPreventionCheckAnywayCounter;\r\n } else {\r\n collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter = Math.max(0, this._myPrevCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter - 1);\r\n //console.error(collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter);\r\n }\r\n\r\n //console.error(previousHorizontalMovement.vec3_signTo(movement, up, 0), slideMovement.vec3_signTo(movement, up, 0));\r\n if ((collisionCheckParams.mySlidingFlickeringPreventionType != 1 || collisionRuntimeParams.myIsSlidingFlickerPrevented || this._myPrevCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter > 0) &&\r\n (this._myPrevCollisionRuntimeParams.myIsSliding && previousHorizontalMovement.vec3_signTo(movement, up, 0) != slideMovement.vec3_signTo(movement, up, 0))) {\r\n isFlickering = true;\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = true;\r\n //console.error(\"quick flicker fix\");\r\n } else {\r\n this._mySlidingFlickeringFixCollisionRuntimeParams.reset();\r\n this._mySlidingFlickeringFixCollisionRuntimeParams.mySliding90DegreesSign = collisionRuntimeParams.mySliding90DegreesSign;\r\n this._mySlidingFlickeringFixCollisionRuntimeParams.mySlidingRecompute90DegreesSign = false;\r\n\r\n //console.error(\"slide movement\", slideMovement.vec_toString(), feetPosition.vec_toString());\r\n newFeetPosition = feetPosition.vec3_add(slideMovement, newFeetPosition);\r\n\r\n let backupDebugEnabled = collisionCheckParams.myDebugEnabled;\r\n collisionCheckParams.myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugSlidingEnabled;\r\n\r\n fixedMovement.vec3_zero();\r\n fixedMovement = this._horizontalCheck(movement, newFeetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingFlickeringFixCollisionRuntimeParams, previousCollisionRuntimeParams, false, fixedMovement);\r\n collisionCheckParams.myDebugEnabled = backupDebugEnabled;\r\n\r\n if (fixedMovement.vec3_isZero(0.00001)) {\r\n this._mySlidingFlickeringFixSlidingCollisionRuntimeParams.copy(this._mySlidingFlickeringFixCollisionRuntimeParams);\r\n\r\n flickerFixSlideMovement = this._internalHorizontalSlide(movement, newFeetPosition, height, up, forward, slideMovement, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingFlickeringFixSlidingCollisionRuntimeParams, previousCollisionRuntimeParams, false, flickerFixSlideMovement);\r\n\r\n if (collisionCheckParams.mySlidingCheckBothDirections) {\r\n this._horizontalSlideCheckOpposite(movement, newFeetPosition, height, up, forward, slideMovement, true, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingFlickeringFixCollisionRuntimeParams, this._mySlidingFlickeringFixSlidingCollisionRuntimeParams, previousCollisionRuntimeParams, flickerFixSlideMovement);\r\n }\r\n\r\n if (this._mySlidingFlickeringFixSlidingCollisionRuntimeParams.myIsSliding) {\r\n if (slideMovement.vec3_signTo(movement, up, 0) != flickerFixSlideMovement.vec3_signTo(movement, up, 0)) {\r\n\r\n /* {\r\n hitNormal.vec3_copy(collisionRuntimeParams.mySlidingCollisionHit.myNormal);\r\n \r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = slideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(0.5, 0.5, 0.5, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 2);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = flickerFixSlideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 2);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = hitNormal.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 0, 0.5, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 2);\r\n } */\r\n\r\n isFlickering = true;\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = true;\r\n //console.error(\"expensive flicker fix\");\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n //console.error(\"no flicker check\");\r\n }\r\n\r\n if (isFlickering) {\r\n //console.error(\"flicker\", shouldCheckFlicker, slideMovement.vec_toString(), \"\\n\");\r\n } else {\r\n //console.error(\"no flicker\", shouldCheckFlicker, slideMovement.vec_toString(), \"\\n\");\r\n }\r\n\r\n return isFlickering;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._internalHorizontalSlide = function () {\r\n let invertedNormal = vec3_create();\r\n let slidingMovement = vec3_create();\r\n let movement90 = vec3_create();\r\n let currentMovement = vec3_create();\r\n let slideMovementForward = vec3_create();\r\n let fixedMovement = vec3_create();\r\n return function _internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, checkOppositeDirection, outSlideMovement) {\r\n if (movement.vec3_isZero(0.00001)) {\r\n return outSlideMovement.vec3_zero();\r\n }\r\n\r\n //let copiedNormal = collisionRuntimeParams.myHorizontalCollisionHit.myNormal.pp_clone();\r\n invertedNormal = collisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_negate(invertedNormal);\r\n invertedNormal.vec3_removeComponentAlongAxis(up, invertedNormal);\r\n invertedNormal[0] = Math.abs(invertedNormal[0]) < 0.01 ? 0 : invertedNormal[0];\r\n invertedNormal[2] = Math.abs(invertedNormal[2]) < 0.01 ? 0 : invertedNormal[2];\r\n invertedNormal.vec3_normalize(invertedNormal);\r\n\r\n collisionRuntimeParams.mySlidingCollisionHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n collisionRuntimeParams.mySlidingWallNormal.vec3_copy(collisionRuntimeParams.myHorizontalCollisionHit.myNormal);\r\n\r\n outSlideMovement.vec3_zero();\r\n\r\n slidingMovement.vec3_copy(invertedNormal);\r\n if (checkOppositeDirection) {\r\n slidingMovement.vec3_copy(movement);\r\n slidingMovement.vec3_normalize(slidingMovement);\r\n }\r\n\r\n if (!slidingMovement.vec3_isZero(0.00001)) {\r\n\r\n slidingMovement.vec3_scale(movement.vec3_length(), slidingMovement);\r\n\r\n let slidingSign = invertedNormal.vec3_signTo(movement, up);\r\n\r\n if (collisionCheckParams.mySlidingAdjustSign90Degrees) {\r\n let angleThreshold = 0.1;\r\n if (invertedNormal.vec3_angle(movement) < angleThreshold && collisionRuntimeParams.mySliding90DegreesSign != 0) {\r\n //console.error(slidingSign, collisionRuntimeParams.mySliding90DegreesSign);\r\n slidingSign = collisionRuntimeParams.mySliding90DegreesSign;\r\n } else if (collisionRuntimeParams.mySliding90DegreesSign == 0 || collisionRuntimeParams.mySlidingRecompute90DegreesSign) {\r\n collisionRuntimeParams.mySliding90DegreesSign = slidingSign;\r\n } else {\r\n //console.error(\"no fix\");\r\n }\r\n\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = false;\r\n }\r\n\r\n if (checkOppositeDirection) {\r\n slidingSign *= -1;\r\n }\r\n\r\n let currentAngle = 90 * slidingSign;\r\n let maxAngle = Math.pp_angleClamp(slidingMovement.vec3_angleSigned(movement.vec3_rotateAxis(90 * slidingSign, up, movement90), up) * slidingSign, true) * slidingSign;\r\n let minAngle = Math.pp_angleClamp(slidingMovement.vec3_angleSigned(movement, up) * slidingSign, true) * slidingSign;\r\n\r\n if (checkOppositeDirection) {\r\n maxAngle = currentAngle;\r\n minAngle = 0;\r\n } else {\r\n if (Math.abs(maxAngle) < Math.abs(minAngle)) {\r\n // This should only happens because of the 90 degrees adjustment\r\n //console.error(\"90 adjust\");\r\n minAngle = 0;\r\n }\r\n\r\n if (Math.abs(Math.abs(maxAngle) - Math.abs(minAngle)) < 0.0001) {\r\n minAngle = maxAngle;\r\n }\r\n\r\n if (Math.abs(maxAngle) < Math.abs(currentAngle) || Math.abs(Math.abs(maxAngle) - Math.abs(currentAngle)) < 0.0001) {\r\n //console.error(\"max\", currentAngle.toFixed(15), maxAngle.toFixed(15));\r\n currentAngle = maxAngle;\r\n }\r\n\r\n if (Math.abs(currentAngle) < Math.abs(minAngle) || Math.abs(Math.abs(minAngle) - Math.abs(currentAngle)) < 0.0001) {\r\n //console.error(\"min\", currentAngle.toFixed(3), minAngle.toFixed(3));\r\n currentAngle = minAngle;\r\n }\r\n\r\n //console.error(maxAngle.toFixed(3), minAngle.toFixed(3));\r\n }\r\n\r\n if (checkOppositeDirection && !previousHorizontalMovement.vec3_isZero(0.000001)) {\r\n let angleWithPrevious = movement.vec3_angleSigned(previousHorizontalMovement, up);\r\n if (Math.pp_sign(angleWithPrevious) == Math.pp_sign(maxAngle) && Math.abs(maxAngle) > Math.abs(angleWithPrevious)) {\r\n currentAngle = angleWithPrevious;\r\n //console.error(\"better angle\", currentAngle, previousHorizontalMovement.vec_toString(10), movement.vec_toString(10));\r\n }\r\n }\r\n\r\n currentMovement.vec3_zero();\r\n\r\n let backupDebugEnabled = collisionCheckParams.myDebugEnabled;\r\n collisionCheckParams.myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugSlidingEnabled;\r\n\r\n //let originalCurrentAngle = currentAngle;\r\n for (let i = 0; i < collisionCheckParams.mySlidingMaxAttempts; i++) {\r\n this._myInternalSlidingCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n\r\n currentMovement = slidingMovement.vec3_rotateAxis(currentAngle, up, currentMovement);\r\n\r\n slideMovementForward.vec3_copy(forward);\r\n if (!collisionCheckParams.myCheckHorizontalFixedForwardEnabled) {\r\n if (!currentMovement.vec3_isZero()) {\r\n slideMovementForward = currentMovement.vec3_normalize(slideMovementForward);\r\n }\r\n }\r\n\r\n fixedMovement.vec3_zero();\r\n fixedMovement = this._horizontalCheck(currentMovement, feetPosition, height, up, slideMovementForward, allowSurfaceSteepFix, collisionCheckParams, this._myInternalSlidingCollisionRuntimeParams, previousCollisionRuntimeParams, true, fixedMovement);\r\n if (!fixedMovement.vec3_isZero(0.00001)) {\r\n outSlideMovement.vec3_copy(currentMovement);\r\n collisionRuntimeParams.copy(this._myInternalSlidingCollisionRuntimeParams);\r\n collisionRuntimeParams.myIsSliding = true;\r\n collisionRuntimeParams.myIsSlidingIntoOppositeDirection = checkOppositeDirection;\r\n collisionRuntimeParams.mySlidingMovementAngle = movement.vec3_angleSigned(currentMovement, up);\r\n collisionRuntimeParams.mySlidingCollisionAngle = invertedNormal.vec3_angleSigned(currentMovement, up);\r\n\r\n maxAngle = currentAngle;\r\n currentAngle = (maxAngle + minAngle) / 2;\r\n } else {\r\n if (currentAngle != maxAngle) {\r\n minAngle = currentAngle;\r\n }\r\n\r\n if (i == 0 && currentAngle != maxAngle) {\r\n currentAngle = maxAngle;\r\n } else {\r\n currentAngle = (minAngle + maxAngle) / 2;\r\n }\r\n }\r\n\r\n if (Math.abs(Math.abs(maxAngle) - Math.abs(minAngle)) < 0.0001) {\r\n //console.error(\"fast slide exit\", maxAngle, minAngle, originalCurrentAngle, collisionRuntimeParams.myIsSliding, checkOppositeDirection);\r\n break;\r\n }\r\n }\r\n\r\n collisionCheckParams.myDebugEnabled = backupDebugEnabled;\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsSliding) {\r\n collisionRuntimeParams.mySlidingCollisionHit.reset();\r\n } else {\r\n //console.error(\"slide angle\", movement.vec3_angleSigned(invertedNormal, up), invertedNormal.vec_toString(), copiedNormal.vec_toString());\r\n }\r\n\r\n return outSlideMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalCheckBetterSlideNormal = function () {\r\n let movementDirection = vec3_create();\r\n let hitDirection = vec3_create();\r\n let projectAlongAxis = vec3_create();\r\n let fixedMovement = vec3_create();\r\n let newFixedFeetPosition = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n return function _horizontalCheckBetterSlideNormal(movement, originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Check for a better slide hit position and normal\r\n\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n let hitPosition = collisionRuntimeParams.myHorizontalCollisionHit.myPosition;\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 90);\r\n hitDirection = hitPosition.vec3_sub(feetPosition, hitDirection);\r\n if (hitDirection.vec3_isToTheRight(movementDirection, up)) {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(-halfConeAngle, up, projectAlongAxis);\r\n } else {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(halfConeAngle, up, projectAlongAxis);\r\n }\r\n\r\n fixedMovement = hitDirection.vec3_projectOnAxisAlongAxis(movementDirection, projectAlongAxis, fixedMovement);\r\n /* if (fixedMovement.vec3_angle(movementDirection) >= 0.00001 || fixedMovement.vec3_length() > movement.vec3_length() + 0.00001) {\r\n console.error(\"ERROR, project function should return a smaller movement in the same direction\",\r\n fixedMovement.vec3_angle(movementDirection), fixedMovement.vec3_length(), movement.vec3_length());\r\n // Maybe epsilon could be 0.0001? is higher but still 10 times less then a millimiter\r\n } */\r\n\r\n if (fixedMovement.vec3_isConcordant(movementDirection)) {\r\n fixedMovement = movementDirection.vec3_scale(Math.min(fixedMovement.vec3_length(), movement.vec3_length()), fixedMovement);\r\n } else {\r\n fixedMovement.vec3_zero();\r\n }\r\n\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugHorizontalMovementEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPosition, movementDirection, fixedMovement.vec3_length(), vec4_create(1, 0, 1, 1));\r\n }\r\n\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams.myIsCollidingHorizontally = false;\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n\r\n newFixedFeetPosition = feetPosition.vec3_add(fixedMovement, newFixedFeetPosition);\r\n newFeetPosition = feetPosition.vec3_add(fixedMovement, newFeetPosition);\r\n\r\n let backupDebugEnabled = collisionCheckParams.myDebugEnabled;\r\n collisionCheckParams.myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugSlidingEnabled;\r\n\r\n if (collisionCheckParams.myHorizontalPositionCheckEnabled) {\r\n this._horizontalPositionCheck(originalFeetPosition, originalHeight, newFixedFeetPosition, height, up, forward, collisionCheckParams, this._myCheckBetterSlidingNormalCollisionRuntimeParams);\r\n }\r\n\r\n collisionCheckParams.myDebugEnabled = backupDebugEnabled;\r\n\r\n if (this._myCheckBetterSlidingNormalCollisionRuntimeParams.myIsCollidingHorizontally &&\r\n !this._myCheckBetterSlidingNormalCollisionRuntimeParams.myHorizontalCollisionHit.myInsideCollision) {\r\n collisionRuntimeParams.copy(this._myCheckBetterSlidingNormalCollisionRuntimeParams);\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._isSlidingNormalValid = function () {\r\n let flatNormal = vec3_create();\r\n return function _isSlidingNormalValid(movement, up, collisionRuntimeParams) {\r\n let isValid = false;\r\n\r\n flatNormal = collisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, flatNormal);\r\n flatNormal.vec3_normalize(flatNormal);\r\n\r\n if (!flatNormal.vec3_isZero(0.000001)) {\r\n isValid = true;\r\n }\r\n\r\n // I wanted to check if the normal angle was not concordant and thought that in that case it shouldn't slide but it turns out it makes sense\r\n // even for back hits which either can't resolve or at least makes me slide out of collision\r\n // At least a check for the normal to be not up is ok\r\n\r\n return isValid;\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontalSliding } from \"./collision_check_horizontal_sliding.js\";\r\n\r\nexport class CollisionCheckHorizontal extends CollisionCheckHorizontalSliding {\r\n\r\n _horizontalCheck(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, avoidSlidingExtraCheck, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontal.prototype._horizontalCheck = function () {\r\n let fixedFeetPosition = vec3_create();\r\n let newFixedFeetPosition = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let horizontalDirection = vec3_create();\r\n return function _horizontalCheck(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, avoidSlidingExtraCheck, outFixedMovement) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = false;\r\n collisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n outFixedMovement.vec3_zero();\r\n\r\n horizontalDirection = movement.vec3_normalize(horizontalDirection);\r\n let surfaceTooSteepResults = this._surfaceTooSteep(up, horizontalDirection, collisionCheckParams, previousCollisionRuntimeParams);\r\n if (movement.vec3_isZero(0.000001) ||\r\n ((!surfaceTooSteepResults[0] || (allowSurfaceSteepFix && collisionCheckParams.myAllowGroundSteepFix)) &&\r\n (!surfaceTooSteepResults[1] || (allowSurfaceSteepFix && collisionCheckParams.myAllowCeilingSteepFix)))) {\r\n fixedFeetPosition = feetPosition.vec3_add(up.vec3_scale(collisionCheckParams.myDistanceFromFeetToIgnore + 0.0001, fixedFeetPosition), fixedFeetPosition);\r\n let fixedHeight = Math.max(0, height - collisionCheckParams.myDistanceFromFeetToIgnore - collisionCheckParams.myDistanceFromHeadToIgnore - 0.0001 * 2);\r\n\r\n let canMove = true;\r\n if (collisionCheckParams.myHorizontalMovementCheckEnabled && !movement.vec3_isZero(0.000001)) {\r\n canMove = this._horizontalMovementCheck(movement, feetPosition, height, fixedFeetPosition, fixedHeight, up, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (canMove) {\r\n if (collisionCheckParams.myHorizontalPositionCheckEnabled) {\r\n newFixedFeetPosition = fixedFeetPosition.vec3_add(movement, newFixedFeetPosition);\r\n newFeetPosition = feetPosition.vec3_add(movement, newFeetPosition);\r\n let canStay = this._horizontalPositionCheck(newFeetPosition, height, newFixedFeetPosition, fixedHeight, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n if (canStay) {\r\n outFixedMovement.vec3_copy(movement);\r\n }\r\n\r\n if (outFixedMovement.vec3_isZero(0.000001)) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n } else {\r\n outFixedMovement.vec3_copy(movement);\r\n }\r\n } else if (!avoidSlidingExtraCheck && collisionCheckParams.mySlidingEnabled && collisionCheckParams.mySlidingHorizontalMovementCheckBetterNormal) {\r\n this._horizontalCheckBetterSlideNormal(movement, feetPosition, height, fixedFeetPosition, fixedHeight, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();", "import { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontal } from \"./collision_check_horizontal.js\";\r\n\r\nexport class CollisionCheckVertical extends CollisionCheckHorizontal {\r\n\r\n _verticalCheck(verticalMovement, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _verticalMovementAdjustment(verticalMovement, isMovementDownward, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _verticalPositionCheck(feetPosition, checkUpward, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckVertical.prototype._verticalCheck = function () {\r\n let newFeetPosition = vec3_create();\r\n let additionalFixedMovement = vec3_create();\r\n let zero = vec3_create(0, 0, 0);\r\n return function _verticalCheck(verticalMovement, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n collisionRuntimeParams.myIsCollidingVertically = false;\r\n collisionRuntimeParams.myVerticalCollisionHit.reset();\r\n\r\n // #TODO the sign of 0 is by default downward, but it should probably be based on if u previously were on Ground or Ceiling\r\n // If none, ok downward, if on Ground downward, if on Ceiling upward, so that even without @myCheckVerticalBothDirection\r\n // if u were snapped to the ceiling u will keep snap on it even when 0 vertical movement\r\n let movementSign = Math.pp_sign(verticalMovement.vec3_lengthSigned(up), -1);\r\n let isMovementDownward = movementSign < 0;\r\n\r\n outFixedMovement.vec3_copy(verticalMovement);\r\n if (collisionCheckParams.myVerticalMovementCheckEnabled) {\r\n outFixedMovement = this._verticalMovementAdjustment(verticalMovement, isMovementDownward, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement);\r\n\r\n if (!collisionRuntimeParams.myIsCollidingVertically && collisionCheckParams.myCheckVerticalBothDirection &&\r\n (outFixedMovement.vec_equals(verticalMovement, 0.00001) || originalMovementSign == 0 || (movementSign != originalMovementSign))) {\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n let isOppositeMovementDownward = !isMovementDownward;\r\n additionalFixedMovement = this._verticalMovementAdjustment(zero, isOppositeMovementDownward, originalMovementSign, newFeetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, additionalFixedMovement);\r\n\r\n outFixedMovement.vec3_add(additionalFixedMovement, outFixedMovement);\r\n isMovementDownward = !isMovementDownward;\r\n }\r\n }\r\n\r\n // #TODO Here, if there is no vertical movement and there is no horizontal movement (or it has been canceled)\r\n // it would probably make more sense to skip this check, and if it is vertically colliding, but the movement is 0,0,0\r\n // we can say that the movement is, after all, fine\r\n // For now I will keep it as it is because i'm not sure if some feature (like the transform manager) could make assumption\r\n // on the fact that even a 0,0,0 movement can fail thanks to this (like the head colliding check)\r\n // Is not a big problem anyway, u can just check if the movement is 0 before checking the collision, and if it is 0\r\n // u won't move anyway\r\n if (!collisionRuntimeParams.myIsCollidingVertically && collisionCheckParams.myVerticalPositionCheckEnabled) {\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n let canStay = this._verticalPositionCheck(newFeetPosition, isMovementDownward, height, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n if (!canStay) {\r\n outFixedMovement.vec3_zero();\r\n\r\n // #TODO Probably this should not be reset, you should be required to check if the movement was ok to be sure this values have a meaning\r\n collisionRuntimeParams.myHasSnappedOnGround = false;\r\n collisionRuntimeParams.myHasSnappedOnCeiling = false;\r\n collisionRuntimeParams.myHasPoppedOutGround = false;\r\n collisionRuntimeParams.myHasPoppedOutCeiling = false;\r\n collisionRuntimeParams.myHasReducedVerticalMovement = false;\r\n }\r\n } else if (collisionRuntimeParams.myIsCollidingVertically) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckVertical.prototype._verticalMovementAdjustment = function () {\r\n let startOffset = vec3_create();\r\n let endOffset = vec3_create();\r\n let tempVector = vec3_create();\r\n let furtherDirection = vec3_create();\r\n let furtherDirectionPosition = vec3_create();\r\n let upNegate = vec3_create();\r\n let origin = vec3_create();\r\n let direction = vec3_create();\r\n\r\n let verticalCollisionHit = new RaycastHit();\r\n return function _verticalMovementAdjustment(verticalMovement, isMovementDownward, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugVerticalMovementEnabled;\r\n\r\n startOffset.vec3_zero();\r\n endOffset.vec3_zero();\r\n\r\n let popOutEnabled = false;\r\n let snapEnabled = false;\r\n\r\n if (isMovementDownward) {\r\n startOffset.vec3_zero();\r\n endOffset.vec3_copy(verticalMovement);\r\n\r\n if (collisionCheckParams.myGroundPopOutExtraDistance > 0 && collisionCheckParams.myGroundPopOutEnabled) {\r\n startOffset.vec3_add(up.vec3_scale(collisionCheckParams.myGroundPopOutExtraDistance + 0.00001, tempVector), startOffset);\r\n popOutEnabled = true;\r\n }\r\n } else {\r\n startOffset = up.vec3_scale(height, startOffset);\r\n endOffset = up.vec3_scale(height, endOffset).vec3_add(verticalMovement, endOffset);\r\n\r\n if (collisionCheckParams.myCeilingPopOutExtraDistance > 0 && collisionCheckParams.myCeilingPopOutEnabled) {\r\n startOffset.vec3_add(up.vec3_scale(-collisionCheckParams.myCeilingPopOutExtraDistance - 0.00001, tempVector), startOffset);\r\n popOutEnabled = true;\r\n }\r\n }\r\n\r\n if (isMovementDownward && originalMovementSign <= 0 && this._myPrevCollisionRuntimeParams.myIsOnGround && collisionCheckParams.mySnapOnGroundEnabled && collisionCheckParams.mySnapOnGroundExtraDistance > 0) {\r\n endOffset.vec3_add(up.vec3_scale(-collisionCheckParams.mySnapOnGroundExtraDistance - 0.00001, tempVector), endOffset);\r\n snapEnabled = true;\r\n } else if (!isMovementDownward && this._myPrevCollisionRuntimeParams.myIsOnCeiling && collisionCheckParams.mySnapOnCeilingEnabled && collisionCheckParams.mySnapOnCeilingExtraDistance > 0 &&\r\n (originalMovementSign > 0 || (originalMovementSign == 0 && (!this._myPrevCollisionRuntimeParams.myIsOnGround || !collisionCheckParams.mySnapOnGroundEnabled)))) {\r\n endOffset.vec3_add(up.vec3_scale(collisionCheckParams.mySnapOnCeilingExtraDistance + 0.00001, tempVector), endOffset);\r\n snapEnabled = true;\r\n }\r\n\r\n outFixedMovement.vec3_zero();\r\n if (startOffset.vec3_distance(endOffset) > 0.00001) {\r\n let checkPositions = this._getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n\r\n furtherDirection.vec3_copy(up);\r\n if (!isMovementDownward) {\r\n furtherDirection.vec3_negate(furtherDirection);\r\n }\r\n\r\n let furtherDirectionPositionSet = false;\r\n\r\n for (let i = 0; i < checkPositions.length; i++) {\r\n let currentPosition = checkPositions[i];\r\n\r\n origin = currentPosition.vec3_add(startOffset, origin);\r\n direction = currentPosition.vec3_add(endOffset, direction).vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, true, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.myHits.length > 0) {\r\n if (furtherDirectionPositionSet) {\r\n if (raycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(furtherDirectionPosition, furtherDirection)) {\r\n furtherDirectionPosition.vec3_copy(raycastResult.myHits[0].myPosition);\r\n verticalCollisionHit.copy(raycastResult.myHits[0]);\r\n }\r\n } else {\r\n furtherDirectionPositionSet = true;\r\n furtherDirectionPosition.vec3_copy(raycastResult.myHits[0].myPosition);\r\n verticalCollisionHit.copy(raycastResult.myHits[0]);\r\n }\r\n }\r\n }\r\n\r\n if (furtherDirectionPositionSet) {\r\n upNegate = up.vec3_negate(upNegate);\r\n if (isMovementDownward) {\r\n outFixedMovement = furtherDirectionPosition.vec3_sub(feetPosition, outFixedMovement).vec3_componentAlongAxis(up, outFixedMovement);\r\n\r\n if (snapEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, upNegate)) {\r\n collisionRuntimeParams.myHasSnappedOnGround = true;\r\n } else if (popOutEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, up)) {\r\n if (!outFixedMovement.vec3_isZero(0.00001) &&\r\n (verticalMovement.vec3_isZero(0.00001) || !outFixedMovement.vec3_isConcordant(verticalMovement))) {\r\n collisionRuntimeParams.myHasPoppedOutGround = true;\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n } else {\r\n outFixedMovement = furtherDirectionPosition.vec3_sub(feetPosition.vec3_add(up.vec3_scale(height, outFixedMovement), outFixedMovement), outFixedMovement).\r\n vec3_componentAlongAxis(up, outFixedMovement);\r\n\r\n if (snapEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, up)) {\r\n collisionRuntimeParams.myHasSnappedOnCeiling = true;\r\n } else if (popOutEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, upNegate)) {\r\n if (!outFixedMovement.vec3_isZero(0.00001) &&\r\n (verticalMovement.vec3_isZero(0.00001) || !outFixedMovement.vec3_isConcordant(verticalMovement))) {\r\n collisionRuntimeParams.myHasPoppedOutCeiling = true;\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n }\r\n\r\n if (!popOutEnabled && !outFixedMovement.vec3_isConcordant(verticalMovement)) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n\r\n if (!collisionCheckParams.myVerticalMovementReduceEnabled && collisionRuntimeParams.myHasReducedVerticalMovement) {\r\n outFixedMovement.vec3_zero();\r\n\r\n // #TODO Probably this should not be reset, you should be required to check if the movement was ok to be sure this values have a meaning\r\n collisionRuntimeParams.myHasSnappedOnGround = false;\r\n collisionRuntimeParams.myHasSnappedOnCeiling = false;\r\n collisionRuntimeParams.myHasPoppedOutGround = false;\r\n collisionRuntimeParams.myHasPoppedOutCeiling = false;\r\n collisionRuntimeParams.myHasReducedVerticalMovement = false;\r\n\r\n collisionRuntimeParams.myIsCollidingVertically = true;\r\n collisionRuntimeParams.myVerticalCollisionHit.copy(verticalCollisionHit);\r\n }\r\n } else {\r\n outFixedMovement.vec3_copy(verticalMovement);\r\n }\r\n } else {\r\n outFixedMovement.vec3_copy(verticalMovement);\r\n }\r\n\r\n if (outFixedMovement.vec3_length() < 0.00001) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckVertical.prototype._verticalPositionCheck = function () {\r\n let smallHeightFixOffset = vec3_create();\r\n let heightOffset = vec3_create();\r\n let startPosition = vec3_create();\r\n let endPosition = vec3_create();\r\n let direction = vec3_create();\r\n return function _verticalPositionCheck(feetPosition, checkUpward, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n if (height < 0.00001) {\r\n return true;\r\n }\r\n\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugVerticalPositionEnabled;\r\n\r\n let checkPositions = this._getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n\r\n let isVerticalPositionOk = true;\r\n let atLeastOneIsOk = false;\r\n\r\n let adjustmentEpsilon = 0.0001; // Small offset to prevent hitting with the surface where u are on\r\n smallHeightFixOffset = up.vec3_scale(adjustmentEpsilon, smallHeightFixOffset);\r\n heightOffset = up.vec3_scale(height - adjustmentEpsilon, heightOffset);\r\n if (height - adjustmentEpsilon < adjustmentEpsilon * 10) {\r\n heightOffset = up.vec3_scale(adjustmentEpsilon * 10, heightOffset);\r\n }\r\n\r\n let insideHitSet = false;\r\n for (let i = 0; i < checkPositions.length; i++) {\r\n let currentPosition = checkPositions[i];\r\n\r\n if (checkUpward) {\r\n startPosition = currentPosition.vec3_add(smallHeightFixOffset, startPosition);\r\n endPosition = currentPosition.vec3_add(heightOffset, endPosition);\r\n } else {\r\n startPosition = currentPosition.vec3_add(heightOffset, startPosition);\r\n endPosition = currentPosition.vec3_add(smallHeightFixOffset, endPosition);\r\n }\r\n\r\n let origin = startPosition;\r\n direction = endPosition.vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, false, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.isColliding()) {\r\n let firstHitOutsideCollision = raycastResult.getFirstHitOutsideCollision();\r\n if (firstHitOutsideCollision != null) {\r\n isVerticalPositionOk = false;\r\n collisionRuntimeParams.myVerticalCollisionHit.copy(firstHitOutsideCollision);\r\n break;\r\n } else if (!insideHitSet) {\r\n insideHitSet = true;\r\n collisionRuntimeParams.myVerticalCollisionHit.copy(raycastResult.myHits[0]);\r\n if (!collisionCheckParams.myVerticalAllowHitInsideCollisionIfOneOk) {\r\n isVerticalPositionOk = false;\r\n break;\r\n }\r\n }\r\n } else {\r\n atLeastOneIsOk = true;\r\n }\r\n }\r\n\r\n collisionRuntimeParams.myIsCollidingVertically = !isVerticalPositionOk || !atLeastOneIsOk;\r\n\r\n return !collisionRuntimeParams.myIsCollidingVertically;\r\n };\r\n}();\r\n\r\nCollisionCheckVertical.prototype._getVerticalCheckPositions = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let currentDirection = vec3_create();\r\n return function _getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n if (collisionCheckParams.myGroundCircumferenceAddCenter) {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n tempCheckPosition.vec3_copy(feetPosition);\r\n checkPositions.push(tempCheckPosition);\r\n }\r\n\r\n let radiusStep = collisionCheckParams.myFeetRadius / collisionCheckParams.myGroundCircumferenceStepAmount;\r\n let sliceAngle = 360 / collisionCheckParams.myGroundCircumferenceSliceAmount;\r\n let currentStepRotation = 0;\r\n for (let i = 0; i < collisionCheckParams.myGroundCircumferenceStepAmount; i++) {\r\n let currentRadius = radiusStep * (i + 1);\r\n\r\n currentDirection = forward.vec3_rotateAxis(currentStepRotation, up, currentDirection);\r\n for (let j = 0; j < collisionCheckParams.myGroundCircumferenceSliceAmount; j++) {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let sliceDirection = currentDirection.vec3_rotateAxis(sliceAngle * j, up, tempCheckPosition);\r\n checkPositions.push(feetPosition.vec3_add(sliceDirection.vec3_scale(currentRadius, sliceDirection), sliceDirection));\r\n }\r\n\r\n currentStepRotation += collisionCheckParams.myGroundCircumferenceRotationPerStep;\r\n }\r\n\r\n return checkPositions;\r\n };\r\n}();", "import { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckVertical } from \"./collision_check_vertical.js\";\r\nimport { CollisionRuntimeParams } from \"./collision_params.js\";\r\n\r\nexport class CollisionCheckMove extends CollisionCheckVertical {\r\n\r\n move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForMoveCollisionCheckDisabled(movement, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n _move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _moveStep(movement, feetPosition, transformUp, transformForward, height, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _syncCollisionRuntimeParamsWithPrevious(surfaceAdjustedHorizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckMove.prototype._move = function () {\r\n let transformUp = vec3_create();\r\n let transformForward = vec3_create();\r\n let feetPosition = vec3_create();\r\n\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n\r\n let horizontalMovement = vec3_create();\r\n let verticalMovement = vec3_create();\r\n\r\n let movementStep = vec3_create();\r\n let currentMovementStep = vec3_create();\r\n let movementChecked = vec3_create();\r\n let fixedMovement = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let fixedMovementStep = vec3_create();\r\n\r\n let previousCollisionRuntimeParams = new CollisionRuntimeParams();\r\n let previousFixedMovement = vec3_create();\r\n let previousMovementChecked = vec3_create();\r\n return function _move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n //return vec3_create();\r\n //movement = vec3_create(0, 0, -1);\r\n\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n\r\n transformUp = offsetTransformQuat.quat2_getUp(transformUp);\r\n transformForward = offsetTransformQuat.quat2_getForward(transformForward);\r\n feetPosition = offsetTransformQuat.quat2_getPosition(feetPosition);\r\n\r\n let height = collisionCheckParams.myHeight;\r\n height = height - 0.00001; // This makes it easier to setup things at the same exact height of a character so that it can go under it\r\n if (height < 0.00001) {\r\n height = 0;\r\n }\r\n //height = 1.70;\r\n\r\n horizontalMovement = movement.vec3_removeComponentAlongAxis(transformUp, horizontalMovement);\r\n if (horizontalMovement.vec3_isZero(0.000001)) {\r\n horizontalMovement.vec3_zero();\r\n }\r\n\r\n verticalMovement = movement.vec3_componentAlongAxis(transformUp, verticalMovement);\r\n if (verticalMovement.vec3_isZero(0.000001)) {\r\n verticalMovement.vec3_zero();\r\n }\r\n\r\n //feetPosition = feetPosition.vec3_add(horizontalMovement.vec3_normalize().vec3_scale(0.5));\r\n //height = height / 2;\r\n //horizontalMovement.vec3_normalize(horizontalMovement).vec3_scale(0.3, horizontalMovement); movement = horizontalMovement.vec3_add(verticalMovement);\r\n\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movement);\r\n\r\n if (!movement.vec3_isZero(0.00001) && collisionCheckParams.mySplitMovementEnabled) {\r\n let minLength = collisionCheckParams.mySplitMovementMinLengthEnabled ? collisionCheckParams.mySplitMovementMinLength : null;\r\n let maxLength = collisionCheckParams.mySplitMovementMaxLengthEnabled && collisionCheckParams.mySplitMovementMaxLength > 0 ? collisionCheckParams.mySplitMovementMaxLength : null;\r\n let maxSteps = collisionCheckParams.mySplitMovementMaxStepsEnabled && collisionCheckParams.mySplitMovementMaxSteps > 0 ? collisionCheckParams.mySplitMovementMaxSteps : 1;\r\n\r\n let movementLength = movement.vec3_length();\r\n let equalStepLength = movementLength / maxSteps;\r\n\r\n let stepLength = Math.pp_clamp(equalStepLength, minLength, maxLength);\r\n if (stepLength != equalStepLength) {\r\n movementStepAmount = Math.ceil(movementLength / stepLength);\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(stepLength, movementStep);\r\n\r\n if (collisionCheckParams.mySplitMovementMaxStepsEnabled) {\r\n movementStepAmount = Math.min(movementStepAmount, maxSteps);\r\n }\r\n } else {\r\n movementStepAmount = maxSteps;\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(equalStepLength, movementStep);\r\n }\r\n\r\n movementStepAmount = Math.max(1, movementStepAmount);\r\n\r\n if (movementStepAmount == 1) {\r\n movementStep.vec3_copy(movement);\r\n }\r\n }\r\n\r\n fixedMovement.vec3_zero();\r\n movementChecked.vec3_zero();\r\n\r\n previousCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n previousFixedMovement.vec3_copy(fixedMovement);\r\n previousMovementChecked.vec3_copy(movementChecked);\r\n\r\n let stepsPerformed = 0;\r\n let splitMovementStop = false;\r\n for (let i = 0; i < movementStepAmount; i++) {\r\n if (movementStepAmount == 1 || i != movementStepAmount - 1) {\r\n currentMovementStep.vec3_copy(movementStep);\r\n } else {\r\n currentMovementStep = movement.vec3_sub(movementChecked, currentMovementStep);\r\n }\r\n\r\n newFeetPosition = feetPosition.vec3_add(fixedMovement, newFeetPosition);\r\n fixedMovementStep.vec3_zero();\r\n fixedMovementStep = this._moveStep(currentMovementStep, newFeetPosition, transformUp, transformForward, height, true, collisionCheckParams, collisionRuntimeParams, fixedMovementStep);\r\n fixedMovement.vec3_add(fixedMovementStep, fixedMovement);\r\n\r\n movementChecked = movementChecked.vec3_add(movementStep, movementChecked);\r\n\r\n stepsPerformed = i + 1;\r\n\r\n if ((collisionRuntimeParams.myHorizontalMovementCanceled && collisionRuntimeParams.myVerticalMovementCanceled) ||\r\n (collisionRuntimeParams.myHorizontalMovementCanceled &&\r\n (collisionCheckParams.mySplitMovementStopWhenHorizontalMovementCanceled || (verticalMovement.vec3_isZero() && fixedMovementStep.vec3_isZero()))) ||\r\n (collisionRuntimeParams.myVerticalMovementCanceled &&\r\n (collisionCheckParams.mySplitMovementStopWhenVerticalMovementCanceled || (horizontalMovement.vec3_isZero() && fixedMovementStep.vec3_isZero()))) ||\r\n (collisionCheckParams.mySplitMovementStopCallback != null && collisionCheckParams.mySplitMovementStopCallback(collisionRuntimeParams))) {\r\n if (collisionCheckParams.mySplitMovementStopReturnPrevious) {\r\n collisionRuntimeParams.copy(previousCollisionRuntimeParams);\r\n fixedMovement.vec3_copy(previousFixedMovement);\r\n movementChecked.vec3_copy(previousMovementChecked);\r\n stepsPerformed -= 1;\r\n }\r\n\r\n splitMovementStop = true;\r\n break;\r\n }\r\n\r\n previousCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n previousFixedMovement.vec3_copy(fixedMovement);\r\n previousMovementChecked.vec3_copy(movementChecked);\r\n }\r\n\r\n //fixedMovement.vec3_zero();\r\n\r\n collisionRuntimeParams.mySplitMovementSteps = movementStepAmount;\r\n collisionRuntimeParams.mySplitMovementStepsPerformed = stepsPerformed;\r\n collisionRuntimeParams.mySplitMovementStop = splitMovementStop;\r\n collisionRuntimeParams.mySplitMovementMovementChecked.vec3_copy(movementChecked);\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n collisionRuntimeParams.myOffsetUp.vec3_copy(transformUp);\r\n\r\n //console.error(collisionRuntimeParams.myOriginalPosition.vec3_sub(feetPosition)[1].toFixed(3));\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalMovement.vec3_copy(movement);\r\n collisionRuntimeParams.myFixedMovement.vec3_copy(fixedMovement);\r\n\r\n collisionRuntimeParams.myNewPosition = collisionRuntimeParams.myOriginalPosition.vec3_add(collisionRuntimeParams.myFixedMovement, collisionRuntimeParams.myNewPosition);\r\n\r\n collisionRuntimeParams.myIsMove = true;\r\n };\r\n}();\r\n\r\nCollisionCheckMove.prototype._moveStep = function () {\r\n let horizontalMovement = vec3_create();\r\n let verticalMovement = vec3_create();\r\n let fixedHorizontalMovement = vec3_create();\r\n let fixedVerticalMovement = vec3_create();\r\n let horizontalDirection = vec3_create();\r\n let forwardForHorizontal = vec3_create();\r\n let forwardForVertical = vec3_create();\r\n let forwardForPerceivedAngle = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let surfaceAdjustedVerticalMovement = vec3_create();\r\n let surfaceAdjustedHorizontalMovement = vec3_create();\r\n let fixedMovement = vec3_create();\r\n\r\n let zAxis = vec3_create(0, 0, 1);\r\n let xAxis = vec3_create(1, 0, 0);\r\n return function _moveStep(movement, feetPosition, transformUp, transformForward, height, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // #TODO Refactor and split horizontal check and vertical check into: hMovement + vMovement + hPosition + vPosition?\r\n // Will make the sliding heavier, if I slide repeating all the 4 steps instead of 2 as now, but would be more correct\r\n\r\n // #TODO When on high slopes where u are not allowed to move the check does not manage to slide\r\n\r\n // #TODO When moving upward on the edge of a slope, the edge can be detected as a wall and prevent movement, while it should just keep moving\r\n\r\n horizontalMovement = movement.vec3_removeComponentAlongAxis(transformUp, horizontalMovement);\r\n if (horizontalMovement.vec3_isZero(0.000001)) {\r\n horizontalMovement.vec3_zero();\r\n }\r\n\r\n verticalMovement = movement.vec3_componentAlongAxis(transformUp, verticalMovement);\r\n if (verticalMovement.vec3_isZero(0.000001)) {\r\n verticalMovement.vec3_zero();\r\n }\r\n\r\n if (horizontalMovement.vec3_isZero()) {\r\n //return vec3_create();\r\n }\r\n\r\n //collisionCheckParams.myDebugEnabled = true;\r\n\r\n this._myPrevCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n collisionRuntimeParams.reset();\r\n\r\n surfaceAdjustedHorizontalMovement = this._adjustHorizontalMovementWithSurface(horizontalMovement, verticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, surfaceAdjustedHorizontalMovement);\r\n if (surfaceAdjustedHorizontalMovement.vec3_isZero(0.00001)) {\r\n surfaceAdjustedHorizontalMovement.vec3_zero();\r\n }\r\n\r\n this._syncCollisionRuntimeParamsWithPrevious(surfaceAdjustedHorizontalMovement, verticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams);\r\n\r\n {\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n if (!collisionCheckParams.myCheckHorizontalFixedForwardEnabled) {\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForHorizontal = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForHorizontal);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForHorizontal = horizontalMovement.vec3_normalize(forwardForHorizontal);\r\n } else {\r\n forwardForHorizontal.vec3_copy(transformForward);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckHorizontalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForHorizontal.vec3_copy(xAxis);\r\n } else {\r\n forwardForHorizontal.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForHorizontal = forwardForHorizontal.vec3_removeComponentAlongAxis(transformUp, forwardForHorizontal);\r\n forwardForHorizontal = forwardForHorizontal.vec3_normalize(forwardForHorizontal);\r\n\r\n if (forwardForHorizontal.vec_equals(collisionCheckParams.myCheckHorizontalFixedForward, 0.00001)) {\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n }\r\n }\r\n\r\n fixedHorizontalMovement.vec3_zero();\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n fixedHorizontalMovement = this._horizontalCheck(surfaceAdjustedHorizontalMovement, feetPosition, height, transformUp, forwardForHorizontal, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, false, fixedHorizontalMovement);\r\n //collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n //collisionRuntimeParams.myHorizontalCollisionHit.myNormal = vec3_create(0, 0, 1);\r\n if (collisionCheckParams.mySlidingEnabled && collisionRuntimeParams.myIsCollidingHorizontally && this._isSlidingNormalValid(surfaceAdjustedHorizontalMovement, transformUp, collisionRuntimeParams)) {\r\n fixedHorizontalMovement = this._horizontalSlide(surfaceAdjustedHorizontalMovement, feetPosition, height, transformUp, forwardForHorizontal, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, fixedHorizontalMovement);\r\n } else {\r\n //console.error(\"no slide\");\r\n }\r\n }\r\n\r\n if (fixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n fixedHorizontalMovement.vec3_zero();\r\n }\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero() && fixedHorizontalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myHorizontalMovementCanceled = true;\r\n }\r\n }\r\n\r\n {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n if (fixedHorizontalMovement.vec3_isZero()) {\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForVertical = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForVertical);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForVertical = horizontalMovement.vec3_normalize(forwardForVertical);\r\n } else {\r\n forwardForVertical.vec3_copy(transformForward);\r\n }\r\n } else {\r\n forwardForVertical = fixedHorizontalMovement.vec3_normalize(forwardForVertical);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckVerticalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForVertical.vec3_copy(xAxis);\r\n } else {\r\n forwardForVertical.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForVertical = forwardForVertical.vec3_removeComponentAlongAxis(transformUp, forwardForVertical);\r\n forwardForVertical = forwardForVertical.vec3_normalize(forwardForVertical);\r\n\r\n if (forwardForVertical.vec_equals(collisionCheckParams.myCheckVerticalFixedForward, 0.00001)) {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n }\r\n }\r\n\r\n //collisionCheckParams.myDebugEnabled = false;\r\n\r\n surfaceAdjustedVerticalMovement = this._adjustVerticalMovementWithSurface(fixedHorizontalMovement, verticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, surfaceAdjustedVerticalMovement);\r\n\r\n newFeetPosition = feetPosition.vec3_add(fixedHorizontalMovement, newFeetPosition);\r\n let originalMovementSign = Math.pp_sign(verticalMovement.vec3_lengthSigned(transformUp), 0);\r\n\r\n fixedVerticalMovement.vec3_zero();\r\n fixedVerticalMovement = this._verticalCheck(surfaceAdjustedVerticalMovement, originalMovementSign, newFeetPosition, height, transformUp, forwardForVertical, collisionCheckParams, collisionRuntimeParams, fixedVerticalMovement);\r\n\r\n if (fixedVerticalMovement.vec3_isZero(0.000001)) {\r\n fixedVerticalMovement.vec3_zero();\r\n }\r\n }\r\n\r\n outFixedMovement.vec3_zero();\r\n if (!collisionRuntimeParams.myIsCollidingVertically) {\r\n outFixedMovement = fixedHorizontalMovement.vec3_add(fixedVerticalMovement, outFixedMovement);\r\n } else {\r\n collisionRuntimeParams.myHorizontalMovementCanceled = true;\r\n collisionRuntimeParams.myVerticalMovementCanceled = true;\r\n fixedHorizontalMovement.vec3_zero();\r\n fixedVerticalMovement.vec3_zero();\r\n\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForVertical = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForVertical);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForVertical = horizontalMovement.vec3_normalize(forwardForVertical);\r\n } else {\r\n forwardForVertical.vec3_copy(transformForward);\r\n }\r\n }\r\n }\r\n\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n\r\n if (!fixedHorizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = fixedHorizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = horizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n }\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero() && !collisionRuntimeParams.myHorizontalMovementCanceled) {\r\n let surfaceCheckOk = this._postSurfaceCheck(fixedHorizontalMovement, fixedVerticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams);\r\n\r\n if (!surfaceCheckOk) {\r\n collisionRuntimeParams.myHorizontalMovementCanceled = true;\r\n collisionRuntimeParams.myVerticalMovementCanceled = true;\r\n fixedHorizontalMovement.vec3_zero();\r\n fixedVerticalMovement.vec3_zero();\r\n outFixedMovement.vec3_zero();\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = horizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else {\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n }\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled && collisionCheckParams.myRegatherGroundInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnGround = this._myPrevCollisionRuntimeParams.myRealIsOnGround;\r\n collisionRuntimeParams.myIsOnGround = this._myPrevCollisionRuntimeParams.myIsOnGround;\r\n collisionRuntimeParams.myGroundCollisionHit.copy(this._myPrevCollisionRuntimeParams.myGroundCollisionHit);\r\n collisionRuntimeParams.myGroundAngle = this._myPrevCollisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundPerceivedAngle = this._myPrevCollisionRuntimeParams.myGroundPerceivedAngle;\r\n collisionRuntimeParams.myGroundNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundHitMaxAngle = this._myPrevCollisionRuntimeParams.myGroundHitMaxAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundHitMaxNormal);\r\n collisionRuntimeParams.myGroundDistance = this._myPrevCollisionRuntimeParams.myGroundDistance;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myGroundIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision;\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled && collisionCheckParams.myRegatherCeilingInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnCeiling = this._myPrevCollisionRuntimeParams.myRealIsOnCeiling;\r\n collisionRuntimeParams.myIsOnCeiling = this._myPrevCollisionRuntimeParams.myIsOnCeiling;\r\n collisionRuntimeParams.myCeilingCollisionHit.copy(this._myPrevCollisionRuntimeParams.myCeilingCollisionHit);\r\n collisionRuntimeParams.myCeilingAngle = this._myPrevCollisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = this._myPrevCollisionRuntimeParams.myCeilingPerceivedAngle;\r\n collisionRuntimeParams.myCeilingNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = this._myPrevCollisionRuntimeParams.myCeilingHitMaxAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingHitMaxNormal);\r\n collisionRuntimeParams.myCeilingDistance = this._myPrevCollisionRuntimeParams.myCeilingDistance;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myCeilingIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision;\r\n }\r\n }\r\n }\r\n\r\n //return outFixedMovement.vec3_zero(); \r\n\r\n if (collisionCheckParams.myExtraMovementCheckCallback != null) {\r\n fixedMovement.vec3_copy(outFixedMovement);\r\n outFixedMovement = collisionCheckParams.myExtraMovementCheckCallback(\r\n movement, fixedMovement, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, this._myPrevCollisionRuntimeParams, collisionRuntimeParams, outFixedMovement);\r\n\r\n fixedHorizontalMovement = outFixedMovement.vec3_removeComponentAlongAxis(transformUp, fixedHorizontalMovement);\r\n fixedVerticalMovement = outFixedMovement.vec3_componentAlongAxis(transformUp, fixedVerticalMovement);\r\n }\r\n\r\n {\r\n if (collisionCheckParams.mySlidingAdjustSign90Degrees) {\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !collisionRuntimeParams.myIsSliding && !fixedHorizontalMovement.vec3_isZero()) {\r\n /* let angleWithPreviousThreshold = 0.5;\r\n check use surfaceAdjustedHorizontalMovement instead of horizontalMovement if re-enable this\r\n \r\n if (!this._myPrevCollisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_isZero() && !horizontalMovement.vec3_isZero() &&\r\n horizontalMovement.vec3_angle(this._myPrevCollisionRuntimeParams.myLastValidOriginalHorizontalMovement) > angleWithPreviousThreshold) {\r\n collisionRuntimeParams.mySliding90DegreesSign = horizontalMovement.vec3_signTo(this._myPrevCollisionRuntimeParams.myLastValidOriginalHorizontalMovement, transformUp);\r\n console.error(\"sp\", collisionRuntimeParams.mySliding90DegreesSign, collisionRuntimeParams.myIsSliding);\r\n } */\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = true;\r\n //console.error(\"empty renew\");\r\n }\r\n }\r\n\r\n if (!horizontalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_copy(horizontalMovement);\r\n }\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(surfaceAdjustedHorizontalMovement);\r\n }\r\n\r\n if (!verticalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidOriginalVerticalMovement.vec3_copy(verticalMovement);\r\n }\r\n\r\n if (!surfaceAdjustedVerticalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(surfaceAdjustedVerticalMovement);\r\n }\r\n\r\n if (!fixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n collisionRuntimeParams.myLastValidIsSliding = collisionRuntimeParams.myIsSliding;\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = false;\r\n collisionRuntimeParams.myLastValidEndHorizontalMovement.vec3_copy(fixedHorizontalMovement);\r\n //fixedHorizontalMovement.vec_error();\r\n\r\n if (!collisionRuntimeParams.myIsSliding) {\r\n //console.error(\"not sliding\");\r\n } else {\r\n //console.error(\"sliding\", collisionRuntimeParams.myIsSlidingFlickerPrevented, collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter);\r\n }\r\n } else {\r\n //console.error(\"still\", collisionRuntimeParams.myIsSlidingFlickerPrevented, collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter);\r\n }\r\n\r\n if (!fixedVerticalMovement.vec3_isZero(0.000001)) {\r\n collisionRuntimeParams.myLastValidEndVerticalMovement.vec3_copy(fixedVerticalMovement);\r\n }\r\n }\r\n\r\n let moveStepFixed = false;\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !fixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n horizontalDirection = fixedHorizontalMovement.vec3_normalize(horizontalDirection);\r\n let surfaceTooSteepResults = this._surfaceTooSteep(transformUp, horizontalDirection, collisionCheckParams, this._myPrevCollisionRuntimeParams);\r\n if (surfaceTooSteepResults[0] || surfaceTooSteepResults[1]) {\r\n horizontalDirection = fixedHorizontalMovement.vec3_normalize(horizontalDirection);\r\n let newSurfaceTooSteepResults = this._surfaceTooSteep(transformUp, horizontalDirection, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if ((surfaceTooSteepResults[0] && newSurfaceTooSteepResults[0]) ||\r\n (surfaceTooSteepResults[1] && newSurfaceTooSteepResults[1]) ||\r\n !allowSurfaceSteepFix ||\r\n (surfaceTooSteepResults[0] && !collisionCheckParams.myAllowGroundSteepFix) ||\r\n (surfaceTooSteepResults[1] && !collisionCheckParams.myAllowCeilingSteepFix)) {\r\n outFixedMovement.vec3_zero();\r\n collisionRuntimeParams.copy(this._myPrevCollisionRuntimeParams);\r\n this._moveStep(movement, feetPosition, transformUp, transformForward, height, false, collisionCheckParams, collisionRuntimeParams, outFixedMovement);\r\n moveStepFixed = true;\r\n }\r\n }\r\n }\r\n\r\n if (!moveStepFixed) {\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugMovementEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n this._debugMovement(movement, outFixedMovement, newFeetPosition, transformUp, collisionCheckParams);\r\n }\r\n\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugRuntimeParamsEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n this._debugRuntimeParams(collisionRuntimeParams);\r\n }\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckMove.prototype._syncCollisionRuntimeParamsWithPrevious = function () {\r\n let previousFixedHorizontalMovement = vec3_create();\r\n return function _syncCollisionRuntimeParamsWithPrevious(surfaceAdjustedHorizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = previousCollisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n //console.error(\"prevented\", collisionRuntimeParams.myIsSlidingFlickerPrevented);\r\n\r\n collisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidOriginalHorizontalMovement);\r\n collisionRuntimeParams.myLastValidOriginalVerticalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidOriginalVerticalMovement);\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement);\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement);\r\n collisionRuntimeParams.myLastValidIsSliding = previousCollisionRuntimeParams.myLastValidIsSliding;\r\n\r\n collisionRuntimeParams.mySliding90DegreesSign = previousCollisionRuntimeParams.mySliding90DegreesSign;\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = previousCollisionRuntimeParams.mySlidingRecompute90DegreesSign;\r\n if (collisionCheckParams.mySlidingAdjustSign90Degrees) {\r\n let angleWithPreviousThreshold = 0.5;\r\n if (!previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_isZero() && !surfaceAdjustedHorizontalMovement.vec3_isZero() &&\r\n surfaceAdjustedHorizontalMovement.vec3_angle(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement) > angleWithPreviousThreshold) {\r\n //previousFixedHorizontalMovement = previousCollisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(up, previousFixedHorizontalMovement);\r\n if (!previousCollisionRuntimeParams.myLastValidIsSliding) {\r\n let angleSigned = surfaceAdjustedHorizontalMovement.vec3_angleSigned(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement, up);\r\n let angleSignedThreshold = 10;\r\n if (Math.abs(angleSigned) < 180 - angleSignedThreshold) {\r\n collisionRuntimeParams.mySliding90DegreesSign = Math.pp_sign(angleSigned);\r\n //console.error(\"special sign\");\r\n }\r\n }\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = true;\r\n //console.error(\"direction new\");\r\n }\r\n }\r\n\r\n previousFixedHorizontalMovement = previousCollisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(up, previousFixedHorizontalMovement);\r\n if (previousFixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n collisionRuntimeParams.mySlidingPreviousHorizontalMovement.vec3_copy(previousCollisionRuntimeParams.mySlidingPreviousHorizontalMovement);\r\n } else {\r\n collisionRuntimeParams.mySlidingPreviousHorizontalMovement.vec3_copy(previousFixedHorizontalMovement);\r\n }\r\n };\r\n}();", "import { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckMove } from \"./collision_check_move.js\";\r\n\r\nexport class CollisionCheckTeleport extends CollisionCheckMove {\r\n\r\n // #TODO Add teleport position/transform and return originalteleportransform\r\n // instead of position old transform / new transform\r\n teleport(position, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForTeleportCollisionCheckDisabled(position, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._teleport(position, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n _teleport(teleportPosition, transformQuat, collisionCheckParams, collisionRuntimeParams, isPositionCheck = false) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckTeleport.prototype._teleport = function () {\r\n let transformUp = vec3_create();\r\n let transformForward = vec3_create();\r\n let feetPosition = vec3_create();\r\n let originalFeetPosition = vec3_create();\r\n\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n\r\n let feetPositionOffsetToOriginal = vec3_create();\r\n let offsetTeleportPosition = vec3_create();\r\n\r\n let zero = vec3_create();\r\n let forwardForHorizontal = vec3_create();\r\n let forwardForVertical = vec3_create();\r\n let forwardForPerceivedAngle = vec3_create();\r\n let fixedHorizontalMovement = vec3_create();\r\n let fixedVerticalMovement = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let endPosition = vec3_create();\r\n\r\n let zAxis = vec3_create(0, 0, 1);\r\n let xAxis = vec3_create(1, 0, 0);\r\n return function _teleport(teleportPosition, transformQuat, collisionCheckParams, collisionRuntimeParams, isPositionCheck = false) {\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n\r\n transformUp = offsetTransformQuat.quat2_getUp(transformUp);\r\n transformForward = offsetTransformQuat.quat2_getForward(transformForward);\r\n feetPosition = offsetTransformQuat.quat2_getPosition(feetPosition);\r\n\r\n offsetTeleportPosition.vec3_copy(teleportPosition);\r\n originalFeetPosition = transformQuat.quat2_getPosition(originalFeetPosition);\r\n feetPositionOffsetToOriginal = originalFeetPosition.vec3_sub(feetPosition, feetPositionOffsetToOriginal);\r\n if (feetPositionOffsetToOriginal.vec3_isZero(0.00001)) {\r\n feetPositionOffsetToOriginal.vec3_zero();\r\n } else {\r\n offsetTeleportPosition = offsetTeleportPosition.vec3_sub(feetPositionOffsetToOriginal, offsetTeleportPosition);\r\n }\r\n\r\n\r\n let height = collisionCheckParams.myHeight;\r\n height = height - 0.00001; // This makes it easier to setup things at the same exact height of a character so that it can go under it\r\n if (height < 0.00001) {\r\n height = 0;\r\n }\r\n //height = 1.70;\r\n\r\n this._myPrevCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n collisionRuntimeParams.reset();\r\n\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n if (!collisionCheckParams.myCheckHorizontalFixedForwardEnabled) {\r\n forwardForHorizontal.vec3_copy(transformForward);\r\n } else {\r\n if (collisionCheckParams.myCheckHorizontalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForHorizontal.vec3_copy(xAxis);\r\n } else {\r\n forwardForHorizontal.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForHorizontal = forwardForHorizontal.vec3_removeComponentAlongAxis(transformUp, forwardForHorizontal);\r\n forwardForHorizontal = forwardForHorizontal.vec3_normalize(forwardForHorizontal);\r\n\r\n if (forwardForHorizontal.vec_equals(collisionCheckParams.myCheckHorizontalFixedForward, 0.00001)) {\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n }\r\n }\r\n\r\n fixedHorizontalMovement = this._horizontalCheck(zero, offsetTeleportPosition, height, transformUp, forwardForHorizontal, false, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, false, fixedHorizontalMovement);\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n newFeetPosition = offsetTeleportPosition.vec3_add(fixedHorizontalMovement, newFeetPosition);\r\n\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n forwardForVertical.vec3_copy(transformForward);\r\n } else {\r\n if (collisionCheckParams.myCheckVerticalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForVertical.vec3_copy(xAxis);\r\n } else {\r\n forwardForVertical.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForVertical = forwardForVertical.vec3_removeComponentAlongAxis(transformUp, forwardForVertical);\r\n forwardForVertical = forwardForVertical.vec3_normalize(forwardForVertical);\r\n\r\n if (forwardForVertical.vec_equals(collisionCheckParams.myCheckVerticalFixedForward, 0.00001)) {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n }\r\n }\r\n\r\n let downward = -1;\r\n fixedVerticalMovement = this._verticalCheck(zero, downward, newFeetPosition, height, transformUp, forwardForVertical, collisionCheckParams, collisionRuntimeParams, fixedVerticalMovement);\r\n if (!collisionRuntimeParams.myIsCollidingVertically) {\r\n newFeetPosition = newFeetPosition.vec3_add(fixedVerticalMovement, newFeetPosition);\r\n\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsOnGround) {\r\n if ((collisionCheckParams.myTeleportMustBeOnGround && !isPositionCheck)\r\n || (collisionCheckParams.myCheckTransformMustBeOnGround && isPositionCheck)) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsOnCeiling) {\r\n if ((collisionCheckParams.myTeleportMustBeOnCeiling && !isPositionCheck)\r\n || (collisionCheckParams.myCheckTransformMustBeOnCeiling && isPositionCheck)) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (collisionRuntimeParams.myIsOnGround) {\r\n let minAngle = null;\r\n if (!isPositionCheck) {\r\n if (collisionCheckParams.myTeleportMustBeOnIgnorableGroundAngle) {\r\n minAngle = collisionCheckParams.myGroundAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myTeleportMustBeOnGroundAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myTeleportMustBeOnGroundAngle);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckTransformMustBeOnIgnorableGroundAngle) {\r\n minAngle = collisionCheckParams.myGroundAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myCheckTransformMustBeOnGroundAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myCheckTransformMustBeOnGroundAngle);\r\n }\r\n }\r\n\r\n if (minAngle != null && collisionRuntimeParams.myGroundAngle > minAngle + 0.0001) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (collisionRuntimeParams.myIsOnCeiling) {\r\n let minAngle = null;\r\n if (!isPositionCheck) {\r\n if (collisionCheckParams.myTeleportMustBeOnIgnorableCeilingAngle) {\r\n minAngle = collisionCheckParams.myCeilingAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myTeleportMustBeOnCeilingAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myTeleportMustBeOnCeilingAngle);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckTransformMustBeOnIgnorableCeilingAngle) {\r\n minAngle = collisionCheckParams.myCeilingAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myCheckTransformMustBeOnCeilingAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myCheckTransformMustBeOnCeilingAngle);\r\n }\r\n }\r\n\r\n if (minAngle != null && collisionRuntimeParams.myCeilingAngle > minAngle + 0.0001) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (collisionRuntimeParams.myTeleportCanceled) {\r\n if (collisionCheckParams.myComputeGroundInfoEnabled && collisionCheckParams.myRegatherGroundInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnGround = this._myPrevCollisionRuntimeParams.myRealIsOnGround;\r\n collisionRuntimeParams.myIsOnGround = this._myPrevCollisionRuntimeParams.myIsOnGround;\r\n collisionRuntimeParams.myGroundCollisionHit.copy(this._myPrevCollisionRuntimeParams.myGroundCollisionHit);\r\n collisionRuntimeParams.myGroundAngle = this._myPrevCollisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundPerceivedAngle = this._myPrevCollisionRuntimeParams.myGroundPerceivedAngle;\r\n collisionRuntimeParams.myGroundNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundHitMaxAngle = this._myPrevCollisionRuntimeParams.myGroundHitMaxAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundHitMaxNormal);\r\n collisionRuntimeParams.myGroundDistance = this._myPrevCollisionRuntimeParams.myGroundDistance;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myGroundIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision;\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled && collisionCheckParams.myRegatherCeilingInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnCeiling = this._myPrevCollisionRuntimeParams.myRealIsOnCeiling;\r\n collisionRuntimeParams.myIsOnCeiling = this._myPrevCollisionRuntimeParams.myIsOnCeiling;\r\n collisionRuntimeParams.myCeilingCollisionHit.copy(this._myPrevCollisionRuntimeParams.myCeilingCollisionHit);\r\n collisionRuntimeParams.myCeilingAngle = this._myPrevCollisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = this._myPrevCollisionRuntimeParams.myCeilingPerceivedAngle;\r\n collisionRuntimeParams.myCeilingNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = this._myPrevCollisionRuntimeParams.myCeilingHitMaxAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingHitMaxNormal);\r\n collisionRuntimeParams.myCeilingDistance = this._myPrevCollisionRuntimeParams.myCeilingDistance;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myCeilingIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision;\r\n }\r\n }\r\n\r\n // Regather surface if invalid else use before\r\n } else {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n } else {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n\r\n if (!isPositionCheck) {\r\n if (collisionCheckParams.myExtraTeleportCheckCallback != null) {\r\n endPosition.vec3_copy(newFeetPosition);\r\n newFeetPosition = collisionCheckParams.myExtraTeleportCheckCallback(\r\n offsetTeleportPosition, endPosition, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, this._myPrevCollisionRuntimeParams, collisionRuntimeParams, newFeetPosition);\r\n }\r\n } else {\r\n if (collisionCheckParams.myExtraCheckTransformCheckCallback != null) {\r\n endPosition.vec3_copy(newFeetPosition);\r\n newFeetPosition = collisionCheckParams.myExtraCheckTransformCheckCallback(\r\n endPosition, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, this._myPrevCollisionRuntimeParams, collisionRuntimeParams, newFeetPosition);\r\n }\r\n }\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n collisionRuntimeParams.myOffsetUp.vec3_copy(transformUp);\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_copy(teleportPosition);\r\n\r\n if (!collisionRuntimeParams.myTeleportCanceled) {\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_copy(newFeetPosition);\r\n if (!feetPositionOffsetToOriginal.vec3_isZero(0.00001)) {\r\n collisionRuntimeParams.myFixedTeleportPosition = collisionRuntimeParams.myFixedTeleportPosition.vec3_add(feetPositionOffsetToOriginal, collisionRuntimeParams.myFixedTeleportPosition);\r\n }\r\n\r\n collisionRuntimeParams.myNewPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n } else {\r\n collisionRuntimeParams.myNewPosition.vec3_copy(collisionRuntimeParams.myOriginalPosition);\r\n }\r\n\r\n collisionRuntimeParams.myIsTeleport = true;\r\n\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugRuntimeParamsEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n this._debugRuntimeParams(collisionRuntimeParams);\r\n }\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckTeleport } from \"./collision_check_teleport.js\";\r\n\r\nexport class CollisionCheckPosition extends CollisionCheckTeleport {\r\n\r\n positionCheck(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForPositionCheckCollisionCheckDisabled(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._positionCheck(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n _positionCheck(allowAdjustments, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckPosition.prototype._positionCheck = function () {\r\n let feetPosition = vec3_create();\r\n return function _positionCheck(allowAdjustments, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n feetPosition = transformQuat.quat2_getPosition(feetPosition);\r\n\r\n this._teleport(feetPosition, transformQuat, collisionCheckParams, collisionRuntimeParams, true);\r\n\r\n collisionRuntimeParams.myIsPositionOk = !collisionRuntimeParams.myTeleportCanceled;\r\n collisionRuntimeParams.myIsPositionCheck = true;\r\n collisionRuntimeParams.myOriginalPositionCheckPosition.vec3_copy(collisionRuntimeParams.myOriginalTeleportPosition);\r\n collisionRuntimeParams.myFixedPositionCheckPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n collisionRuntimeParams.myIsPositionCheckAllowAdjustments = allowAdjustments;\r\n\r\n if (!allowAdjustments) {\r\n collisionRuntimeParams.myIsPositionOk = collisionRuntimeParams.myIsPositionOk &&\r\n collisionRuntimeParams.myOriginalPositionCheckPosition.vec_equals(collisionRuntimeParams.myFixedPositionCheckPosition, 0.00001);\r\n }\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myTeleportCanceled = false;\r\n collisionRuntimeParams.myIsTeleport = false;\r\n };\r\n}();", "import { CollisionCheckPosition } from \"./collision_check_position.js\";\r\n\r\nexport class CollisionCheck extends CollisionCheckPosition {\r\n\r\n}", "import { quat_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { CharacterCollisionCheckType, CharacterCollisionResults } from \"./character_collision_results.js\";\r\nimport { CollisionCheck } from \"./legacy/collision_check/collision_check.js\";\r\nimport { CollisionCheckParams, CollisionRuntimeParams } from \"./legacy/collision_check/collision_params.js\";\r\n\r\nlet _myCollisionChecks = new WeakMap();\r\n\r\nexport function getCollisionCheck(engine = Globals.getMainEngine()) {\r\n return _myCollisionChecks.get(engine);\r\n}\r\n\r\nexport function setCollisionCheck(collisionCheck, engine = Globals.getMainEngine()) {\r\n _myCollisionChecks.set(engine, collisionCheck);\r\n}\r\n\r\nexport function isCollisionCheckDisabled(engine = Globals.getMainEngine()) {\r\n let collisionCheck = CollisionCheckBridge.getCollisionCheck(engine);\r\n\r\n if (collisionCheck != null) {\r\n return collisionCheck.isCollisionCheckDisabled();\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function setCollisionCheckDisabled(collisionCheckDisabled, engine = Globals.getMainEngine()) {\r\n let collisionCheck = CollisionCheckBridge.getCollisionCheck(engine);\r\n\r\n if (collisionCheck != null) {\r\n collisionCheck.setCollisionCheckDisabled(collisionCheckDisabled);\r\n }\r\n}\r\n\r\nexport function initBridge(engine = Globals.getMainEngine()) {\r\n if (!_myCollisionChecks.has(engine)) {\r\n CollisionCheckBridge.setCollisionCheck(new CollisionCheck(engine), engine);\r\n }\r\n}\r\n\r\nexport let checkMovement = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function checkMovement(movement, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n CollisionCheckBridge.getCollisionCheck(engine).move(movement, currentTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let checkTeleportToTransform = function () {\r\n let teleportPosition = vec3_create();\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n teleportPosition = teleportTransformQuat.quat2_getPosition(teleportPosition);\r\n CollisionCheckBridge.getCollisionCheck(engine).teleport(teleportPosition, teleportTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let checkTransform = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function checkTransform(checkTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n CollisionCheckBridge.getCollisionCheck(engine).positionCheck(true, checkTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, checkTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let updateGroundInfo = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n collisionCheckParams.myComputeCeilingInfoEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(engine).updateSurfaceInfo(currentTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let updateCeilingInfo = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n collisionCheckParams.myComputeGroundInfoEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(engine).updateSurfaceInfo(currentTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport function convertCharacterCollisionResultsToCollisionRuntimeParams(characterCollisionResults, outCollisionRuntimeParams) {\r\n outCollisionRuntimeParams.reset();\r\n\r\n characterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myOriginalPosition);\r\n characterCollisionResults.myTransformResults.myFinalTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myNewPosition);\r\n\r\n characterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_getForward(outCollisionRuntimeParams.myOriginalForward);\r\n characterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_getUp(outCollisionRuntimeParams.myOriginalUp);\r\n\r\n // Ok: outCollisionRuntimeParams.myOriginalHeight = characterCollisionResults.myOriginalHeight;\r\n\r\n outCollisionRuntimeParams.myOriginalMovement.vec3_copy(characterCollisionResults.myMovementResults.myInitialMovement);\r\n outCollisionRuntimeParams.myFixedMovement.vec3_copy(characterCollisionResults.myMovementResults.myFinalMovement);\r\n\r\n outCollisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantInitialHorizontalMovement);\r\n outCollisionRuntimeParams.myLastValidOriginalVerticalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantInitialVerticalMovement);\r\n\r\n outCollisionRuntimeParams.myLastValidEndHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantFinalHorizontalMovement);\r\n outCollisionRuntimeParams.myLastValidEndVerticalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantFinalVerticalMovement);\r\n\r\n outCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialHorizontalMovement);\r\n outCollisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialVerticalMovement);\r\n\r\n outCollisionRuntimeParams.myIsOnGround = characterCollisionResults.myGroundInfo.myOnSurface;\r\n outCollisionRuntimeParams.myGroundCollisionHit.copy(characterCollisionResults.myGroundInfo.mySurfaceReferenceCollisionHit);\r\n outCollisionRuntimeParams.myGroundAngle = characterCollisionResults.myGroundInfo.mySurfaceAngle;\r\n outCollisionRuntimeParams.myGroundPerceivedAngle = characterCollisionResults.myGroundInfo.mySurfacePerceivedAngle;\r\n outCollisionRuntimeParams.myGroundNormal.vec3_copy(characterCollisionResults.myGroundInfo.mySurfaceNormal);\r\n outCollisionRuntimeParams.myGroundHitMaxAngle = characterCollisionResults.myGroundInfo.mySurfaceHitMaxAngle;\r\n outCollisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(characterCollisionResults.myGroundInfo.mySurfaceHitMaxNormal);\r\n outCollisionRuntimeParams.myGroundDistance = characterCollisionResults.myGroundInfo.mySurfaceDistance;\r\n outCollisionRuntimeParams.myGroundIsBaseInsideCollision = characterCollisionResults.myGroundInfo.myBaseInsideCollision;\r\n outCollisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = characterCollisionResults.myGroundInfo.myOnSurfaceDueToBasePartiallyInsideCollision;\r\n\r\n outCollisionRuntimeParams.myIsOnCeiling = characterCollisionResults.myCeilingInfo.myOnSurface;\r\n outCollisionRuntimeParams.myCeilingCollisionHit.copy(characterCollisionResults.myCeilingInfo.mySurfaceReferenceCollisionHit);\r\n outCollisionRuntimeParams.myCeilingAngle = characterCollisionResults.myCeilingInfo.mySurfaceAngle;\r\n outCollisionRuntimeParams.myCeilingPerceivedAngle = characterCollisionResults.myCeilingInfo.mySurfacePerceivedAngle;\r\n outCollisionRuntimeParams.myCeilingNormal.vec3_copy(characterCollisionResults.myCeilingInfo.mySurfaceNormal);\r\n outCollisionRuntimeParams.myCeilingHitMaxAngle = characterCollisionResults.myCeilingInfo.mySurfaceHitMaxAngle;\r\n outCollisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(characterCollisionResults.myCeilingInfo.mySurfaceHitMaxNormal);\r\n outCollisionRuntimeParams.myCeilingDistance = characterCollisionResults.myCeilingInfo.mySurfaceDistance;\r\n outCollisionRuntimeParams.myCeilingIsBaseInsideCollision = characterCollisionResults.myCeilingInfo.myBaseInsideCollision;\r\n outCollisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = characterCollisionResults.myCeilingInfo.myOnSurfaceDueToBasePartiallyInsideCollision;\r\n\r\n outCollisionRuntimeParams.myHorizontalMovementCanceled = characterCollisionResults.myHorizontalMovementResults.myMovementFailed;\r\n outCollisionRuntimeParams.myIsCollidingHorizontally = characterCollisionResults.myHorizontalMovementResults.myMovementCollided;\r\n outCollisionRuntimeParams.myHorizontalCollisionHit.copy(characterCollisionResults.myHorizontalMovementResults.myReferenceCollisionHit);\r\n\r\n outCollisionRuntimeParams.myVerticalMovementCanceled = characterCollisionResults.myVerticalMovementResults.myMovementFailed;\r\n outCollisionRuntimeParams.myIsCollidingVertically = characterCollisionResults.myVerticalMovementResults.myMovementCollided;\r\n outCollisionRuntimeParams.myVerticalCollisionHit.copy(characterCollisionResults.myVerticalMovementResults.myReferenceCollisionHit);\r\n\r\n outCollisionRuntimeParams.myHasSnappedOnGround = characterCollisionResults.myGroundResults.myHasSnappedOnSurface;\r\n outCollisionRuntimeParams.myHasSnappedOnCeiling = characterCollisionResults.myCeilingResults.myHasSnappedOnSurface;\r\n outCollisionRuntimeParams.myHasPoppedOutGround = characterCollisionResults.myGroundResults.myHasPoppedOutSurface;\r\n outCollisionRuntimeParams.myHasPoppedOutCeiling = characterCollisionResults.myCeilingResults.myHasPoppedOutSurface;\r\n\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = characterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = characterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = characterCollisionResults.myGroundResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill;\r\n\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = characterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = characterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = characterCollisionResults.myCeilingResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill;\r\n\r\n // Ok: outCollisionRuntimeParams.myHasReducedVerticalMovement = characterCollisionResults.myVerticalMovementResults.myHasMovementBeenReduced;\r\n\r\n outCollisionRuntimeParams.myIsSliding = characterCollisionResults.myWallSlideResults.myHasSlid;\r\n outCollisionRuntimeParams.mySlidingMovementAngle = characterCollisionResults.myWallSlideResults.mySlideMovementAngle;\r\n outCollisionRuntimeParams.mySlidingCollisionAngle = characterCollisionResults.myWallSlideResults.mySlideMovementWallAngle;\r\n outCollisionRuntimeParams.mySlidingWallNormal.vec3_copy(characterCollisionResults.myWallSlideResults.myWallNormal);\r\n\r\n outCollisionRuntimeParams.myIsSlidingIntoOppositeDirection = characterCollisionResults.myInternalResults.myHasWallSlidTowardOppositeDirection;\r\n outCollisionRuntimeParams.myIsSlidingFlickerPrevented = characterCollisionResults.myInternalResults.myLastRelevantWallSlideFlickerPrevented;\r\n outCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter = characterCollisionResults.myInternalResults.myWallSlideFlickerPreventionForceCheckCounter;\r\n outCollisionRuntimeParams.mySliding90DegreesSign = characterCollisionResults.myInternalResults.myWallSlide90DegreesDirectionSign;\r\n outCollisionRuntimeParams.mySlidingRecompute90DegreesSign = characterCollisionResults.myInternalResults.myWallSlide90DegreesRecomputeDirectionSign;\r\n outCollisionRuntimeParams.myLastValidIsSliding = characterCollisionResults.myInternalResults.myLastRelevantHasWallSlid;\r\n outCollisionRuntimeParams.mySlidingPreviousHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantFinalHorizontalMovement);\r\n\r\n outCollisionRuntimeParams.myOriginalTeleportPosition.vec3_copy(characterCollisionResults.myTeleportResults.myInitialTeleportTransformQuat);\r\n outCollisionRuntimeParams.myFixedTeleportPosition.vec3_copy(characterCollisionResults.myTeleportResults.myFinalTeleportTransformQuat);\r\n outCollisionRuntimeParams.myTeleportCanceled = characterCollisionResults.myTeleportResults.myTeleportFailed;\r\n\r\n outCollisionRuntimeParams.myIsPositionOk = characterCollisionResults.myCheckTransformResults.myCheckTransformFailed;\r\n characterCollisionResults.myCheckTransformResults.myInitialCheckTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myOriginalPositionCheckPosition);\r\n characterCollisionResults.myCheckTransformResults.myFinalCheckTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myFixedPositionCheckPosition);\r\n\r\n outCollisionRuntimeParams.myIsTeleport = characterCollisionResults.myCheckType == CharacterCollisionCheckType.CHECK_TELEPORT;\r\n outCollisionRuntimeParams.myIsMove = characterCollisionResults.myCheckType == CharacterCollisionCheckType.CHECK_MOVEMENT;\r\n outCollisionRuntimeParams.myIsPositionCheck = characterCollisionResults.myCheckType == CharacterCollisionCheckType.CHECK_TRANSFORM;\r\n\r\n outCollisionRuntimeParams.mySplitMovementSteps = characterCollisionResults.mySplitMovementResults.myStepsToPerform;\r\n outCollisionRuntimeParams.mySplitMovementStepsPerformed = characterCollisionResults.mySplitMovementResults.myStepsPerformed;\r\n outCollisionRuntimeParams.mySplitMovementStop = characterCollisionResults.mySplitMovementResults.myMovementInterrupted;\r\n outCollisionRuntimeParams.mySplitMovementMovementChecked.vec3_copy(characterCollisionResults.mySplitMovementResults.myMovementChecked);\r\n\r\n return outCollisionRuntimeParams;\r\n}\r\n\r\nexport let convertCollisionRuntimeParamsToCharacterCollisionResults = function () {\r\n let rotationQuat = quat_create();\r\n return function convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults) {\r\n outCharacterCollisionResults.reset();\r\n\r\n if (collisionRuntimeParams.myIsMove) {\r\n outCharacterCollisionResults.myCheckType = CharacterCollisionCheckType.CHECK_MOVEMENT;\r\n } else if (collisionRuntimeParams.myIsTeleport) {\r\n outCharacterCollisionResults.myCheckType = CharacterCollisionCheckType.CHECK_TELEPORT;\r\n } else if (collisionRuntimeParams.myIsPositionCheck) {\r\n outCharacterCollisionResults.myCheckType = CharacterCollisionCheckType.CHECK_TRANSFORM;\r\n }\r\n\r\n rotationQuat.quat_setForward(collisionRuntimeParams.myOriginalForward, collisionRuntimeParams.myOriginalUp);\r\n outCharacterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_setPositionRotationQuat(collisionRuntimeParams.myOriginalPosition, rotationQuat);\r\n outCharacterCollisionResults.myTransformResults.myFinalTransformQuat.quat2_setPositionRotationQuat(collisionRuntimeParams.myNewPosition, rotationQuat);\r\n\r\n outCharacterCollisionResults.myMovementResults.myInitialMovement.vec3_copy(collisionRuntimeParams.myOriginalMovement);\r\n outCharacterCollisionResults.myMovementResults.myFinalMovement.vec3_copy(collisionRuntimeParams.myFixedMovement);\r\n outCharacterCollisionResults.myMovementResults.myMovementFailed = collisionRuntimeParams.myHorizontalMovementCanceled && collisionRuntimeParams.myVerticalMovementCanceled;\r\n outCharacterCollisionResults.myMovementResults.myMovementCollided = collisionRuntimeParams.myIsCollidingHorizontally || collisionRuntimeParams.myIsCollidingVertically;\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n outCharacterCollisionResults.myMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n } else if (collisionRuntimeParams.myIsCollidingVertically) {\r\n outCharacterCollisionResults.myMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myVerticalCollisionHit);\r\n }\r\n\r\n outCharacterCollisionResults.myHorizontalMovementResults.myMovementFailed = collisionRuntimeParams.myHorizontalMovementCanceled;\r\n outCharacterCollisionResults.myHorizontalMovementResults.myMovementCollided = collisionRuntimeParams.myIsCollidingHorizontally;\r\n outCharacterCollisionResults.myHorizontalMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n outCharacterCollisionResults.myHorizontalMovementResults.myInitialMovement = collisionRuntimeParams.myOriginalMovement.vec3_removeComponentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myHorizontalMovementResults.myInitialMovement);\r\n outCharacterCollisionResults.myHorizontalMovementResults.myFinalMovement = collisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myHorizontalMovementResults.myFinalMovement);\r\n\r\n outCharacterCollisionResults.myVerticalMovementResults.myMovementFailed = collisionRuntimeParams.myVerticalMovementCanceled;\r\n outCharacterCollisionResults.myVerticalMovementResults.myMovementCollided = collisionRuntimeParams.myIsCollidingVertically;\r\n outCharacterCollisionResults.myVerticalMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myVerticalCollisionHit);\r\n outCharacterCollisionResults.myVerticalMovementResults.myInitialMovement = collisionRuntimeParams.myOriginalMovement.vec3_componentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myVerticalMovementResults.myInitialMovement);\r\n outCharacterCollisionResults.myVerticalMovementResults.myFinalMovement = collisionRuntimeParams.myFixedMovement.vec3_componentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myVerticalMovementResults.myFinalMovement);\r\n\r\n outCharacterCollisionResults.myTeleportResults.myInitialTeleportTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myInitialTransformQuat);\r\n outCharacterCollisionResults.myTeleportResults.myInitialTeleportTransformQuat.quat2_setPosition(collisionRuntimeParams.myOriginalTeleportPosition);\r\n outCharacterCollisionResults.myTeleportResults.myFinalTeleportTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myFinalTransformQuat);\r\n outCharacterCollisionResults.myTeleportResults.myFinalTeleportTransformQuat.quat2_setPosition(collisionRuntimeParams.myFixedTeleportPosition);\r\n outCharacterCollisionResults.myTeleportResults.myTeleportFailed = collisionRuntimeParams.myTeleportCanceled;\r\n\r\n outCharacterCollisionResults.myCheckTransformResults.myInitialCheckTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myInitialTransformQuat);\r\n outCharacterCollisionResults.myCheckTransformResults.myInitialCheckTransformQuat.quat2_setPosition(collisionRuntimeParams.myOriginalPositionCheckPosition);\r\n outCharacterCollisionResults.myCheckTransformResults.myFinalCheckTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myFinalTransformQuat);\r\n outCharacterCollisionResults.myCheckTransformResults.myFinalCheckTransformQuat.quat2_setPosition(collisionRuntimeParams.myFixedPositionCheckPosition);\r\n outCharacterCollisionResults.myCheckTransformResults.myCheckTransformFailed = !collisionRuntimeParams.myIsPositionOk;\r\n\r\n outCharacterCollisionResults.myWallSlideResults.myHasSlid = collisionRuntimeParams.myIsSliding;\r\n outCharacterCollisionResults.myWallSlideResults.mySlideMovementAngle = collisionRuntimeParams.mySlidingMovementAngle;\r\n outCharacterCollisionResults.myWallSlideResults.mySlideMovementWallAngle = collisionRuntimeParams.mySlidingCollisionAngle;\r\n outCharacterCollisionResults.myWallSlideResults.myWallNormal.vec3_copy(collisionRuntimeParams.mySlidingWallNormal);\r\n\r\n outCharacterCollisionResults.myGroundInfo.myOnSurface = collisionRuntimeParams.myIsOnGround;\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceReferenceCollisionHit.copy(collisionRuntimeParams.myGroundCollisionHit);\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceAngle = collisionRuntimeParams.myGroundAngle;\r\n outCharacterCollisionResults.myGroundInfo.mySurfacePerceivedAngle = collisionRuntimeParams.myGroundPerceivedAngle;\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceHitMaxAngle = collisionRuntimeParams.myGroundHitMaxAngle;\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundHitMaxNormal);\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceDistance = collisionRuntimeParams.myGroundDistance;\r\n outCharacterCollisionResults.myGroundInfo.myBaseInsideCollision = collisionRuntimeParams.myGroundIsBaseInsideCollision;\r\n\r\n outCharacterCollisionResults.myCeilingInfo.myOnSurface = collisionRuntimeParams.myIsOnCeiling;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceReferenceCollisionHit.copy(collisionRuntimeParams.myCeilingCollisionHit);\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceAngle = collisionRuntimeParams.myCeilingAngle;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfacePerceivedAngle = collisionRuntimeParams.myCeilingPerceivedAngle;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceHitMaxAngle = collisionRuntimeParams.myCeilingHitMaxAngle;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingHitMaxNormal);\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceDistance = collisionRuntimeParams.myCeilingDistance;\r\n outCharacterCollisionResults.myCeilingInfo.myBaseInsideCollision = collisionRuntimeParams.myCeilingIsBaseInsideCollision;\r\n\r\n outCharacterCollisionResults.myGroundResults.myHasSnappedOnSurface = collisionRuntimeParams.myHasSnappedOnGround;\r\n outCharacterCollisionResults.myGroundResults.myHasPoppedOutSurface = collisionRuntimeParams.myHasPoppedOutGround;\r\n outCharacterCollisionResults.myCeilingResults.myHasSnappedOnSurface = collisionRuntimeParams.myHasSnappedOnCeiling;\r\n outCharacterCollisionResults.myCeilingResults.myHasPoppedOutSurface = collisionRuntimeParams.myHasPoppedOutCeiling;\r\n\r\n outCharacterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill;\r\n outCharacterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill;\r\n outCharacterCollisionResults.myGroundResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill;\r\n\r\n outCharacterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill;\r\n outCharacterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill;\r\n outCharacterCollisionResults.myCeilingResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill;\r\n\r\n outCharacterCollisionResults.mySplitMovementResults.myStepsToPerform = collisionRuntimeParams.mySplitMovementSteps;\r\n outCharacterCollisionResults.mySplitMovementResults.myStepsPerformed = collisionRuntimeParams.mySplitMovementStepsPerformed;\r\n outCharacterCollisionResults.mySplitMovementResults.myMovementInterrupted = collisionRuntimeParams.mySplitMovementStop;\r\n outCharacterCollisionResults.mySplitMovementResults.myMovementChecked.vec3_copy(collisionRuntimeParams.mySplitMovementMovementChecked);\r\n\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantInitialHorizontalMovement.vec3_copy(collisionRuntimeParams.myLastValidOriginalHorizontalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantFinalHorizontalMovement.vec3_copy(collisionRuntimeParams.myLastValidEndHorizontalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantInitialVerticalMovement.vec3_copy(collisionRuntimeParams.myLastValidOriginalVerticalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantFinalVerticalMovement.vec3_copy(collisionRuntimeParams.myLastValidEndVerticalMovement);\r\n\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialHorizontalMovement.vec3_copy(collisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialVerticalMovement.vec3_copy(collisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement);\r\n\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantHasWallSlid = collisionRuntimeParams.myLastValidIsSliding;\r\n outCharacterCollisionResults.myInternalResults.myHasWallSlidTowardOppositeDirection = collisionRuntimeParams.myIsSlidingIntoOppositeDirection;\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantWallSlideFlickerPrevented = collisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n outCharacterCollisionResults.myInternalResults.myWallSlideFlickerPreventionForceCheckCounter = collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter;\r\n outCharacterCollisionResults.myInternalResults.myWallSlide90DegreesDirectionSign = collisionRuntimeParams.mySliding90DegreesSign;\r\n outCharacterCollisionResults.myInternalResults.myWallSlide90DegreesRecomputeDirectionSign = collisionRuntimeParams.mySlidingRecompute90DegreesSign;\r\n\r\n outCharacterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_copy(currentTransformQuat);\r\n\r\n return outCharacterCollisionResults;\r\n };\r\n}();\r\n\r\nexport let convertCharacterColliderSetupToCollisionCheckParams = function () {\r\n return function convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, outCollisionCheckParams) {\r\n outCollisionCheckParams.myHeight = characterColliderSetup.myHeight;\r\n\r\n outCollisionCheckParams.myRadius = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeRadius;\r\n outCollisionCheckParams.myDistanceFromFeetToIgnore = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore;\r\n outCollisionCheckParams.myDistanceFromHeadToIgnore = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckHeadDistanceToIgnore;\r\n\r\n outCollisionCheckParams.myHorizontalMovementCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckEnabled;\r\n\r\n outCollisionCheckParams.myHorizontalMovementStepEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckSplitMovementEnabled;\r\n outCollisionCheckParams.myHorizontalMovementStepMaxLength = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckSplitMovementMaxStepLength == null ? 0 : characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckSplitMovementMaxStepLength;\r\n\r\n outCollisionCheckParams.myHorizontalMovementRadialStepAmount = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckRadialSteps;\r\n\r\n outCollisionCheckParams.myHorizontalMovementCheckDiagonalOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckDiagonalInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckStraight = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckHorizontalBorder = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalRadialCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalStraight = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalUpward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalDownward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled;\r\n\r\n outCollisionCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled;\r\n\r\n outCollisionCheckParams.myHorizontalPositionCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckEnabled;\r\n\r\n outCollisionCheckParams.myHalfConeAngle = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle;\r\n outCollisionCheckParams.myHalfConeSliceAmount = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices;\r\n outCollisionCheckParams.myCheckConeBorder = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalBorderCheckEnabled;\r\n outCollisionCheckParams.myCheckConeRay = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalRadialCheckEnabled;\r\n outCollisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision;\r\n outCollisionCheckParams.myHorizontalPositionCheckVerticalDirectionType = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckDirection;\r\n\r\n outCollisionCheckParams.myCheckHeight = characterColliderSetup.myHorizontalCheckParams.myHorizontalHeightCheckEnabled;\r\n\r\n outCollisionCheckParams.myCheckHeightVerticalMovement = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightVerticalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightVerticalPosition = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightVerticalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightTopMovement = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightHorizontalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightTopPosition = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightHorizontalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightConeOnCollision = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit;\r\n outCollisionCheckParams.myCheckHeightConeOnCollisionKeepHit = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit;\r\n\r\n outCollisionCheckParams.myHeightCheckStepAmountMovement = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightCheckSteps;\r\n outCollisionCheckParams.myHeightCheckStepAmountPosition = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightCheckSteps;\r\n outCollisionCheckParams.myCheckVerticalStraight = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalStraightCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalRayOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalRayInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderRayOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderRayInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalSearchFartherVerticalHit = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckGetFarthestHit;\r\n\r\n outCollisionCheckParams.myCheckHorizontalFixedForwardEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForwardEnabled;\r\n outCollisionCheckParams.myCheckHorizontalFixedForward.vec3_copy(characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForward);\r\n\r\n outCollisionCheckParams.myVerticalMovementCheckEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckEnabled;\r\n outCollisionCheckParams.myVerticalPositionCheckEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalPositionCheckEnabled;\r\n outCollisionCheckParams.myFeetRadius = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadius;\r\n\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhill = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphill = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhill = characterColliderSetup.myGroundParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle = characterColliderSetup.myGroundParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle;\r\n\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphill = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxPerceivedAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxPerceivedAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle = characterColliderSetup.myCeilingParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle;\r\n\r\n outCollisionCheckParams.myCheckVerticalFixedForwardEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForwardEnabled;\r\n outCollisionCheckParams.myCheckVerticalFixedForward.vec3_copy(characterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForward);\r\n outCollisionCheckParams.myCheckVerticalBothDirection = characterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckPerformCheckOnBothSides;\r\n\r\n outCollisionCheckParams.myVerticalMovementReduceEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckReductionEnabled;\r\n\r\n outCollisionCheckParams.myGroundCircumferenceAddCenter = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceCentralCheckEnabled;\r\n outCollisionCheckParams.myGroundCircumferenceSliceAmount = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n outCollisionCheckParams.myGroundCircumferenceStepAmount = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps;\r\n outCollisionCheckParams.myGroundCircumferenceRotationPerStep = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep;\r\n outCollisionCheckParams.myVerticalAllowHitInsideCollisionIfOneOk = characterColliderSetup.myVerticalCheckParams.myVerticalCheckAllowHitsInsideCollisionIfOneValid;\r\n\r\n outCollisionCheckParams.myHorizontalBlockLayerFlags.copy(characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckBlockLayerFlags);\r\n outCollisionCheckParams.myVerticalBlockLayerFlags.copy(characterColliderSetup.myVerticalCheckParams.myVerticalCheckBlockLayerFlags);\r\n outCollisionCheckParams.myHorizontalObjectsToIgnore.pp_copy(characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckObjectsToIgnore);\r\n outCollisionCheckParams.myVerticalObjectsToIgnore.pp_copy(characterColliderSetup.myVerticalCheckParams.myVerticalCheckObjectsToIgnore);\r\n\r\n outCollisionCheckParams.mySnapOnGroundEnabled = characterColliderSetup.myGroundParams.mySurfaceSnapEnabled;\r\n outCollisionCheckParams.mySnapOnGroundExtraDistance = characterColliderSetup.myGroundParams.mySurfaceSnapMaxDistance;\r\n outCollisionCheckParams.mySnapOnCeilingEnabled = characterColliderSetup.myCeilingParams.mySurfaceSnapEnabled;\r\n outCollisionCheckParams.mySnapOnCeilingExtraDistance = characterColliderSetup.myCeilingParams.mySurfaceSnapMaxDistance;\r\n\r\n outCollisionCheckParams.myGroundPopOutEnabled = characterColliderSetup.myGroundParams.mySurfacePopOutEnabled;\r\n outCollisionCheckParams.myGroundPopOutExtraDistance = characterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance;\r\n outCollisionCheckParams.myCeilingPopOutEnabled = characterColliderSetup.myCeilingParams.mySurfacePopOutEnabled;\r\n outCollisionCheckParams.myCeilingPopOutExtraDistance = characterColliderSetup.myCeilingParams.mySurfacePopOutMaxDistance;\r\n\r\n outCollisionCheckParams.myGroundAngleToIgnore = characterColliderSetup.myGroundParams.mySurfaceAngleToIgnore;\r\n outCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = characterColliderSetup.myGroundParams.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle;\r\n outCollisionCheckParams.myCeilingAngleToIgnore = characterColliderSetup.myCeilingParams.mySurfaceAngleToIgnore;\r\n outCollisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle = characterColliderSetup.myCeilingParams.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle;\r\n\r\n outCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = characterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance;\r\n outCollisionCheckParams.myHorizontalMovementCeilingAngleIgnoreHeight = characterColliderSetup.myCeilingParams.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance;\r\n outCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = characterColliderSetup.myGroundParams.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance;\r\n outCollisionCheckParams.myHorizontalPositionCeilingAngleIgnoreHeight = characterColliderSetup.myCeilingParams.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance;\r\n\r\n outCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = characterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n outCollisionCheckParams.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft = characterColliderSetup.myCeilingParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n\r\n outCollisionCheckParams.myComputeGroundInfoEnabled = characterColliderSetup.myGroundParams.myCollectSurfaceInfo;\r\n outCollisionCheckParams.myComputeCeilingInfoEnabled = characterColliderSetup.myCeilingParams.myCollectSurfaceInfo;\r\n outCollisionCheckParams.myDistanceToBeOnGround = characterColliderSetup.myGroundParams.myOnSurfaceMaxOutsideDistance;\r\n outCollisionCheckParams.myDistanceToComputeGroundInfo = characterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCollisionCheckParams.myDistanceToBeOnCeiling = characterColliderSetup.myCeilingParams.myOnSurfaceMaxOutsideDistance;\r\n outCollisionCheckParams.myDistanceToComputeCeilingInfo = characterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCollisionCheckParams.myVerticalFixToBeOnGround = characterColliderSetup.myGroundParams.myOnSurfaceMaxInsideDistance;\r\n outCollisionCheckParams.myVerticalFixToComputeGroundInfo = characterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n outCollisionCheckParams.myVerticalFixToBeOnCeiling = characterColliderSetup.myCeilingParams.myOnSurfaceMaxInsideDistance;\r\n outCollisionCheckParams.myVerticalFixToComputeCeilingInfo = characterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxInsideDistance;\r\n\r\n outCollisionCheckParams.myGroundIsBaseInsideCollisionCheckEnabled = characterColliderSetup.myGroundParams.myBaseInsideCollisionCheckEnabled;\r\n outCollisionCheckParams.myCeilingIsBaseInsideCollisionCheckEnabled = characterColliderSetup.myCeilingParams.myBaseInsideCollisionCheckEnabled;\r\n outCollisionCheckParams.myIsOnGroundIfInsideHit = characterColliderSetup.myGroundParams.myOnSurfaceIfBaseInsideCollision;\r\n outCollisionCheckParams.myIsOnCeilingIfInsideHit = characterColliderSetup.myCeilingParams.myOnSurfaceIfBaseInsideCollision;\r\n\r\n outCollisionCheckParams.myFindGroundDistanceMaxOutsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceDistanceOutsideDistance;\r\n outCollisionCheckParams.myFindGroundDistanceMaxInsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceDistanceInsideDistance;\r\n outCollisionCheckParams.myFindCeilingDistanceMaxOutsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceDistanceOutsideDistance;\r\n outCollisionCheckParams.myFindCeilingDistanceMaxInsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceDistanceInsideDistance;\r\n\r\n outCollisionCheckParams.myCollectGroundCollisionHitOutsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitOutsideDistance;\r\n outCollisionCheckParams.myCollectGroundCollisionHitInsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitInsideDistance;\r\n outCollisionCheckParams.myCollectCeilingCollisionHitOutsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitOutsideDistance;\r\n outCollisionCheckParams.myCollectCeilingCollisionHitInsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitInsideDistance;\r\n\r\n outCollisionCheckParams.myAllowGroundSteepFix = characterColliderSetup.myGroundParams.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAllowCeilingSteepFix = characterColliderSetup.myCeilingParams.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle;\r\n\r\n outCollisionCheckParams.myMustStayOnGround = characterColliderSetup.myGroundParams.myMovementMustStayOnSurface;\r\n outCollisionCheckParams.myMustStayOnCeiling = characterColliderSetup.myCeilingParams.myMovementMustStayOnSurface;\r\n outCollisionCheckParams.myRegatherGroundInfoOnSurfaceCheckFail = characterColliderSetup.myGroundParams.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n outCollisionCheckParams.myRegatherCeilingInfoOnSurfaceCheckFail = characterColliderSetup.myCeilingParams.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n outCollisionCheckParams.myMustStayBelowIgnorableGroundAngleDownhill = characterColliderSetup.myGroundParams.myMovementMustStayOnIgnorableSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMustStayBelowIgnorableCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myMovementMustStayOnIgnorableSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMustStayBelowGroundAngleDownhill = characterColliderSetup.myGroundParams.myMovementMustStayOnSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMustStayBelowCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myMovementMustStayOnSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMovementMustStayOnGroundHitAngle = characterColliderSetup.myGroundParams.myMovementMustStayOnSurfaceHitMaxAngle;\r\n outCollisionCheckParams.myMovementMustStayOnCeilingHitAngle = characterColliderSetup.myCeilingParams.myMovementMustStayOnSurfaceHitMaxAngle;\r\n\r\n outCollisionCheckParams.myTeleportMustBeOnIgnorableGroundAngle = characterColliderSetup.myGroundParams.myTeleportMustBeOnIgnorableSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnIgnorableGroundAngle = characterColliderSetup.myGroundParams.myCheckTransformMustBeOnIgnorableSurfaceAngle;\r\n outCollisionCheckParams.myTeleportMustBeOnIgnorableCeilingAngle = characterColliderSetup.myCeilingParams.myTeleportMustBeOnIgnorableSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnIgnorableCeilingAngle = characterColliderSetup.myCeilingParams.myCheckTransformMustBeOnIgnorableSurfaceAngle;\r\n\r\n outCollisionCheckParams.myTeleportMustBeOnGroundAngle = characterColliderSetup.myGroundParams.myTeleportMustBeOnSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnGroundAngle = characterColliderSetup.myGroundParams.myCheckTransformMustBeOnSurfaceAngle;\r\n outCollisionCheckParams.myTeleportMustBeOnCeilingAngle = characterColliderSetup.myCeilingParams.myTeleportMustBeOnSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnCeilingAngle = characterColliderSetup.myCeilingParams.myCheckTransformMustBeOnSurfaceAngle;\r\n\r\n outCollisionCheckParams.myTeleportMustBeOnGround = characterColliderSetup.myGroundParams.myTeleportMustBeOnSurface;\r\n outCollisionCheckParams.myCheckTransformMustBeOnGround = characterColliderSetup.myGroundParams.myCheckTransformMustBeOnSurface;\r\n outCollisionCheckParams.myTeleportMustBeOnCeiling = characterColliderSetup.myCeilingParams.myTeleportMustBeOnSurface;\r\n outCollisionCheckParams.myCheckTransformMustBeOnCeiling = characterColliderSetup.myCeilingParams.myCheckTransformMustBeOnSurface;\r\n\r\n outCollisionCheckParams.mySlidingEnabled = characterColliderSetup.myWallSlideParams.myWallSlideEnabled;\r\n outCollisionCheckParams.mySlidingHorizontalMovementCheckBetterNormal = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckGetBetterReferenceHit;\r\n outCollisionCheckParams.mySlidingMaxAttempts = characterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts;\r\n outCollisionCheckParams.mySlidingCheckBothDirections = characterColliderSetup.myWallSlideParams.myCheckBothWallSlideDirections;\r\n outCollisionCheckParams.mySlidingFlickeringPreventionType = characterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionMode;\r\n outCollisionCheckParams.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding = characterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding;\r\n outCollisionCheckParams.mySlidingFlickerPreventionCheckAnywayCounter = characterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionForceCheckCounter;\r\n outCollisionCheckParams.mySlidingAdjustSign90Degrees = characterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign;\r\n\r\n outCollisionCheckParams.mySplitMovementEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementEnabled;\r\n outCollisionCheckParams.mySplitMovementMaxLength = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength == null ? 0 : characterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength;\r\n outCollisionCheckParams.mySplitMovementMaxLengthEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength != null;\r\n outCollisionCheckParams.mySplitMovementMaxSteps = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps == null ? 0 : characterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps;\r\n outCollisionCheckParams.mySplitMovementMaxStepsEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps != null;\r\n outCollisionCheckParams.mySplitMovementMinLength = characterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength == null ? 0 : characterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength;\r\n outCollisionCheckParams.mySplitMovementMinLengthEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength != null;\r\n outCollisionCheckParams.mySplitMovementStopWhenHorizontalMovementCanceled = characterColliderSetup.mySplitMovementParams.mySplitMovementStopOnHorizontalMovementFailed;\r\n outCollisionCheckParams.mySplitMovementStopWhenVerticalMovementCanceled = characterColliderSetup.mySplitMovementParams.mySplitMovementStopOnVerticalMovementFailed;\r\n outCollisionCheckParams.mySplitMovementStopCallback = null;\r\n outCollisionCheckParams.mySplitMovementStopReturnPrevious = characterColliderSetup.mySplitMovementParams.mySplitMovementStopReturnPreviousResults;\r\n\r\n outCollisionCheckParams.myPositionOffsetLocal.vec3_copy(characterColliderSetup.myAdditionalParams.myPositionOffsetLocal);\r\n outCollisionCheckParams.myRotationOffsetLocalQuat.quat_copy(characterColliderSetup.myAdditionalParams.myRotationOffsetLocalQuat);\r\n\r\n outCollisionCheckParams.myDebugEnabled = characterColliderSetup.myDebugParams.myVisualDebugEnabled;\r\n\r\n outCollisionCheckParams.myDebugHorizontalMovementEnabled = characterColliderSetup.myDebugParams.myVisualDebugHorizontalMovementCheckEnabled;\r\n outCollisionCheckParams.myDebugHorizontalPositionEnabled = characterColliderSetup.myDebugParams.myVisualDebugHorizontalPositionCheckEnabled;\r\n outCollisionCheckParams.myDebugVerticalMovementEnabled = characterColliderSetup.myDebugParams.myVisualDebugVerticalMovementCheckEnabled;\r\n outCollisionCheckParams.myDebugVerticalPositionEnabled = characterColliderSetup.myDebugParams.myVisualDebugVerticalPositionCheckEnabled;\r\n outCollisionCheckParams.myDebugSlidingEnabled = characterColliderSetup.myDebugParams.myVisualDebugSlideEnabled;\r\n\r\n outCollisionCheckParams.myDebugGroundInfoEnabled = characterColliderSetup.myDebugParams.myVisualDebugGroundInfoEnabled;\r\n outCollisionCheckParams.myDebugCeilingInfoEnabled = characterColliderSetup.myDebugParams.myVisualDebugGroundInfoEnabled;\r\n outCollisionCheckParams.myDebugRuntimeParamsEnabled = characterColliderSetup.myDebugParams.myVisualDebugResultsEnabled;\r\n outCollisionCheckParams.myDebugMovementEnabled = characterColliderSetup.myDebugParams.myVisualDebugMovementEnabled;\r\n\r\n return outCollisionCheckParams;\r\n };\r\n}();\r\n\r\nexport let CollisionCheckBridge = {\r\n getCollisionCheck,\r\n setCollisionCheck,\r\n isCollisionCheckDisabled,\r\n setCollisionCheckDisabled,\r\n initBridge,\r\n checkMovement,\r\n checkTeleportToTransform,\r\n checkTransform,\r\n updateGroundInfo,\r\n updateCeilingInfo,\r\n convertCharacterCollisionResultsToCollisionRuntimeParams,\r\n convertCollisionRuntimeParamsToCharacterCollisionResults,\r\n convertCharacterColliderSetupToCollisionCheckParams\r\n};", "import { quat2_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { CharacterCollisionResults } from \"./character_collision_results.js\";\r\nimport { CollisionCheckBridge } from \"./collision_check_bridge.js\";\r\n\r\nexport class CharacterCollisionSystem {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myLastCheckRaycastsPerformed = 0;\r\n this._myCurrentFrameRaycastsPerformed = 0;\r\n this._myMaxFrameRaycastsPerformed = 0;\r\n\r\n this.myEngine = engine;\r\n\r\n CollisionCheckBridge.initBridge(this.myEngine);\r\n }\r\n\r\n update(dt) {\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n this._myCurrentFrameRaycastsPerformed = 0;\r\n CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts = 0;\r\n }\r\n\r\n checkMovement(movement, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.checkMovement(movement, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n checkTeleportToPosition(teleportPosition, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n checkTransform(checkTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.checkTransform(checkTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n updateSurfaceInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n let currentFramePerformedRaycasts = this._myCurrentFrameRaycastsPerformed;\r\n\r\n this.updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults);\r\n this.updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - currentFramePerformedRaycasts;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCharacterCollisionSystem.prototype.checkTeleportToPosition = function () {\r\n let teleportTransformQuat = quat2_create();\r\n return function checkTeleportToPosition(teleportPosition, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults) {\r\n teleportTransformQuat.quat2_copy(currentTransformQuat);\r\n teleportTransformQuat.quat2_setPosition(teleportPosition);\r\n this.checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults);\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ClassicGamepadCore } from \"../../gamepad/gamepad_cores/classic_gamepad_core.js\";\r\nimport { KeyboardGamepadCore } from \"../../gamepad/gamepad_cores/keyboard_gamepad_core.js\";\r\nimport { XRGamepadCore } from \"../../gamepad/gamepad_cores/xr_gamepad_core.js\";\r\nimport { InputManager } from \"../input_manager.js\";\r\n\r\nexport class InputManagerComponent extends Component {\r\n static TypeName = \"pp-input-manager\";\r\n static Properties = {\r\n _myPoseForwardFixed: Property.bool(true),\r\n _myPreventMouseContextMenu: Property.bool(true),\r\n _myPreventMouseMiddleButtonScroll: Property.bool(true),\r\n _myEnableTrackedHandPoses: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myInputManager = null;\r\n this._myPoseForwardFixedGlobal = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasInputManager(this.engine)) {\r\n this._myInputManager = new InputManager(this.engine);\r\n this._myInputManager.setTrackedHandPosesEnabled(this._myEnableTrackedHandPoses);\r\n\r\n Globals.setInputManager(this._myInputManager, this.engine);\r\n }\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasPoseForwardFixed(this.engine)) {\r\n this._myPoseForwardFixedGlobal = this._myPoseForwardFixed;\r\n\r\n Globals.setPoseForwardFixed(this._myPoseForwardFixedGlobal, this.engine);\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myInputManager != null) {\r\n this._myInputManager.start();\r\n\r\n this._setupMousePrevent();\r\n\r\n this._addGamepadCores();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myInputManager != null) {\r\n this._myInputManager.update(dt);\r\n }\r\n }\r\n\r\n _setupMousePrevent() {\r\n if (this._myPreventMouseContextMenu) {\r\n this._myInputManager.getMouse().setContextMenuActive(false);\r\n }\r\n\r\n if (this._myPreventMouseMiddleButtonScroll) {\r\n this._myInputManager.getMouse().setMiddleButtonScrollActive(false);\r\n }\r\n }\r\n\r\n _addGamepadCores() {\r\n let leftHandPose = this._myInputManager.getLeftHandPose();\r\n let rightHandPose = this._myInputManager.getRightHandPose();\r\n\r\n let leftXRGamepadCore = new XRGamepadCore(leftHandPose);\r\n let rightXRGamepadCore = new XRGamepadCore(rightHandPose);\r\n\r\n this._myInputManager.getGamepadsManager().getLeftGamepad().addGamepadCore(\"pp_left_xr_gamepad\", leftXRGamepadCore);\r\n this._myInputManager.getGamepadsManager().getRightGamepad().addGamepadCore(\"pp_right_xr_gamepad\", rightXRGamepadCore);\r\n\r\n let leftKeyboardGamepadCore = new KeyboardGamepadCore(leftHandPose);\r\n let rightKeyboardGamepadCore = new KeyboardGamepadCore(rightHandPose);\r\n\r\n this._myInputManager.getGamepadsManager().getLeftGamepad().addGamepadCore(\"pp_left_keyboard_gamepad\", leftKeyboardGamepadCore);\r\n this._myInputManager.getGamepadsManager().getRightGamepad().addGamepadCore(\"pp_right_keyboard_gamepad\", rightKeyboardGamepadCore);\r\n\r\n let leftClassicGamepadCore = new ClassicGamepadCore(null, leftHandPose);\r\n let rightClassicGamepadCore = new ClassicGamepadCore(null, rightHandPose);\r\n\r\n this._myInputManager.getGamepadsManager().getLeftGamepad().addGamepadCore(\"pp_left_classic_gamepad\", leftClassicGamepadCore);\r\n this._myInputManager.getGamepadsManager().getRightGamepad().addGamepadCore(\"pp_right_classic_gamepad\", rightClassicGamepadCore);\r\n }\r\n\r\n onDestroy() {\r\n if (this._myInputManager != null && Globals.getInputManager(this.engine) == this._myInputManager) {\r\n Globals.removeInputManager(this.engine);\r\n\r\n this._myInputManager.destroy();\r\n }\r\n\r\n if (this._myPoseForwardFixedGlobal != null && Globals.isPoseForwardFixed(this.engine) == this._myPoseForwardFixedGlobal) {\r\n Globals.removePoseForwardFixed(this.engine);\r\n }\r\n }\r\n}", "import { vec2_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport let GamepadButtonID = {\r\n SELECT: 0, // Trigger\r\n SQUEEZE: 1, // Grip\r\n TOUCHPAD: 2,\r\n THUMBSTICK: 3,\r\n BOTTOM_BUTTON: 4, // A or X button on oculus quest gamepad\r\n TOP_BUTTON: 5, // B or Y button on oculus quest gamepad, reverts to TOUCHPAD button for gamepads that does not support TOP_BUTTON\r\n THUMB_REST: 6\r\n};\r\n\r\nexport let GamepadButtonEvent = {\r\n PRESS_START: 0,\r\n PRESS_END: 1,\r\n PRESSED: 2, // Every frame that it is pressed\r\n NOT_PRESSED: 3, // Every frame that it is not pressed\r\n TOUCH_START: 4,\r\n TOUCH_END: 5,\r\n TOUCHED: 6, // Every frame that it is touched\r\n NOT_TOUCHED: 7, // Every frame that it is not touched\r\n VALUE_CHANGED: 8,\r\n ALWAYS: 9 // Every frame\r\n};\r\n\r\nexport let GamepadAxesID = {\r\n THUMBSTICK: 0\r\n};\r\n\r\nexport let GamepadAxesEvent = {\r\n X_CHANGED: 0,\r\n Y_CHANGED: 1,\r\n AXES_CHANGED: 2,\r\n ALWAYS: 3\r\n};\r\n\r\nexport class GamepadButtonInfo {\r\n\r\n constructor(id, handedness) {\r\n this.myID = id;\r\n this.myHandedness = handedness;\r\n\r\n this.myPressed = false;\r\n this.myPrevIsPressed = false;\r\n\r\n this.myTouched = false;\r\n this.myPrevIsTouched = false;\r\n\r\n this.myValue = 0.0;\r\n this.myPrevValue = 0.0;\r\n\r\n this.myTimePressed = 0;\r\n this.myPrevTimePressed = 0;\r\n\r\n this.myTimeNotPressed = 0;\r\n this.myPrevTimeNotPressed = 0;\r\n\r\n this.myTimeTouched = 0;\r\n this.myPrevTimeTouched = 0;\r\n\r\n this.myTimeNotTouched = 0;\r\n this.myPrevTimeNotTouched = 0;\r\n\r\n this.myMultiplePressStartCount = 0;\r\n this.myPrevMultiplePressStartCount = 0;\r\n this.myMultiplePressEndCount = 0;\r\n this.myPrevMultiplePressEndCount = 0;\r\n\r\n this.myMultipleTouchStartCount = 0;\r\n this.myPrevMultipleTouchStartCount = 0;\r\n this.myMultipleTouchEndCount = 0;\r\n this.myPrevMultipleTouchEndCount = 0;\r\n }\r\n\r\n getID() {\r\n return this.myID;\r\n }\r\n\r\n getHandedness() {\r\n return this.myHandedness;\r\n }\r\n\r\n getValue() {\r\n return this.myValue;\r\n }\r\n\r\n isPressed() {\r\n return this.myPressed;\r\n }\r\n\r\n isTouched() {\r\n return this.myTouched;\r\n }\r\n\r\n isPressStart(multiplePressCount = null) {\r\n return (this.myPressed && !this.myPrevIsPressed) && (multiplePressCount == null || this.myMultiplePressStartCount == multiplePressCount);\r\n }\r\n\r\n isPressEnd(multiplePressCount = null) {\r\n return (!this.myPressed && this.myPrevIsPressed) && (multiplePressCount == null || this.myMultiplePressEndCount == multiplePressCount);\r\n }\r\n\r\n isTouchStart(multipleTouchCount = null) {\r\n return (this.myTouched && !this.myPrevIsTouched) && (multipleTouchCount == null || this.myMultipleTouchStartCount == multipleTouchCount);\r\n }\r\n\r\n isTouchEnd(multipleTouchCount = null) {\r\n return (!this.myTouched && this.myPrevIsTouched) && (multipleTouchCount == null || this.myMultipleTouchEndCount == multipleTouchCount);\r\n }\r\n\r\n clone() {\r\n let value = new GamepadButtonInfo(this.myID, this.myHandedness);\r\n value.myPressed = this.myPressed;\r\n value.myPrevIsPressed = this.myPrevIsPressed;\r\n value.myTouched = this.myTouched;\r\n value.myPrevIsTouched = this.myPrevIsTouched;\r\n value.myValue = this.myValue;\r\n value.myPrevValue = this.myPrevValue;\r\n\r\n value.myTimePressed = this.myTimePressed;\r\n value.myPrevTimePressed = this.myPrevTimePressed;\r\n value.myTimeNotPressed = this.myTimeNotPressed;\r\n value.myPrevTimeNotPressed = this.myPrevTimeNotPressed;\r\n\r\n value.myTimeTouched = this.myTimeTouched;\r\n value.myPrevTimeTouched = this.myPrevTimeTouched;\r\n value.myTimeNotTouched = this.myTimeNotTouched;\r\n value.myPrevTimeNotTouched = this.myPrevTimeNotTouched;\r\n\r\n value.myMultiplePressStartCount = this.myMultiplePressStartCount;\r\n value.myPrevMultiplePressStartCount = this.myPrevMultiplePressStartCount;\r\n value.myMultiplePressEndCount = this.myMultiplePressEndCount;\r\n value.myPrevMultiplePressEndCount = this.myPrevMultiplePressEndCount;\r\n\r\n value.myMultipleTouchStartCount = this.myMultipleTouchStartCount;\r\n value.myPrevMultipleTouchStartCount = this.myPrevMultipleTouchStartCount;\r\n value.myMultipleTouchEndCount = this.myMultipleTouchEndCount;\r\n value.myPrevMultipleTouchEndCount = this.myPrevMultipleTouchEndCount;\r\n\r\n return value;\r\n }\r\n}\r\n\r\nexport class GamepadAxesInfo {\r\n\r\n constructor(id, handedness) {\r\n this.myID = id;\r\n\r\n this.myHandedness = handedness;\r\n\r\n this.myAxes = vec2_create(0, 0); // this.myAxes[0] is X, this.myAxes[1] is Y\r\n this.myPrevAxes = vec2_create(0, 0);\r\n }\r\n\r\n getID() {\r\n return this.myID;\r\n }\r\n\r\n getAxes() {\r\n return this.myAxes;\r\n }\r\n\r\n getHandedness() {\r\n return this.myHandedness;\r\n }\r\n\r\n clone() {\r\n let value = new GamepadAxesInfo(this.myID, this.myHandedness);\r\n value.myAxes.vec2_copy(this.myAxes);\r\n value.myPrevAxes.vec2_copy(this.myPrevAxes);\r\n\r\n return value;\r\n }\r\n}\r\n\r\nexport class GamepadPulseInfo {\r\n\r\n constructor() {\r\n this.myIntensity = 0.0;\r\n this.myDuration = 0.0;\r\n\r\n this.myDevicePulsing = false; // true if the gamepad actually sent a request to pulse to the device\r\n }\r\n\r\n clone() {\r\n let value = new GamepadPulseInfo();\r\n value.myIntensity = this.myIntensity;\r\n value.myDuration = this.myDuration;\r\n value.myDevicePulsing = this.myDevicePulsing;\r\n\r\n return value;\r\n }\r\n}", "import { vec2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class GamepadCore {\r\n\r\n constructor(handPose) {\r\n this._myHandPose = handPose;\r\n\r\n this._myManagingHandPose = false;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getHandedness() {\r\n return this.getHandPose().getHandedness();\r\n }\r\n\r\n getHandPose() {\r\n return this._myHandPose;\r\n }\r\n\r\n getEngine() {\r\n return this.getHandPose().getEngine();\r\n }\r\n\r\n isGamepadCoreActive() {\r\n return true;\r\n }\r\n\r\n setManageHandPose(manageHandPose) {\r\n this._myManagingHandPose = manageHandPose;\r\n }\r\n\r\n isManagingHandPose() {\r\n return this._myManagingHandPose;\r\n }\r\n\r\n start() {\r\n if (this.getHandPose() && this.isManagingHandPose()) {\r\n this.getHandPose().start();\r\n }\r\n\r\n this._startHook();\r\n }\r\n\r\n preUpdate(dt) {\r\n if (this.getHandPose() && this.isManagingHandPose()) {\r\n this.getHandPose().update(dt);\r\n }\r\n\r\n this._preUpdateHook(dt);\r\n }\r\n\r\n postUpdate(dt) {\r\n this._postUpdateHook(dt);\r\n }\r\n\r\n getButtonData(buttonID) {\r\n let buttonData = this._createButtonData();\r\n return buttonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n let axesData = this._createAxesData();\r\n return axesData;\r\n }\r\n\r\n getHapticActuators() {\r\n let hapticActuators = [];\r\n return hapticActuators;\r\n }\r\n\r\n // Hooks\r\n\r\n _startHook() {\r\n\r\n }\r\n\r\n _preUpdateHook(dt) {\r\n\r\n }\r\n\r\n _postUpdateHook(dt) {\r\n\r\n }\r\n\r\n _destroyHook() {\r\n\r\n }\r\n\r\n // Hooks end\r\n\r\n _createButtonData() {\r\n return { myPressed: false, myTouched: false, myValue: 0 };\r\n }\r\n\r\n _createAxesData() {\r\n return vec2_create(0, 0);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._destroyHook();\r\n\r\n if (this.isManagingHandPose()) {\r\n this.getHandPose().destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class ClassicGamepadCore extends GamepadCore {\r\n\r\n constructor(gamepadIndex, handPose) {\r\n super(handPose);\r\n\r\n this._myGamepadIndex = gamepadIndex; // null means any active gamepad\r\n\r\n this._myCurrentGamepads = navigator.getGamepads();\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n _preUpdateHook(dt) {\r\n this._myCurrentGamepads = navigator.getGamepads();\r\n }\r\n\r\n isGamepadCoreActive() {\r\n let classicGamepad = this._getClassicGamepad();\r\n return classicGamepad != null && (classicGamepad.connected == null || classicGamepad.connected);\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n let classicGamepad = this._getClassicGamepad();\r\n if (classicGamepad != null && this.isGamepadCoreActive()) {\r\n let button = null;\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n button = classicGamepad.buttons[4];\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n button = classicGamepad.buttons[6];\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n button = null;\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n button = classicGamepad.buttons[10];\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n button = classicGamepad.buttons[13];\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n button = classicGamepad.buttons[12];\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n button = null;\r\n break;\r\n }\r\n } else {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n button = classicGamepad.buttons[5];\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n button = classicGamepad.buttons[7];\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n button = null;\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n button = classicGamepad.buttons[11];\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n button = classicGamepad.buttons[0];\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n button = classicGamepad.buttons[3];\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n button = null;\r\n break;\r\n }\r\n }\r\n\r\n if (button != null) {\r\n this._myButtonData.myPressed = button.pressed;\r\n this._myButtonData.myTouched = button.touched;\r\n this._myButtonData.myValue = button.value;\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n let classicGamepad = this._getClassicGamepad();\r\n if (classicGamepad != null && this.isGamepadCoreActive()) {\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n this._myAxesData[0] = classicGamepad.axes[0];\r\n this._myAxesData[1] = classicGamepad.axes[1];\r\n } else {\r\n this._myAxesData[0] = classicGamepad.axes[2];\r\n this._myAxesData[1] = classicGamepad.axes[3];\r\n }\r\n\r\n // Y axis is recorded negative when thumbstick is pressed forward for weird reasons\r\n this._myAxesData[1] = -this._myAxesData[1];\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n this._myHapticActuators.pp_clear();\r\n\r\n let classicGamepad = this._getClassicGamepad();\r\n if (classicGamepad != null && this.isGamepadCoreActive()) {\r\n if (classicGamepad.hapticActuators != null) {\r\n for (let i = 0; i < classicGamepad.hapticActuators.length; i++) {\r\n this._myHapticActuators.push(classicGamepad.hapticActuators[i]);\r\n }\r\n }\r\n\r\n if (classicGamepad.vibrationActuator != null) {\r\n this._myHapticActuators.push(classicGamepad.vibrationActuator);\r\n }\r\n }\r\n\r\n return this._myHapticActuators;\r\n }\r\n\r\n _getClassicGamepad() {\r\n let classicGamepad = null;\r\n\r\n if (this._myGamepadIndex != null) {\r\n if (this._myGamepadIndex < this._myCurrentGamepads.length) {\r\n classicGamepad = this._myCurrentGamepads[this._myGamepadIndex];\r\n }\r\n } else {\r\n for (let i = 0; i < this._myCurrentGamepads.length; i++) {\r\n let gamepad = this._myCurrentGamepads[i];\r\n if (gamepad != null && (gamepad.connected == null || gamepad.connected)) {\r\n classicGamepad = gamepad;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return classicGamepad;\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nexport let KeyID = {\r\n _0: \"0\",\r\n _1: \"1\",\r\n _2: \"2\",\r\n _3: \"3\",\r\n _4: \"4\",\r\n _5: \"5\",\r\n _6: \"6\",\r\n _7: \"7\",\r\n _8: \"8\",\r\n _9: \"9\",\r\n\r\n KeyA: \"KeyA\",\r\n KeyB: \"KeyB\",\r\n KeyC: \"KeyC\",\r\n KeyD: \"KeyD\",\r\n KeyE: \"KeyE\",\r\n KeyF: \"KeyF\",\r\n KeyG: \"KeyG\",\r\n KeyH: \"KeyH\",\r\n KeyI: \"KeyI\",\r\n KeyJ: \"KeyJ\",\r\n KeyK: \"KeyK\",\r\n KeyL: \"KeyL\",\r\n KeyM: \"KeyM\",\r\n KeyN: \"KeyN\",\r\n KeyO: \"KeyO\",\r\n KeyP: \"KeyP\",\r\n KeyQ: \"KeyQ\",\r\n KeyR: \"KeyR\",\r\n KeyS: \"KeyS\",\r\n KeyT: \"KeyT\",\r\n KeyU: \"KeyU\",\r\n KeyV: \"KeyV\",\r\n KeyW: \"KeyW\",\r\n KeyX: \"KeyX\",\r\n KeyY: \"KeyY\",\r\n KeyZ: \"KeyZ\",\r\n\r\n A: \"A\",\r\n B: \"B\",\r\n C: \"C\",\r\n D: \"D\",\r\n E: \"E\",\r\n F: \"F\",\r\n G: \"G\",\r\n H: \"H\",\r\n I: \"I\",\r\n J: \"J\",\r\n K: \"K\",\r\n L: \"L\",\r\n M: \"M\",\r\n N: \"N\",\r\n O: \"O\",\r\n P: \"P\",\r\n Q: \"Q\",\r\n R: \"R\",\r\n S: \"S\",\r\n T: \"T\",\r\n U: \"U\",\r\n V: \"V\",\r\n W: \"W\",\r\n X: \"X\",\r\n Y: \"Y\",\r\n Z: \"Z\",\r\n\r\n a: \"a\",\r\n b: \"b\",\r\n c: \"c\",\r\n d: \"d\",\r\n e: \"e\",\r\n f: \"f\",\r\n g: \"g\",\r\n h: \"h\",\r\n i: \"i\",\r\n j: \"j\",\r\n k: \"k\",\r\n l: \"l\",\r\n m: \"m\",\r\n n: \"n\",\r\n o: \"o\",\r\n p: \"p\",\r\n q: \"q\",\r\n r: \"r\",\r\n s: \"s\",\r\n t: \"t\",\r\n u: \"u\",\r\n v: \"v\",\r\n w: \"w\",\r\n x: \"x\",\r\n y: \"y\",\r\n z: \"z\",\r\n\r\n UP: \"ArrowUp\",\r\n DOWN: \"ArrowDown\",\r\n LEFT: \"ArrowLeft\",\r\n RIGHT: \"ArrowRight\",\r\n\r\n SPACE: \" \",\r\n ENTER: \"Enter\",\r\n BACKSPACE: \"Backspace\",\r\n ESC: \"Escape\",\r\n\r\n SHIFT_LEFT: \"ShiftLeft\",\r\n SHIFT_RIGHT: \"ShiftRight\",\r\n CONTROL_LEFT: \"ControlLeft\",\r\n CONTROL_RIGHT: \"ControlRight\",\r\n ALT_LEFT: \"AltLeft\",\r\n ALT_RIGHT: \"AltRight\"\r\n};\r\n\r\nexport class Keyboard {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myKeyInfos = {};\r\n this._myKeyInfosIDs = [];\r\n for (let key in KeyID) {\r\n this.addKey(KeyID[key]);\r\n }\r\n\r\n this._myOnKeyDownEventListener = null;\r\n this._myOnKeyUpEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isKeyPressed(keyID) {\r\n let pressed = false;\r\n\r\n if (this._myKeyInfos[keyID] != null) {\r\n pressed = this._myKeyInfos[keyID].myPressed;\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n isKeyPressStart(keyID) {\r\n let pressStart = false;\r\n\r\n if (this._myKeyInfos[keyID] != null) {\r\n pressStart = this._myKeyInfos[keyID].myPressStart;\r\n }\r\n\r\n return pressStart;\r\n }\r\n\r\n isKeyPressEnd(keyID) {\r\n let pressEnd = false;\r\n\r\n if (this._myKeyInfos[keyID] != null) {\r\n pressEnd = this._myKeyInfos[keyID].myPressEnd;\r\n }\r\n\r\n return pressEnd;\r\n }\r\n\r\n addKey(keyID) {\r\n this._myKeyInfos[keyID] = this._createKeyInfo();\r\n this._myKeyInfosIDs.push(keyID);\r\n }\r\n\r\n start() {\r\n this._myOnKeyDownEventListener = this._keyDown.bind(this);\r\n window.addEventListener(\"keydown\", this._myOnKeyDownEventListener);\r\n this._myOnKeyUpEventListener = this._keyUp.bind(this);\r\n window.addEventListener(\"keyup\", this._myOnKeyUpEventListener);\r\n }\r\n\r\n update(dt) {\r\n if (!document.hasFocus()) {\r\n\r\n for (let i = 0; i < this._myKeyInfosIDs.length; i++) {\r\n let id = this._myKeyInfosIDs[i];\r\n let keyInfo = this._myKeyInfos[id];\r\n if (keyInfo.myPressed) {\r\n keyInfo.myPressed = false;\r\n keyInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._myKeyInfosIDs.length; i++) {\r\n let id = this._myKeyInfosIDs[i];\r\n let keyInfo = this._myKeyInfos[id];\r\n keyInfo.myPressStart = keyInfo.myPressStartToProcess;\r\n keyInfo.myPressEnd = keyInfo.myPressEndToProcess;\r\n keyInfo.myPressStartToProcess = false;\r\n keyInfo.myPressEndToProcess = false;\r\n }\r\n }\r\n\r\n _keyDown(event) {\r\n this._keyPressedChanged(event.key, true);\r\n if (event.key != event.code) {\r\n this._keyPressedChanged(event.code, true);\r\n }\r\n }\r\n\r\n _keyUp(event) {\r\n this._keyPressedChanged(event.key, false);\r\n if (event.key != event.code) {\r\n this._keyPressedChanged(event.code, false);\r\n }\r\n }\r\n\r\n _keyPressedChanged(keyID, pressed) {\r\n if (this._myKeyInfos[keyID] != null) {\r\n let keyInfo = this._myKeyInfos[keyID];\r\n\r\n if (pressed) {\r\n keyInfo.myPressed = true;\r\n keyInfo.myPressStartToProcess = true;\r\n } else {\r\n keyInfo.myPressed = false;\r\n keyInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n }\r\n\r\n _createKeyInfo() {\r\n return { myPressed: false, myPressStart: false, myPressStartToProcess: false, myPressEnd: false, myPressEndToProcess: false, };\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n window.removeEventListener(\"keydown\", this._myOnKeyDownEventListener);\r\n window.removeEventListener(\"keyup\", this._myOnKeyUpEventListener);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { KeyID } from \"../../cauldron/keyboard.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class KeyboardGamepadCore extends GamepadCore {\r\n\r\n constructor(handPose) {\r\n super(handPose);\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n isGamepadCoreActive() {\r\n return true;\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n let keyboard = Globals.getKeyboard(this.getEngine());\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyE);\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyQ);\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyX);\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyR);\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyC);\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyF);\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyV);\r\n break;\r\n }\r\n } else {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyU);\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyO);\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyM);\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyY);\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyN);\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyH);\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyB);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (this._myButtonData.myPressed) {\r\n this._myButtonData.myTouched = true;\r\n this._myButtonData.myValue = 1;\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n let keyboard = Globals.getKeyboard(this.getEngine());\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n if (keyboard.isKeyPressed(KeyID.KeyW)) this._myAxesData[1] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyS)) this._myAxesData[1] += -1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyD)) this._myAxesData[0] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyA)) this._myAxesData[0] += -1.0;\r\n } else {\r\n if (keyboard.isKeyPressed(KeyID.KeyI) || keyboard.isKeyPressed(KeyID.UP)) this._myAxesData[1] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyK) || keyboard.isKeyPressed(KeyID.DOWN)) this._myAxesData[1] += -1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyL) || keyboard.isKeyPressed(KeyID.RIGHT)) this._myAxesData[0] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyJ) || keyboard.isKeyPressed(KeyID.LEFT)) this._myAxesData[0] += -1.0;\r\n }\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n return this._myHapticActuators;\r\n }\r\n}", "// xr-standard mapping is assumed\r\n\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class XRGamepadCore extends GamepadCore {\r\n\r\n constructor(handPose) {\r\n super(handPose);\r\n\r\n this._mySelectPressed = false;\r\n this._mySqueezePressed = false;\r\n\r\n this._myXRSessionActive = false;\r\n this._myInputSource = null;\r\n this._myGamepad = null;\r\n\r\n this._mySelectStartEventListener = null;\r\n this._mySelectEndEventListener = null;\r\n this._mySqueezeStartEventListener = null;\r\n this._mySqueezeEndEventListener = null;\r\n\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n isGamepadCoreActive() {\r\n // connected == null is to fix webxr emulator that leaves that field undefined\r\n return this._myXRSessionActive && this._myGamepad != null && (this._myGamepad.connected == null || this._myGamepad.connected);\r\n }\r\n\r\n _startHook() {\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this.getEngine());\r\n }\r\n\r\n _preUpdateHook(dt) {\r\n let prevInputSource = this._myInputSource;\r\n this._myInputSource = this.getHandPose().getInputSource();\r\n\r\n if (prevInputSource != this._myInputSource) {\r\n this._mySelectPressed = false;\r\n this._mySqueezePressed = false;\r\n }\r\n\r\n if (this._myInputSource != null) {\r\n this._myGamepad = this._myInputSource.gamepad;\r\n } else {\r\n this._myGamepad = null;\r\n }\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (buttonID < this._myGamepad.buttons.length) {\r\n let gamepadButton = this._myGamepad.buttons[buttonID];\r\n\r\n if (buttonID != GamepadButtonID.SELECT && buttonID != GamepadButtonID.SQUEEZE) {\r\n this._myButtonData.myPressed = gamepadButton.pressed;\r\n } else {\r\n this._myButtonData.myPressed = this._getSpecialButtonPressed(buttonID);\r\n }\r\n\r\n this._myButtonData.myTouched = gamepadButton.touched;\r\n this._myButtonData.myValue = gamepadButton.value;\r\n } else if (buttonID == GamepadButtonID.TOP_BUTTON && this._myGamepad.buttons.length >= 3) {\r\n // This way if you are using a basic touch gamepad, top button will work anyway\r\n\r\n let touchButton = this._myGamepad.buttons[2];\r\n this._myButtonData.myPressed = touchButton.pressed;\r\n this._myButtonData.myTouched = touchButton.touched;\r\n this._myButtonData.myValue = touchButton.value;\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n if (this.isGamepadCoreActive()) {\r\n let internalAxes = this._myGamepad.axes;\r\n if (internalAxes.length == 4) {\r\n // In this case it could be both touch axes or thumbstick axes, that depends on the gamepad\r\n // to support both I simply choose the absolute max value (unused axes will always be 0)\r\n\r\n // X\r\n if (Math.abs(internalAxes[0]) > Math.abs(internalAxes[2])) {\r\n this._myAxesData[0] = internalAxes[0];\r\n } else {\r\n this._myAxesData[0] = internalAxes[2];\r\n }\r\n\r\n // Y\r\n if (Math.abs(internalAxes[1]) > Math.abs(internalAxes[3])) {\r\n this._myAxesData[1] = internalAxes[1];\r\n } else {\r\n this._myAxesData[1] = internalAxes[3];\r\n }\r\n\r\n } else if (internalAxes.length == 2) {\r\n this._myAxesData[0] = internalAxes[0];\r\n this._myAxesData[1] = internalAxes[1];\r\n }\r\n\r\n // Y axis is recorded negative when thumbstick is pressed forward for weird reasons\r\n this._myAxesData[1] = -this._myAxesData[1];\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n this._myHapticActuators.pp_clear();\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this._myGamepad.hapticActuators != null) {\r\n for (let i = 0; i < this._myGamepad.hapticActuators.length; i++) {\r\n this._myHapticActuators.push(this._myGamepad.hapticActuators[i]);\r\n }\r\n }\r\n\r\n if (this._myGamepad.vibrationActuator != null) {\r\n this._myHapticActuators.push(this._myGamepad.vibrationActuator);\r\n }\r\n }\r\n\r\n return this._myHapticActuators;\r\n }\r\n\r\n // This is to be more compatible\r\n _getSpecialButtonPressed(buttonID) {\r\n let pressed = false;\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (buttonID == GamepadButtonID.SELECT) {\r\n pressed = this._mySelectPressed;\r\n } else if (buttonID == GamepadButtonID.SQUEEZE) {\r\n pressed = this._mySqueezePressed;\r\n }\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n _onXRSessionStart(session) {\r\n this._mySelectStartEventListener = this._selectStart.bind(this);\r\n this._mySelectEndEventListener = this._selectEnd.bind(this);\r\n this._mySqueezeStartEventListener = this._squeezeStart.bind(this);\r\n this._mySqueezeEndEventListener = this._squeezeEnd.bind(this);\r\n\r\n session.addEventListener(\"selectstart\", this._mySelectStartEventListener);\r\n session.addEventListener(\"selectend\", this._mySelectEndEventListener);\r\n\r\n session.addEventListener(\"squeezestart\", this._mySqueezeStartEventListener);\r\n session.addEventListener(\"squeezeend\", this._mySqueezeEndEventListener);\r\n\r\n this._myXRSessionActive = true;\r\n }\r\n\r\n _onXRSessionEnd(session) {\r\n this._mySelectStartEventListener = null;\r\n this._mySelectEndEventListener = null;\r\n this._mySqueezeStartEventListener = null;\r\n this._mySqueezeEndEventListener = null;\r\n\r\n this._mySelectPressed = false;\r\n this._mySqueezePressed = false;\r\n\r\n this._myXRSessionActive = false;\r\n }\r\n\r\n // Select and Squeeze are managed this way to be more compatible\r\n _selectStart(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySelectPressed = true;\r\n }\r\n }\r\n\r\n _selectEnd(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySelectPressed = false;\r\n }\r\n }\r\n\r\n _squeezeStart(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySqueezePressed = true;\r\n }\r\n }\r\n\r\n _squeezeEnd(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySqueezePressed = false;\r\n }\r\n }\r\n\r\n _destroyHook() {\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"selectstart\", this._mySelectStartEventListener);\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"selectend\", this._mySelectEndEventListener);\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"squeezestart\", this._mySqueezeStartEventListener);\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"squeezeend\", this._mySqueezeEndEventListener);\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this.getEngine());\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { GamepadsManager } from \"../gamepad/cauldron/gamepads_manager.js\";\r\nimport { BasePoseParams } from \"../pose/base_pose.js\";\r\nimport { HandPose, HandPoseParams } from \"../pose/hand_pose.js\";\r\nimport { HeadPose } from \"../pose/head_pose.js\";\r\nimport { TrackedHandPose, TrackedHandPoseParams } from \"../pose/tracked_hand_pose.js\";\r\nimport { Handedness } from \"./input_types.js\";\r\nimport { Keyboard } from \"./keyboard.js\";\r\nimport { Mouse } from \"./mouse.js\";\r\n\r\nexport class InputManager {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myMouse = new Mouse(this._myEngine);\r\n this._myKeyboard = new Keyboard(this._myEngine);\r\n\r\n this._myHeadPose = new HeadPose(new BasePoseParams(this._myEngine));\r\n this._myHeadPose.setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHeadPose.setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n\r\n this._myHandPoses = [];\r\n this._myHandPoses[Handedness.LEFT] = new HandPose(Handedness.LEFT, new HandPoseParams(this._myEngine));\r\n this._myHandPoses[Handedness.RIGHT] = new HandPose(Handedness.RIGHT, new HandPoseParams(this._myEngine));\r\n this._myHandPoses[Handedness.LEFT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[Handedness.RIGHT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[Handedness.LEFT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHandPoses[Handedness.RIGHT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n\r\n this._myTrackedHandPoses = [];\r\n this._myTrackedHandPoses[Handedness.LEFT] = new TrackedHandPose(Handedness.LEFT, new TrackedHandPoseParams(true, this._myEngine));\r\n this._myTrackedHandPoses[Handedness.RIGHT] = new TrackedHandPose(Handedness.RIGHT, new TrackedHandPoseParams(true, this._myEngine));\r\n this._myTrackedHandPoses[Handedness.LEFT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[Handedness.RIGHT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[Handedness.LEFT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myTrackedHandPoses[Handedness.RIGHT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n\r\n this._myGamepadsManager = new GamepadsManager(this._myEngine);\r\n\r\n this._myStarted = false;\r\n\r\n this._myTrackedHandPosesEnabled = true;\r\n this._myTrackedHandPosesStarted = false;\r\n\r\n this._myPreUpdateEmitter = new Emitter(); // Signature: callback(dt, inputManager)\r\n this._myPostUpdateEmitter = new Emitter(); // Signature: callback(dt, inputManager)\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._myMouse.start();\r\n this._myKeyboard.start();\r\n\r\n this._myHeadPose.setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHeadPose.setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHeadPose.start();\r\n\r\n for (let key in this._myHandPoses) {\r\n this._myHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHandPoses[key].start();\r\n }\r\n\r\n if (this._myTrackedHandPosesEnabled) {\r\n this._startTrackedHandPoses();\r\n }\r\n\r\n this._myGamepadsManager.start();\r\n\r\n this._myStarted = true;\r\n }\r\n\r\n update(dt) {\r\n this._myPreUpdateEmitter.notify(dt, this);\r\n\r\n this._myMouse.update(dt);\r\n this._myKeyboard.update(dt);\r\n\r\n this._myHeadPose.setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHeadPose.setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHeadPose.update(dt);\r\n\r\n for (let key in this._myHandPoses) {\r\n this._myHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHandPoses[key].update(dt);\r\n }\r\n\r\n this._updateTrackedHandPoses();\r\n\r\n this._myGamepadsManager.update(dt);\r\n\r\n this._myPostUpdateEmitter.notify(dt, this);\r\n }\r\n\r\n getMouse() {\r\n return this._myMouse;\r\n }\r\n\r\n getKeyboard() {\r\n return this._myKeyboard;\r\n }\r\n\r\n getGamepadsManager() {\r\n return this._myGamepadsManager;\r\n }\r\n\r\n getHeadPose() {\r\n return this._myHeadPose;\r\n }\r\n\r\n getLeftHandPose() {\r\n return this._myHandPoses[Handedness.LEFT];\r\n }\r\n\r\n getRightHandPose() {\r\n return this._myHandPoses[Handedness.RIGHT];\r\n }\r\n\r\n getHandPose(handedness) {\r\n return this._myHandPoses[handedness];\r\n }\r\n\r\n getHandPoses() {\r\n return this._myHandPoses;\r\n }\r\n\r\n getLeftTrackedHandPose() {\r\n return this._myTrackedHandPoses[Handedness.LEFT];\r\n }\r\n\r\n getRightTrackedHandPose() {\r\n return this._myTrackedHandPoses[Handedness.RIGHT];\r\n }\r\n\r\n getTrackedHandPose(handedness) {\r\n return this._myTrackedHandPoses[handedness];\r\n }\r\n\r\n getTrackedHandPoses() {\r\n return this._myTrackedHandPoses;\r\n }\r\n\r\n areTrackedHandPosesEnabled() {\r\n return this._myTrackedHandPosesEnabled;\r\n }\r\n\r\n setTrackedHandPosesEnabled(enabled) {\r\n this._myTrackedHandPosesEnabled = enabled;\r\n\r\n if (this._myStarted && this._myTrackedHandPosesEnabled) {\r\n this._startTrackedHandPoses();\r\n }\r\n }\r\n\r\n registerPreUpdateCallback(id, callback) {\r\n this._myPreUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPreUpdateCallback(id) {\r\n this._myPreUpdateEmitter.remove(id);\r\n }\r\n\r\n registerPostUpdateCallback(id, callback) {\r\n this._myPostUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPostUpdateCallback(id) {\r\n this._myPostUpdateEmitter.remove(id);\r\n }\r\n\r\n _startTrackedHandPoses() {\r\n if (!this._myTrackedHandPosesStarted) {\r\n for (let key in this._myTrackedHandPoses) {\r\n this._myTrackedHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myTrackedHandPoses[key].start();\r\n }\r\n\r\n this._myTrackedHandPosesStarted = true;\r\n }\r\n }\r\n\r\n _updateTrackedHandPoses(dt) {\r\n if (this._myTrackedHandPosesEnabled && this._myTrackedHandPosesStarted) {\r\n for (let key in this._myTrackedHandPoses) {\r\n this._myTrackedHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myTrackedHandPoses[key].update(dt);\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myMouse.destroy();\r\n this._myKeyboard.destroy();\r\n\r\n this._myHeadPose.destroy();\r\n\r\n for (let key in this._myHandPoses) {\r\n this._myHandPoses[key].destroy();\r\n }\r\n\r\n for (let key in this._myTrackedHandPoses) {\r\n this._myTrackedHandPoses[key].destroy();\r\n }\r\n\r\n this._myGamepadsManager.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { vec2_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { GamepadAxesEvent, GamepadAxesID, GamepadAxesInfo, GamepadButtonEvent, GamepadButtonID, GamepadButtonInfo, GamepadPulseInfo } from \"./gamepad_buttons.js\";\r\n\r\nexport class BaseGamepad {\r\n\r\n constructor(handedness) {\r\n this._myHandedness = handedness;\r\n\r\n this._myButtonInfos = {};\r\n this._myButtonInfosIDs = [];\r\n for (let key in GamepadButtonID) {\r\n this._myButtonInfos[GamepadButtonID[key]] = new GamepadButtonInfo(GamepadButtonID[key], this._myHandedness);\r\n this._myButtonInfosIDs.push(GamepadButtonID[key]);\r\n }\r\n\r\n this._myAxesInfos = {};\r\n this._myAxesInfosIDs = [];\r\n for (let key in GamepadAxesID) {\r\n this._myAxesInfos[GamepadAxesID[key]] = new GamepadAxesInfo(GamepadAxesID[key], this._myHandedness);\r\n this._myAxesInfosIDs.push(GamepadAxesID[key]);\r\n }\r\n\r\n this._myButtonEmitters = []; // Signature: listener(ButtonInfo, Gamepad)\r\n for (let key in GamepadButtonID) {\r\n this._myButtonEmitters[GamepadButtonID[key]] = [];\r\n for (let eventKey in GamepadButtonEvent) {\r\n this._myButtonEmitters[GamepadButtonID[key]][GamepadButtonEvent[eventKey]] = new Emitter();\r\n }\r\n }\r\n\r\n this._myAxesEmitters = []; // Signature: listener(AxesInfo, Gamepad)\r\n for (let key in GamepadAxesID) {\r\n this._myAxesEmitters[GamepadAxesID[key]] = [];\r\n for (let eventKey in GamepadAxesEvent) {\r\n this._myAxesEmitters[GamepadAxesID[key]][GamepadAxesEvent[eventKey]] = new Emitter();\r\n }\r\n }\r\n\r\n this._myPulseInfo = new GamepadPulseInfo();\r\n\r\n this._myDestroyed = false;\r\n\r\n // Config\r\n\r\n this._myMultiplePressMaxDelay = 0.4;\r\n this._myMultipleTouchMaxDelay = 0.4;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getButtonInfo(buttonID) {\r\n return this._myButtonInfos[buttonID];\r\n }\r\n\r\n registerButtonEventListener(buttonID, buttonEvent, id, listener) {\r\n this._myButtonEmitters[buttonID][buttonEvent].add(listener, { id: id });\r\n }\r\n\r\n unregisterButtonEventListener(buttonID, buttonEvent, id) {\r\n this._myButtonEmitters[buttonID][buttonEvent].remove(id);\r\n }\r\n\r\n getAxesInfo(axesID) {\r\n return this._myAxesInfos[axesID];\r\n }\r\n\r\n registerAxesEventListener(axesID, axesEvent, id, listener) {\r\n this._myAxesEmitters[axesID][axesEvent].add(listener, { id: id });\r\n }\r\n\r\n unregisterAxesEventListener(axesID, axesEvent, id) {\r\n this._myAxesEmitters[axesID][axesEvent].remove(id);\r\n }\r\n\r\n pulse(intensity, duration = 0) {\r\n this._myPulseInfo.myIntensity = Math.pp_clamp(intensity, 0, 1);\r\n this._myPulseInfo.myDuration = Math.max(duration, 0);\r\n }\r\n\r\n stopPulse() {\r\n this._myPulseInfo.myIntensity = 0;\r\n this._myPulseInfo.myDuration = 0;\r\n }\r\n\r\n isPulsing() {\r\n return this._myPulseInfo.myIntensity > 0 || this._myPulseInfo.myDuration > 0;\r\n }\r\n\r\n getPulseInfo() {\r\n return this._myPulseInfo;\r\n }\r\n\r\n getMultiplePressMaxDelay() {\r\n return this._myMultiplePressMaxDelay;\r\n }\r\n\r\n setMultiplePressMaxDelay(maxDelay) {\r\n this._myMultiplePressMaxDelay = maxDelay;\r\n }\r\n\r\n getMultipleTouchMaxDelay() {\r\n return this._myMultipleTouchMaxDelay;\r\n }\r\n\r\n setMultipleTouchMaxDelay(maxDelay) {\r\n this._myMultipleTouchMaxDelay = maxDelay;\r\n }\r\n\r\n // Hooks\r\n\r\n getHandPose() {\r\n return null;\r\n }\r\n\r\n _startHook() {\r\n\r\n }\r\n\r\n _preUpdate(dt) {\r\n\r\n }\r\n\r\n _postUpdate(dt) {\r\n\r\n }\r\n\r\n _getButtonData(buttonID) {\r\n let buttonData = this._createButtonData();\r\n return buttonData;\r\n }\r\n\r\n _getAxesData(axesID) {\r\n let axesData = this._createAxesData();\r\n return axesData;\r\n }\r\n\r\n _getHapticActuators() {\r\n let hapticActuator = [];\r\n return hapticActuator;\r\n }\r\n\r\n _destroyHook() {\r\n\r\n }\r\n\r\n // Hooks End\r\n\r\n start() {\r\n this._startHook();\r\n }\r\n\r\n update(dt) {\r\n this._preUpdate(dt);\r\n\r\n this._preUpdateButtonInfos();\r\n this._updateButtonInfos();\r\n this._postUpdateButtonInfos(dt);\r\n\r\n this._preUpdateAxesInfos();\r\n this._updateAxesInfos();\r\n this._postUpdateAxesInfos();\r\n\r\n this._updatePulse(dt);\r\n\r\n this._postUpdate(dt);\r\n }\r\n\r\n _preUpdateButtonInfos() {\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let info = this._myButtonInfos[id];\r\n info.myPrevIsPressed = info.myPressed;\r\n info.myPrevIsTouched = info.myTouched;\r\n info.myPrevValue = info.myValue;\r\n }\r\n }\r\n\r\n _updateButtonInfos() {\r\n this._updateSingleButtonInfo(GamepadButtonID.SELECT);\r\n this._updateSingleButtonInfo(GamepadButtonID.SQUEEZE);\r\n this._updateSingleButtonInfo(GamepadButtonID.TOUCHPAD);\r\n this._updateSingleButtonInfo(GamepadButtonID.THUMBSTICK);\r\n this._updateSingleButtonInfo(GamepadButtonID.BOTTOM_BUTTON);\r\n this._updateSingleButtonInfo(GamepadButtonID.TOP_BUTTON);\r\n this._updateSingleButtonInfo(GamepadButtonID.THUMB_REST);\r\n }\r\n\r\n _updateSingleButtonInfo(buttonID) {\r\n let buttonInfo = this._myButtonInfos[buttonID];\r\n let buttonData = this._getButtonData(buttonID);\r\n\r\n buttonInfo.myPressed = buttonData.myPressed;\r\n buttonInfo.myTouched = buttonData.myTouched;\r\n buttonInfo.myValue = buttonData.myValue;\r\n\r\n if (buttonInfo.myPressed) {\r\n buttonInfo.myTouched = true;\r\n\r\n if (buttonInfo.myValue == 0) {\r\n buttonInfo.myValue = 1;\r\n }\r\n }\r\n }\r\n\r\n _postUpdateButtonInfos(dt) {\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let info = this._myButtonInfos[id];\r\n if (info.myPressed) {\r\n info.myTimePressed += dt;\r\n if (!info.myPrevIsPressed) {\r\n info.myMultiplePressStartCount += 1;\r\n\r\n info.myPrevTimeNotPressed = info.myTimeNotPressed;\r\n info.myTimeNotPressed = 0;\r\n }\r\n\r\n if (info.myPrevTimeNotPressed + info.myTimePressed > this._myMultiplePressMaxDelay && info.myMultiplePressEndCount > 0) {\r\n info.myPrevMultiplePressEndCount = info.myMultiplePressEndCount;\r\n info.myMultiplePressEndCount = 0;\r\n }\r\n\r\n if (info.myTimePressed > this._myMultiplePressMaxDelay && info.myMultiplePressStartCount > 0) {\r\n info.myPrevMultiplePressStartCount = info.myMultiplePressStartCount;\r\n info.myMultiplePressStartCount = 0;\r\n }\r\n } else {\r\n info.myTimeNotPressed += dt;\r\n if (info.myPrevIsPressed) {\r\n info.myMultiplePressEndCount += 1;\r\n\r\n info.myPrevTimePressed = info.myTimePressed;\r\n info.myTimePressed = 0;\r\n }\r\n\r\n if (info.myPrevTimePressed + info.myTimeNotPressed > this._myMultiplePressMaxDelay && info.myMultiplePressStartCount > 0) {\r\n info.myPrevMultiplePressStartCount = info.myMultiplePressStartCount;\r\n info.myMultiplePressStartCount = 0;\r\n }\r\n\r\n if (info.myTimeNotPressed > this._myMultiplePressMaxDelay && info.myMultiplePressEndCount > 0) {\r\n info.myPrevMultiplePressEndCount = info.myMultiplePressEndCount;\r\n info.myMultiplePressEndCount = 0;\r\n }\r\n }\r\n\r\n if (info.myTouched) {\r\n info.myTimeTouched += dt;\r\n if (!info.myPrevIsTouched) {\r\n info.myMultipleTouchStartCount += 1;\r\n\r\n info.myPrevTimeNotTouched = info.myTimeNotTouched;\r\n info.myTimeNotTouched = 0;\r\n }\r\n\r\n if (info.myPrevTimeNotTouched + info.myTimeTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchEndCount > 0) {\r\n info.myPrevMultipleTouchEndCount = info.myMultipleTouchEndCount;\r\n info.myMultipleTouchEndCount = 0;\r\n }\r\n\r\n if (info.myTimeTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchStartCount > 0) {\r\n info.myPrevMultipleTouchStartCount = info.myMultipleTouchStartCount;\r\n info.myMultipleTouchStartCount = 0;\r\n }\r\n } else {\r\n info.myTimeNotTouched += dt;\r\n if (info.myPrevIsTouched) {\r\n info.myMultipleTouchEndCount += 1;\r\n\r\n info.myPrevTimeTouched = info.myTimeTouched;\r\n info.myTimeTouched = 0;\r\n }\r\n\r\n if (info.myPrevTimeTouched + info.myTimeNotTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchStartCount > 0) {\r\n info.myPrevMultipleTouchStartCount = info.myMultipleTouchStartCount;\r\n info.myMultipleTouchStartCount = 0;\r\n }\r\n\r\n if (info.myTimeNotTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchEndCount > 0) {\r\n info.myPrevMultipleTouchEndCount = info.myMultipleTouchEndCount;\r\n info.myMultipleTouchEndCount = 0;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n let buttonEventEmitters = this._myButtonEmitters[id];\r\n\r\n // PRESSED\r\n if (buttonInfo.myPressed && !buttonInfo.myPrevIsPressed) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.PRESS_START];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (!buttonInfo.myPressed && buttonInfo.myPrevIsPressed) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.PRESS_END];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (buttonInfo.myPressed) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.PRESSED];\r\n emitter.notify(buttonInfo, this);\r\n } else {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.NOT_PRESSED];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n // TOUCHED\r\n if (buttonInfo.myTouched && !buttonInfo.myPrevIsTouched) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.TOUCH_START];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (!buttonInfo.myTouched && buttonInfo.myPrevIsTouched) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.TOUCH_END];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (buttonInfo.myTouched) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.TOUCHED];\r\n emitter.notify(buttonInfo, this);\r\n } else {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.NOT_TOUCHED];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n // VALUE\r\n if (buttonInfo.myValue != buttonInfo.myPrevValue) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.VALUE_CHANGED];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n // ALWAYS\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.ALWAYS];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n this._mySelectStart = false;\r\n this._mySelectEnd = false;\r\n this._mySqueezeStart = false;\r\n this._mySqueezeEnd = false;\r\n }\r\n\r\n _preUpdateAxesInfos() {\r\n for (let i = 0; i < this._myAxesInfosIDs.length; i++) {\r\n let id = this._myAxesInfosIDs[i];\r\n let info = this._myAxesInfos[id];\r\n info.myPrevAxes[0] = info.myAxes[0];\r\n info.myPrevAxes[1] = info.myAxes[1];\r\n }\r\n }\r\n\r\n _updateAxesInfos() {\r\n this._updateSingleAxesInfo(GamepadAxesID.THUMBSTICK);\r\n }\r\n\r\n _updateSingleAxesInfo(axesID) {\r\n let axesInfo = this._myAxesInfos[axesID];\r\n let axesData = this._getAxesData(axesID);\r\n\r\n axesInfo.myAxes[0] = axesData[0];\r\n axesInfo.myAxes[1] = axesData[1];\r\n }\r\n\r\n _postUpdateAxesInfos() {\r\n for (let key in GamepadAxesID) {\r\n let axesInfo = this._myAxesInfos[GamepadAxesID[key]];\r\n let axesEventEmitters = this._myAxesEmitters[GamepadAxesID[key]];\r\n\r\n // X CHANGED\r\n if (axesInfo.myAxes[0] != axesInfo.myPrevAxes[0]) {\r\n let emitter = axesEventEmitters[GamepadAxesEvent.X_CHANGED];\r\n emitter.notify(axesInfo, this);\r\n }\r\n\r\n // Y CHANGED\r\n if (axesInfo.myAxes[1] != axesInfo.myPrevAxes[1]) {\r\n let emitter = axesEventEmitters[GamepadAxesEvent.Y_CHANGED];\r\n emitter.notify(axesInfo, this);\r\n }\r\n\r\n // AXES CHANGED\r\n if (axesInfo.myAxes[0] != axesInfo.myPrevAxes[0] ||\r\n axesInfo.myAxes[1] != axesInfo.myPrevAxes[1]) {\r\n let emitter = axesEventEmitters[GamepadAxesEvent.AXES_CHANGED];\r\n emitter.notify(axesInfo, this);\r\n }\r\n\r\n // ALWAYS \r\n let emitter = axesEventEmitters[GamepadAxesEvent.ALWAYS];\r\n emitter.notify(axesInfo, this);\r\n }\r\n }\r\n\r\n _updatePulse(dt) {\r\n if (this._myPulseInfo.myDevicePulsing || this._myPulseInfo.myIntensity > 0) {\r\n let hapticActuators = this._getHapticActuators();\r\n if (hapticActuators.length > 0) {\r\n if (this._myPulseInfo.myIntensity > 0) {\r\n for (let i = 0; i < hapticActuators.length; i++) {\r\n let hapticActuator = hapticActuators[i];\r\n hapticActuator.pulse(this._myPulseInfo.myIntensity, Math.max(250, this._myPulseInfo.myDuration * 1000)); // Duration is managed by this class\r\n }\r\n this._myPulseInfo.myDevicePulsing = true;\r\n } else if (this._myPulseInfo.myDevicePulsing) {\r\n for (let i = 0; i < hapticActuators.length; i++) {\r\n let hapticActuator = hapticActuators[i];\r\n hapticActuator.pulse(0, 1);\r\n\r\n try {\r\n if (hapticActuator.reset != null) {\r\n hapticActuator.reset();\r\n }\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n }\r\n\r\n this._myPulseInfo.myDevicePulsing = false;\r\n }\r\n } else {\r\n this._myPulseInfo.myDevicePulsing = false;\r\n }\r\n }\r\n\r\n this._myPulseInfo.myDuration -= dt;\r\n if (this._myPulseInfo.myDuration <= 0) {\r\n this._myPulseInfo.myIntensity = 0;\r\n this._myPulseInfo.myDuration = 0;\r\n }\r\n }\r\n\r\n _createButtonData() {\r\n return { myPressed: false, myTouched: false, myValue: 0 };\r\n }\r\n\r\n _createAxesData() {\r\n return vec2_create(0, 0);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._destroyHook();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { BaseGamepad } from \"./base_gamepad.js\";\r\n\r\nexport class UniversalGamepad extends BaseGamepad {\r\n\r\n constructor(handedness) {\r\n super(handedness);\r\n\r\n this._myGamepadCores = {}; // Switched to object instead of Map for memory optimization reason since iterating allocates a lot\r\n this._myGamepadCoresIDs = [];\r\n\r\n this._myStarted = false;\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n addGamepadCore(id, gamepadCore) {\r\n if (gamepadCore.getHandedness() == this.getHandedness()) {\r\n this._myGamepadCores[id] = gamepadCore;\r\n this._myGamepadCoresIDs.push(id);\r\n if (this._myStarted) {\r\n gamepadCore.start();\r\n }\r\n }\r\n }\r\n\r\n getGamepadCore(id) {\r\n return this._myGamepadCores[id];\r\n }\r\n\r\n removeGamepadCore(id) {\r\n let gamepadCore = this._myGamepadCores[id];\r\n if (gamepadCore != null) {\r\n delete this._myGamepadCores[id];\r\n this._myGamepadCoresIDs.pp_removeEqual(id);\r\n }\r\n }\r\n\r\n removeAllGamepadCores() {\r\n this._myGamepadCores = {};\r\n this._myGamepadCoresIDs = [];\r\n }\r\n\r\n getHandPose() {\r\n let handPose = null;\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let currentCoreHandPose = core.getHandPose();\r\n if (handPose == null || (currentCoreHandPose != null && currentCoreHandPose.isValid())) {\r\n handPose = currentCoreHandPose;\r\n }\r\n }\r\n\r\n if (handPose != null && handPose.isValid()) {\r\n break;\r\n }\r\n }\r\n\r\n return handPose;\r\n }\r\n\r\n _startHook() {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.start();\r\n }\r\n\r\n this._myStarted = true;\r\n }\r\n\r\n _preUpdate(dt) {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.preUpdate(dt);\r\n }\r\n }\r\n\r\n _postUpdate(dt) {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.postUpdate(dt);\r\n }\r\n }\r\n\r\n _getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let coreButtonData = core.getButtonData(buttonID);\r\n this._myButtonData.myPressed = this._myButtonData.myPressed || coreButtonData.myPressed;\r\n this._myButtonData.myTouched = this._myButtonData.myTouched || coreButtonData.myTouched;\r\n if (Math.abs(coreButtonData.myValue) > Math.abs(this._myButtonData.myValue)) {\r\n this._myButtonData.myValue = coreButtonData.myValue;\r\n }\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n _getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let coreAxesData = core.getAxesData(axesID);\r\n\r\n if (Math.abs(coreAxesData[0]) > Math.abs(this._myAxesData[0])) {\r\n this._myAxesData[0] = coreAxesData[0];\r\n }\r\n\r\n if (Math.abs(coreAxesData[1]) > Math.abs(this._myAxesData[1])) {\r\n this._myAxesData[1] = coreAxesData[1];\r\n }\r\n }\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n _getHapticActuators() {\r\n this._myHapticActuators.pp_clear();\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let coreHapticActuators = core.getHapticActuators();\r\n for (let j = 0; j < coreHapticActuators.length; j++) {\r\n this._myHapticActuators.push(coreHapticActuators[j]);\r\n }\r\n }\r\n }\r\n\r\n return this._myHapticActuators;\r\n }\r\n\r\n _destroyHook() {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.destroy();\r\n }\r\n }\r\n}", "import { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { UniversalGamepad } from \"../universal_gamepad.js\";\r\n\r\nexport class GamepadsManager {\r\n\r\n constructor() {\r\n this._myGamepads = [];\r\n\r\n this._myGamepads[Handedness.LEFT] = new UniversalGamepad(Handedness.LEFT);\r\n this._myGamepads[Handedness.RIGHT] = new UniversalGamepad(Handedness.RIGHT);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n for (let key in this._myGamepads) {\r\n this._myGamepads[key].start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n for (let key in this._myGamepads) {\r\n this._myGamepads[key].update(dt);\r\n }\r\n }\r\n\r\n getLeftGamepad() {\r\n return this._myGamepads[Handedness.LEFT];\r\n }\r\n\r\n getRightGamepad() {\r\n return this._myGamepads[Handedness.RIGHT];\r\n }\r\n\r\n getGamepad(handedness) {\r\n return this._myGamepads[handedness];\r\n }\r\n\r\n getGamepads() {\r\n return this._myGamepads;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let key in this._myGamepads) {\r\n this._myGamepads[key].destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { mat4_create, quat2_create, quat_create, vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class BasePoseParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myReferenceObject = null;\r\n this.myForwardFixed = true;\r\n this.myUpdateOnViewReset = false;\r\n this.myForceEmulatedVelocities = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\n// BasePose transform is local by default (as if the parent/reference object was the identity transform)\r\n// You can use setReferenceObject if you want the BasePose to return the transform in world space \r\nexport class BasePose {\r\n\r\n constructor(basePoseParams = new BasePoseParams()) {\r\n this._myForwardFixed = basePoseParams.myForwardFixed;\r\n this._myForceEmulatedVelocities = basePoseParams.myForceEmulatedVelocities;\r\n this._myUpdateOnViewReset = basePoseParams.myUpdateOnViewReset;\r\n\r\n this._myReferenceObject = basePoseParams.myReferenceObject;\r\n\r\n this._myEngine = basePoseParams.myEngine;\r\n\r\n this._myPosition = vec3_create();\r\n this._myRotationQuat = quat2_create();\r\n\r\n this._myPrevPosition = vec3_create();\r\n this._myPrevRotationQuat = quat_create();\r\n\r\n this._myLinearVelocity = vec3_create();\r\n this._myAngularVelocityRadians = vec3_create();\r\n\r\n this._myValid = false;\r\n this._myLinearVelocityEmulated = true;\r\n this._myAngularVelocityEmulated = true;\r\n\r\n this._myPrePoseUpdatedEventEmitter = new Emitter(); // Signature: listener(dt, pose, manualUpdate)\r\n this._myPoseUpdatedEmitter = new Emitter(); // Signature: listener(dt, pose, manualUpdate)\r\n this._myPostPoseUpdatedEventEmitter = new Emitter(); // Signature: listener(dt, pose, manualUpdate)\r\n\r\n this._myViewResetEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getEngine() {\r\n return this._myEngine;\r\n }\r\n\r\n // If the reference object is set, the transform will be converted using it as a parent,\r\n // otherwise the transform will be local, as if the parent/reference object was the identity transform\r\n setReferenceObject(referenceObject) {\r\n this._myReferenceObject = referenceObject;\r\n }\r\n\r\n getReferenceObject() {\r\n return this._myReferenceObject;\r\n }\r\n\r\n setForwardFixed(forwardFixed) {\r\n this._myForwardFixed = forwardFixed;\r\n }\r\n\r\n isForwardFixed() {\r\n return this._myForwardFixed;\r\n }\r\n\r\n setForceEmulatedVelocities(forceEmulatedVelocities) {\r\n this._myForceEmulatedVelocities = forceEmulatedVelocities;\r\n }\r\n\r\n isForceEmulatedVelocities() {\r\n return this._myForceEmulatedVelocities;\r\n }\r\n\r\n setUpdateOnViewReset(updateOnViewReset) {\r\n this._myUpdateOnViewReset = updateOnViewReset;\r\n }\r\n\r\n isUpdateOnViewReset() {\r\n return this._myUpdateOnViewReset;\r\n }\r\n\r\n getReferenceSpace() {\r\n return XRUtils.getReferenceSpace(this._myEngine);\r\n }\r\n\r\n getPosition(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotation(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getRotationDegrees(out, referenceObjectOverride);\r\n }\r\n\r\n getRotationDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotationRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getTransform(out = mat4_create(), referenceObjectOverride = undefined) {\r\n return this.getTransformMatrix(out, referenceObjectOverride);\r\n }\r\n\r\n getTransformMatrix(out = mat4_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @param {any} referenceObjectOverride\r\n * @return {any}\r\n */\r\n getTransformQuat(out = quat2_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getLinearVelocity(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getAngularVelocity(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getAngularVelocityDegrees(out, referenceObjectOverride);\r\n }\r\n\r\n getAngularVelocityDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getAngularVelocityRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n isValid() {\r\n return this._myValid;\r\n }\r\n\r\n isLinearVelocityEmulated() {\r\n return this._myLinearVelocityEmulated;\r\n }\r\n\r\n isAngularVelocityEmulated() {\r\n return this._myAngularVelocityEmulated;\r\n }\r\n\r\n registerPrePoseUpdatedEventEventListener(id, listener) {\r\n this._myPrePoseUpdatedEventEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPrePoseUpdatedEventEventListener(id) {\r\n this._myPrePoseUpdatedEventEmitter.remove(id);\r\n }\r\n\r\n registerPoseUpdatedEventListener(id, listener) {\r\n this._myPoseUpdatedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPoseUpdatedEventListener(id) {\r\n this._myPoseUpdatedEmitter.remove(id);\r\n }\r\n\r\n registerPostPoseUpdatedEventEventListener(id, listener) {\r\n this._myPostPoseUpdatedEventEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPostPoseUpdatedEventEventListener(id) {\r\n this._myPostPoseUpdatedEventEmitter.remove(id);\r\n }\r\n\r\n start() {\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, true, this._myEngine);\r\n }\r\n\r\n update(dt) {\r\n this._update(dt, true, false);\r\n }\r\n\r\n // Hooks\r\n\r\n _isReadyToGetPose() {\r\n return true;\r\n }\r\n\r\n _getPose(xrFrame) {\r\n return null;\r\n }\r\n\r\n _updateHook(dt, updateVelocity, xrPose) {\r\n\r\n }\r\n\r\n _onXRSessionStartHook(manualCall, session) {\r\n\r\n }\r\n\r\n _onXRSessionEndHook() {\r\n\r\n }\r\n\r\n _onViewResetHook() {\r\n\r\n }\r\n\r\n _destroyHook() {\r\n\r\n }\r\n\r\n // Hooks End\r\n\r\n _update(dt, updateVelocity, manualUpdate) {\r\n this._myPrevPosition.vec3_copy(this._myPosition);\r\n this._myPrevRotationQuat.quat_copy(this._myRotationQuat);\r\n\r\n let xrFrame = XRUtils.getFrame(this._myEngine);\r\n if (xrFrame && this._isReadyToGetPose()) {\r\n let xrPose = null;\r\n try {\r\n xrPose = this._getPose(xrFrame);\r\n } catch (error) {\r\n // Not handled, pose will be null\r\n }\r\n\r\n if (xrPose) {\r\n this._myPosition[0] = xrPose.transform.position.x;\r\n this._myPosition[1] = xrPose.transform.position.y;\r\n this._myPosition[2] = xrPose.transform.position.z;\r\n\r\n this._myRotationQuat[0] = xrPose.transform.orientation.x;\r\n this._myRotationQuat[1] = xrPose.transform.orientation.y;\r\n this._myRotationQuat[2] = xrPose.transform.orientation.z;\r\n this._myRotationQuat[3] = xrPose.transform.orientation.w;\r\n this._myRotationQuat.quat_normalize(this._myRotationQuat);\r\n\r\n if (updateVelocity) {\r\n if (xrPose.linearVelocity && !this._myForceEmulatedVelocities) {\r\n this._myLinearVelocity[0] = xrPose.linearVelocity.x;\r\n this._myLinearVelocity[1] = xrPose.linearVelocity.y;\r\n this._myLinearVelocity[2] = xrPose.linearVelocity.z;\r\n\r\n this._myLinearVelocityEmulated = false;\r\n } else {\r\n this._computeEmulatedLinearVelocity(dt);\r\n\r\n this._myLinearVelocityEmulated = true;\r\n }\r\n\r\n if (xrPose.angularVelocity && !this._myForceEmulatedVelocities) {\r\n this._myAngularVelocityRadians[0] = xrPose.angularVelocity.x;\r\n this._myAngularVelocityRadians[1] = xrPose.angularVelocity.y;\r\n this._myAngularVelocityRadians[2] = xrPose.angularVelocity.z;\r\n\r\n this._myAngularVelocityEmulated = false;\r\n } else {\r\n this._computeEmulatedAngularVelocity(dt);\r\n\r\n this._myAngularVelocityEmulated = true;\r\n }\r\n }\r\n\r\n this._myValid = true;\r\n } else {\r\n // Keep previous position and rotation but reset velocity because reasons\r\n\r\n if (updateVelocity) {\r\n this._myLinearVelocity[0] = 0;\r\n this._myLinearVelocity[1] = 0;\r\n this._myLinearVelocity[2] = 0;\r\n\r\n this._myAngularVelocityRadians[0] = 0;\r\n this._myAngularVelocityRadians[1] = 0;\r\n this._myAngularVelocityRadians[2] = 0;\r\n }\r\n\r\n this._myValid = false;\r\n this._myLinearVelocityEmulated = true;\r\n this._myAngularVelocityEmulated = true;\r\n }\r\n\r\n this._updateHook(dt, updateVelocity, xrPose);\r\n } else {\r\n // Keep previous position and rotation but reset velocity because reasons\r\n\r\n if (updateVelocity) {\r\n this._myLinearVelocity[0] = 0;\r\n this._myLinearVelocity[1] = 0;\r\n this._myLinearVelocity[2] = 0;\r\n\r\n this._myAngularVelocityRadians[0] = 0;\r\n this._myAngularVelocityRadians[1] = 0;\r\n this._myAngularVelocityRadians[2] = 0;\r\n }\r\n\r\n this._myValid = false;\r\n this._myLinearVelocityEmulated = true;\r\n this._myAngularVelocityEmulated = true;\r\n\r\n this._updateHook(dt, updateVelocity, null);\r\n }\r\n\r\n this._myPrePoseUpdatedEventEmitter.notify(dt, this, manualUpdate);\r\n this._myPoseUpdatedEmitter.notify(dt, this, manualUpdate);\r\n this._myPostPoseUpdatedEventEmitter.notify(dt, this, manualUpdate);\r\n }\r\n\r\n _computeEmulatedLinearVelocity(dt) {\r\n if (dt > 0) {\r\n this._myPosition.vec3_sub(this._myPrevPosition, this._myLinearVelocity);\r\n this._myLinearVelocity.vec3_scale(1 / dt, this._myLinearVelocity);\r\n } else {\r\n this._myLinearVelocity[0] = 0;\r\n this._myLinearVelocity[1] = 0;\r\n this._myLinearVelocity[2] = 0;\r\n }\r\n }\r\n\r\n _onXRSessionStart(manualCall, session) {\r\n let referenceSpace = XRUtils.getReferenceSpace(this._myEngine);\r\n\r\n if (referenceSpace.addEventListener != null) {\r\n this._myViewResetEventListener = this._onViewReset.bind(this);\r\n referenceSpace.addEventListener(\"reset\", this._myViewResetEventListener);\r\n }\r\n\r\n this._onXRSessionStartHook(manualCall, session);\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._onXRSessionEndHook();\r\n\r\n this._myViewResetEventListener = null;\r\n }\r\n\r\n _onViewReset() {\r\n if (this._myUpdateOnViewReset) {\r\n this._update(0, false, true);\r\n }\r\n\r\n this._onViewResetHook();\r\n }\r\n\r\n _computeEmulatedAngularVelocity() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._destroyHook();\r\n\r\n XRUtils.getReferenceSpace(this._myEngine)?.removeEventListener?.(\"reset\", this._myViewResetEventListener);\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nBasePose.prototype.getPosition = function () {\r\n let transform = mat4_create();\r\n return function getPosition(out = vec3_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.vec3_copy(this._myPosition);\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.vec3_convertPositionToWorld(referenceObject.pp_getTransform(transform), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getRotationDegrees = function () {\r\n let rotationQuat = quat_create();\r\n return function getRotationDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getRotationQuat(rotationQuat, referenceObjectOverride).quat_toDegrees(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getRotationRadians = function () {\r\n let rotationQuat = quat_create();\r\n return function getRotationRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getRotationQuat(rotationQuat, referenceObjectOverride).quat_toRadians(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getRotationQuat = function () {\r\n let playerRotationQuat = quat_create();\r\n let up = vec3_create();\r\n return function getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.quat_copy(this._myRotationQuat);\r\n\r\n if (this._myForwardFixed) {\r\n out.quat_rotateAxisRadians(Math.PI, out.quat_getUp(up), out);\r\n }\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.quat_toWorld(referenceObject.pp_getRotationQuat(playerRotationQuat), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getTransformMatrix = function () {\r\n let transformQuat = quat2_create();\r\n return function getTransformMatrix(out = mat4_create(), referenceObjectOverride = undefined) {\r\n return this.getTransformQuat(transformQuat, referenceObjectOverride).quat2_toMatrix(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getTransformQuat = function () {\r\n let rotationQuat = quat_create();\r\n let playerTransformQuat = quat2_create();\r\n return function getTransformQuat(out = quat2_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.quat2_identity();\r\n out.quat2_setPositionRotationQuat(this._myPosition, this.getRotationQuat(rotationQuat, referenceObjectOverride));\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.quat_toWorld(referenceObject.pp_getTransformQuat(playerTransformQuat), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getLinearVelocity = function () {\r\n let transform = mat4_create();\r\n return function getLinearVelocity(out = vec3_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.vec3_copy(this._myLinearVelocity);\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.vec3_convertDirectionToWorld(referenceObject.pp_getTransform(transform), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getAngularVelocityDegrees = function () {\r\n let velocityRadians = vec3_create();\r\n return function getAngularVelocityDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getAngularVelocityRadians(velocityRadians, referenceObjectOverride).vec3_toDegrees(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getAngularVelocityRadians = function () {\r\n let transform = mat4_create();\r\n return function getAngularVelocityRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.vec3_copy(this._myAngularVelocityRadians);\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.vec3_convertDirectionToWorld(referenceObject.pp_getTransform(transform), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype._computeEmulatedAngularVelocity = function () {\r\n let rotationRadians = vec3_create();\r\n let prevRotationRadians = vec3_create();\r\n return function _computeEmulatedAngularVelocity(dt) {\r\n if (dt > 0) {\r\n rotationRadians = this._myRotationQuat.quat_toRadians(rotationRadians);\r\n prevRotationRadians = this._myPrevRotationQuat.quat_toRadians(prevRotationRadians);\r\n rotationRadians.vec3_sub(prevRotationRadians, this._myAngularVelocityRadians);\r\n this._myAngularVelocityRadians.vec3_scale(1 / dt, this._myAngularVelocityRadians);\r\n } else {\r\n this._myAngularVelocityRadians[0] = 0;\r\n this._myAngularVelocityRadians[1] = 0;\r\n this._myAngularVelocityRadians[2] = 0;\r\n }\r\n };\r\n}();", "import { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { Handedness, HandednessIndex, InputSourceType, TrackedHandJointID, TrackedHandJointIDIndex } from \"./input_types.js\";\r\n\r\nexport function getHandednessByIndex(index) {\r\n let handedness = null;\r\n\r\n switch (index) {\r\n case HandednessIndex.LEFT:\r\n handedness = Handedness.LEFT;\r\n break;\r\n case HandednessIndex.RIGHT:\r\n handedness = Handedness.RIGHT;\r\n break;\r\n }\r\n\r\n return handedness;\r\n}\r\n\r\nexport function getInputSource(handedness, inputSourceType = null, engine = Globals.getMainEngine()) {\r\n let inputSource = null;\r\n\r\n let xrSession = XRUtils.getSession(engine);\r\n if (xrSession != null && xrSession.inputSources != null) {\r\n for (let i = 0; i < xrSession.inputSources.length; i++) {\r\n let input = xrSession.inputSources[i];\r\n\r\n let correctType = (!inputSourceType) || (inputSourceType == InputSourceType.GAMEPAD && !input.hand) || (inputSourceType == InputSourceType.TRACKED_HAND && input.hand);\r\n if (correctType && input.handedness == handedness) {\r\n inputSource = input;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return inputSource;\r\n}\r\n\r\nexport function getInputSourceTypeByHandedness(handedness, engine) {\r\n let inputSource = InputUtils.getInputSource(handedness, undefined, engine);\r\n\r\n return InputUtils.getInputSourceType(inputSource);\r\n}\r\n\r\nexport function getInputSourceType(inputSource) {\r\n let inputSourceType = null;\r\n\r\n if (inputSource) {\r\n if (inputSource.hand) {\r\n inputSourceType = InputSourceType.TRACKED_HAND;\r\n } else {\r\n inputSourceType = InputSourceType.GAMEPAD;\r\n }\r\n }\r\n\r\n return inputSourceType;\r\n}\r\n\r\nexport function getOppositeHandedness(handedness) {\r\n let oppositeHandedness = null;\r\n\r\n switch (handedness) {\r\n case Handedness.LEFT:\r\n oppositeHandedness = Handedness.RIGHT;\r\n break;\r\n case Handedness.RIGHT:\r\n oppositeHandedness = Handedness.LEFT;\r\n break;\r\n }\r\n\r\n return oppositeHandedness;\r\n}\r\n\r\nexport function getJointIDByIndex(index) {\r\n let jointID = null;\r\n\r\n let jointIDKey = null;\r\n for (let jointIDIndexKey in TrackedHandJointIDIndex) {\r\n if (TrackedHandJointIDIndex[jointIDIndexKey] == index) {\r\n jointIDKey = jointIDIndexKey;\r\n break;\r\n }\r\n }\r\n\r\n if (jointIDKey != null) {\r\n jointID = TrackedHandJointID[jointIDKey];\r\n }\r\n\r\n return jointID;\r\n}\r\n\r\nexport let InputUtils = {\r\n getHandednessByIndex,\r\n getInputSource,\r\n getInputSourceTypeByHandedness,\r\n getInputSourceType,\r\n getOppositeHandedness,\r\n getJointIDByIndex\r\n};", "import { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { quat_create, vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Handedness, InputSourceType } from \"../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../cauldron/input_utils.js\";\r\nimport { BasePose, BasePoseParams } from \"./base_pose.js\";\r\n\r\nexport class HandPoseParams extends BasePoseParams {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n\r\n this.myFixTrackedHandRotation = true;\r\n }\r\n}\r\n\r\nexport class HandPose extends BasePose {\r\n\r\n constructor(handedness, handPoseParams = new HandPoseParams()) {\r\n super(handPoseParams);\r\n\r\n this._myInputSource = null;\r\n\r\n this._myHandedness = handedness;\r\n this._myFixTrackedHandRotation = handPoseParams.myFixTrackedHandRotation;\r\n\r\n this._myTrackedHand = false;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getInputSource() {\r\n return this._myInputSource;\r\n }\r\n\r\n getInputSourceType() {\r\n if (this._myInputSource == null) {\r\n return null;\r\n }\r\n\r\n return InputUtils.getInputSourceType(this._myInputSource);\r\n }\r\n\r\n isFixTrackedHandRotation() {\r\n return this._myFixTrackedHandRotation;\r\n }\r\n\r\n setFixTrackedHandRotation(fixTrackedHandRotation) {\r\n this.myFixTrackedHandRotation = fixTrackedHandRotation;\r\n }\r\n\r\n getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isReadyToGetPose() {\r\n return this._myInputSource != null;\r\n }\r\n\r\n _getPose(xrFrame) {\r\n return xrFrame.getPose(this._myInputSource.gripSpace, this.getReferenceSpace());\r\n }\r\n\r\n _onXRSessionStartHook(manualCall, session) {\r\n this._myInputSourcesChangeEventListener = () => {\r\n this._myInputSource = null;\r\n\r\n if (session.inputSources != null && session.inputSources.length > 0) {\r\n for (let i = 0; i < session.inputSources.length; i++) {\r\n let inputSource = session.inputSources[i];\r\n if (inputSource.handedness == this._myHandedness) {\r\n this._myInputSource = inputSource;\r\n this._myTrackedHand = InputUtils.getInputSourceType(this._myInputSource) == InputSourceType.TRACKED_HAND;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._myInputSourcesChangeEventListener();\r\n\r\n session.addEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n\r\n _onXRSessionEndHook() {\r\n this._myInputSource = null;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n _destroyHook() {\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nHandPose.prototype.getRotationQuat = function () {\r\n let playerRotationQuat = quat_create();\r\n let up = vec3_create();\r\n let right = vec3_create();\r\n let forward = vec3_create();\r\n return function getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.quat_copy(this._myRotationQuat);\r\n\r\n if (this._myForwardFixed) {\r\n out.quat_rotateAxisRadians(Math.PI, out.quat_getUp(up), out);\r\n }\r\n\r\n if (this._myFixTrackedHandRotation && this._myTrackedHand) {\r\n out.quat_rotateAxis(-60, out.quat_getRight(right), out);\r\n\r\n let forwardRotation = 20;\r\n forwardRotation = (this._myHandedness == Handedness.LEFT) ? forwardRotation : -forwardRotation;\r\n out.quat_rotateAxis(forwardRotation, out.quat_getForward(forward), out);\r\n }\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.quat_toWorld(referenceObject.pp_getRotationQuat(playerRotationQuat), out);\r\n };\r\n}();", "import { BasePose } from \"./base_pose.js\";\r\n\r\nexport class HeadPose extends BasePose {\r\n _getPose(xrFrame) {\r\n return xrFrame.getViewerPose(this.getReferenceSpace());\r\n }\r\n}", "import { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { InputSourceType } from \"../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../cauldron/input_utils.js\";\r\nimport { BasePose, BasePoseParams } from \"./base_pose.js\";\r\n\r\nexport class TrackedHandJointPose extends BasePose {\r\n\r\n constructor(handedness, trackedHandJointID, basePoseParams = new BasePoseParams()) {\r\n super(basePoseParams);\r\n\r\n this._myInputSource = null;\r\n\r\n this._myHandedness = handedness;\r\n this._myTrackedHandJointID = trackedHandJointID;\r\n\r\n this._myJointRadius = 0;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getTrackedHandJointID() {\r\n return this._myTrackedHandJointID;\r\n }\r\n\r\n setTrackedHandJointID(trackedHandJointID) {\r\n this._myTrackedHandJointID = trackedHandJointID;\r\n }\r\n\r\n getJointRadius() {\r\n return this._myJointRadius;\r\n }\r\n\r\n _isReadyToGetPose() {\r\n return this._myInputSource != null;\r\n }\r\n\r\n _getPose(xrFrame) {\r\n return xrFrame.getJointPose(this._myInputSource.hand.get(this._myTrackedHandJointID), this.getReferenceSpace());\r\n }\r\n\r\n _updateHook(dt, updateVelocity, xrPose) {\r\n if (xrPose != null) {\r\n this._myJointRadius = xrPose.radius;\r\n }\r\n }\r\n\r\n _onXRSessionStartHook(manualCall, session) {\r\n this._myInputSourcesChangeEventListener = () => {\r\n this._myInputSource = null;\r\n\r\n if (session.inputSources != null && session.inputSources.length > 0) {\r\n\r\n for (let i = 0; i < session.inputSources.length; i++) {\r\n let inputSource = session.inputSources[i];\r\n if (inputSource.handedness == this._myHandedness) {\r\n if (InputUtils.getInputSourceType(inputSource) == InputSourceType.TRACKED_HAND) {\r\n this._myInputSource = inputSource;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._myInputSourcesChangeEventListener();\r\n\r\n session.addEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n\r\n _onXRSessionEndHook() {\r\n this._myInputSource = null;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n _destroyHook() {\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\nimport { TrackedHandJointID } from \"../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../cauldron/input_utils.js\";\r\nimport { BasePoseParams } from \"./base_pose.js\";\r\nimport { TrackedHandJointPose } from \"./tracked_hand_joint_pose.js\";\r\n\r\nexport class TrackedHandPoseParams extends BasePoseParams {\r\n\r\n constructor(addAllJointIDs = true, engine = Globals.getMainEngine()) {\r\n super(engine);\r\n\r\n this.myTrackedHandJointIDList = [];\r\n\r\n if (addAllJointIDs) {\r\n for (let key in TrackedHandJointID) {\r\n this.myTrackedHandJointIDList.push([TrackedHandJointID[key]]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class TrackedHandPose {\r\n\r\n constructor(handedness, trackedHandPoseParams = new TrackedHandPoseParams()) {\r\n this._myHandedness = handedness;\r\n\r\n this._myForwardFixed = trackedHandPoseParams.myForwardFixed;\r\n this._myForceEmulatedVelocities = trackedHandPoseParams.myForceEmulatedVelocities;\r\n this._myReferenceObject = trackedHandPoseParams.myReferenceObject;\r\n\r\n this._myEngine = trackedHandPoseParams.myEngine;\r\n\r\n this._myTrackedHandJointPoseParams = new BasePoseParams(this._myEngine);\r\n this._myTrackedHandJointPoseParams.myForwardFixed = this._myForwardFixed;\r\n this._myTrackedHandJointPoseParams.myForceEmulatedVelocities = this._myForceEmulatedVelocities;\r\n this._myTrackedHandJointPoseParams.myReferenceObject = this._myReferenceObject;\r\n\r\n this._myTrackedHandJointPoses = [];\r\n for (let jointID of trackedHandPoseParams.myTrackedHandJointIDList) {\r\n let trackedHandJointPose = new TrackedHandJointPose(this._myHandedness, jointID, this._myTrackedHandJointPoseParams);\r\n this._myTrackedHandJointPoses[jointID] = trackedHandJointPose;\r\n }\r\n }\r\n\r\n start() {\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.update(dt);\r\n }\r\n }\r\n\r\n getEngine() {\r\n this._myEngine;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getJointPose(jointID) {\r\n return this._myTrackedHandJointPoses[jointID];\r\n }\r\n\r\n getJointPoseByIndex(jointIDIndex) {\r\n return this._myTrackedHandJointPoses[InputUtils.getJointIDByIndex(jointIDIndex)];\r\n }\r\n\r\n getJointPoses() {\r\n return this._myTrackedHandJointPoses;\r\n }\r\n\r\n addTrackedHandJointID(jointID) {\r\n if (!this._myTrackedHandJointPoses.pp_has(element => element.getTrackedHandJointID() == jointID)) {\r\n let trackedHandJointPose = new TrackedHandJointPose(this._myHandedness, jointID, this._myTrackedHandJointPoseParams);\r\n this._myTrackedHandJointPoses.push(trackedHandJointPose);\r\n }\r\n }\r\n\r\n removeTrackedHandJointID(jointID) {\r\n this._myTrackedHandJointPoses.pp_remove(element => element.getTrackedHandJointID() == jointID);\r\n }\r\n\r\n setReferenceObject(referenceObject) {\r\n this._myReferenceObject = referenceObject;\r\n this._myTrackedHandJointPoseParams.myReferenceObject = this._myReferenceObject;\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.setReferenceObject(referenceObject);\r\n }\r\n }\r\n\r\n getReferenceObject() {\r\n return this._myReferenceObject;\r\n }\r\n\r\n setForwardFixed(forwardFixed) {\r\n this._myForwardFixed = forwardFixed;\r\n this._myTrackedHandJointPoseParams.myForwardFixed = this._myForwardFixed;\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.setForwardFixed(forwardFixed);\r\n }\r\n }\r\n\r\n isForwardFixed() {\r\n return this._myForwardFixed;\r\n }\r\n\r\n setForceEmulatedVelocities(forceEmulatedVelocities) {\r\n this._myForceEmulatedVelocities = forceEmulatedVelocities;\r\n this._myTrackedHandJointPoseParams.myForceEmulatedVelocities = this._myForceEmulatedVelocities;\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.setForceEmulatedVelocities(forceEmulatedVelocities);\r\n }\r\n }\r\n\r\n isForceEmulatedVelocities() {\r\n return this._myForceEmulatedVelocities;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let jointPose of this._myTrackedHandJointPoses) {\r\n jointPose.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../cauldron/cauldron/timer.js\";\r\nimport { RaycastResults } from \"../../cauldron/physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../../cauldron/physics/physics_utils.js\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { mat4_create, quat_create, vec2_create, vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport let MouseButtonID = {\r\n LEFT: 0,\r\n MIDDLE: 1,\r\n RIGHT: 2\r\n};\r\n\r\n// #TODO Refactor Mouse/Keyboard/Gamepad and create a sort of parent ButtonHandler that have the base ButtonInfo and all of them inherit\r\nexport class Mouse {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myButtonInfos = {};\r\n this._myButtonInfosIDs = [];\r\n for (let key in MouseButtonID) {\r\n this._myButtonInfos[MouseButtonID[key]] = this._createButtonInfo();\r\n this._myButtonInfosIDs.push(MouseButtonID[key]);\r\n }\r\n\r\n this._myPreventContextMenuEventListener = this._preventContextMenu.bind(this);\r\n this._myPreventMiddleButtonScrollEventListener = this._preventMiddleButtonScroll.bind(this);\r\n\r\n this._myInternalMousePosition = vec2_create();\r\n this._myScreenSize = vec2_create();\r\n this._updateScreenSize();\r\n\r\n this._myResetMovingDelay = 0.15;\r\n this._myResetMovingTimer = new Timer(this._myResetMovingDelay, false);\r\n this._myMoving = false;\r\n\r\n this._myInsideView = false;\r\n this._myValid = false;\r\n\r\n this._myPointerUpOnPointerLeave = true;\r\n\r\n this._myContextMenuActive = true;\r\n this._myMiddleButtonScrollActive = true;\r\n\r\n this._myPointerID = null;\r\n this._myLastValidPointerEvent = null;\r\n\r\n this._myPointerEventValidCallbacks = {}; // Signature: callback(event)\r\n this._myPointerEventValidCallbacksIDs = [];\r\n\r\n this._myPointerMoveEventListener = null;\r\n this._myPointerDownEventListener = null;\r\n this._myPointerUpEventListener = null;\r\n this._myPointerLeaveEventListener = null;\r\n this._myPointerEnterEventListener = null;\r\n this._myMouseDownEventListener = null;\r\n this._myMouseUpEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n // Support Variables\r\n this._myProjectionMatrixInverse = mat4_create();\r\n this._myRotationQuat = quat_create();\r\n this._myOriginWorld = vec3_create();\r\n this._myDirectionWorld = vec3_create();\r\n }\r\n\r\n start() {\r\n this._myPointerMoveEventListener = this._onPointerAction.bind(this, this._onPointerMove.bind(this));\r\n document.body.addEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n this._myPointerDownEventListener = this._onPointerAction.bind(this, this._onPointerDown.bind(this));\r\n document.body.addEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n this._myPointerUpEventListener = this._onPointerAction.bind(this, this._onPointerUp.bind(this));\r\n document.body.addEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n this._myPointerLeaveEventListener = this._onPointerLeave.bind(this);\r\n document.body.addEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n this._myPointerEnterEventListener = this._onPointerEnter.bind(this);\r\n document.body.addEventListener(\"pointerenter\", this._myPointerEnterEventListener);\r\n\r\n // These are needed to being able to detect for example left and right click together, pointer only allow one down at a time\r\n this._myMouseDownEventListener = this._onMouseAction.bind(this, this._onPointerDown.bind(this));\r\n document.body.addEventListener(\"mousedown\", this._myMouseDownEventListener);\r\n this._myMouseUpEventListener = this._onMouseAction.bind(this, this._onPointerUp.bind(this));\r\n document.body.addEventListener(\"mouseup\", this._myMouseUpEventListener);\r\n }\r\n\r\n update(dt) {\r\n if (this._myResetMovingTimer.isRunning()) {\r\n this._myResetMovingTimer.update(dt);\r\n if (this._myResetMovingTimer.isDone()) {\r\n this._myResetMovingTimer.reset();\r\n this._myMoving = false;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n buttonInfo.myPressStart = buttonInfo.myPressStartToProcess;\r\n buttonInfo.myPressEnd = buttonInfo.myPressEndToProcess;\r\n buttonInfo.myPressStartToProcess = false;\r\n buttonInfo.myPressEndToProcess = false;\r\n }\r\n\r\n this._updateScreenSize();\r\n\r\n if (!this.isAnyButtonPressed() && !this._myMoving) {\r\n this._myPointerID = null;\r\n }\r\n\r\n if (this._myLastValidPointerEvent != null) {\r\n let lastValidPointerEventStillValid = this._isPointerEventValid(this._myLastValidPointerEvent);\r\n if (!lastValidPointerEventStillValid) {\r\n if (this._myInsideView) {\r\n this._onPointerLeave(this._myLastValidPointerEvent);\r\n }\r\n\r\n this._myLastValidPointerEvent = null;\r\n }\r\n }\r\n }\r\n\r\n isValid() {\r\n return this._myValid;\r\n }\r\n\r\n isButtonPressed(buttonID) {\r\n let pressed = false;\r\n\r\n if (this._myButtonInfosIDs[buttonID] != null) {\r\n pressed = this._myButtonInfos[buttonID].myPressed;\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n isAnyButtonPressed() {\r\n let pressed = false;\r\n\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n if (buttonInfo.myPressed) {\r\n pressed = true;\r\n break;\r\n }\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n isButtonPressStart(buttonID) {\r\n let pressStart = false;\r\n\r\n if (this._myButtonInfosIDs[buttonID] != null) {\r\n pressStart = this._myButtonInfos[buttonID].myPressStart;\r\n }\r\n\r\n return pressStart;\r\n }\r\n\r\n isButtonPressEnd(buttonID = null) {\r\n let pressEnd = false;\r\n\r\n if (this._myButtonInfosIDs[buttonID] != null) {\r\n pressEnd = this._myButtonInfos[buttonID].myPressEnd;\r\n }\r\n\r\n return pressEnd;\r\n }\r\n\r\n isMoving() {\r\n return this._myMoving;\r\n }\r\n\r\n isInsideView() {\r\n return this._myInsideView;\r\n }\r\n\r\n isTargetingRenderCanvas() {\r\n return this.isInsideView() && this._myLastValidPointerEvent != null && this._myLastValidPointerEvent.target == Globals.getCanvas(this._myEngine);\r\n }\r\n\r\n // The origin and direction are set by the mouse\r\n raycastWorld(raycastParams, raycastResults = new RaycastResults()) {\r\n this.getOriginWorld(raycastParams.myOrigin);\r\n this.getDirectionWorld(raycastParams.myDirection);\r\n raycastResults = PhysicsUtils.raycast(raycastParams, raycastResults, Globals.getPhysics(this._myEngine));\r\n return raycastResults;\r\n }\r\n\r\n getPositionScreen(out = vec2_create()) {\r\n let mousePosition = out;\r\n mousePosition[0] = this._myInternalMousePosition[0];\r\n mousePosition[1] = this._myScreenSize[1] - 1 - this._myInternalMousePosition[1];\r\n return mousePosition;\r\n }\r\n\r\n getPositionScreenNormalized(out = vec2_create()) {\r\n let mousePosition = out;\r\n mousePosition[0] = (this._myScreenSize[0] == 0) ? 0 : ((this._myInternalMousePosition[0] / this._myScreenSize[0]) * 2 - 1);\r\n mousePosition[1] = (this._myScreenSize[1] == 0) ? 0 : (((this._myScreenSize[1] - 1 - this._myInternalMousePosition[1]) / this._myScreenSize[1]) * 2 - 1);\r\n return mousePosition;\r\n }\r\n\r\n getScreenSize() {\r\n return this._myScreenSize;\r\n }\r\n\r\n getPositionWorld(distanceFromCamera, out = vec3_create()) {\r\n let originWorld = this.getOriginWorld(this._myOriginWorld);\r\n let directionWorld = this.getDirectionWorld(this._myDirectionWorld);\r\n\r\n out = originWorld.vec3_add(directionWorld.vec3_scale(distanceFromCamera, out), out);\r\n return out;\r\n }\r\n\r\n getOriginWorld(out = vec3_create()) {\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n Globals.getPlayerObjects(this._myEngine).myEyeLeft.pp_getPosition(out); // In theory mouse should not be used inside the session, but may make sense for AR which uses eye left\r\n } else {\r\n Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_getPosition(out);\r\n }\r\n\r\n return out;\r\n }\r\n\r\n getDirectionWorld(out = vec3_create()) {\r\n let right = this._myInternalMousePosition[0] / this._myScreenSize[0];\r\n let up = this._myInternalMousePosition[1] / this._myScreenSize[1];\r\n\r\n let directionLocal = out;\r\n directionLocal.vec3_set(right * 2 - 1, -up * 2 + 1, -1.0);\r\n\r\n let projectionMatrixInvert = this._myProjectionMatrixInverse;\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n projectionMatrixInvert = Globals.getPlayerObjects(this._myEngine).myEyeLeft.pp_getComponent(ViewComponent).projectionMatrix.mat4_invert(projectionMatrixInvert);\r\n } else {\r\n projectionMatrixInvert = Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_getComponent(ViewComponent).projectionMatrix.mat4_invert(projectionMatrixInvert);\r\n }\r\n\r\n directionLocal.vec3_transformMat4(projectionMatrixInvert, directionLocal);\r\n directionLocal.vec3_normalize(directionLocal);\r\n\r\n let directionWorld = directionLocal;\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n directionWorld = directionLocal.vec3_transformQuat(Globals.getPlayerObjects(this._myEngine).myEyeLeft.pp_getRotationQuat(this._myRotationQuat), directionLocal);\r\n } else {\r\n directionWorld = directionLocal.vec3_transformQuat(Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_getRotationQuat(this._myRotationQuat), directionLocal);\r\n }\r\n\r\n directionWorld.vec3_normalize(directionWorld);\r\n\r\n return out;\r\n }\r\n\r\n setTouchValid(touchValid) {\r\n let callbackID = \"pp_internal_touch_valid_callback\";\r\n if (touchValid) {\r\n this.removePointerEventValidCallback(callbackID);\r\n } else {\r\n this.addPointerEventValidCallback(callbackID, function (event) {\r\n return event.pointerType == \"mouse\";\r\n });\r\n }\r\n }\r\n\r\n setTargetOnlyRenderCanvas(targetOnlyRenderCanvas) {\r\n let callbackID = \"pp_internal_target_only_render_canvas_callback\";\r\n if (targetOnlyRenderCanvas) {\r\n this.addPointerEventValidCallback(callbackID, function (event) {\r\n return event.target == Globals.getCanvas(this._myEngine);\r\n });\r\n } else {\r\n this.removePointerEventValidCallback(callbackID);\r\n }\r\n }\r\n\r\n getLastValidPointerEvent() {\r\n return this._myLastValidPointerEvent;\r\n }\r\n\r\n // Can be used to specify that only some pointerType are valid (eg: mouse, touch, pen) or just some target (eg: Globals.getCanvas(this._myEngine))\r\n addPointerEventValidCallback(id, callback) {\r\n this._myPointerEventValidCallbacks[id] = callback;\r\n this._myPointerEventValidCallbacksIDs.push(id);\r\n }\r\n\r\n removePointerEventValidCallback(id) {\r\n delete this._myPointerEventValidCallbacks[id];\r\n this._myPointerEventValidCallbacksIDs.pp_removeEqual(id);\r\n }\r\n\r\n isPointerUpOnPointerLeave() {\r\n return this._myPointerUpOnPointerLeave;\r\n }\r\n\r\n setPointerUpOnPointerLeave(pointerUpOnPointerLeave) {\r\n this._myPointerUpOnPointerLeave = pointerUpOnPointerLeave;\r\n }\r\n\r\n isContextMenuActive() {\r\n return this._myContextMenuActive;\r\n }\r\n\r\n setContextMenuActive(active) {\r\n if (this._myContextMenuActive != active) {\r\n if (active) {\r\n document.body.removeEventListener(\"contextmenu\", this._myPreventContextMenuEventListener);\r\n } else {\r\n document.body.addEventListener(\"contextmenu\", this._myPreventContextMenuEventListener, false);\r\n }\r\n this._myContextMenuActive = active;\r\n }\r\n }\r\n\r\n isMiddleButtonScrollActive() {\r\n return this._myMiddleButtonScrollActive;\r\n }\r\n\r\n setMiddleButtonScrollActive(active) {\r\n if (this._myMiddleButtonScrollActive != active) {\r\n if (active) {\r\n document.body.removeEventListener(\"mousedown\", this._myPreventMiddleButtonScrollEventListener);\r\n } else {\r\n document.body.addEventListener(\"mousedown\", this._myPreventMiddleButtonScrollEventListener, false);\r\n }\r\n this._myMiddleButtonScrollActive = active;\r\n }\r\n }\r\n\r\n setResetMovingDelay(delay) {\r\n this._myResetMovingDelay = delay;\r\n }\r\n\r\n getResetMovingDelay() {\r\n return this._myResetMovingDelay;\r\n }\r\n\r\n _onPointerAction(actionCallback, event) {\r\n if (!this._isPointerEventIDValid(event)) return;\r\n\r\n if (!this._isPointerEventValid(event)) {\r\n if (this._myInsideView) {\r\n this._onPointerLeave(event);\r\n }\r\n return;\r\n }\r\n\r\n if (!this._myInsideView) {\r\n this._onPointerEnter(event);\r\n }\r\n\r\n actionCallback(event);\r\n\r\n this._updatePositionAndScreen(event);\r\n this._updatePointerData(event);\r\n }\r\n\r\n _onMouseAction(actionCallback, event) {\r\n if (!this._myInsideView) return;\r\n if (!this._isMouseAllowed()) return;\r\n if (!this._isPointerEventIDValid(this._myLastValidPointerEvent)) return;\r\n if (!this._isPointerEventValid(this._myLastValidPointerEvent)) return;\r\n\r\n actionCallback(event);\r\n }\r\n\r\n _onPointerMove(event) {\r\n this._myResetMovingTimer.start(this._myResetMovingDelay);\r\n this._myMoving = true;\r\n }\r\n\r\n _onPointerDown(event) {\r\n let buttonInfo = this._myButtonInfos[event.button];\r\n if (!buttonInfo.myPressed) {\r\n buttonInfo.myPressed = true;\r\n buttonInfo.myPressStartToProcess = true;\r\n }\r\n }\r\n\r\n _onPointerUp(event) {\r\n let buttonInfo = this._myButtonInfos[event.button];\r\n if (buttonInfo.myPressed) {\r\n buttonInfo.myPressed = false;\r\n buttonInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n\r\n _onPointerLeave(event) {\r\n if (!this._myInsideView || this._myLastValidPointerEvent == null || event.pointerId != this._myLastValidPointerEvent.pointerId) return;\r\n\r\n this._myInsideView = false;\r\n\r\n this._myMoving = false;\r\n\r\n if (this._myPointerUpOnPointerLeave) {\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n if (buttonInfo.myPressed) {\r\n buttonInfo.myPressed = false;\r\n buttonInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n }\r\n\r\n this._myPointerID = null;\r\n }\r\n\r\n _onPointerEnter(event) {\r\n if ((this._myInsideView && this._myPointerID != null) || !this._isPointerEventIDValid(event) || !this._isPointerEventValid(event)) return;\r\n\r\n this._myInsideView = true;\r\n\r\n this._updatePositionAndScreen(event);\r\n this._updatePointerData(event);\r\n }\r\n\r\n _preventContextMenu(event) {\r\n if (!this._isPointerEventIDValid(event) || !this._isPointerEventValid(event)) return;\r\n\r\n event.preventDefault();\r\n }\r\n\r\n _preventMiddleButtonScroll(event) {\r\n if (!this._isPointerEventIDValid(event) || !this._isPointerEventValid(event)) return;\r\n\r\n if (event.button == 1) {\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n _updatePositionAndScreen(event) {\r\n this._updateScreenSize();\r\n this._myInternalMousePosition[0] = event.clientX;\r\n this._myInternalMousePosition[1] = event.clientY;\r\n\r\n this._myValid = true;\r\n }\r\n\r\n _updateScreenSize() {\r\n let bounds = document.body.getBoundingClientRect();\r\n this._myScreenSize[0] = bounds.width;\r\n this._myScreenSize[1] = bounds.height;\r\n }\r\n\r\n _updatePointerData(event) {\r\n this._myPointerID = event.pointerId;\r\n this._myLastValidPointerEvent = event;\r\n }\r\n\r\n _isPointerEventIDValid(event) {\r\n if (event == null) return false;\r\n\r\n return this._myPointerID == null || this._myPointerID == event.pointerId;\r\n }\r\n\r\n _isPointerEventValid(event) {\r\n if (event == null) return false;\r\n\r\n let valid = true;\r\n\r\n for (let i = 0; i < this._myPointerEventValidCallbacksIDs.length; i++) {\r\n let id = this._myPointerEventValidCallbacksIDs[i];\r\n let callback = this._myPointerEventValidCallbacks[id];\r\n if (!callback(event)) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n _isMouseAllowed() {\r\n // Mouse events are valid only if the last pointer event was a mouse (id==1)\r\n return this._myLastValidPointerEvent != null && this._myLastValidPointerEvent.pointerId == 1;\r\n }\r\n\r\n _createButtonInfo() {\r\n return { myPressed: false, myPressStart: false, myPressStartToProcess: false, myPressEnd: false, myPressEndToProcess: false, };\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n document.body.removeEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n document.body.removeEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n document.body.removeEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.removeEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n document.body.removeEventListener(\"pointerenter\", this._myPointerEnterEventListener);\r\n\r\n document.body.removeEventListener(\"mousedown\", this._myMouseDownEventListener);\r\n document.body.removeEventListener(\"mouseup\", this._myMouseUpEventListener);\r\n\r\n document.body.removeEventListener(\"contextmenu\", this._myPreventContextMenuEventListener);\r\n document.body.removeEventListener(\"mousedown\", this._myPreventMiddleButtonScrollEventListener);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class EnableToolComponent extends Component {\r\n static TypeName = \"pp-enable-tools\";\r\n static Properties = {\r\n _myEnable: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myToolEnabled = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasToolEnabled(this.engine)) {\r\n this._myToolEnabled = this._myEnable;\r\n\r\n Globals.setToolEnabled(this._myToolEnabled, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myToolEnabled != null && Globals.isToolEnabled(this.engine) == this._myToolEnabled) {\r\n Globals.removeToolEnabled(this.engine);\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ConsoleVR } from \"../console_vr.js\";\r\n\r\nexport class InitConsoleVRComponent extends Component {\r\n static TypeName = \"pp-init-console-vr\";\r\n static Properties = {\r\n _myInit: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myConsoleVR = null;\r\n\r\n if (this._myInit) {\r\n // Prevents double global from same engine\r\n if (!Globals.hasConsoleVR(this.engine)) {\r\n this._myConsoleVR = new ConsoleVR(this.engine);\r\n\r\n Globals.setConsoleVR(this._myConsoleVR, this.engine);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myConsoleVR != null && Globals.getConsoleVR(this.engine) == this._myConsoleVR) {\r\n Globals.removeConsoleVR(this.engine);\r\n }\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myConsoleOriginalLog = console.log;\r\nlet _myConsoleOriginalError = console.error;\r\nlet _myConsoleOriginalWarn = console.warn;\r\nlet _myConsoleOriginalInfo = console.info;\r\nlet _myConsoleOriginalDebug = console.debug;\r\nlet _myConsoleOriginalAssert = console.assert;\r\nlet _myConsoleOriginalClear = console.clear;\r\n\r\nexport function log(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getLog(engine).apply(console, args);\r\n}\r\n\r\nexport function error(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getError(engine).apply(console, args);\r\n}\r\n\r\nexport function warn(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getWarn(engine).apply(console, args);\r\n}\r\n\r\nexport function info(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getInfo(engine).apply(console, args);\r\n}\r\n\r\nexport function debug(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getDebug(engine).apply(console, args);\r\n}\r\n\r\nexport function assert(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getAssert(engine).apply(console, args);\r\n}\r\n\r\nexport function clear(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getClear(engine).apply(console, args);\r\n}\r\n\r\nexport function getLog(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalLog;\r\n}\r\n\r\nexport function getError(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalError;\r\n}\r\n\r\nexport function getWarn(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalWarn;\r\n}\r\n\r\nexport function getInfo(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalInfo;\r\n}\r\n\r\nexport function getDebug(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalDebug;\r\n}\r\n\r\nexport function getAssert(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalAssert;\r\n}\r\n\r\nexport function getClear(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalClear;\r\n}\r\n\r\nexport let ConsoleOriginalFunctions = {\r\n log,\r\n error,\r\n warn,\r\n info,\r\n debug,\r\n assert,\r\n clear,\r\n getLog,\r\n getError,\r\n getWarn,\r\n getInfo,\r\n getDebug,\r\n getAssert,\r\n getClear\r\n};", "import { Globals } from \"../../pp/globals.js\";\r\nimport { ConsoleOriginalFunctions } from \"./console_original_functions.js\";\r\n\r\nexport class ConsoleVR {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n this._myForwardToBrowserConsole = true;\r\n }\r\n\r\n log(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.log(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n error(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.error(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n warn(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.warn(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n info(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.info(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n debug(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.debug(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n assert(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.assert(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n clear(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.clear(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n setForwardToBrowserConsole(forwardToBrowserConsole) {\r\n this._myForwardToBrowserConsole = forwardToBrowserConsole;\r\n }\r\n\r\n isForwardToBrowserConsole() {\r\n return this._myForwardToBrowserConsole;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneVariables } from \"../easy_tune_variables.js\";\r\n\r\nexport class InitEasyTuneVariablesComponent extends Component {\r\n static TypeName = \"pp-init-easy-tune-variables\";\r\n static Properties = {\r\n _myInit: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myEasyTuneVariables = null;\r\n\r\n if (this._myInit) {\r\n // Prevents double global from same engine\r\n if (!Globals.hasEasyTuneVariables(this.engine)) {\r\n this._myEasyTuneVariables = new EasyTuneVariables();\r\n\r\n Globals.setEasyTuneVariables(this._myEasyTuneVariables, this.engine);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myEasyTuneVariables != null && Globals.getEasyTuneVariables(this.engine) == this._myEasyTuneVariables) {\r\n Globals.removeEasyTuneVariables(this.engine);\r\n }\r\n }\r\n}", "export class EasyTuneVariables {\r\n\r\n constructor() {\r\n this._myVariables = new Map();\r\n }\r\n\r\n add(variable, overwriteCurrentOne = false) {\r\n if (overwriteCurrentOne || !this._myVariables.has(variable.getName())) {\r\n this._myVariables.set(variable.getName(), variable);\r\n }\r\n }\r\n\r\n remove(variableName) {\r\n this._myVariables.delete(variableName);\r\n }\r\n\r\n get(variableName) {\r\n let variable = this._myVariables.get(variableName);\r\n if (variable) {\r\n return variable.getValue();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n set(variableName, value, resetDefaultValue = false) {\r\n let variable = this._myVariables.get(variableName);\r\n if (variable) {\r\n variable.setValue(value, resetDefaultValue);\r\n }\r\n }\r\n\r\n has(variableName) {\r\n return this._myVariables.has(variableName);\r\n }\r\n\r\n length() {\r\n return this._myVariables.size;\r\n }\r\n\r\n isWidgetCurrentVariable(variableName) {\r\n let variable = this._myVariables.get(variableName);\r\n if (variable) {\r\n return variable.isWidgetCurrentVariable();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getEasyTuneVariable(variableName) {\r\n return this._myVariables.get(variableName);\r\n }\r\n\r\n getEasyTuneVariablesList() {\r\n return Array.from(this._myVariables.values());\r\n }\r\n\r\n getEasyTuneVariablesNames() {\r\n return Array.from(this._myVariables.keys());\r\n }\r\n\r\n fromJSON(json, resetDefaultValue = false, manualImport = false) {\r\n let objectJSON = JSON.parse(json);\r\n\r\n for (let variable of this._myVariables.values()) {\r\n if ((variable.isManualImportEnabled() && manualImport) || (variable.isAutoImportEnabled() && !manualImport)) {\r\n let variableName = variable.getName();\r\n if (Object.hasOwn(objectJSON, variableName)) {\r\n let variableValueJSON = objectJSON[variableName];\r\n variable.fromJSON(variableValueJSON, resetDefaultValue);\r\n }\r\n }\r\n }\r\n }\r\n\r\n toJSON() {\r\n let objectJSON = {};\r\n\r\n for (let variable of this._myVariables.values()) {\r\n if (variable.isExportEnabled()) {\r\n objectJSON[variable.getName()] = variable.toJSON();\r\n }\r\n }\r\n\r\n return JSON.stringify(objectJSON);\r\n }\r\n\r\n registerValueChangedEventListener(variableName, callbackID, callback) {\r\n this._myVariables.get(variableName).registerValueChangedEventListener(callbackID, callback);\r\n }\r\n\r\n unregisterValueChangedEventListener(variableName, callbackID, callback) {\r\n this._myVariables.get(variableName).unregisterValueChangedEventListener(callbackID);\r\n }\r\n}", "import { ARCamera8thwall, Cursor, CursorTarget, DebugObject, DeviceOrientationLook, FingerCursor, FixedFoveation, HandTracking, HitTestLocation, HowlerAudioListener, HowlerAudioSource, ImageTexture, MouseLookComponent, PlayerHeight, TargetFramerate, TeleportComponent, Trail, TwoJointIkSolver, VideoTexture, VrModeActiveSwitch, Vrm, WasdControlsComponent } from \"@wonderlandengine/components\";\r\n\r\nexport function registerWLComponents(engine) {\r\n engine.registerComponent(\r\n ARCamera8thwall,\r\n Cursor,\r\n CursorTarget,\r\n DebugObject,\r\n DeviceOrientationLook,\r\n FingerCursor,\r\n FixedFoveation,\r\n HandTracking,\r\n HitTestLocation,\r\n HowlerAudioListener,\r\n HowlerAudioSource,\r\n ImageTexture,\r\n MouseLookComponent,\r\n PlayerHeight,\r\n TargetFramerate,\r\n TeleportComponent,\r\n Trail,\r\n TwoJointIkSolver,\r\n VideoTexture,\r\n VrModeActiveSwitch,\r\n Vrm,\r\n WasdControlsComponent\r\n );\r\n}", "import { AnimationComponent, CollisionComponent, InputComponent, LightComponent, MeshComponent, PhysXComponent, TextComponent, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { ARCamera8thwall, Anchor, Cursor, CursorTarget, DebugObject, DeviceOrientationLook, FingerCursor, FixedFoveation, HandTracking, HitTestLocation, HowlerAudioListener, HowlerAudioSource, ImageTexture, MouseLookComponent, PlaneDetection, PlayerHeight, TargetFramerate, TeleportComponent, Trail, TwoJointIkSolver, VideoTexture, VrModeActiveSwitch, Vrm, WasdControlsComponent } from \"@wonderlandengine/components\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { DefaultWLComponentCloneCallbacks } from \"./default_wl_component_clone_callbacks.js\";\r\nimport { ObjectUtils } from \"./object_utils.js\";\r\n\r\nlet _myCloneCallbacks = new WeakMap(); // Signature: callback(componentToClone, targetObject, useDefaultCloneAsFallback, deeCloneParams, customCloneParams)\r\nlet _myClonePostProcessCallbacks = new WeakMap(); // Signature: callback(componentToClone, clonedComponent, deeCloneParams, customCloneParams)\r\n\r\nexport class DeepCloneParams {\r\n\r\n constructor() {\r\n this._myDeepCloneComponents = false;\r\n this._myDeepCloneOverrideComponentsMap = new Map();\r\n this._myDeepCloneOverrideComponentsVariablesMap = new Map();\r\n }\r\n\r\n // The implementation is component dependant, not every component implements the deep clone\r\n setDeepCloneComponents(deepClone) {\r\n this._myDeepCloneComponents = deepClone;\r\n }\r\n\r\n // This value override the deep clone components value\r\n // The implementation is component dependant, not every component implements the deep clone\r\n setDeepCloneComponent(componentName, deepClone) {\r\n this._myDeepCloneOverrideComponentsMap.set(componentName, deepClone);\r\n }\r\n\r\n // This value override both the deep clone components value and the deep clone component override one\r\n // The implementation is component dependant, not every component variable override is taken into consideration\r\n setDeepCloneComponentVariable(componentName, variableName, deepClone) {\r\n let componentsVariablesMap = null;\r\n\r\n if (!this._myDeepCloneOverrideComponentsVariablesMap.has(componentName)) {\r\n this._myDeepCloneOverrideComponentsVariablesMap.set(componentName, new Map());\r\n }\r\n\r\n componentsVariablesMap = this._myDeepCloneOverrideComponentsVariablesMap.get(componentName);\r\n\r\n componentsVariablesMap.set(variableName, deepClone);\r\n }\r\n\r\n isDeepCloneComponent(componentName) {\r\n let deepCloneOverride = this._myDeepCloneOverrideComponentsMap.get(componentName);\r\n\r\n if (deepCloneOverride != null) {\r\n return deepCloneOverride;\r\n }\r\n\r\n return this._myDeepCloneComponents;\r\n }\r\n\r\n isDeepCloneComponentVariable(componentName, variableName) {\r\n let componentsVariablesMap = this._myDeepCloneOverrideComponentsVariablesMap.get(componentName);\r\n if (componentsVariablesMap != null) {\r\n let deepCloneOverride = componentsVariablesMap.get(variableName);\r\n if (deepCloneOverride != null) {\r\n return deepCloneOverride;\r\n }\r\n }\r\n\r\n return this.isDeepCloneComponent(componentName);\r\n }\r\n}\r\n\r\nexport class CustomCloneParams {\r\n\r\n constructor() {\r\n this._myParams = new Map();\r\n }\r\n\r\n addParam(name, value) {\r\n this._myParams.set(name, value);\r\n }\r\n\r\n removeParam(name) {\r\n this._myParams.delete(name);\r\n }\r\n\r\n getParam(name) {\r\n this._myParams.get(name);\r\n }\r\n\r\n hasParam(name) {\r\n this._myParams.has(name);\r\n }\r\n}\r\n\r\nexport function isWLComponent(classOrType) {\r\n return ComponentUtils.isWLNativeComponent(classOrType) || ComponentUtils.isWLJavascriptComponent(classOrType);\r\n}\r\n\r\nexport function isWLNativeComponent(classOrType) {\r\n let wlNative = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (ComponentUtils.getWLNativeComponentTypes().includes(type)) {\r\n wlNative = true;\r\n }\r\n\r\n return wlNative;\r\n}\r\n\r\nexport function isWLJavascriptComponent(classOrType) {\r\n let wlJavascript = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (ComponentUtils.getWLJavascriptComponentTypes().includes(type)) {\r\n wlJavascript = true;\r\n }\r\n\r\n return wlJavascript;\r\n}\r\n\r\nexport function getWLNativeComponentTypes() {\r\n return _myWLNativeComponentTypes;\r\n}\r\n\r\nexport function getWLJavascriptComponentTypes() {\r\n return _myWLJavascriptComponentTypes;\r\n}\r\n\r\nexport function getTypeFromClassOrType(classOrType) {\r\n if (classOrType == null) return;\r\n\r\n let type = classOrType;\r\n if (classOrType.TypeName != null) {\r\n type = classOrType.TypeName;\r\n }\r\n\r\n return type;\r\n}\r\n\r\nexport function getClassFromType(type, engine = Globals.getMainEngine()) {\r\n let classToReturn = null;\r\n\r\n if (ComponentUtils.isWLNativeComponent(type)) {\r\n if (ComponentUtils.isWLNativeComponentRegistered(type, engine)) {\r\n switch (type) {\r\n case AnimationComponent.TypeName:\r\n classToReturn = AnimationComponent;\r\n break;\r\n case CollisionComponent.TypeName:\r\n classToReturn = CollisionComponent;\r\n break;\r\n case InputComponent.TypeName:\r\n classToReturn = InputComponent;\r\n break;\r\n case LightComponent.TypeName:\r\n classToReturn = LightComponent;\r\n break;\r\n case MeshComponent.TypeName:\r\n classToReturn = MeshComponent;\r\n break;\r\n case PhysXComponent.TypeName:\r\n classToReturn = PhysXComponent;\r\n break;\r\n case TextComponent.TypeName:\r\n classToReturn = TextComponent;\r\n break;\r\n case ViewComponent.TypeName:\r\n classToReturn = ViewComponent;\r\n break;\r\n default:\r\n classToReturn = null;\r\n }\r\n }\r\n } else {\r\n classToReturn = ComponentUtils.getJavascriptComponentClass(type, engine);\r\n }\r\n\r\n return classToReturn;\r\n}\r\n\r\nexport function isRegistered(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return ComponentUtils.getClassFromType(type, engine) != null;\r\n}\r\n\r\nexport function getJavascriptComponentInstances(engine = Globals.getMainEngine()) {\r\n return Globals.getWASM(engine)._components;\r\n}\r\n\r\nexport function getJavascriptComponentClass(type, engine = Globals.getMainEngine()) {\r\n return ComponentUtils.getJavascriptComponentClassesByIndex(engine)[ComponentUtils.getJavascriptComponentTypeIndex(type, engine)];\r\n}\r\n\r\nexport function getJavascriptComponentClassesByIndex(engine = Globals.getMainEngine()) {\r\n return Globals.getWASM(engine)._componentTypes;\r\n}\r\n\r\nexport function getJavascriptComponentTypeIndex(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return ComponentUtils.getJavascriptComponentTypeIndexes(engine)[type];\r\n}\r\n\r\nexport function getJavascriptComponentTypeIndexes(engine = Globals.getMainEngine()) {\r\n return Globals.getWASM(engine)._componentTypeIndices;\r\n}\r\n\r\nexport function getJavascriptComponentTypeFromIndex(typeIndex, engine = Globals.getMainEngine()) {\r\n let type = null;\r\n\r\n let componentClass = ComponentUtils.getJavascriptComponentClassesByIndex(engine)[typeIndex];\r\n if (componentClass != null) {\r\n type = componentClass.TypeName;\r\n }\r\n\r\n return type;\r\n}\r\n\r\nexport function isWLNativeComponentRegistered(classOrType, engine = Globals.getMainEngine()) {\r\n let wasm = Globals.getWASM(engine);\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return wasm._wl_get_component_manager_index(wasm.tempUTF8(type)) >= 0;\r\n}\r\n\r\nexport function isCloneable(classOrType, defaultCloneValid = false, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return defaultCloneValid || ComponentUtils.hasCloneCallback(type, engine) || ComponentUtils.getClassFromType(type, engine)?.prototype.pp_clone != null;\r\n}\r\n\r\nexport function hasClonePostProcess(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return ComponentUtils.hasClonePostProcessCallback(type, engine) || ComponentUtils.getClassFromType(type, engine)?.prototype.pp_clonePostProcess != null;\r\n}\r\n\r\nexport function clone(componentToClone, targetObject, deeCloneParams, customCloneParams, useDefaultCloneAsFallback = false, defaultCloneAutoStartIfNotActive = true) {\r\n let clonedComponent = null;\r\n\r\n let cloneCallback = ComponentUtils.getCloneCallback(componentToClone.type, ObjectUtils.getEngine(componentToClone.object));\r\n\r\n if (cloneCallback != null) {\r\n clonedComponent = cloneCallback(componentToClone, targetObject, deeCloneParams, customCloneParams);\r\n } else if (componentToClone.pp_clone != null) {\r\n clonedComponent = componentToClone.pp_clone(targetObject, deeCloneParams, customCloneParams);\r\n } else if (useDefaultCloneAsFallback) {\r\n clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject, defaultCloneAutoStartIfNotActive);\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function clonePostProcess(componentToClone, clonedComponent, deeCloneParams, customCloneParams) {\r\n let clonePostProcessCallback = ComponentUtils.getClonePostProcessCallback(componentToClone.type, ObjectUtils.getEngine(componentToClone.object));\r\n\r\n if (clonePostProcessCallback != null) {\r\n clonePostProcessCallback(componentToClone, clonedComponent, deeCloneParams, customCloneParams);\r\n } else if (componentToClone.pp_clonePostProcess != null) {\r\n componentToClone.pp_clonePostProcess(clonedComponent, deeCloneParams, customCloneParams);\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function cloneDefault(componentToClone, targetObject, autoStartIfNotActive = true) {\r\n let clonedComponent = ObjectUtils.addComponent(targetObject, componentToClone.type, componentToClone);\r\n\r\n // Trigger start, which otherwise would be called later, on first activation\r\n if (autoStartIfNotActive && !clonedComponent.active) {\r\n clonedComponent.active = true;\r\n clonedComponent.active = false;\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function setCloneCallback(classOrType, callback, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (!_myCloneCallbacks.has(engine)) {\r\n _myCloneCallbacks.set(engine, new Map());\r\n }\r\n\r\n _myCloneCallbacks.get(engine).set(type, callback);\r\n}\r\n\r\nexport function removeCloneCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (_myCloneCallbacks.has(engine)) {\r\n _myCloneCallbacks.get(engine).delete(type);\r\n }\r\n}\r\n\r\nexport function getCloneCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let callback = null;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myCloneCallbacks.has(engine)) {\r\n callback = _myCloneCallbacks.get(engine).get(type);\r\n }\r\n\r\n return callback;\r\n}\r\n\r\nexport function hasCloneCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let hasCallback = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myCloneCallbacks.has(engine)) {\r\n hasCallback = _myCloneCallbacks.get(engine).has(type);\r\n }\r\n\r\n return hasCallback;\r\n}\r\n\r\nexport function setClonePostProcessCallback(classOrType, callback, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (!_myClonePostProcessCallbacks.has(engine)) {\r\n _myClonePostProcessCallbacks.set(engine, new Map());\r\n }\r\n\r\n _myClonePostProcessCallbacks.get(engine).set(type, callback);\r\n}\r\n\r\nexport function removeClonePostProcessCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (_myClonePostProcessCallbacks.has(engine)) {\r\n _myClonePostProcessCallbacks.get(engine).delete(type);\r\n }\r\n}\r\n\r\nexport function getClonePostProcessCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let callback = null;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myClonePostProcessCallbacks.has(engine)) {\r\n callback = _myClonePostProcessCallbacks.get(engine).get(type);\r\n }\r\n\r\n return callback;\r\n}\r\n\r\nexport function hasClonePostProcessCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let hasCallback = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myClonePostProcessCallbacks.has(engine)) {\r\n hasCallback = _myClonePostProcessCallbacks.get(engine).has(type);\r\n }\r\n\r\n return hasCallback;\r\n}\r\n\r\n\r\nexport function getDefaultWLComponentCloneCallback(classOrType) {\r\n let callback = null;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n switch (type) {\r\n case MeshComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.cloneMesh;\r\n break;\r\n case CollisionComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.cloneCollision;\r\n break;\r\n case TextComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.cloneText;\r\n break;\r\n case PhysXComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.clonePhysX;\r\n break;\r\n default:\r\n callback = null;\r\n }\r\n\r\n return callback;\r\n}\r\n\r\n\r\nexport function hasDefaultWLComponentCloneCallback(classOrType) {\r\n return ComponentUtils.getDefaultWLComponentCloneCallback(classOrType) != null;\r\n}\r\n\r\n\r\nexport function setDefaultWLComponentCloneCallbacks(engine = Globals.getMainEngine()) {\r\n for (let nativeType of ComponentUtils.getWLNativeComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(nativeType);\r\n if (cloneCallback != null) {\r\n ComponentUtils.setCloneCallback(nativeType, cloneCallback, engine);\r\n }\r\n }\r\n\r\n for (let javascriptType of ComponentUtils.getWLJavascriptComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(javascriptType);\r\n if (cloneCallback != null) {\r\n ComponentUtils.setCloneCallback(javascriptType, cloneCallback, engine);\r\n }\r\n }\r\n}\r\n\r\nexport function removeDefaultWLComponentCloneCallbacks(engine = Globals.getMainEngine()) {\r\n for (let nativeType of ComponentUtils.getWLNativeComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(nativeType);\r\n if (cloneCallback != null) {\r\n if (ComponentUtils.getCloneCallback(nativeType, engine) == cloneCallback) {\r\n ComponentUtils.removeCloneCallback(nativeType, engine);\r\n }\r\n }\r\n }\r\n\r\n for (let javascriptType of ComponentUtils.getWLNativeComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(javascriptType);\r\n if (cloneCallback != null) {\r\n if (ComponentUtils.getCloneCallback(javascriptType, engine) == cloneCallback) {\r\n ComponentUtils.removeCloneCallback(javascriptType, engine);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport let ComponentUtils = {\r\n isWLComponent,\r\n isWLNativeComponent,\r\n isWLJavascriptComponent,\r\n getWLNativeComponentTypes,\r\n getWLJavascriptComponentTypes,\r\n getTypeFromClassOrType,\r\n getClassFromType,\r\n isRegistered,\r\n\r\n getJavascriptComponentInstances,\r\n getJavascriptComponentClass,\r\n getJavascriptComponentClassesByIndex,\r\n getJavascriptComponentTypeIndex,\r\n getJavascriptComponentTypeIndexes,\r\n getJavascriptComponentTypeFromIndex,\r\n isWLNativeComponentRegistered,\r\n\r\n isCloneable,\r\n hasClonePostProcess,\r\n clone,\r\n clonePostProcess,\r\n cloneDefault,\r\n\r\n setCloneCallback,\r\n removeCloneCallback,\r\n getCloneCallback,\r\n hasCloneCallback,\r\n setClonePostProcessCallback,\r\n removeClonePostProcessCallback,\r\n getClonePostProcessCallback,\r\n hasClonePostProcessCallback,\r\n\r\n setDefaultWLComponentCloneCallbacks,\r\n removeDefaultWLComponentCloneCallbacks,\r\n getDefaultWLComponentCloneCallback,\r\n hasDefaultWLComponentCloneCallback\r\n};\r\n\r\n\r\n\r\nlet _myWLNativeComponentTypes = [\r\n AnimationComponent.TypeName,\r\n CollisionComponent.TypeName,\r\n InputComponent.TypeName,\r\n LightComponent.TypeName,\r\n MeshComponent.TypeName,\r\n PhysXComponent.TypeName,\r\n TextComponent.TypeName,\r\n ViewComponent.TypeName\r\n];\r\n\r\nlet _myWLJavascriptComponentTypes = [\r\n ARCamera8thwall.TypeName,\r\n Anchor.TypeName,\r\n Cursor.TypeName,\r\n CursorTarget.TypeName,\r\n DebugObject.TypeName,\r\n DeviceOrientationLook.TypeName,\r\n FingerCursor.TypeName,\r\n FixedFoveation.TypeName,\r\n HandTracking.TypeName,\r\n HitTestLocation.TypeName,\r\n HowlerAudioListener.TypeName,\r\n HowlerAudioSource.TypeName,\r\n ImageTexture.TypeName,\r\n MouseLookComponent.TypeName,\r\n PlaneDetection.TypeName,\r\n PlayerHeight.TypeName,\r\n TargetFramerate.TypeName,\r\n TeleportComponent.TypeName,\r\n Trail.TypeName,\r\n TwoJointIkSolver.TypeName,\r\n VideoTexture.TypeName,\r\n VrModeActiveSwitch.TypeName,\r\n Vrm.TypeName,\r\n WasdControlsComponent.TypeName\r\n];", "import { MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils, DeepCloneParams } from \"./component_utils.js\";\r\nimport { MeshUtils } from \"./mesh_utils.js\";\r\n\r\nexport function cloneMesh(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject, true);\r\n\r\n if (deepCloneParams.isDeepCloneComponentVariable(MeshComponent.TypeName, \"material\")) {\r\n if (componentToClone.material != null) {\r\n clonedComponent.material = componentToClone.material.clone();\r\n }\r\n }\r\n\r\n if (deepCloneParams.isDeepCloneComponentVariable(MeshComponent.TypeName, \"mesh\")) {\r\n clonedComponent.mesh = MeshUtils.clone(componentToClone.mesh);\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function cloneCollision(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject);\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function cloneText(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject);\r\n\r\n if (deepCloneParams.isDeepCloneComponentVariable(TextComponent.TypeName, \"material\")) {\r\n if (componentToClone.material != null) {\r\n clonedComponent.material = componentToClone.material.clone();\r\n }\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function clonePhysX(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject);\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport let DefaultWLComponentCloneCallbacks = {\r\n cloneMesh,\r\n cloneCollision,\r\n cloneText,\r\n clonePhysX\r\n};", "import { Component, Object3D, Scene, WonderlandEngine, type ComponentConstructor } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Matrix3, Matrix4, Quaternion, Quaternion2, Vector3 } from \"../../type_definitions/array_type_definitions.js\";\r\nimport { Mat3Utils } from \"../../utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../utils/array/quat_utils.js\";\r\nimport { Vec3Utils } from \"../../utils/array/vec3_utils.js\";\r\nimport { MathUtils } from \"../../utils/math_utils.js\";\r\nimport { ComponentUtils, CustomCloneParams, DeepCloneParams } from \"./component_utils.js\";\r\n\r\nexport class CloneParams {\r\n\r\n /** Defaults to the object to clone parent, null can be used to specify u want the scene root as the parent */\r\n public myCloneParent: Object3D | null | undefined = undefined;\r\n\r\n\r\n /** Ignores components that are not clonable */\r\n public myIgnoreNonCloneable: boolean = false;\r\n /** All components are ignored, cloning only the object hierarchy */\r\n public myIgnoreComponents: boolean = false;\r\n /** Clones only the given object without the descendants */\r\n public myIgnoreDescendants: boolean = false;\r\n\r\n\r\n /** Ignores all component types in this list (example: `[\"mesh\"]`), has lower priority over `myComponentsToInclude` */\r\n public myComponentsToIgnore: string[] = [];\r\n /** Clones only the component types in this list (example: `[\"mesh\"]`), has higher priority over `myComponentsToIgnore`, if empty it's ignored */\r\n public myComponentsToInclude: string[] = [];\r\n /** Returns true if the component must be ignored. It's called after the previous filters */\r\n public myIgnoreComponentCallback: ((component: Component) => boolean) | null = null;\r\n\r\n\r\n /** Ignores all the objects in this list, has lower priority over `myDescendantsToInclude` */\r\n public myDescendantsToIgnore: Object3D[] = [];\r\n /** Clones only the objects in this list, has higher priority over `myDescendantsToIgnore`, if empty it's ignored */\r\n public myDescendantsToInclude: Object3D[] = [];\r\n /** Returns true if the object must be ignored. It's called after the previous filters */\r\n public myIgnoreDescendantCallback: ((component: Object3D) => boolean) | null = null;\r\n\r\n\r\n /** Uses the default component clone function */\r\n public myUseDefaultComponentClone: boolean = false;\r\n /** Uses the default component clone function only as fallback, that is if there is no custom component clone */\r\n public myUseDefaultComponentCloneAsFallback: boolean = false;\r\n /** Automatically starts the component even if it's cloned not activated, keeping it not active. This also triggers `onActivate` and `onDeactivate` once */\r\n public myDefaultComponentCloneAutoStartIfNotActive: boolean = true;\r\n\r\n\r\n /** Uses the default object clone function, ignoring all the other clone settings but `myCloneParent` and `myDefaultComponentCloneAutoStartIfNotActive` */\r\n public myUseDefaultObjectClone: boolean = false;\r\n /** Uses the default object clone function only as fallback, that is if the object is not PP cloneable */\r\n public myUseDefaultObjectCloneAsFallback: boolean = false;\r\n\r\n\r\n /** Used to specify if the object components must be deep cloned or not, you can also override the behavior for specific components and variables */\r\n public myComponentDeepCloneParams: DeepCloneParams = new DeepCloneParams();\r\n\r\n\r\n /** This class can be filled with whatever custom paramater the component clone functions could need */\r\n public myComponentCustomCloneParams: CustomCloneParams = new CustomCloneParams();\r\n}\r\n\r\n// GETTER\r\n\r\n// Position\r\n\r\nexport function getPosition(object: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPositionWorld(object, outPosition);\r\n}\r\n\r\nexport function getPositionWorld(object: Readonly, outPosition: T = Vec3Utils.create()): T {\r\n object.getPositionWorld(outPosition);\r\n return outPosition;\r\n}\r\n\r\nexport function getPositionLocal(object: Readonly, outPosition: T = Vec3Utils.create()): T {\r\n object.getPositionLocal(outPosition);\r\n return outPosition;\r\n}\r\n\r\n// Rotation\r\n\r\nexport function getRotation(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorld(object, outRotation);\r\n}\r\n\r\nexport function getRotationDegrees(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldDegrees(object, outRotation);\r\n}\r\n\r\nexport function getRotationRadians(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldRadians(object, outRotation);\r\n}\r\n\r\nexport function getRotationMatrix(object: Readonly): Matrix3;\r\nexport function getRotationMatrix(object: Readonly, outRotation: T): T;\r\nexport function getRotationMatrix(object: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationWorldMatrix(object, outRotation!);\r\n}\r\n\r\nexport function getRotationQuat(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldQuat(object, outRotation);\r\n}\r\n\r\n// Rotation World\r\n\r\nexport function getRotationWorld(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldDegrees(object, outRotation);\r\n}\r\n\r\nexport function getRotationWorldDegrees(object: Readonly, outRotation?: T): T {\r\n outRotation = ObjectUtils.getRotationWorldRadians(object, outRotation);\r\n outRotation = Vec3Utils.toDegrees(outRotation, outRotation);\r\n return outRotation!;\r\n}\r\n\r\nexport const getRotationWorldRadians = function () {\r\n const quat = QuatUtils.create();\r\n return function getRotationWorldRadians(object: Readonly, outRotation: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.toRadians(quat, outRotation);\r\n return outRotation;\r\n };\r\n}();\r\n\r\nexport const getRotationWorldMatrix = function () {\r\n const quat = QuatUtils.create();\r\n\r\n function getRotationWorldMatrix(object: Readonly): Matrix3;\r\n function getRotationWorldMatrix(object: Readonly, outRotation: T): T;\r\n function getRotationWorldMatrix(object: Readonly, outRotation: Matrix3 | T = Mat3Utils.create()): Matrix3 | T {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.toMatrix(quat, outRotation);\r\n return outRotation;\r\n }\r\n\r\n return getRotationWorldMatrix;\r\n}();\r\n\r\nexport function getRotationWorldQuat(object: Readonly, outRotation: T = QuatUtils.create()): T {\r\n object.getRotationWorld(outRotation);\r\n return outRotation;\r\n}\r\n\r\n// Rotation Local\r\n\r\nexport function getRotationLocal(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalDegrees(object, outRotation);\r\n}\r\n\r\nexport function getRotationLocalDegrees(object: Readonly, outRotation?: T): T {\r\n outRotation = ObjectUtils.getRotationLocalRadians(object, outRotation);\r\n outRotation = Vec3Utils.toDegrees(outRotation, outRotation);\r\n return outRotation!;\r\n}\r\n\r\nexport const getRotationLocalRadians = function () {\r\n const quat = QuatUtils.create();\r\n return function getRotationLocalRadians(object: Readonly, outRotation: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.toRadians(quat, outRotation);\r\n return outRotation;\r\n };\r\n}();\r\n\r\nexport const getRotationLocalMatrix = function () {\r\n const quat = QuatUtils.create();\r\n\r\n function getRotationLocalMatrix(object: Readonly): Matrix3;\r\n function getRotationLocalMatrix(object: Readonly, outRotation: T): T;\r\n function getRotationLocalMatrix(object: Readonly, outRotation: Matrix3 | T = Mat3Utils.create()): Matrix3 | T {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.toMatrix(quat, outRotation);\r\n return outRotation;\r\n }\r\n\r\n return getRotationLocalMatrix;\r\n}();\r\n\r\nexport function getRotationLocalQuat(object: Readonly, outRotation: T = QuatUtils.create()): T {\r\n object.getRotationLocal(outRotation);\r\n return outRotation;\r\n}\r\n\r\n// Scale\r\n\r\nexport function getScale(object: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScaleWorld(object, outScale);\r\n}\r\n\r\nexport function getScaleWorld(object: Readonly, outScale: T = Vec3Utils.create()): T {\r\n object.getScalingWorld(outScale);\r\n return outScale;\r\n}\r\n\r\nexport function getScaleLocal(object: Readonly, outScale: T = Vec3Utils.create()): T {\r\n object.getScalingLocal(outScale);\r\n return outScale;\r\n}\r\n\r\n// Transform\r\n\r\nexport function getTransform(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorld(object, outTransform);\r\n}\r\n\r\nexport function getTransformMatrix(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldMatrix(object, outTransform);\r\n}\r\n\r\nexport function getTransformQuat(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldQuat(object, outTransform);\r\n}\r\n\r\n// Transform World\r\n\r\nexport function getTransformWorld(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldMatrix(object, outTransform);\r\n}\r\n\r\nexport const getTransformWorldMatrix = function () {\r\n const transformQuat = Quat2Utils.create();\r\n const scale = Vec3Utils.create();\r\n return function getTransformWorldMatrix(object: Readonly, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformWorldQuat(object, transformQuat);\r\n ObjectUtils.getScaleWorld(object, scale);\r\n Mat4Utils.fromQuat(transformQuat, outTransform);\r\n Mat4Utils.scale(outTransform, scale, outTransform);\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport function getTransformWorldQuat(object: Readonly, outTransform: T = Quat2Utils.create()): T {\r\n object.getTransformWorld(outTransform);\r\n return outTransform;\r\n}\r\n\r\n// Transform Local\r\n\r\nexport function getTransformLocal(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocalMatrix(object, outTransform);\r\n}\r\n\r\nexport const getTransformLocalMatrix = function () {\r\n const transformQuat = Quat2Utils.create();\r\n const scale = Vec3Utils.create();\r\n return function getTransformLocalMatrix(object: Readonly, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformLocalQuat(object, transformQuat);\r\n ObjectUtils.getScaleLocal(object, scale);\r\n Mat4Utils.fromQuat(transformQuat, outTransform);\r\n Mat4Utils.scale(outTransform, scale, outTransform);\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport function getTransformLocalQuat(object: Readonly, outTransform: T = Quat2Utils.create()): T {\r\n object.getTransformLocal(outTransform);\r\n return outTransform;\r\n}\r\n\r\n// Axes\r\n\r\nexport function getAxes(object: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxesWorld(object, outAxes);\r\n}\r\n\r\nexport function getAxesWorld(object: Readonly, outAxes: [Vector3, Vector3, Vector3] = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]): [Vector3, Vector3, Vector3] {\r\n ObjectUtils.getLeftWorld(object, outAxes[0]);\r\n ObjectUtils.getUpWorld(object, outAxes[1]);\r\n ObjectUtils.getForwardWorld(object, outAxes[2]);\r\n return outAxes;\r\n}\r\n\r\nexport function getAxesLocal(object: Readonly, outAxes: [Vector3, Vector3, Vector3] = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]): [Vector3, Vector3, Vector3] {\r\n ObjectUtils.getLeftLocal(object, outAxes[0]);\r\n ObjectUtils.getUpLocal(object, outAxes[1]);\r\n ObjectUtils.getForwardLocal(object, outAxes[2]);\r\n return outAxes;\r\n}\r\n\r\n// Forward\r\n\r\nexport function getForward(object: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForwardWorld(object, outForward);\r\n}\r\n\r\nexport const getForwardWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getForwardWorld(object: Readonly, outForward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outForward[0] = rotation[6];\r\n outForward[1] = rotation[7];\r\n outForward[2] = rotation[8];\r\n return outForward;\r\n };\r\n}();\r\n\r\nexport const getForwardLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getForwardLocal(object: Readonly, outForward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outForward[0] = rotation[6];\r\n outForward[1] = rotation[7];\r\n outForward[2] = rotation[8];\r\n return outForward;\r\n };\r\n}();\r\n\r\n// Backward\r\n\r\nexport function getBackward(object: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackwardWorld(object, outBackward);\r\n}\r\n\r\nexport const getBackwardWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getBackwardWorld(object: Readonly, outBackward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outBackward[0] = -rotation[6];\r\n outBackward[1] = -rotation[7];\r\n outBackward[2] = -rotation[8];\r\n return outBackward;\r\n };\r\n}();\r\n\r\nexport const getBackwardLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getBackwardLocal(object: Readonly, outBackward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outBackward[0] = -rotation[6];\r\n outBackward[1] = -rotation[7];\r\n outBackward[2] = -rotation[8];\r\n return outBackward;\r\n };\r\n}();\r\n\r\n// Up\r\n\r\nexport function getUp(object: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUpWorld(object, outUp);\r\n}\r\n\r\nexport const getUpWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getUpWorld(object: Readonly, outUp: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outUp[0] = rotation[3];\r\n outUp[1] = rotation[4];\r\n outUp[2] = rotation[5];\r\n return outUp;\r\n };\r\n}();\r\n\r\nexport const getUpLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getUpLocal(object: Readonly, outUp: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outUp[0] = rotation[3];\r\n outUp[1] = rotation[4];\r\n outUp[2] = rotation[5];\r\n return outUp;\r\n };\r\n}();\r\n\r\n// Down\r\n\r\nexport function getDown(object: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDownWorld(object, outDown);\r\n}\r\n\r\nexport const getDownWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getDownWorld(object: Readonly, outDown: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outDown[0] = -rotation[3];\r\n outDown[1] = -rotation[4];\r\n outDown[2] = -rotation[5];\r\n return outDown;\r\n };\r\n}();\r\n\r\nexport const getDownLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getDownLocal(object: Readonly, outDown: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outDown[0] = -rotation[3];\r\n outDown[1] = -rotation[4];\r\n outDown[2] = -rotation[5];\r\n return outDown;\r\n };\r\n}();\r\n\r\n// Left\r\n\r\nexport function getLeft(object: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeftWorld(object, outLeft);\r\n}\r\n\r\nexport const getLeftWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getLeftWorld(object: Readonly, outLeft: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outLeft[0] = rotation[0];\r\n outLeft[1] = rotation[1];\r\n outLeft[2] = rotation[2];\r\n return outLeft;\r\n };\r\n}();\r\n\r\nexport const getLeftLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getLeftLocal(object: Readonly, outLeft: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outLeft[0] = rotation[0];\r\n outLeft[1] = rotation[1];\r\n outLeft[2] = rotation[2];\r\n return outLeft;\r\n };\r\n}();\r\n\r\n// Right\r\n\r\nexport function getRight(object: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRightWorld(object, outRight);\r\n}\r\n\r\nexport const getRightWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getRightWorld(object: Readonly, outRight: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outRight[0] = -rotation[0];\r\n outRight[1] = -rotation[1];\r\n outRight[2] = -rotation[2];\r\n return outRight;\r\n };\r\n}();\r\n\r\nexport const getRightLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getRightLocal(object: Readonly, outRight: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outRight[0] = -rotation[0];\r\n outRight[1] = -rotation[1];\r\n outRight[2] = -rotation[2];\r\n return outRight;\r\n };\r\n}();\r\n\r\n// SETTER\r\n\r\n// Position\r\n\r\nexport function setPosition(object: Object3D, position: Vector3): Object3D {\r\n return ObjectUtils.setPositionWorld(object, position);\r\n}\r\n\r\nexport function setPositionWorld(object: Object3D, position: Vector3): Object3D {\r\n return object.setPositionWorld(position);\r\n}\r\n\r\nexport function setPositionLocal(object: Object3D, position: Vector3): Object3D {\r\n return object.setPositionLocal(position);\r\n}\r\n\r\n// Rotation\r\n\r\nexport function setRotation(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorld(object, rotation);\r\n}\r\n\r\nexport function setRotationDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorldDegrees(object, rotation);\r\n}\r\n\r\nexport function setRotationRadians(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorldRadians(object, rotation);\r\n}\r\n\r\nexport function setRotationMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n return ObjectUtils.setRotationWorldMatrix(object, rotation);\r\n}\r\n\r\nexport function setRotationQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return ObjectUtils.setRotationWorldQuat(object, rotation);\r\n}\r\n\r\n// Rotation World\r\n\r\nexport function setRotationWorld(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorldDegrees(object, rotation);\r\n}\r\n\r\nexport const setRotationWorldDegrees = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationWorldDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, quat);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setRotationWorldRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function setRotationWorldRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.setRotationWorldDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const setRotationWorldMatrix = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationWorldMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, quat);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport function setRotationWorldQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return object.setRotationWorld(rotation);\r\n}\r\n\r\n// Rotation Local\r\n\r\nexport function setRotationLocal(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationLocalDegrees(object, rotation);\r\n}\r\n\r\nexport const setRotationLocalDegrees = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationLocalDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, quat);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setRotationLocalRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function setRotationLocalRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.setRotationLocalDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const setRotationLocalMatrix = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationLocalMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, quat);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport function setRotationLocalQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return object.setRotationLocal(rotation);\r\n}\r\n\r\n// Scale\r\n\r\nexport function setScale(object: Object3D, scale: Vector3): Object3D;\r\nexport function setScale(object: Object3D, uniformScale: number): Object3D;\r\nexport function setScale(object: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScaleWorld(object, scale as Vector3);\r\n}\r\n\r\nexport const setScaleWorld = function () {\r\n const vector = Vec3Utils.create();\r\n\r\n function setScaleWorld(object: Object3D, scale: Vector3): Object3D;\r\n function setScaleWorld(object: Object3D, uniformScale: number): Object3D;\r\n function setScaleWorld(object: Object3D, scale: Vector3 | number): Object3D {\r\n if (isNaN(scale as number)) {\r\n return object.setScalingWorld(scale as Vector3);\r\n } else {\r\n Vec3Utils.set(vector, scale);\r\n return object.setScalingWorld(vector);\r\n }\r\n }\r\n\r\n return setScaleWorld;\r\n}();\r\n\r\nexport const setScaleLocal = function () {\r\n const vector = Vec3Utils.create();\r\n\r\n function setScaleLocal(object: Object3D, scale: Vector3): Object3D;\r\n function setScaleLocal(object: Object3D, uniformScale: number): Object3D;\r\n function setScaleLocal(object: Object3D, scale: Vector3 | number): Object3D {\r\n if (isNaN(scale as number)) {\r\n return object.setScalingLocal(scale as Vector3);\r\n } else {\r\n Vec3Utils.set(vector, scale);\r\n return object.setScalingLocal(vector);\r\n }\r\n }\r\n\r\n return setScaleLocal;\r\n}();\r\n\r\n// Axes \r\n\r\nexport function setAxes(object: Object3D, left?: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n return ObjectUtils.setAxesWorld(object, left, up, forward);\r\n}\r\n\r\nexport function setAxesWorld(object: Object3D, left?: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n if (forward != null) {\r\n return ObjectUtils.setForwardWorld(object, forward, up, left);\r\n } else if (up != null) {\r\n return ObjectUtils.setUpWorld(object, up, forward, left);\r\n } else if (left != null) {\r\n return ObjectUtils.setLeftWorld(object, left, up, forward);\r\n }\r\n\r\n return object;\r\n}\r\n\r\nexport function setAxesLocal(object: Object3D, left?: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n if (forward != null) {\r\n return ObjectUtils.setForwardLocal(object, forward, up, left);\r\n } else if (up != null) {\r\n return ObjectUtils.setUpLocal(object, up, forward, left);\r\n } else if (left != null) {\r\n return ObjectUtils.setLeftLocal(object, left, up, forward);\r\n }\r\n\r\n return object;\r\n}\r\n\r\n// Forward\r\n\r\nexport function setForward(object: Object3D, forward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setForwardWorld(object, forward, up, left);\r\n}\r\n\r\nexport const setForwardWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setForwardWorld(object: Object3D, forward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setForward(quat, forward, up, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setForwardLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setForwardLocal(object: Object3D, forward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setForward(quat, forward, up, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Backward\r\n\r\nexport function setBackward(object: Object3D, backward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setBackwardWorld(object, backward, up, left);\r\n}\r\n\r\nexport const setBackwardWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setBackwardWorld(object: Object3D, backward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setBackward(quat, backward, up, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setBackwardLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setBackwardLocal(object: Object3D, backward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setBackward(quat, backward, up, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Up\r\n\r\nexport function setUp(object: Object3D, up: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setUpWorld(object, up, forward, left);\r\n}\r\n\r\nexport const setUpWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setUpWorld(object: Object3D, up: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setUp(quat, up, forward, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setUpLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setUpLocal(object: Object3D, up: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setUp(quat, up, forward, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Down\r\n\r\nexport function setDown(object: Object3D, down: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setDownWorld(object, down, forward, left);\r\n}\r\n\r\nexport const setDownWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setDownWorld(object: Object3D, down: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setDown(quat, down, forward, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setDownLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setDownLocal(object: Object3D, down: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setDown(quat, down, forward, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Left\r\n\r\nexport function setLeft(object: Object3D, left: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n return ObjectUtils.setLeftWorld(object, left, up, forward);\r\n}\r\n\r\nexport const setLeftWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setLeftWorld(object: Object3D, left: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setLeft(quat, left, up, forward);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setLeftLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setLeftLocal(object: Object3D, left: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setLeft(quat, left, up, forward);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Right\r\n\r\nexport function setRight(object: Object3D, right: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n return ObjectUtils.setRightWorld(object, right, up, forward);\r\n}\r\n\r\nexport const setRightWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setRightWorld(object: Object3D, right: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setRight(quat, right, up, forward);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setRightLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setRightLocal(object: Object3D, right: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setRight(quat, right, up, forward);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Transform\r\n\r\nexport function setTransform(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformWorld(object, transform);\r\n}\r\n\r\nexport function setTransformMatrix(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformWorldMatrix(object, transform);\r\n}\r\n\r\nexport function setTransformQuat(object: Object3D, transform: Quaternion2): Object3D {\r\n return ObjectUtils.setTransformWorldQuat(object, transform);\r\n}\r\n\r\n// Transform World\r\n\r\nexport function setTransformWorld(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformWorldMatrix(object, transform);\r\n}\r\n\r\nexport const setTransformWorldMatrix = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n const scale = Vec3Utils.create();\r\n const transformMatrixNoScale = Mat4Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function setTransformWorldMatrix(object: Object3D, transform: Matrix4): Object3D {\r\n Mat4Utils.getPosition(transform, position);\r\n Mat4Utils.getScale(transform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(transform, inverseScale, transformMatrixNoScale);\r\n Mat4Utils.getRotationQuat(transformMatrixNoScale, rotation);\r\n QuatUtils.normalize(rotation, rotation);\r\n ObjectUtils.setScaleWorld(object, scale);\r\n ObjectUtils.setRotationWorldQuat(object, rotation);\r\n ObjectUtils.setPositionWorld(object, position);\r\n\r\n return object;\r\n };\r\n}();\r\n\r\nexport function setTransformWorldQuat(object: Object3D, transform: Quaternion2): Object3D {\r\n return object.setTransformWorld(transform);\r\n}\r\n\r\n// Transform Local\r\n\r\nexport function setTransformLocal(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformLocalMatrix(object, transform);\r\n}\r\n\r\nexport const setTransformLocalMatrix = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n const scale = Vec3Utils.create();\r\n const transformMatrixNoScale = Mat4Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function setTransformLocalMatrix(object: Object3D, transform: Matrix4): Object3D {\r\n Mat4Utils.getPosition(transform, position);\r\n Mat4Utils.getScale(transform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(transform, inverseScale, transformMatrixNoScale);\r\n Mat4Utils.getRotationQuat(transformMatrixNoScale, rotation);\r\n QuatUtils.normalize(rotation, rotation);\r\n ObjectUtils.setScaleLocal(object, scale);\r\n ObjectUtils.setRotationLocalQuat(object, rotation);\r\n ObjectUtils.setPositionLocal(object, position);\r\n\r\n return object;\r\n };\r\n}();\r\n\r\nexport function setTransformLocalQuat(object: Object3D, transform: Quaternion2): Object3D {\r\n return object.setTransformLocal(transform);\r\n}\r\n\r\n// RESET\r\n\r\n// Position\r\n\r\nexport function resetPosition(object: Object3D): Object3D {\r\n return ObjectUtils.resetPositionWorld(object);\r\n}\r\n\r\nexport const resetPositionWorld = function () {\r\n const zero = Vec3Utils.create();\r\n return function resetPositionWorld(object: Object3D): Object3D {\r\n return ObjectUtils.setPositionWorld(object, zero);\r\n };\r\n}();\r\n\r\nexport const resetPositionLocal = function () {\r\n const zero = Vec3Utils.create();\r\n return function resetPositionLocal(object: Object3D): Object3D {\r\n return ObjectUtils.setPositionLocal(object, zero);\r\n };\r\n}();\r\n\r\n// Rotation\r\n\r\nexport function resetRotation(object: Object3D): Object3D {\r\n return ObjectUtils.resetRotationWorld(object);\r\n}\r\n\r\nexport const resetRotationWorld = function () {\r\n const identity = QuatUtils.create();\r\n return function resetRotationWorld(object: Object3D): Object3D {\r\n return ObjectUtils.setRotationWorldQuat(object, identity);\r\n };\r\n}();\r\n\r\nexport const resetRotationLocal = function () {\r\n const identity = QuatUtils.create();\r\n return function resetRotationLocal(object: Object3D): Object3D {\r\n return ObjectUtils.setRotationLocalQuat(object, identity);\r\n };\r\n}();\r\n\r\n// Scale\r\n\r\nexport function resetScale(object: Object3D): Object3D {\r\n return ObjectUtils.resetScaleWorld(object);\r\n}\r\n\r\nexport const resetScaleWorld = function () {\r\n const one = Vec3Utils.create(1);\r\n return function resetScaleWorld(object: Object3D): Object3D {\r\n return ObjectUtils.setScaleWorld(object, one);\r\n };\r\n}();\r\n\r\nexport const resetScaleLocal = function () {\r\n const one = Vec3Utils.create(1);\r\n return function resetScaleLocal(object: Object3D): Object3D {\r\n return ObjectUtils.setScaleLocal(object, one);\r\n };\r\n}();\r\n\r\n// Transform\r\n\r\nexport function resetTransform(object: Object3D): Object3D {\r\n return ObjectUtils.resetTransformWorld(object);\r\n}\r\n\r\nexport function resetTransformWorld(object: Object3D): Object3D {\r\n ObjectUtils.resetScaleWorld(object);\r\n ObjectUtils.resetRotationWorld(object);\r\n ObjectUtils.resetPositionWorld(object);\r\n\r\n return object;\r\n}\r\n\r\nexport function resetTransformLocal(object: Object3D): Object3D {\r\n ObjectUtils.resetScaleLocal(object);\r\n ObjectUtils.resetRotationLocal(object);\r\n ObjectUtils.resetPositionLocal(object);\r\n\r\n return object;\r\n}\r\n\r\n// TRANSFORMATIONS\r\n\r\n// Translate\r\n\r\nexport function translate(object: Object3D, translation: Vector3): Object3D {\r\n return ObjectUtils.translateWorld(object, translation);\r\n}\r\n\r\nexport function translateWorld(object: Object3D, translation: Vector3): Object3D {\r\n return object.translateWorld(translation);\r\n}\r\n\r\nexport function translateLocal(object: Object3D, translation: Vector3): Object3D {\r\n return object.translateLocal(translation);\r\n}\r\n\r\nexport function translateObject(object: Object3D, translation: Vector3): Object3D {\r\n return object.translateObject(translation);\r\n}\r\n\r\n// Translate Axis\r\n\r\nexport function translateAxis(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n return ObjectUtils.translateAxisWorld(object, amount, direction);\r\n}\r\n\r\nexport const translateAxisWorld = function () {\r\n const translation = Vec3Utils.create();\r\n return function translateAxisWorld(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n Vec3Utils.scale(direction, amount, translation);\r\n return ObjectUtils.translateWorld(object, translation);\r\n };\r\n}();\r\n\r\nexport const translateAxisLocal = function () {\r\n const translation = Vec3Utils.create();\r\n return function translateAxisLocal(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n Vec3Utils.scale(direction, amount, translation);\r\n return ObjectUtils.translateLocal(object, translation);\r\n };\r\n}();\r\n\r\nexport const translateAxisObject = function () {\r\n const translation = Vec3Utils.create();\r\n return function translateAxisObject(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n Vec3Utils.scale(direction, amount, translation);\r\n return ObjectUtils.translateObject(object, translation);\r\n };\r\n}();\r\n\r\n// Rotate\r\n\r\nexport function rotate(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorld(object, rotation);\r\n}\r\n\r\nexport function rotateDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorldDegrees(object, rotation);\r\n}\r\n\r\nexport function rotateRadians(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorldRadians(object, rotation);\r\n}\r\n\r\nexport function rotateMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n return ObjectUtils.rotateWorldMatrix(object, rotation);\r\n}\r\n\r\nexport function rotateQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return ObjectUtils.rotateWorldQuat(object, rotation);\r\n}\r\n\r\n// Rotate World\r\n\r\nexport function rotateWorld(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorldDegrees(object, rotation);\r\n}\r\n\r\nexport const rotateWorldDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateWorldDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateWorldQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateWorldRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateWorldRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateWorldDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const rotateWorldMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateWorldMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateWorldQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateWorldQuat = function () {\r\n const currentRotationQuat = QuatUtils.create();\r\n return function rotateWorldQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, currentRotationQuat);\r\n QuatUtils.mul(rotation, currentRotationQuat, currentRotationQuat);\r\n QuatUtils.normalize(currentRotationQuat, currentRotationQuat);\r\n return ObjectUtils.setRotationWorldQuat(object, currentRotationQuat);\r\n };\r\n}();\r\n\r\n// Rotate Local\r\n\r\nexport function rotateLocal(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateLocalDegrees(object, rotation);\r\n}\r\n\r\nexport const rotateLocalDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateLocalDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateLocalQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateLocalRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateLocalRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateLocalDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const rotateLocalMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateLocalMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateLocalQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateLocalQuat = function () {\r\n const currentRotationQuat = QuatUtils.create();\r\n return function rotateLocalQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, currentRotationQuat);\r\n QuatUtils.mul(rotation, currentRotationQuat, currentRotationQuat);\r\n QuatUtils.normalize(currentRotationQuat, currentRotationQuat);\r\n return ObjectUtils.setRotationLocalQuat(object, currentRotationQuat);\r\n };\r\n}();\r\n\r\n// Rotate Object\r\n\r\nexport function rotateObject(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateObjectDegrees(object, rotation);\r\n}\r\n\r\nexport const rotateObjectDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateObjectDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateObjectQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateObjectRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateObjectRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateObjectDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const rotateObjectMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateObjectMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateObjectQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport function rotateObjectQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return object.rotateObject(rotation);\r\n}\r\n\r\n// Rotate Axis\r\n\r\nexport function rotateAxis(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorld(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldRadians(object, angle, axis);\r\n}\r\n\r\n// Rotate Axis World\r\n\r\nexport function rotateAxisWorld(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisWorldDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldRadians(object, MathUtils.toRadians(angle), axis);\r\n}\r\n\r\nexport const rotateAxisWorldRadians = function () {\r\n const rotation = QuatUtils.create();\r\n return function rotateAxisWorldRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n QuatUtils.fromAxisRadians(angle, axis, rotation);\r\n return ObjectUtils.rotateWorldQuat(object, rotation);\r\n };\r\n}();\r\n\r\n// Rotate Axis Local\r\n\r\nexport function rotateAxisLocal(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisLocalDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisLocalDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisLocalRadians(object, MathUtils.toRadians(angle), axis);\r\n}\r\n\r\nexport const rotateAxisLocalRadians = function () {\r\n const rotation = QuatUtils.create();\r\n return function rotateAxisLocalRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n QuatUtils.fromAxisRadians(angle, axis, rotation);\r\n return ObjectUtils.rotateLocalQuat(object, rotation);\r\n };\r\n}();\r\n\r\n// Rotate Axis Object\r\n\r\nexport function rotateAxisObject(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisObjectDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisObjectDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisObjectRadians(object, MathUtils.toRadians(angle), axis);\r\n}\r\n\r\nexport const rotateAxisObjectRadians = function () {\r\n const rotation = QuatUtils.create();\r\n return function rotateAxisObjectRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n QuatUtils.fromAxisRadians(angle, axis, rotation);\r\n return ObjectUtils.rotateObjectQuat(object, rotation);\r\n };\r\n}();\r\n\r\n// Rotate Around\r\n\r\nexport function rotateAround(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorld(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldDegrees(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldRadians(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldMatrix(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldQuat(object, rotation, origin);\r\n}\r\n\r\n// Rotate Around World\r\n\r\nexport function rotateAroundWorld(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldDegrees(object, rotation, origin);\r\n}\r\n\r\nexport const rotateAroundWorldDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundWorldDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateAroundWorldQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundWorldRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateAroundWorldRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateAroundWorldDegrees(object, degreesRotation, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundWorldMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundWorldMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateAroundWorldQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundWorldQuat = function () {\r\n const axis = Vec3Utils.create();\r\n return function rotateAroundWorldQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n QuatUtils.getAxis(rotation, axis);\r\n const angle = QuatUtils.getAngleRadians(rotation,);\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, axis, origin);\r\n };\r\n}();\r\n\r\n// Rotate Around Local\r\n\r\nexport function rotateAroundLocal(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundLocalDegrees(object, rotation, origin);\r\n}\r\n\r\nexport const rotateAroundLocalDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundLocalDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateAroundLocalQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundLocalRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateAroundLocalRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateAroundLocalDegrees(object, degreesRotation, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundLocalMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundLocalMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateAroundLocalQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundLocalQuat = function () {\r\n const axis = Vec3Utils.create();\r\n return function rotateAroundLocalQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n QuatUtils.getAxis(rotation, axis);\r\n const angle = QuatUtils.getAngleRadians(rotation,);\r\n return ObjectUtils.rotateAroundAxisLocalRadians(object, angle, axis, origin);\r\n };\r\n}();\r\n\r\n// Rotate Around Object\r\n\r\nexport function rotateAroundObject(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundObjectDegrees(object, rotation, origin);\r\n}\r\n\r\nexport const rotateAroundObjectDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundObjectDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateAroundObjectQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundObjectRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateAroundObjectRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateAroundObjectDegrees(object, degreesRotation, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundObjectMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundObjectMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateAroundObjectQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundObjectQuat = function () {\r\n const axis = Vec3Utils.create();\r\n return function rotateAroundObjectQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n QuatUtils.getAxis(rotation, axis);\r\n const angle = QuatUtils.getAngleRadians(rotation,);\r\n return ObjectUtils.rotateAroundAxisObjectRadians(object, angle, axis, origin);\r\n };\r\n}();\r\n\r\n// Rotate Around Axis\r\n\r\nexport function rotateAroundAxis(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorld(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, axis, origin);\r\n}\r\n\r\n// Rotate Around Axis World\r\n\r\nexport function rotateAroundAxisWorld(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisWorldDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, MathUtils.toRadians(angle), axis, origin);\r\n}\r\n\r\nexport const rotateAroundAxisWorldRadians = function () {\r\n const transformToRotate = Quat2Utils.create();\r\n const transformToRotateConjugate = Quat2Utils.create();\r\n const transformQuat = Quat2Utils.create();\r\n const defaultQuat = QuatUtils.create();\r\n return function rotateAroundAxisWorldRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n Quat2Utils.setPositionRotationQuat(transformToRotate, origin, defaultQuat);\r\n ObjectUtils.getTransformWorldQuat(object, transformQuat);\r\n Quat2Utils.conjugate(transformToRotate, transformToRotateConjugate);\r\n Quat2Utils.mul(transformToRotateConjugate, transformQuat, transformQuat);\r\n Quat2Utils.rotateAxisRadians(transformToRotate, angle, axis, transformToRotate);\r\n Quat2Utils.mul(transformToRotate, transformQuat, transformQuat);\r\n return ObjectUtils.setTransformWorldQuat(object, transformQuat);\r\n };\r\n}();\r\n\r\n// Rotate Around Axis Local\r\n\r\nexport function rotateAroundAxisLocal(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisLocalDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalRadians(object, MathUtils.toRadians(angle), axis, origin);\r\n}\r\n\r\nexport const rotateAroundAxisLocalRadians = function () {\r\n const convertedPosition = Vec3Utils.create();\r\n const convertedAxis = Vec3Utils.create();\r\n return function rotateAroundAxisLocalRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n ObjectUtils.convertPositionLocalToWorld(object, origin, convertedPosition);\r\n ObjectUtils.convertDirectionLocalToWorld(object, axis, convertedAxis);\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, convertedAxis, convertedPosition);\r\n };\r\n}();\r\n\r\n// Rotate Around Axis Object\r\n\r\nexport function rotateAroundAxisObject(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisObjectDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectRadians(object, MathUtils.toRadians(angle), axis, origin);\r\n}\r\n\r\nexport const rotateAroundAxisObjectRadians = function () {\r\n const convertedPosition = Vec3Utils.create();\r\n const convertedAxis = Vec3Utils.create();\r\n return function rotateAroundAxisObjectRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n ObjectUtils.convertPositionObjectToWorld(object, origin, convertedPosition);\r\n ObjectUtils.convertDirectionObjectToWorld(object, axis, convertedAxis);\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, convertedAxis, convertedPosition);\r\n };\r\n}();\r\n\r\n// Scale\r\n\r\n// #TODO For now it does not really make sense in WL to scale in world space or parent space\r\n// so there is no scale default function\r\n\r\nexport const scaleObject = function () {\r\n const vector = Vec3Utils.create();\r\n\r\n function scaleObject(object: Object3D, scale: Vector3): Object3D;\r\n function scaleObject(object: Object3D, uniformScale: number): Object3D;\r\n function scaleObject(object: Object3D, scale: Vector3 | number): Object3D {\r\n if (isNaN(scale as number)) {\r\n return object.scaleLocal(scale as Vector3);\r\n } else {\r\n Vec3Utils.set(vector, scale);\r\n return object.scaleLocal(vector);\r\n }\r\n }\r\n\r\n return scaleObject;\r\n}();\r\n\r\n// Look At\r\n\r\nexport function lookAt(object: Object3D, position: Vector3, up: Vector3): Object3D {\r\n return ObjectUtils.lookAtWorld(object, position, up);\r\n}\r\n\r\nexport const lookAtWorld = function () {\r\n const direction = Vec3Utils.create();\r\n return function lookAtWorld(object: Object3D, position: Vector3, up: Vector3): Object3D {\r\n ObjectUtils.getPositionWorld(object, direction);\r\n Vec3Utils.sub(position, direction, direction);\r\n return ObjectUtils.lookToWorld(object, direction, up);\r\n };\r\n}();\r\n\r\nexport const lookAtLocal = function () {\r\n const direction = Vec3Utils.create();\r\n return function lookAtLocal(object: Object3D, position: Vector3, up: Vector3): Object3D {\r\n ObjectUtils.getPositionLocal(object, direction);\r\n Vec3Utils.sub(position, direction, direction);\r\n return ObjectUtils.lookToLocal(object, direction, up);\r\n };\r\n}();\r\n\r\nexport function lookTo(object: Object3D, direction: Vector3, up: Vector3): Object3D {\r\n return ObjectUtils.lookToWorld(object, direction, up);\r\n}\r\n\r\nexport const lookToWorld: (object: Object3D, direction: Vector3, up?: Vector3) => Object3D = function () {\r\n const internalUp = Vec3Utils.create();\r\n return function lookToWorld(object: Object3D, direction: Vector3, up: Vector3 = ObjectUtils.getUpWorld(object, internalUp)): Object3D {\r\n return ObjectUtils.setForwardWorld(object, direction, up);\r\n };\r\n}();\r\n\r\nexport const lookToLocal: (object: Object3D, direction: Vector3, up?: Vector3) => Object3D = function () {\r\n const internalUp = Vec3Utils.create();\r\n return function lookToLocal(object: Object3D, direction: Vector3, up: Vector3 = ObjectUtils.getUpLocal(object, internalUp)): Object3D {\r\n return ObjectUtils.setForwardLocal(object, direction, up);\r\n };\r\n}();\r\n\r\n// EXTRA\r\n\r\n// Convert Vector Object World\r\n\r\nexport const convertPositionObjectToWorld = function () {\r\n const matrix = Mat4Utils.create();\r\n return function convertPositionObjectToWorld(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, matrix);\r\n Vec3Utils.transformMat4(position, matrix, outPosition);\r\n return outPosition;\r\n };\r\n}();\r\n\r\nexport const convertDirectionObjectToWorld = function () {\r\n const rotation = QuatUtils.create();\r\n return function convertDirectionObjectToWorld(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n Vec3Utils.transformQuat(direction, rotation, outDirection);\r\n return outDirection;\r\n };\r\n}();\r\n\r\nexport const convertPositionWorldToObject = function () {\r\n const matrix = Mat4Utils.create();\r\n return function convertPositionWorldToObject(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, matrix);\r\n Mat4Utils.invert(matrix, matrix);\r\n Vec3Utils.transformMat4(position, matrix, outPosition);\r\n return outPosition;\r\n };\r\n}();\r\n\r\nexport const convertDirectionWorldToObject = function () {\r\n const rotation = QuatUtils.create();\r\n return function convertDirectionWorldToObject(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n Vec3Utils.transformQuat(direction, rotation, outDirection);\r\n return outDirection;\r\n };\r\n}();\r\n\r\n// Convert Vector Local World\r\n\r\nexport function convertPositionLocalToWorld(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertPositionObjectToWorld(ObjectUtils.getParent(object)!, position, outPosition);\r\n } else {\r\n Vec3Utils.copy(position, outPosition);\r\n }\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionLocalToWorld(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertDirectionObjectToWorld(ObjectUtils.getParent(object)!, direction, outDirection);\r\n } else {\r\n Vec3Utils.copy(direction, outDirection);\r\n }\r\n return outDirection;\r\n}\r\n\r\nexport function convertPositionWorldToLocal(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertPositionWorldToObject(ObjectUtils.getParent(object)!, position, outPosition);\r\n } else {\r\n Vec3Utils.copy(position, outPosition);\r\n }\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionWorldToLocal(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertDirectionWorldToObject(ObjectUtils.getParent(object)!, direction, outDirection);\r\n } else {\r\n Vec3Utils.copy(direction, outDirection);\r\n }\r\n return outDirection;\r\n}\r\n\r\n// Convert Vector Local Object\r\n\r\n// I need to use the converson to world and then local also use the parent scale that changes the position in local space\r\n\r\nexport function convertPositionObjectToLocal(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertPositionObjectToWorld(object, position, outPosition);\r\n ObjectUtils.convertPositionWorldToLocal(object, outPosition, outPosition);\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionObjectToLocal(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertDirectionObjectToWorld(object, direction, outDirection);\r\n ObjectUtils.convertDirectionWorldToLocal(object, outDirection, outDirection);\r\n return outDirection;\r\n}\r\n\r\nexport function convertPositionLocalToObject(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertPositionLocalToWorld(object, position, outPosition);\r\n ObjectUtils.convertPositionWorldToObject(object, outPosition, outPosition);\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionLocalToObject(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertDirectionLocalToWorld(object, direction, outDirection);\r\n ObjectUtils.convertDirectionWorldToObject(object, outDirection, outDirection);\r\n return outDirection;\r\n}\r\n\r\n// Convert Transform Object World\r\n\r\nexport function convertTransformObjectToWorld(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorldMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport const convertTransformObjectToWorldMatrix = function () {\r\n const convertTransform = Mat4Utils.create();\r\n const position = Vec3Utils.create();\r\n const scale = Vec3Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function convertTransformObjectToWorldMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, convertTransform);\r\n if (ObjectUtils.hasUniformScaleWorld(object)) {\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n } else {\r\n Vec3Utils.set(position, transform[12], transform[13], transform[14]);\r\n ObjectUtils.convertPositionObjectToWorld(object, position, position);\r\n\r\n Mat4Utils.getScale(convertTransform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(convertTransform, inverseScale, convertTransform);\r\n\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n Mat4Utils.scale(outTransform, scale, outTransform);\r\n\r\n outTransform[12] = position[0];\r\n outTransform[13] = position[1];\r\n outTransform[14] = position[2];\r\n outTransform[15] = 1;\r\n }\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport const convertTransformObjectToWorldQuat = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n return function convertTransformObjectToWorldQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n QuatUtils.mul(rotation, transform, rotation);\r\n Quat2Utils.getPosition(transform, position);\r\n ObjectUtils.convertPositionObjectToWorld(object, position, position);\r\n Quat2Utils.setPositionRotationQuat(outTransform, position, rotation);\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport function convertTransformWorldToObject(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObjectMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport const convertTransformWorldToObjectMatrix = function () {\r\n const convertTransform = Mat4Utils.create();\r\n const position = Vec3Utils.create();\r\n const scale = Vec3Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function convertTransformWorldToObjectMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, convertTransform);\r\n if (ObjectUtils.hasUniformScaleWorld(object)) {\r\n Mat4Utils.invert(convertTransform, convertTransform);\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n } else {\r\n Vec3Utils.set(position, transform[12], transform[13], transform[14]);\r\n ObjectUtils.convertPositionWorldToObject(object, position, position);\r\n\r\n Mat4Utils.getScale(convertTransform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(convertTransform, inverseScale, convertTransform);\r\n\r\n Mat4Utils.invert(convertTransform, convertTransform);\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n Mat4Utils.scale(outTransform, inverseScale, outTransform);\r\n\r\n outTransform[12] = position[0];\r\n outTransform[13] = position[1];\r\n outTransform[14] = position[2];\r\n outTransform[15] = 1;\r\n }\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport const convertTransformWorldToObjectQuat = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n return function convertTransformWorldToObjectQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n QuatUtils.mul(rotation, transform, rotation);\r\n Quat2Utils.getPosition(transform, position);\r\n ObjectUtils.convertPositionWorldToObject(object, position, position);\r\n Quat2Utils.setPositionRotationQuat(outTransform, position, rotation);\r\n return outTransform;\r\n };\r\n}();\r\n\r\n// Convert Transform Local World\r\n\r\nexport function convertTransformLocalToWorld(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorldMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformLocalToWorldMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformObjectToWorldMatrix(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Mat4Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformLocalToWorldQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformObjectToWorldQuat(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Quat2Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformWorldToLocal(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocalMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformWorldToLocalMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformWorldToObjectMatrix(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Mat4Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformWorldToLocalQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformWorldToObjectQuat(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Quat2Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\n// Convert Transform Object Local\r\n\r\n// I need to use the conversion to world and then local to also use the parent scale that changes the position in local space\r\n\r\nexport function convertTransformObjectToLocal(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocalMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformObjectToLocalMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.convertTransformObjectToWorldMatrix(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToLocalMatrix(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformObjectToLocalQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.convertTransformObjectToWorldQuat(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToLocalQuat(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformLocalToObject(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObjectMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformLocalToObjectMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.convertTransformLocalToWorldMatrix(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToObjectMatrix(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformLocalToObjectQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.convertTransformLocalToWorldQuat(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToObjectQuat(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\n// Parent\r\n\r\nexport const setParent = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n const scale = Vec3Utils.create();\r\n return function setParent(object: Object3D, newParent: Object3D, keepTransformWorld: boolean = true): Object3D {\r\n if (!keepTransformWorld) {\r\n object.parent = newParent;\r\n } else {\r\n ObjectUtils.getPositionWorld(object, position);\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n ObjectUtils.getScaleWorld(object, scale);\r\n object.parent = newParent;\r\n ObjectUtils.setScaleWorld(object, scale);\r\n ObjectUtils.setRotationWorldQuat(object, rotation);\r\n ObjectUtils.setPositionWorld(object, position);\r\n }\r\n\r\n return object;\r\n };\r\n}();\r\n\r\nexport function getParent(object: Readonly): Object3D | null {\r\n return object.parent;\r\n}\r\n\r\n// Component\r\n\r\nexport function addComponent(object: Object3D, classOrType: ComponentConstructor | string, paramsOrActive?: Record | boolean, active?: boolean): T | null {\r\n let params: Record | undefined = undefined;\r\n\r\n if (typeof paramsOrActive == \"boolean\") {\r\n params = {};\r\n params[\"active\"] = paramsOrActive;\r\n } else {\r\n if (paramsOrActive != null) {\r\n params = paramsOrActive;\r\n }\r\n\r\n if (active != null) {\r\n if (params == null) {\r\n params = {};\r\n }\r\n\r\n params[\"active\"] = active;\r\n }\r\n }\r\n\r\n return object.addComponent(classOrType as ComponentConstructor, params);\r\n}\r\n\r\nexport function getComponent(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return ObjectUtils.getComponentHierarchy(object, classOrType, index);\r\n}\r\n\r\nexport function getComponentSelf(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return object.getComponent(classOrType as ComponentConstructor, index);\r\n}\r\n\r\nexport function getComponentHierarchy(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return ObjectUtils.getComponentHierarchyBreadth(object, classOrType, index);\r\n}\r\n\r\nexport function getComponentHierarchyBreadth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentHierarchyDepth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentDescendants(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return ObjectUtils.getComponentDescendantsBreadth(object, classOrType, index);\r\n}\r\n\r\nexport function getComponentDescendantsBreadth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentDescendantsDepth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentChildren(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponents(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchy(object, classOrType);\r\n}\r\n\r\nexport function getComponentsSelf(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return object.getComponents(classOrType as ComponentConstructor);\r\n}\r\n\r\nexport function getComponentsHierarchy(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchyBreadth(object, classOrType);\r\n}\r\n\r\nexport function getComponentsHierarchyBreadth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsHierarchyDepth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsDescendants(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendantsBreadth(object, classOrType);\r\n}\r\n\r\nexport function getComponentsDescendantsBreadth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsDescendantsDepth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsChildren(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\n// Active\r\n\r\nexport function setActive(object: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchy(object, active);\r\n}\r\n\r\nexport function setActiveSelf(object: Object3D, active: boolean): Object3D {\r\n object.active = active;\r\n return object;\r\n}\r\n\r\nexport function setActiveHierarchy(object: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchyBreadth(object, active);\r\n}\r\n\r\nexport function setActiveHierarchyBreadth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveHierarchyDepth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveDescendants(object: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendantsBreadth(object, active);\r\n}\r\n\r\nexport function setActiveDescendantsBreadth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveDescendantsDepth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveChildren(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getChildren(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\n// Uniform Scale\r\n\r\nexport function hasUniformScale(object: Readonly): boolean {\r\n return ObjectUtils.hasUniformScaleWorld(object);\r\n}\r\n\r\nexport const hasUniformScaleWorld = function () {\r\n const scale = Vec3Utils.create();\r\n return function hasUniformScaleWorld(object: Readonly): boolean {\r\n ObjectUtils.getScaleWorld(object, scale);\r\n return Math.abs(scale[0] - scale[1]) < MathUtils.EPSILON && Math.abs(scale[1] - scale[2]) < MathUtils.EPSILON && Math.abs(scale[0] - scale[2]) < MathUtils.EPSILON;\r\n };\r\n}();\r\n\r\nexport const hasUniformScaleLocal = function () {\r\n const scale = Vec3Utils.create();\r\n return function hasUniformScaleLocal(object: Readonly): boolean {\r\n ObjectUtils.getScaleLocal(object, scale);\r\n return Math.abs(scale[0] - scale[1]) < MathUtils.EPSILON && Math.abs(scale[1] - scale[2]) < MathUtils.EPSILON && Math.abs(scale[0] - scale[2]) < MathUtils.EPSILON;\r\n };\r\n}();\r\n\r\n// Clone\r\n\r\nexport const clone = function () {\r\n const scale = Vec3Utils.create();\r\n const transformQuat = Quat2Utils.create();\r\n return function clone(object: Readonly, cloneParams: CloneParams = new CloneParams()): Object3D | null {\r\n let clonedObject = null;\r\n\r\n const cloneParent = cloneParams.myCloneParent === undefined ? ObjectUtils.getParent(object) : cloneParams.myCloneParent;\r\n\r\n if (cloneParams.myUseDefaultObjectClone) {\r\n clonedObject = object.clone(cloneParent);\r\n\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive) {\r\n const clonedComponents = ObjectUtils.getComponents(clonedObject);\r\n for (const clonedComponent of clonedComponents) {\r\n\r\n // Trigger start, which otherwise would be called later, on first activation\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive && !clonedComponent.active) {\r\n clonedComponent.active = true;\r\n clonedComponent.active = false;\r\n }\r\n }\r\n }\r\n } else if (ObjectUtils.isCloneable(object, cloneParams)) {\r\n const objectsToCloneData: [Object3D | null, Readonly][] = [];\r\n objectsToCloneData.push([cloneParent, object]);\r\n\r\n // Create the object hierarchy\r\n const objectsToCloneComponentsData: [Readonly, Object3D][] = [];\r\n while (objectsToCloneData.length > 0) {\r\n const cloneData = objectsToCloneData.shift();\r\n const parent = cloneData![0];\r\n const objectToClone = cloneData![1];\r\n\r\n const currentClonedObject = (parent != null) ? ObjectUtils.addObject(parent) : ObjectUtils.addObject(Globals.getRootObject(ObjectUtils.getEngine(object))!);\r\n ObjectUtils.setName(currentClonedObject, ObjectUtils.getName(objectToClone));\r\n\r\n ObjectUtils.setScaleLocal(currentClonedObject, ObjectUtils.getScaleLocal(objectToClone, scale));\r\n ObjectUtils.setTransformLocalQuat(currentClonedObject, ObjectUtils.getTransformLocalQuat(objectToClone, transformQuat));\r\n\r\n if (!cloneParams.myIgnoreComponents) {\r\n objectsToCloneComponentsData.push([objectToClone, currentClonedObject]);\r\n }\r\n\r\n if (!cloneParams.myIgnoreDescendants) {\r\n for (const child of ObjectUtils.getChildren(objectToClone)) {\r\n let cloneDescendant = false;\r\n if (cloneParams.myDescendantsToInclude.length > 0) {\r\n cloneDescendant = cloneParams.myDescendantsToInclude.find(descendantToInclude => ObjectUtils.equals(descendantToInclude, child)) != null;\r\n } else {\r\n cloneDescendant = cloneParams.myDescendantsToIgnore.find(descendantToIgnore => ObjectUtils.equals(descendantToIgnore, child)) == null;\r\n }\r\n\r\n if (cloneDescendant && cloneParams.myIgnoreDescendantCallback != null) {\r\n cloneDescendant = !cloneParams.myIgnoreDescendantCallback(child);\r\n }\r\n\r\n if (cloneDescendant) {\r\n objectsToCloneData.push([currentClonedObject, child]);\r\n }\r\n }\r\n }\r\n\r\n if (clonedObject == null) {\r\n clonedObject = currentClonedObject;\r\n }\r\n }\r\n\r\n // Get the components to clone\r\n const componentsToCloneData: [Component, Object3D][] = [];\r\n while (objectsToCloneComponentsData.length > 0) {\r\n const cloneData = objectsToCloneComponentsData.shift();\r\n const objectToClone = cloneData![0];\r\n const currentClonedObject = cloneData![1];\r\n\r\n const components = ObjectUtils.getComponentsSelf(objectToClone);\r\n for (const component of components) {\r\n if (ComponentUtils.isCloneable(component.type, cloneParams.myUseDefaultComponentClone || cloneParams.myUseDefaultComponentCloneAsFallback, ObjectUtils.getEngine(object))) {\r\n let cloneComponent = false;\r\n if (cloneParams.myComponentsToInclude.length > 0) {\r\n cloneComponent = cloneParams.myComponentsToInclude.indexOf(component.type) != -1;\r\n } else {\r\n cloneComponent = cloneParams.myComponentsToIgnore.indexOf(component.type) == -1;\r\n }\r\n\r\n if (cloneComponent && cloneParams.myIgnoreComponentCallback != null) {\r\n cloneComponent = !cloneParams.myIgnoreComponentCallback(component);\r\n }\r\n\r\n if (cloneComponent) {\r\n componentsToCloneData.push([component, currentClonedObject]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Clone the components\r\n const componentsToPostProcessData: [Component, Component][] = [];\r\n while (componentsToCloneData.length > 0) {\r\n const cloneData = componentsToCloneData.shift();\r\n const componentToClone = cloneData![0];\r\n const currentClonedObject = cloneData![1];\r\n let clonedComponent = null;\r\n\r\n if (!cloneParams.myUseDefaultComponentClone) {\r\n clonedComponent = ComponentUtils.clone(componentToClone, currentClonedObject, cloneParams.myComponentDeepCloneParams, cloneParams.myComponentCustomCloneParams, cloneParams.myUseDefaultComponentCloneAsFallback, cloneParams.myDefaultComponentCloneAutoStartIfNotActive);\r\n } else {\r\n clonedComponent = ComponentUtils.cloneDefault(componentToClone, currentClonedObject, cloneParams.myDefaultComponentCloneAutoStartIfNotActive);\r\n }\r\n\r\n if (clonedComponent != null) {\r\n if (ComponentUtils.hasClonePostProcess(componentToClone.type, ObjectUtils.getEngine(object))) {\r\n componentsToPostProcessData.push([componentToClone, clonedComponent]);\r\n }\r\n }\r\n }\r\n\r\n // Clone post process\r\n // Can be useful if you have to get some data from other components in the hierarchy which have now been created\r\n while (componentsToPostProcessData.length > 0) {\r\n const cloneData = componentsToPostProcessData.shift();\r\n const componentToClone = cloneData![0];\r\n const currentClonedComponent = cloneData![1];\r\n\r\n ComponentUtils.clonePostProcess(componentToClone, currentClonedComponent, cloneParams.myComponentDeepCloneParams, cloneParams.myComponentCustomCloneParams);\r\n }\r\n } else if (cloneParams.myUseDefaultObjectCloneAsFallback) {\r\n clonedObject = object.clone(cloneParent);\r\n\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive) {\r\n const clonedComponents = ObjectUtils.getComponents(clonedObject);\r\n for (const clonedComponent of clonedComponents) {\r\n // Trigger start, which otherwise would be called later, on first activation\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive && !clonedComponent.active) {\r\n clonedComponent.active = true;\r\n clonedComponent.active = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return clonedObject;\r\n };\r\n}();\r\n\r\nexport function isCloneable(object: Readonly, cloneParams: CloneParams = new CloneParams()): boolean {\r\n if (cloneParams.myIgnoreNonCloneable || cloneParams.myIgnoreComponents || cloneParams.myUseDefaultComponentClone || cloneParams.myUseDefaultComponentCloneAsFallback) {\r\n return true;\r\n }\r\n\r\n let cloneable = true;\r\n\r\n const objectsToClone: Readonly[] = [];\r\n objectsToClone.push(object);\r\n\r\n while (cloneable && objectsToClone.length > 0) {\r\n const objectToClone = objectsToClone.shift()!;\r\n\r\n const components = ObjectUtils.getComponentsSelf(objectToClone);\r\n for (const component of components) {\r\n let cloneComponent = false;\r\n if (cloneParams.myComponentsToInclude.length > 0) {\r\n cloneComponent = cloneParams.myComponentsToInclude.indexOf(component.type) != -1;\r\n } else {\r\n cloneComponent = cloneParams.myComponentsToIgnore.indexOf(component.type) == -1;\r\n }\r\n\r\n if (cloneComponent && cloneParams.myIgnoreComponentCallback != null) {\r\n cloneComponent = !cloneParams.myIgnoreComponentCallback(component);\r\n }\r\n\r\n if (cloneComponent && !ComponentUtils.isCloneable(component.type, false, ObjectUtils.getEngine(object))) {\r\n cloneable = false;\r\n break;\r\n }\r\n }\r\n\r\n if (cloneable && !cloneParams.myIgnoreDescendants) {\r\n for (const child of ObjectUtils.getChildren(objectToClone)) {\r\n let cloneDescendant = false;\r\n if (cloneParams.myDescendantsToInclude.length > 0) {\r\n cloneDescendant = cloneParams.myDescendantsToInclude.find(descendantToInclude => ObjectUtils.equals(descendantToInclude, child)) != null;\r\n } else {\r\n cloneDescendant = cloneParams.myDescendantsToIgnore.find(descendantToInclude => ObjectUtils.equals(descendantToInclude, child)) == null;\r\n }\r\n\r\n if (cloneDescendant && cloneParams.myIgnoreDescendantCallback != null) {\r\n cloneDescendant = !cloneParams.myIgnoreDescendantCallback(child);\r\n }\r\n\r\n if (cloneDescendant) {\r\n objectsToClone.push(child);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cloneable;\r\n}\r\n\r\n// To String\r\n\r\nexport function toString(object: Readonly): string {\r\n return ObjectUtils.toStringCompact(object);\r\n}\r\n\r\nexport const toStringExtended = function () {\r\n const tab = \" \";\r\n const newLine = \"\\n\";\r\n const startObject = \"{\";\r\n const endObject = \"}\";\r\n const nameLabel = \"name: \";\r\n const idLabel = \"id: \";\r\n const componentsLabel = \"components: \";\r\n const typeLabel = \"type: \";\r\n const childrenLabel = \"children: \";\r\n const startComponents = \"[\";\r\n const endComponents = \"]\";\r\n const startChildren = startComponents;\r\n const endChildren = endComponents;\r\n const separator = \",\";\r\n const newLineTab = newLine.concat(tab, tab);\r\n return function toStringExtended(object: Readonly): string {\r\n let objectString = \"\";\r\n objectString = objectString.concat(startObject, newLine);\r\n\r\n const components = ObjectUtils.getComponentsSelf(object);\r\n const children = ObjectUtils.getChildren(object);\r\n const name = ObjectUtils.getName(object);\r\n\r\n if (components.length > 0 || children.length > 0 || name.length > 0) {\r\n objectString = objectString.concat(tab, idLabel, ObjectUtils.getID(object).toString(), separator, newLine);\r\n } else {\r\n objectString = objectString.concat(tab, idLabel, ObjectUtils.getID(object).toString(), newLine);\r\n }\r\n\r\n if (name.length > 0) {\r\n if (components.length > 0 || children.length > 0) {\r\n objectString = objectString.concat(tab, nameLabel, ObjectUtils.getName(object), separator, newLine);\r\n } else {\r\n objectString = objectString.concat(tab, nameLabel, ObjectUtils.getName(object), newLine);\r\n }\r\n }\r\n\r\n if (components.length > 0) {\r\n objectString = objectString.concat(tab, componentsLabel, newLine, tab, startComponents, newLine);\r\n for (let i = 0; i < components.length; i++) {\r\n const component = components[i];\r\n\r\n objectString = objectString.concat(tab, tab, startObject, newLine);\r\n objectString = objectString.concat(tab, tab, tab, typeLabel, component.type, separator, newLine);\r\n objectString = objectString.concat(tab, tab, tab, idLabel, component._id.toString(), separator, newLine);\r\n objectString = objectString.concat(tab, tab, endObject);\r\n\r\n if (i != components.length - 1) {\r\n objectString = objectString.concat(separator, newLine);\r\n } else {\r\n objectString = objectString.concat(newLine);\r\n }\r\n }\r\n\r\n if (children.length > 0) {\r\n objectString = objectString.concat(tab, endComponents, separator, newLine);\r\n } else {\r\n objectString = objectString.concat(tab, endComponents, newLine);\r\n }\r\n }\r\n\r\n if (children.length > 0) {\r\n objectString = objectString.concat(tab, childrenLabel, newLine, tab, startChildren, newLine);\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n\r\n let childString = ObjectUtils.toStringExtended(child);\r\n childString = childString.replaceAll(newLine, newLineTab);\r\n childString = tab.concat(tab, childString);\r\n objectString = objectString.concat(childString);\r\n\r\n if (i != children.length - 1) {\r\n objectString = objectString.concat(separator, newLine);\r\n } else {\r\n objectString = objectString.concat(newLine);\r\n }\r\n }\r\n objectString = objectString.concat(tab, endChildren, newLine);\r\n }\r\n\r\n objectString = objectString.concat(endObject);\r\n\r\n return objectString;\r\n };\r\n}();\r\n\r\nexport const toStringCompact = function () {\r\n const tab = \" \";\r\n const newLine = \"\\n\";\r\n const emptyName = \"\";\r\n const nameLabel = \"name: \";\r\n const componentsLabel = \"components: \";\r\n const separator = \", \";\r\n const newLineTab = newLine.concat(tab);\r\n return function toStringCompact(object: Readonly): string {\r\n let objectString = \"\";\r\n\r\n const name = ObjectUtils.getName(object);\r\n if (name.length > 0) {\r\n objectString = objectString.concat(nameLabel, name);\r\n } else {\r\n objectString = objectString.concat(nameLabel, emptyName);\r\n }\r\n\r\n const components = ObjectUtils.getComponentsSelf(object);\r\n if (components.length > 0) {\r\n objectString = objectString.concat(separator, componentsLabel);\r\n for (let i = 0; i < components.length; i++) {\r\n const component = components[i];\r\n\r\n objectString = objectString.concat(component.type);\r\n\r\n if (i != components.length - 1) {\r\n objectString = objectString.concat(separator);\r\n }\r\n }\r\n }\r\n\r\n const children = ObjectUtils.getChildren(object);\r\n if (children.length > 0) {\r\n objectString = objectString.concat(newLine);\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n\r\n let childString = ObjectUtils.toStringCompact(child);\r\n childString = childString.replaceAll(newLine, newLineTab);\r\n childString = tab.concat(childString);\r\n objectString = objectString.concat(childString);\r\n\r\n if (i != children.length - 1) {\r\n objectString = objectString.concat(newLine);\r\n }\r\n }\r\n }\r\n\r\n return objectString;\r\n };\r\n}();\r\n\r\n// Get Object By Name\r\n\r\nexport function getObjectByName(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchy(object, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameHierarchy(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchyBreadth(object, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameHierarchyBreadth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameHierarchyDepth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameDescendants(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendantsBreadth(object, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameDescendantsBreadth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameDescendantsDepth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameChildren(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectsByName(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchy(object, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameHierarchy(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchyBreadth(object, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameHierarchyBreadth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameHierarchyDepth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameDescendants(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendantsBreadth(object, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameDescendantsBreadth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameDescendantsDepth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameChildren(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\n// Get Object By ID\r\n\r\nexport function getObjectByID(object: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchy(object, id);\r\n}\r\n\r\nexport function getObjectByIDHierarchy(object: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchyBreadth(object, id);\r\n}\r\n\r\nexport function getObjectByIDHierarchyBreadth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDHierarchyDepth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDDescendants(object: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendantsBreadth(object, id);\r\n}\r\n\r\nexport function getObjectByIDDescendantsBreadth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDDescendantsDepth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDChildren(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\n// Get Hierarchy\r\n\r\nexport function getHierarchy(object: Readonly): Object3D[] {\r\n return ObjectUtils.getHierarchyBreadth(object);\r\n}\r\n\r\nexport function getHierarchyBreadth(object: Readonly): Object3D[] {\r\n const hierarchy = ObjectUtils.getDescendantsBreadth(object);\r\n\r\n hierarchy.unshift(object as Object3D);\r\n\r\n return hierarchy;\r\n}\r\n\r\nexport function getHierarchyDepth(object: Readonly): Object3D[] {\r\n const hierarchy = ObjectUtils.getDescendantsDepth(object);\r\n\r\n hierarchy.unshift(object as Object3D);\r\n\r\n return hierarchy;\r\n}\r\n\r\nexport function getDescendants(object: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendantsBreadth(object);\r\n}\r\n\r\nexport function getDescendantsBreadth(object: Readonly): Object3D[] {\r\n const descendants: Object3D[] = [];\r\n\r\n const descendantsQueue = ObjectUtils.getChildren(object);\r\n\r\n while (descendantsQueue.length > 0) {\r\n const descendant = descendantsQueue.shift()!;\r\n descendants.push(descendant);\r\n for (const child of ObjectUtils.getChildren(descendant)) {\r\n descendantsQueue.push(child);\r\n }\r\n }\r\n\r\n return descendants;\r\n}\r\n\r\nexport function getDescendantsDepth(object: Readonly): Object3D[] {\r\n const descendants: Object3D[] = [];\r\n\r\n const children = ObjectUtils.getChildren(object);\r\n\r\n for (const child of children) {\r\n descendants.push(child);\r\n\r\n const childDescendants = ObjectUtils.getDescendantsDepth(child);\r\n for (let i = 0; i < childDescendants.length; i++) {\r\n descendants.push(childDescendants[i]);\r\n }\r\n }\r\n\r\n return descendants;\r\n}\r\n\r\nexport function getChildren(object: Readonly): Object3D[] {\r\n return object.children;\r\n}\r\n\r\nexport function getSelf(object: Readonly): Object3D {\r\n return object as Object3D;\r\n}\r\n\r\n// Cauldron\r\n\r\nexport function addObject(object: Object3D): Object3D {\r\n return Globals.getScene(ObjectUtils.getEngine(object)).addObject(object);\r\n}\r\n\r\nexport function getName(object: Readonly): string {\r\n return object.name;\r\n}\r\n\r\nexport function setName(object: Object3D, name: string): Object3D {\r\n object.name = name;\r\n return object;\r\n}\r\n\r\nexport function getEngine(object: Readonly): WonderlandEngine {\r\n return object.engine;\r\n}\r\n\r\nexport function getID(object: Readonly): number {\r\n return object.objectId;\r\n}\r\n\r\nexport function markDirty(object: Object3D): Object3D {\r\n object.setDirty();\r\n return object;\r\n}\r\n\r\nexport function isTransformChanged(object: Readonly): boolean {\r\n return object.changed;\r\n}\r\n\r\nexport function equals(first: Readonly, second: Readonly): boolean {\r\n return first.equals(second as Object3D);\r\n}\r\n\r\nexport function destroy(object: Object3D): void {\r\n let destroyReturnValue = undefined;\r\n\r\n try {\r\n destroyReturnValue = object.destroy();\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n\r\n return destroyReturnValue;\r\n}\r\n\r\nexport function reserveObjects(object: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsHierarchy(object, count);\r\n}\r\n\r\nexport function reserveObjectsSelf(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapSelf(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function reserveObjectsHierarchy(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapHierarchy(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function reserveObjectsDescendants(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapDescendants(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function reserveObjectsChildren(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapChildren(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function getComponentsAmountMap(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n return ObjectUtils.getComponentsAmountMapHierarchy(object, outComponentsAmountMap);\r\n}\r\n\r\nexport function getComponentsAmountMapSelf(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n let objectsAmount = outComponentsAmountMap.get(\"object\");\r\n if (objectsAmount == null) {\r\n objectsAmount = 0;\r\n }\r\n objectsAmount += 1;\r\n outComponentsAmountMap.set(\"object\", objectsAmount);\r\n\r\n const components = ObjectUtils.getComponentsSelf(object);\r\n for (const component of components) {\r\n const type = component.type;\r\n let typeAmount = outComponentsAmountMap.get(type);\r\n if (typeAmount == null) {\r\n typeAmount = 0;\r\n }\r\n typeAmount += 1;\r\n outComponentsAmountMap.set(type, typeAmount);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\nexport function getComponentsAmountMapHierarchy(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n const hierarchy = ObjectUtils.getHierarchy(object);\r\n\r\n for (const hierarchyObject of hierarchy) {\r\n ObjectUtils.getComponentsAmountMapSelf(hierarchyObject, outComponentsAmountMap);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\nexport function getComponentsAmountMapDescendants(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n const descendants = ObjectUtils.getDescendants(object);\r\n\r\n for (const descendant of descendants) {\r\n ObjectUtils.getComponentsAmountMapSelf(descendant, outComponentsAmountMap);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\nexport function getComponentsAmountMapChildren(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n const children = ObjectUtils.getChildren(object);\r\n\r\n for (const child of children) {\r\n ObjectUtils.getComponentsAmountMapSelf(child, outComponentsAmountMap);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\n// GLOBALS\r\n\r\nexport function getComponentObjects(objects: Object3D[], classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n let component = null;\r\n\r\n for (const object of objects) {\r\n component = object.getComponent(classOrType as ComponentConstructor, index);\r\n\r\n if (component != null) {\r\n break;\r\n }\r\n }\r\n\r\n return component;\r\n}\r\n\r\nexport function getComponentsObjects(objects: Object3D[], classOrType?: ComponentConstructor | string): T[] {\r\n const components: T[] = [];\r\n\r\n for (const currentObject of objects) {\r\n const currentObjectComponents = currentObject.getComponents(classOrType as ComponentConstructor);\r\n\r\n for (let i = 0; i < currentObjectComponents.length; i++) {\r\n components.push(currentObjectComponents[i]);\r\n }\r\n }\r\n\r\n return components;\r\n}\r\n\r\nexport function setActiveObjects(objects: Object3D[], active: boolean): void {\r\n for (const currentObject of objects) {\r\n currentObject.active = active;\r\n }\r\n}\r\n\r\nexport function getObjectByNameObjects(objects: Object3D[], name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n let objectFound = null;\r\n\r\n let currentIndex = index;\r\n for (const currentObject of objects) {\r\n const objectName = ObjectUtils.getName(currentObject);\r\n if ((!isRegex && objectName == name) || (isRegex && objectName.match(name) != null)) {\r\n if (currentIndex == 0) {\r\n objectFound = currentObject;\r\n break;\r\n }\r\n\r\n currentIndex--;\r\n }\r\n }\r\n\r\n return objectFound;\r\n}\r\n\r\nexport function getObjectsByNameObjects(objects: Object3D[], name: string, isRegex: boolean = false): Object3D[] {\r\n const objectsFound: Object3D[] = [];\r\n\r\n for (const currentObject of objects) {\r\n const objectName = ObjectUtils.getName(currentObject);\r\n if ((!isRegex && objectName == name) || (isRegex && objectName.match(name) != null)) {\r\n objectsFound.push(currentObject);\r\n }\r\n }\r\n\r\n return objectsFound;\r\n}\r\n\r\nexport function getObjectByIDObjects(objects: Object3D[], id: number, index: number = 0): Object3D | null {\r\n let objectFound = null;\r\n\r\n let currentIndex = index;\r\n for (const currentObject of objects) {\r\n if (ObjectUtils.getID(currentObject) == id) {\r\n if (currentIndex == 0) {\r\n objectFound = currentObject;\r\n break;\r\n }\r\n\r\n currentIndex--;\r\n }\r\n }\r\n\r\n return objectFound;\r\n}\r\n\r\nexport function getObjectsByIDObjects(objects: Object3D[], id: number): Object3D[] {\r\n const objectsFound: Object3D[] = [];\r\n\r\n for (const currentObject of objects) {\r\n if (ObjectUtils.getID(currentObject) == id) {\r\n objectsFound.push(currentObject);\r\n }\r\n }\r\n\r\n return objectsFound;\r\n}\r\n\r\nexport function wrapObject(id: number, engine: WonderlandEngine | null = Globals.getMainEngine()): Object3D | null {\r\n return engine != null ? engine.wrapObject(id) : null;\r\n}\r\n\r\nexport const ObjectUtils = {\r\n getPosition,\r\n getPositionWorld,\r\n getPositionLocal,\r\n getRotation,\r\n getRotationDegrees,\r\n getRotationRadians,\r\n getRotationMatrix,\r\n getRotationQuat,\r\n getRotationWorld,\r\n getRotationWorldDegrees,\r\n getRotationWorldRadians,\r\n getRotationWorldMatrix,\r\n getRotationWorldQuat,\r\n getRotationLocal,\r\n getRotationLocalDegrees,\r\n getRotationLocalRadians,\r\n getRotationLocalMatrix,\r\n getRotationLocalQuat,\r\n getScale,\r\n getScaleWorld,\r\n getScaleLocal,\r\n getTransform,\r\n getTransformMatrix,\r\n getTransformQuat,\r\n getTransformWorld,\r\n getTransformWorldMatrix,\r\n getTransformWorldQuat,\r\n getTransformLocal,\r\n getTransformLocalMatrix,\r\n getTransformLocalQuat,\r\n getAxes,\r\n getAxesWorld,\r\n getAxesLocal,\r\n getForward,\r\n getForwardWorld,\r\n getForwardLocal,\r\n getBackward,\r\n getBackwardWorld,\r\n getBackwardLocal,\r\n getUp,\r\n getUpWorld,\r\n getUpLocal,\r\n getDown,\r\n getDownWorld,\r\n getDownLocal,\r\n getLeft,\r\n getLeftWorld,\r\n getLeftLocal,\r\n getRight,\r\n getRightWorld,\r\n getRightLocal,\r\n setPosition,\r\n setPositionWorld,\r\n setPositionLocal,\r\n setRotation,\r\n setRotationDegrees,\r\n setRotationRadians,\r\n setRotationMatrix,\r\n setRotationQuat,\r\n setRotationWorld,\r\n setRotationWorldDegrees,\r\n setRotationWorldRadians,\r\n setRotationWorldMatrix,\r\n setRotationWorldQuat,\r\n setRotationLocal,\r\n setRotationLocalDegrees,\r\n setRotationLocalRadians,\r\n setRotationLocalMatrix,\r\n setRotationLocalQuat,\r\n setScale,\r\n setScaleWorld,\r\n setScaleLocal,\r\n setAxes,\r\n setAxesWorld,\r\n setAxesLocal,\r\n setForward,\r\n setForwardWorld,\r\n setForwardLocal,\r\n setBackward,\r\n setBackwardWorld,\r\n setBackwardLocal,\r\n setUp,\r\n setUpWorld,\r\n setUpLocal,\r\n setDown,\r\n setDownWorld,\r\n setDownLocal,\r\n setLeft,\r\n setLeftWorld,\r\n setLeftLocal,\r\n setRight,\r\n setRightWorld,\r\n setRightLocal,\r\n setTransform,\r\n setTransformMatrix,\r\n setTransformQuat,\r\n setTransformWorld,\r\n setTransformWorldMatrix,\r\n setTransformWorldQuat,\r\n setTransformLocal,\r\n setTransformLocalMatrix,\r\n setTransformLocalQuat,\r\n resetPosition,\r\n resetPositionWorld,\r\n resetPositionLocal,\r\n resetRotation,\r\n resetRotationWorld,\r\n resetRotationLocal,\r\n resetScale,\r\n resetScaleWorld,\r\n resetScaleLocal,\r\n resetTransform,\r\n resetTransformWorld,\r\n resetTransformLocal,\r\n translate,\r\n translateWorld,\r\n translateLocal,\r\n translateObject,\r\n translateAxis,\r\n translateAxisWorld,\r\n translateAxisLocal,\r\n translateAxisObject,\r\n rotate,\r\n rotateDegrees,\r\n rotateRadians,\r\n rotateMatrix,\r\n rotateQuat,\r\n rotateWorld,\r\n rotateWorldDegrees,\r\n rotateWorldRadians,\r\n rotateWorldMatrix,\r\n rotateWorldQuat,\r\n rotateLocal,\r\n rotateLocalDegrees,\r\n rotateLocalRadians,\r\n rotateLocalMatrix,\r\n rotateLocalQuat,\r\n rotateObject,\r\n rotateObjectDegrees,\r\n rotateObjectRadians,\r\n rotateObjectMatrix,\r\n rotateObjectQuat,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n rotateAxisWorld,\r\n rotateAxisWorldDegrees,\r\n rotateAxisWorldRadians,\r\n rotateAxisLocal,\r\n rotateAxisLocalDegrees,\r\n rotateAxisLocalRadians,\r\n rotateAxisObject,\r\n rotateAxisObjectDegrees,\r\n rotateAxisObjectRadians,\r\n rotateAround,\r\n rotateAroundDegrees,\r\n rotateAroundRadians,\r\n rotateAroundMatrix,\r\n rotateAroundQuat,\r\n rotateAroundWorld,\r\n rotateAroundWorldDegrees,\r\n rotateAroundWorldRadians,\r\n rotateAroundWorldMatrix,\r\n rotateAroundWorldQuat,\r\n rotateAroundLocal,\r\n rotateAroundLocalDegrees,\r\n rotateAroundLocalRadians,\r\n rotateAroundLocalMatrix,\r\n rotateAroundLocalQuat,\r\n rotateAroundObject,\r\n rotateAroundObjectDegrees,\r\n rotateAroundObjectRadians,\r\n rotateAroundObjectMatrix,\r\n rotateAroundObjectQuat,\r\n rotateAroundAxis,\r\n rotateAroundAxisDegrees,\r\n rotateAroundAxisRadians,\r\n rotateAroundAxisWorld,\r\n rotateAroundAxisWorldDegrees,\r\n rotateAroundAxisWorldRadians,\r\n rotateAroundAxisLocal,\r\n rotateAroundAxisLocalDegrees,\r\n rotateAroundAxisLocalRadians,\r\n rotateAroundAxisObject,\r\n rotateAroundAxisObjectDegrees,\r\n rotateAroundAxisObjectRadians,\r\n scaleObject,\r\n lookAt,\r\n lookAtWorld,\r\n lookAtLocal,\r\n lookTo,\r\n lookToWorld,\r\n lookToLocal,\r\n convertPositionObjectToWorld,\r\n convertDirectionObjectToWorld,\r\n convertPositionWorldToObject,\r\n convertDirectionWorldToObject,\r\n convertPositionLocalToWorld,\r\n convertDirectionLocalToWorld,\r\n convertPositionWorldToLocal,\r\n convertDirectionWorldToLocal,\r\n convertPositionObjectToLocal,\r\n convertDirectionObjectToLocal,\r\n convertPositionLocalToObject,\r\n convertDirectionLocalToObject,\r\n convertTransformObjectToWorld,\r\n convertTransformObjectToWorldMatrix,\r\n convertTransformObjectToWorldQuat,\r\n convertTransformWorldToObject,\r\n convertTransformWorldToObjectMatrix,\r\n convertTransformWorldToObjectQuat,\r\n convertTransformLocalToWorld,\r\n convertTransformLocalToWorldMatrix,\r\n convertTransformLocalToWorldQuat,\r\n convertTransformWorldToLocal,\r\n convertTransformWorldToLocalMatrix,\r\n convertTransformWorldToLocalQuat,\r\n convertTransformObjectToLocal,\r\n convertTransformObjectToLocalMatrix,\r\n convertTransformObjectToLocalQuat,\r\n convertTransformLocalToObject,\r\n convertTransformLocalToObjectMatrix,\r\n convertTransformLocalToObjectQuat,\r\n setParent,\r\n getParent,\r\n addComponent,\r\n getComponent,\r\n getComponentSelf,\r\n getComponentHierarchy,\r\n getComponentHierarchyBreadth,\r\n getComponentHierarchyDepth,\r\n getComponentDescendants,\r\n getComponentDescendantsBreadth,\r\n getComponentDescendantsDepth,\r\n getComponentChildren,\r\n getComponents,\r\n getComponentsSelf,\r\n getComponentsHierarchy,\r\n getComponentsHierarchyBreadth,\r\n getComponentsHierarchyDepth,\r\n getComponentsDescendants,\r\n getComponentsDescendantsBreadth,\r\n getComponentsDescendantsDepth,\r\n getComponentsChildren,\r\n setActive,\r\n setActiveSelf,\r\n setActiveHierarchy,\r\n setActiveHierarchyBreadth,\r\n setActiveHierarchyDepth,\r\n setActiveDescendants,\r\n setActiveDescendantsBreadth,\r\n setActiveDescendantsDepth,\r\n setActiveChildren,\r\n hasUniformScale,\r\n hasUniformScaleWorld,\r\n hasUniformScaleLocal,\r\n clone,\r\n isCloneable,\r\n toString,\r\n toStringExtended,\r\n toStringCompact,\r\n getObjectByName,\r\n getObjectByNameHierarchy,\r\n getObjectByNameHierarchyBreadth,\r\n getObjectByNameHierarchyDepth,\r\n getObjectByNameDescendants,\r\n getObjectByNameDescendantsBreadth,\r\n getObjectByNameDescendantsDepth,\r\n getObjectByNameChildren,\r\n getObjectsByName,\r\n getObjectsByNameHierarchy,\r\n getObjectsByNameHierarchyBreadth,\r\n getObjectsByNameHierarchyDepth,\r\n getObjectsByNameDescendants,\r\n getObjectsByNameDescendantsBreadth,\r\n getObjectsByNameDescendantsDepth,\r\n getObjectsByNameChildren,\r\n getObjectByID,\r\n getObjectByIDHierarchy,\r\n getObjectByIDHierarchyBreadth,\r\n getObjectByIDHierarchyDepth,\r\n getObjectByIDDescendants,\r\n getObjectByIDDescendantsBreadth,\r\n getObjectByIDDescendantsDepth,\r\n getObjectByIDChildren,\r\n getHierarchy,\r\n getHierarchyBreadth,\r\n getHierarchyDepth,\r\n getDescendants,\r\n getDescendantsBreadth,\r\n getDescendantsDepth,\r\n getChildren,\r\n getSelf,\r\n addObject,\r\n getName,\r\n setName,\r\n getEngine,\r\n getID,\r\n markDirty,\r\n isTransformChanged,\r\n equals,\r\n destroy,\r\n reserveObjects,\r\n reserveObjectsSelf,\r\n reserveObjectsHierarchy,\r\n reserveObjectsDescendants,\r\n reserveObjectsChildren,\r\n getComponentsAmountMap,\r\n getComponentsAmountMapSelf,\r\n getComponentsAmountMapHierarchy,\r\n getComponentsAmountMapDescendants,\r\n getComponentsAmountMapChildren,\r\n getComponentObjects,\r\n getComponentsObjects,\r\n setActiveObjects,\r\n getObjectByNameObjects,\r\n getObjectsByNameObjects,\r\n getObjectByIDObjects,\r\n getObjectsByIDObjects,\r\n wrapObject\r\n} as const;\r\n\r\n\r\n\r\nfunction _reserveObjects(count: number, componentsAmountMap: Readonly>, scene: Scene): void {\r\n if (componentsAmountMap.has(\"object\")) {\r\n const objectsToReserve = componentsAmountMap.get(\"object\")! * count;\r\n\r\n const componentsToReserve: Record = {};\r\n for (const [componentName, componentCount] of componentsAmountMap.entries()) {\r\n if (componentName != \"object\") {\r\n componentsToReserve[componentName] = componentCount * count;\r\n }\r\n }\r\n\r\n scene.reserveObjects(objectsToReserve, componentsToReserve);\r\n }\r\n}", "import { ArrayUtils } from \"./array/array_utils.js\";\r\n\r\nexport function getObjectPrototypes(object) {\r\n let prototypes = [];\r\n\r\n prototypes.push(object);\r\n\r\n let objectProto = Object.getPrototypeOf(object);\r\n while (objectProto != null) {\r\n ArrayUtils.pushUnique(prototypes, objectProto);\r\n objectProto = Object.getPrototypeOf(objectProto);\r\n }\r\n\r\n let prototypesToCheck = [object];\r\n while (prototypesToCheck.length > 0) {\r\n let prototypeToCheck = prototypesToCheck.shift();\r\n if (prototypeToCheck != null) {\r\n ArrayUtils.pushUnique(prototypes, prototypeToCheck);\r\n\r\n ArrayUtils.pushUnique(prototypesToCheck, Object.getPrototypeOf(prototypeToCheck));\r\n\r\n try {\r\n ArrayUtils.pushUnique(prototypesToCheck, prototypeToCheck.prototype);\r\n } catch (error) {\r\n // Ignored\r\n }\r\n }\r\n }\r\n\r\n return prototypes;\r\n}\r\n\r\nexport function getObjectPropertyNames(object) {\r\n let propertyNames = [];\r\n\r\n let prototypes = JSUtils.getObjectPrototypes(object);\r\n\r\n for (let prototype of prototypes) {\r\n if (prototype != null) {\r\n let ownPropertyNames = Object.getOwnPropertyNames(prototype);\r\n for (let ownPropertyName of ownPropertyNames) {\r\n ArrayUtils.pushUnique(propertyNames, ownPropertyName);\r\n }\r\n }\r\n }\r\n\r\n return propertyNames;\r\n}\r\n\r\nexport function getObjectPropertyDescriptor(object, propertyName) {\r\n let propertyDescriptor = null;\r\n\r\n let propertyParent = JSUtils.getObjectPropertyOwnParent(object, propertyName);\r\n\r\n if (propertyParent != null) {\r\n propertyDescriptor = Object.getOwnPropertyDescriptor(propertyParent, propertyName);\r\n }\r\n\r\n return propertyDescriptor;\r\n}\r\n\r\nexport function getObjectProperty(object, propertyName) {\r\n let property = undefined;\r\n\r\n let propertyDescriptor = JSUtils.getObjectPropertyDescriptor(object, propertyName);\r\n if (propertyDescriptor != null) {\r\n if (propertyDescriptor.get != null) {\r\n property = propertyDescriptor.get.bind(object)();\r\n } else {\r\n property = propertyDescriptor.value;\r\n }\r\n }\r\n\r\n return property;\r\n}\r\n\r\nexport function setObjectProperty(valueToSet, object, propertyName) {\r\n let propertyDescriptor = JSUtils.getObjectPropertyDescriptor(object, propertyName);\r\n\r\n let setUsed = false;\r\n if (propertyDescriptor != null) {\r\n if (propertyDescriptor.set != null) {\r\n setUsed = true;\r\n\r\n propertyDescriptor.set.bind(object)(valueToSet);\r\n }\r\n }\r\n\r\n if (!setUsed) {\r\n let propertyParent = JSUtils.getObjectPropertyOwnParent(object, propertyName);\r\n if (propertyParent == null) {\r\n propertyParent = object;\r\n }\r\n\r\n Object.defineProperty(propertyParent, propertyName, {\r\n value: valueToSet\r\n });\r\n }\r\n}\r\n\r\nexport function getObjectPropertyOwnParent(object, propertyName) {\r\n let parent = null;\r\n\r\n let parents = JSUtils.getObjectPropertyOwnParents(object, propertyName);\r\n if (parents.length > 0) {\r\n parent = parents[0];\r\n }\r\n\r\n return parent;\r\n}\r\n\r\nexport function getObjectPropertyOwnParents(object, propertyName) {\r\n let parents = [];\r\n\r\n let possibleParents = JSUtils.getObjectPrototypes(object);\r\n\r\n for (let possibleParent of possibleParents) {\r\n let propertyNames = Object.getOwnPropertyNames(possibleParent);\r\n if (ArrayUtils.hasEqual(propertyNames, propertyName)) {\r\n parents.push(possibleParent);\r\n }\r\n }\r\n\r\n return parents;\r\n}\r\n\r\nexport function getObjectFromPath(path, pathStartObject = window) {\r\n let object = null;\r\n\r\n let objectName = JSUtils.getObjectNameFromPath(path);\r\n if (objectName != null) {\r\n object = JSUtils.getObjectProperty(JSUtils.getObjectParentFromPath(path, pathStartObject), objectName);\r\n }\r\n\r\n return object;\r\n}\r\n\r\nexport function getObjectNameFromPath(path) {\r\n let objectName = null;\r\n\r\n if (path != null) {\r\n let pathSplit = path.split(\".\");\r\n if (pathSplit.length > 0) {\r\n objectName = pathSplit[pathSplit.length - 1];\r\n }\r\n }\r\n\r\n return objectName;\r\n}\r\n\r\nexport function getObjectParentFromPath(path, pathStartObject = window) {\r\n let pathSplit = path.split(\".\");\r\n let currentParent = pathStartObject;\r\n for (let i = 0; i < pathSplit.length - 1; i++) {\r\n currentParent = JSUtils.getObjectProperty(currentParent, pathSplit[i]);\r\n }\r\n\r\n return currentParent;\r\n}\r\n\r\nexport function overwriteObjectProperty(newProperty, object, propertyName, overwriteOnOwnParent = true, jsObjectFunctionsSpecialOverwrite = false, logEnabled = false) {\r\n let success = false;\r\n\r\n try {\r\n let propertyOwnParent = JSUtils.getObjectPropertyOwnParent(object, propertyName);\r\n if (propertyOwnParent != null) {\r\n let originalPropertyDescriptor = Object.getOwnPropertyDescriptor(propertyOwnParent, propertyName);\r\n\r\n if (originalPropertyDescriptor != null) {\r\n let originalProperty = JSUtils.getObjectProperty(propertyOwnParent, propertyName);\r\n JSUtils.copyObjectProperties(originalProperty, newProperty, true, jsObjectFunctionsSpecialOverwrite, logEnabled);\r\n\r\n let overwriteTarget = object;\r\n if (overwriteOnOwnParent) {\r\n overwriteTarget = propertyOwnParent;\r\n }\r\n\r\n Object.defineProperty(overwriteTarget, propertyName, {\r\n value: newProperty,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n writable: originalPropertyDescriptor.writable,\r\n configurable: originalPropertyDescriptor.configurable\r\n });\r\n\r\n success = true;\r\n } else {\r\n Object.defineProperty(object, propertyName, {\r\n value: newProperty\r\n });\r\n\r\n success = true;\r\n }\r\n } else {\r\n Object.defineProperty(object, propertyName, {\r\n value: newProperty\r\n });\r\n\r\n success = true;\r\n }\r\n } catch (error) {\r\n if (logEnabled) {\r\n console.error(\"Property:\", propertyName, \"of:\", object, \"can't be overwritten.\");\r\n }\r\n }\r\n\r\n return success;\r\n}\r\n\r\nexport function copyObjectProperties(fromObject, toObject, cleanCopy = false, jsObjectFunctionsSpecialCopy = false, logEnabled = false) {\r\n if (fromObject != null) {\r\n if (cleanCopy) {\r\n JSUtils.cleanObjectProperties(toObject);\r\n }\r\n\r\n Object.setPrototypeOf(toObject, Object.getPrototypeOf(fromObject));\r\n\r\n let fromObjectPropertyNames = Object.getOwnPropertyNames(fromObject);\r\n for (let fromObjectPropertyName of fromObjectPropertyNames) {\r\n try {\r\n let fromObjectPropertyDescriptor = Object.getOwnPropertyDescriptor(fromObject, fromObjectPropertyName);\r\n\r\n Object.defineProperty(toObject, fromObjectPropertyName, {\r\n value: fromObjectPropertyDescriptor.value,\r\n enumerable: fromObjectPropertyDescriptor.enumerable,\r\n writable: fromObjectPropertyDescriptor.writable,\r\n configurable: fromObjectPropertyDescriptor.configurable\r\n });\r\n } catch (error) {\r\n if (logEnabled) {\r\n console.error(\"Property:\", fromObjectPropertyName, \"of:\", fromObject.name, \"can't be overwritten.\");\r\n }\r\n }\r\n }\r\n\r\n if (jsObjectFunctionsSpecialCopy) {\r\n _jsObjectFunctionsSpecialCopy(fromObject, toObject);\r\n }\r\n }\r\n}\r\n\r\nexport function cleanObjectProperties(object) {\r\n let objectNames = Object.getOwnPropertyNames(object);\r\n ArrayUtils.pushUnique(objectNames, \"__proto__\");\r\n\r\n for (let objectName of objectNames) {\r\n try {\r\n Object.defineProperty(object, objectName, {\r\n value: undefined\r\n });\r\n } catch (error) {\r\n // Ignored\r\n }\r\n\r\n try {\r\n delete object[objectName];\r\n } catch (error) {\r\n // Ignored\r\n }\r\n }\r\n\r\n Object.setPrototypeOf(object, null);\r\n}\r\n\r\nexport function doesObjectPropertyUseAccessors(object, propertyName) {\r\n let propertyUseAccessors = false;\r\n\r\n let propertyDescriptor = JSUtils.getObjectPropertyDescriptor(object, propertyName);\r\n\r\n if (propertyDescriptor != null && (propertyDescriptor.get != null || propertyDescriptor.set != null)) {\r\n propertyUseAccessors = true;\r\n }\r\n\r\n return propertyUseAccessors;\r\n}\r\n\r\nexport function isFunctionByName(functionParent, functionName) {\r\n let isFunctionResult = false;\r\n\r\n let functionProperty = JSUtils.getObjectProperty(functionParent, functionName);\r\n if (functionProperty != null) {\r\n isFunctionResult = JSUtils.isFunction(functionProperty);\r\n }\r\n\r\n return isFunctionResult;\r\n}\r\n\r\nexport function isClassByName(classParent, className) {\r\n let isClassResult = false;\r\n\r\n let classProperty = JSUtils.getObjectProperty(classParent, className);\r\n if (classProperty != null) {\r\n isClassResult = JSUtils.isClass(classProperty);\r\n }\r\n\r\n return isClassResult;\r\n}\r\n\r\nexport function isObjectByName(objectParent, objectName) {\r\n let isObjectResult = false;\r\n\r\n let objectProperty = JSUtils.getObjectProperty(objectParent, objectName);\r\n if (objectProperty != null) {\r\n isObjectResult = JSUtils.isObject(objectProperty);\r\n }\r\n\r\n return isObjectResult;\r\n}\r\n\r\nexport function isFunction(property) {\r\n return typeof property == \"function\" && !JSUtils.isClass(property);\r\n}\r\n\r\nexport let isClass = function () {\r\n let checkClassRegex = new RegExp(\"^class\");\r\n return function isClass(property) {\r\n return typeof property == \"function\" &&\r\n property.prototype != null && typeof property.prototype.constructor == \"function\" &&\r\n property.toString != null && typeof property.toString == \"function\" && property.toString()?.match(checkClassRegex) != null;\r\n };\r\n}();\r\n\r\nexport function isObject(property) {\r\n return typeof property == \"object\";\r\n}\r\n\r\nexport let JSUtils = {\r\n getObjectPrototypes,\r\n getObjectPropertyNames,\r\n getObjectPropertyDescriptor,\r\n getObjectProperty,\r\n setObjectProperty,\r\n getObjectPropertyOwnParent,\r\n getObjectPropertyOwnParents,\r\n getObjectFromPath,\r\n getObjectNameFromPath,\r\n getObjectParentFromPath,\r\n overwriteObjectProperty,\r\n copyObjectProperties,\r\n cleanObjectProperties,\r\n doesObjectPropertyUseAccessors,\r\n isFunctionByName,\r\n isClassByName,\r\n isObjectByName,\r\n isFunction,\r\n isClass,\r\n isObject\r\n};\r\n\r\n\r\n\r\nfunction _jsObjectFunctionsSpecialCopy(fromObject, toObject) {\r\n try {\r\n if (typeof toObject == \"function\" && typeof fromObject == \"function\") {\r\n let functionsToOverwrite = [\"toString\", \"toLocaleString\", \"valueOf\"];\r\n\r\n for (let functionToOverwrite of functionsToOverwrite) {\r\n let propertyDescriptorToOverwrite = JSUtils.getObjectPropertyDescriptor(fromObject, functionToOverwrite);\r\n\r\n if (propertyDescriptorToOverwrite != null && propertyDescriptorToOverwrite.value != null &&\r\n (propertyDescriptorToOverwrite.value == Object[functionToOverwrite])) {\r\n let valueToReturn = Object[functionToOverwrite].bind(fromObject)();\r\n let overwrittenFunction = function () { return valueToReturn; };\r\n JSUtils.overwriteObjectProperty(overwrittenFunction, toObject, functionToOverwrite, false, false);\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // Ignored\r\n }\r\n}", "import { JSUtils } from \"../../cauldron/utils/js_utils.js\";\r\n\r\nexport function injectProperties(fromReference: Record, toReference: object, enumerable: boolean = true, writable: boolean = true, configurable: boolean = true, keepOriginalDescriptorAttributes: boolean = true, bindThisAsFirstParam: boolean = false, prefix?: string, functionNamesToExclude: Readonly = []): void {\r\n const ownPropertyNames = Object.getOwnPropertyNames(fromReference);\r\n for (const ownPropertyName of ownPropertyNames) {\r\n if (functionNamesToExclude.includes(ownPropertyName)) continue;\r\n\r\n let enumerableToUse: boolean | undefined = enumerable;\r\n let writableToUse: boolean | undefined = writable;\r\n let configurableToUse: boolean | undefined = configurable;\r\n\r\n if (keepOriginalDescriptorAttributes) {\r\n const originalDescriptor = Object.getOwnPropertyDescriptor(toReference, ownPropertyName);\r\n if (originalDescriptor != null) {\r\n enumerableToUse = originalDescriptor.enumerable;\r\n writableToUse = originalDescriptor.writable;\r\n configurableToUse = originalDescriptor.configurable;\r\n }\r\n }\r\n\r\n let adjustedPropertyName = ownPropertyName;\r\n if (prefix != null) {\r\n if (adjustedPropertyName.length > 0 && adjustedPropertyName[0] == adjustedPropertyName[0].toUpperCase()) {\r\n adjustedPropertyName = prefix.toUpperCase() + adjustedPropertyName;\r\n } else {\r\n adjustedPropertyName = prefix + adjustedPropertyName;\r\n }\r\n }\r\n\r\n const propertyDescriptor = Object.getOwnPropertyDescriptor(fromReference, ownPropertyName);\r\n const useAccessors = propertyDescriptor != null && (propertyDescriptor.get != null || propertyDescriptor.set != null);\r\n\r\n if (!useAccessors) {\r\n let adjustedProperyValue = fromReference[ownPropertyName];\r\n\r\n if (bindThisAsFirstParam && JSUtils.isFunction(adjustedProperyValue)) {\r\n const originalFunction = fromReference[ownPropertyName];\r\n adjustedProperyValue = function (this: any, ...args: any[]) {\r\n return originalFunction(this, ...args);\r\n };\r\n\r\n Object.defineProperty(adjustedProperyValue, \"name\", {\r\n value: adjustedPropertyName\r\n });\r\n }\r\n\r\n Object.defineProperty(toReference, adjustedPropertyName, {\r\n value: adjustedProperyValue,\r\n enumerable: enumerableToUse,\r\n writable: writableToUse,\r\n configurable: configurableToUse\r\n });\r\n } else {\r\n Object.defineProperty(toReference, adjustedPropertyName, {\r\n get: propertyDescriptor.get,\r\n set: propertyDescriptor.set,\r\n enumerable: enumerableToUse,\r\n configurable: configurableToUse\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const PluginUtils = {\r\n injectProperties\r\n} as const;", "export const ARRAY_LIKE_CLASSES = [\r\n Array,\r\n Uint8ClampedArray,\r\n Uint8Array,\r\n Uint16Array,\r\n Uint32Array,\r\n Int8Array,\r\n Int16Array,\r\n Int32Array,\r\n Float32Array,\r\n Float64Array\r\n] as const;\r\n\r\nexport const ArrayExtensionUtils = {\r\n ARRAY_LIKE_CLASSES\r\n} as const;", "import { ArrayLike } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { ArrayUtils } from \"../../../../cauldron/utils/array/array_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./array_type_extension.js\";\r\n\r\nexport function initArrayExtension(): void {\r\n _initArrayLikeExtensionProtoypes();\r\n _initArrayExtensionProtoype();\r\n}\r\n\r\nfunction _initArrayLikeExtensionProtoypes(): void {\r\n\r\n const arrayLikeExtension: Record = {};\r\n\r\n arrayLikeExtension.pp_copy = function pp_copy, T>(this: ArrayType, array: Readonly>, copyCallback?: (arrayElement: T, thisElement: T) => T): ArrayType {\r\n return ArrayUtils.copy(array, this, copyCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_clone = function pp_clone, T>(this: Readonly, cloneCallback?: (elementToClone: T) => T): ArrayType {\r\n return ArrayUtils.clone(this, cloneCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_equals = function pp_equals(this: Readonly>, array: Readonly>, elementsEqualCallback?: (thisElement: T, arrayElement: T) => boolean): boolean {\r\n return ArrayUtils.equals(this, array, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_first = function pp_first(this: Readonly>): T | undefined {\r\n return ArrayUtils.first(this);\r\n };\r\n\r\n arrayLikeExtension.pp_last = function pp_last(this: Readonly>): T | undefined {\r\n return ArrayUtils.last(this);\r\n };\r\n\r\n arrayLikeExtension.pp_has = function pp_has(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): boolean {\r\n return ArrayUtils.has(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_hasEqual = function pp_hasEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): boolean {\r\n return ArrayUtils.hasEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_find = function pp_find(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n return ArrayUtils.find(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findIndex = function pp_findIndex(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number {\r\n return ArrayUtils.findIndex(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAll = function pp_findAll(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n return ArrayUtils.findAll(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAllIndexes = function pp_findAllIndexes(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number[] {\r\n return ArrayUtils.findAllIndexes(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findEqual = function pp_findEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T | undefined {\r\n return ArrayUtils.findEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAllEqual = function pp_findAllEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T[] {\r\n return ArrayUtils.findAllEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_findIndexEqual = function pp_findIndexEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number {\r\n return ArrayUtils.findIndexEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAllIndexesEqual = function pp_findAllIndexesEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number[] {\r\n return ArrayUtils.findAllIndexesEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(arrayLikeExtension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}\r\n\r\nfunction _initArrayExtensionProtoype(): void {\r\n\r\n const arrayExtension: Record = {};\r\n\r\n arrayExtension.pp_remove = function pp_remove(this: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n return ArrayUtils.remove(this, callback);\r\n };\r\n\r\n arrayExtension.pp_removeIndex = function pp_removeIndex(this: T[], index: number): T | undefined {\r\n return ArrayUtils.removeIndex(this, index);\r\n };\r\n\r\n arrayExtension.pp_removeAll = function pp_removeAll(this: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n return ArrayUtils.removeAll(this, callback);\r\n };\r\n\r\n arrayExtension.pp_removeAllIndexes = function pp_removeAllIndexes(this: T[], indexes: number[]): T[] {\r\n return ArrayUtils.removeAllIndexes(this, indexes);\r\n };\r\n\r\n arrayExtension.pp_removeEqual = function pp_removeEqual(this: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T | undefined {\r\n return ArrayUtils.removeEqual(this, elementToRemove, elementsEqualCallback);\r\n };\r\n\r\n arrayExtension.pp_removeAllEqual = function pp_removeAllEqual(this: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T[] {\r\n return ArrayUtils.removeAllEqual(this, elementToRemove, elementsEqualCallback);\r\n };\r\n\r\n arrayExtension.pp_clear = function pp_clear(this: T[]): T[] {\r\n return ArrayUtils.clear(this);\r\n };\r\n\r\n arrayExtension.pp_pushUnique = function pp_pushUnique(this: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n return ArrayUtils.pushUnique(this, elementToAdd, elementsEqualCallback);\r\n };\r\n\r\n arrayExtension.pp_unshiftUnique = function pp_unshiftUnique(this: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n return ArrayUtils.unshiftUnique(this, elementToAdd, elementsEqualCallback);\r\n };\r\n\r\n PluginUtils.injectProperties(arrayExtension, Array.prototype, false, true, true);\r\n}", "/*\r\n * How to use\r\n * \r\n * Warning: The extension is a WIP so not all the functions are available for all kinds of vector.\r\n * \r\n * By default rotations are in Degrees and transforms are Matrix 4 (and not Quat 2) \r\n * For functions that work with rotations, Matrix means Matrix 3 and Quat means Quat\r\n * For functions that work with transforms, Matrix means Matrix 4 and Quat means Quat 2\r\n * \r\n * For rotations u can add a suffix like Degrees/Radians/Quat/Matrix to use a specific version, example:\r\n * - vec3_rotateAroundRadians\r\n * - vec3_degreesAddRotationDegrees\r\n * \r\n * For transform u can add a suffix like Quat/Matrix to use a specific version, example:\r\n * - vec3_convertPositionToWorldMatrix\r\n * - vec3_convertDirectionToWorldQuat\r\n * \r\n * Some vec3 functions let u add a prefix to specify if the vec3 represent a rotation in degrees or radians, where degrees is the default:\r\n * - vec3_toQuat\r\n * - vec3_degreesToQuat\r\n * - vec3_radiansToQuat\r\n * - vec3_degreesAddRotation\r\n * \r\n * Rotation operations return a rotation of the same kind of the starting variable:\r\n * - vec3_degreesAddRotationQuat -> returns a rotation in degrees\r\n * - quat_addRotationDegrees -> returns a rotation in quat\r\n * \r\n * The functions leave u the choice of forwarding an out parameter or just get the return value, example:\r\n * - let quat = this.vec3_toQuat()\r\n * - this.vec3_toQuat(quat)\r\n * - the out parameter is always the last one\r\n * \r\n * List of functions:\r\n * Notes:\r\n * - If a group of functions starts with ○ it means it modifies the variable itself\r\n * - The suffixes (like Matrix or Radians) or prefixes (like degrees) are omitted \r\n * \r\n * CREATION (u can call these functions without any object):\r\n * - vec2_create\r\n * - vec3_create\r\n * - vec4_create\r\n * - quat_create\r\n * - quat2_create\r\n * - mat3_create\r\n * - mat4_create \r\n * \r\n * GENERIC VECTOR (array with only numbers):\r\n * ° vec_zero\r\n * - vec_isZero\r\n * - vec_scale\r\n * - vec_round / vec_floor / vec_ceil / vec_clamp\r\n * - vec_log / vec_error / vec_warn \r\n * - vec_equals \r\n * \r\n * VECTOR 2:\r\n * ○ vec2_set / vec2_copy / vec2_zero\r\n * - vec2_clone \r\n * - vec2_normalize\r\n * - vec2_length\r\n * - vec2_isZero\r\n * \r\n * VECTOR 3:\r\n * ○ vec3_set / vec3_copy / vec3_zero\r\n * - vec3_clone \r\n * - vec3_normalize / vec3_negate\r\n * - vec3_isNormalized / vec3_isZero\r\n * - vec3_length / vec3_lengthSquared / vec3_lengthSigned\r\n * - vec3_distance / vec3_distanceSquared\r\n * - vec3_add / vec3_sub / vec3_mul / vec3_div / vec3_scale / vec3_dot\r\n * - vec3_equals\r\n * - vec3_transformQuat / vec3_transformMat3 / vec3_transformMat4\r\n * - vec3_componentAlongAxis / vec3_removeComponentAlongAxis / vec3_copyComponentAlongAxis / vec3_valueAlongAxis \r\n * - vec3_isConcordant\r\n * - vec3_isFartherAlongAxis\r\n * - vec3_isToTheRight\r\n * - vec3_isOnAxis\r\n * - vec3_isOnPlane\r\n * - vec3_signTo\r\n * - vec3_projectOnAxis / vec3_projectOnAxisAlongAxis\r\n * - vec3_projectOnPlane / vec3_projectOnPlaneAlongAxis\r\n * - vec3_convertPositionToWorld / vec3_convertPositionToLocal \r\n * - vec3_convertDirectionToWorld / vec3_convertDirectionToLocal \r\n * - vec3_angle / vec3_angleSigned / vec3_anglePivoted\r\n * - vec3_rotate / vec3_rotateAxis / vec3_rotateAround / vec3_rotateAroundAxis\r\n * - vec3_rotationTo / vec3_rotationToPivoted\r\n * - vec3_toRadians / vec3_toDegrees / vec3_toQuat / vec3_toMatrix\r\n * - vec3_addRotation \r\n * - vec3_lerp / vec3_interpolate \r\n * - vec3_perpendicularRandom \r\n * \r\n * VECTOR 4:\r\n * ○ vec4_set / vec4_copy\r\n * - vec4_clone \r\n * \r\n * QUAT:\r\n * ○ quat_set / quat_copy / quat_identity\r\n * - quat_clone \r\n * - quat_normalize / quat_invert / quat_conjugate\r\n * - quat_isNormalized\r\n * - quat_length / quat_lengthSquared\r\n * - quat_mul\r\n * - quat_getAxis / quat_getAngle / quat_getAxisScaled\r\n * - quat_getAxes / quat_getRight / quat_getUp / quat_getForward / quat_getLeft / quat_getDown / quat_getBackward\r\n * ○ quat_setAxes / quat_setRight / quat_setUp / quat_setForward / quat_setLeft / quat_setDown / quat_setBackward\r\n * - quat_toWorld / quat_toLocal\r\n * - quat_rotate / quat_rotateAxis \r\n * - quat_rotationTo \r\n * - quat_rotationAroundAxis \r\n * - quat_getTwist / quat_getSwing / quat_getTwistFromSwing / quat_getSwingFromTwist / quat_fromTwistSwing\r\n * ○ quat_fromRadians / quat_fromDegrees / quat_fromAxis / quat_fromAxes\r\n * - quat_toRadians / quat_toDegrees / quat_toMatrix\r\n * - quat_addRotation / quat_subRotation\r\n * - quat_lerp / quat_interpolate / quat_slerp / quat_sinterpolate\r\n * \r\n * QUAT 2:\r\n * ○ quat2_set / quat2_copy / quat2_identity\r\n * - quat2_normalize / quat2_invert / quat2_conjugate\r\n * - quat2_isNormalized\r\n * - quat2_length / quat2_lengthSquared\r\n * - quat2_mul\r\n * - quat2_getPosition / quat2_getRotation\r\n * ○ quat2_setPosition / quat2_setRotation / quat2_setPositionRotation\r\n * - quat2_getAxes / quat2_getRight / quat2_getUp / quat2_getForward / quat2_getLeft / quat2_getDown / quat2_getBackward\r\n * - quat2_toWorld / quat2_toLocal\r\n * - quat2_rotateAxis \r\n * - quat2_toMatrix\r\n * ○ quat2_fromMatrix\r\n * - quat2_lerp / quat2_interpolate / quat2_slerp / quat2_sinterpolate\r\n * \r\n * MATRIX 3:\r\n * ○ mat3_set\r\n * - mat3_toDegrees / mat3_toRadians / mat3_toQuat\r\n * - mat3_fromAxes\r\n * \r\n * MATRIX 4:\r\n * ○ mat4_set / mat4_copy / mat4_identity\r\n * - mat4_clone\r\n * - mat4_invert\r\n * - mat_mul / mat4_scale\r\n * - mat4_getPosition / mat4_getRotation / mat4_getScale\r\n * ○ mat4_setPosition / mat4_setRotation / mat4_setScale\r\n * ○ mat4_setPositionRotation / mat4_setPositionRotationScale\r\n * - mat4_getAxes / mat4_getRight / mat4_getUp / mat4_getForward / mat4_getLeft / mat4_getDown / mat4_getBackward\r\n * - mat4_toWorld / mat4_toLocal\r\n * - mat4_hasUniformScale\r\n * - mat4_toQuat\r\n * ○ mat4_fromQuat\r\n*/\r\n\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../../../cauldron/utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../../../cauldron/utils/array/quat_utils.js\";\r\nimport { Vec3Utils } from \"../../../../cauldron/utils/array/vec3_utils.js\";\r\nimport { Vec4Utils } from \"../../../../cauldron/utils/array/vec4_utils.js\";\r\nimport { EasingFunction, MathUtils } from \"../../../../cauldron/utils/math_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initArrayExtensionLegacy() {\r\n _initArrayExtensionLegacyProtoype();\r\n}\r\n\r\nexport function _initArrayExtensionLegacyProtoype() {\r\n\r\n // VECTOR 3\r\n\r\n let vec3Extension = {};\r\n\r\n vec3Extension.vec3_set = function vec3_set(x, y, z) {\r\n return Vec3Utils.set(this, x, y, z);\r\n };\r\n\r\n vec3Extension.vec3_normalize = function vec3_normalize(out = Vec3Utils.create()) {\r\n return Vec3Utils.normalize(this, out);\r\n };\r\n vec3Extension.vec3_copy = function vec3_copy(vector) {\r\n return Vec3Utils.copy(vector, this);\r\n };\r\n\r\n vec3Extension.vec3_clone = function vec3_clone(out = Vec3Utils.create()) {\r\n return Vec3Utils.clone(this, out);\r\n };\r\n\r\n vec3Extension.vec3_zero = function vec3_zero() {\r\n return Vec3Utils.zero(this);\r\n };\r\n\r\n vec3Extension.vec3_angle = function vec3_angle(vector) {\r\n return Vec3Utils.angle(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_angleDegrees = function vec3_angleDegrees(vector) {\r\n return Vec3Utils.angleDegrees(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_angleRadians = function vec3_angleRadians(vector) {\r\n return Vec3Utils.angleRadians(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_equals = function vec3_equals(vector, epsilon = 0) {\r\n return Vec3Utils.equals(this, vector, epsilon);\r\n };\r\n\r\n vec3Extension.vec3_length = function vec3_length() {\r\n return Vec3Utils.length(this);\r\n };\r\n\r\n vec3Extension.vec3_lengthSquared = function vec3_lengthSquared() {\r\n return Vec3Utils.lengthSquared(this);\r\n };\r\n\r\n vec3Extension.vec3_distance = function vec3_distance(vector) {\r\n return Vec3Utils.distance(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_distanceSquared = function vec3_distanceSquared(vector) {\r\n return Vec3Utils.distanceSquared(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_add = function vec3_add(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.add(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_sub = function vec3_sub(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.sub(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_mul = function vec3_mul(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.mul(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_div = function vec3_div(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.div(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_scale = function vec3_scale(value, out = Vec3Utils.create()) {\r\n return Vec3Utils.scale(this, value, out);\r\n };\r\n\r\n vec3Extension.vec3_dot = function vec3_dot(vector) {\r\n return Vec3Utils.dot(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_negate = function vec3_negate(out = Vec3Utils.create()) {\r\n return Vec3Utils.negate(this, out);\r\n };\r\n\r\n vec3Extension.vec3_cross = function vec3_cross(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.cross(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_transformQuat = function vec3_transformQuat(quat, out = Vec3Utils.create()) {\r\n return Vec3Utils.transformQuat(this, quat, out);\r\n };\r\n\r\n vec3Extension.vec3_transformMat3 = function vec3_transformMat3(matrix, out = Vec3Utils.create()) {\r\n return Vec3Utils.transformMat3(this, matrix, out);\r\n };\r\n\r\n vec3Extension.vec3_transformMat4 = function vec3_transformMat4(matrix, out = Vec3Utils.create()) {\r\n return Vec3Utils.transformMat4(this, matrix, out);\r\n };\r\n\r\n vec3Extension.vec3_lengthSigned = function vec3_lengthSigned(positiveDirection) {\r\n return Vec3Utils.lengthSigned(this, positiveDirection);\r\n };\r\n\r\n vec3Extension.vec3_angleSigned = function vec3_angleSigned(vector, referenceAxis) {\r\n return Vec3Utils.angleSigned(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_angleSignedDegrees = function vec3_angleSignedDegrees(vector, referenceAxis) {\r\n return Vec3Utils.angleSignedDegrees(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_angleSignedRadians = function vec3_angleSignedRadians(vector, referenceAxis) {\r\n return Vec3Utils.angleSignedRadians(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivoted = function vec3_anglePivoted(vector, referenceAxis) {\r\n return Vec3Utils.anglePivoted(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedDegrees = function vec3_anglePivotedDegrees(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedDegrees(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedRadians = function vec3_anglePivotedRadians(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedRadians(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedSigned = function vec3_anglePivotedSigned(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedSigned(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedSignedDegrees = function vec3_anglePivotedSignedDegrees(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedSignedDegrees(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedSignedRadians = function vec3_anglePivotedSignedRadians(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedSignedRadians(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_toRadians = function vec3_toRadians(out = Vec3Utils.create()) {\r\n return Vec3Utils.toRadians(this, out);\r\n };\r\n\r\n vec3Extension.vec3_toDegrees = function vec3_toDegrees(out = Vec3Utils.create()) {\r\n return Vec3Utils.toDegrees(this, out);\r\n };\r\n\r\n vec3Extension.vec3_toQuat = function vec3_toQuat(out) {\r\n return Vec3Utils.toQuat(this, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansToQuat = function vec3_radiansToQuat(out = QuatUtils.create()) {\r\n return Vec3Utils.radiansToQuat(this, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesToQuat = function vec3_degreesToQuat(out = QuatUtils.create()) {\r\n return Vec3Utils.degreesToQuat(this, out);\r\n };\r\n\r\n vec3Extension.vec3_isNormalized = function vec3_isNormalized(epsilon = MathUtils.EPSILON) {\r\n return Vec3Utils.isNormalized(this, epsilon);\r\n };\r\n\r\n vec3Extension.vec3_isZero = function vec3_isZero(epsilon = 0) {\r\n return Vec3Utils.isZero(this, epsilon);\r\n };\r\n\r\n vec3Extension.vec3_valueAlongAxis = function vec3_valueAlongAxis(axis) {\r\n return Vec3Utils.valueAlongAxis(this, axis);\r\n };\r\n\r\n vec3Extension.vec3_valueAlongPlane = function vec3_valueAlongPlane(planeNormal) {\r\n return Vec3Utils.valueAlongPlane(this, planeNormal);\r\n };\r\n\r\n vec3Extension.vec3_componentAlongAxis = function vec3_componentAlongAxis(axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.componentAlongAxis(this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_removeComponentAlongAxis = function vec3_removeComponentAlongAxis(axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.removeComponentAlongAxis(this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_copyComponentAlongAxis = function vec3_copyComponentAlongAxis(vector, axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.copyComponentAlongAxis(vector, this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_isConcordant = function vec3_isConcordant(vector) {\r\n return Vec3Utils.isConcordant(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_isFartherAlongAxis = function vec3_isFartherAlongAxis(vector, axis) {\r\n return Vec3Utils.isFartherAlongAxis(this, vector, axis);\r\n };\r\n\r\n vec3Extension.vec3_isToTheRight = function vec3_isToTheRight(vector, referenceAxis) {\r\n return Vec3Utils.isToTheRight(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_signTo = function vec3_signTo(vector, referenceAxis, zeroSign = 1) {\r\n return Vec3Utils.signTo(this, vector, referenceAxis, zeroSign);\r\n };\r\n\r\n vec3Extension.vec3_projectOnAxis = function vec3_projectOnAxis(axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnAxis(this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_projectOnAxisAlongAxis = function vec3_projectOnAxisAlongAxis(axis, projectAlongAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnAxisAlongAxis(this, axis, projectAlongAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_projectOnPlane = function vec3_projectOnPlane(planeNormal, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnPlane(this, planeNormal, out);\r\n };\r\n\r\n vec3Extension.vec3_projectOnPlaneAlongAxis = function vec3_projectOnPlaneAlongAxis(planeNormal, projectAlongAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnPlaneAlongAxis(this, planeNormal, projectAlongAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_isOnAxis = function vec3_isOnAxis(axis) {\r\n return Vec3Utils.isOnAxis(this, axis);\r\n };\r\n\r\n vec3Extension.vec3_isOnPlane = function vec3_isOnPlane(planeNormal) {\r\n return Vec3Utils.isOnPlane(this, planeNormal);\r\n };\r\n\r\n vec3Extension.vec3_rotate = function vec3_rotate(rotation, out) {\r\n return Vec3Utils.rotate(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateDegrees = function vec3_rotateDegrees(rotation, out) {\r\n return Vec3Utils.rotateDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateRadians = function vec3_rotateRadians(rotation, out) {\r\n return Vec3Utils.rotateRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateQuat = function vec3_rotateQuat(rotation, out) {\r\n return Vec3Utils.rotateQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAxis = function vec3_rotateAxis(angle, axis, out) {\r\n return Vec3Utils.rotateAxis(this, angle, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAxisDegrees = function vec3_rotateAxisDegrees(angle, axis, out) {\r\n return Vec3Utils.rotateAxisDegrees(this, angle, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAxisRadians = function vec3_rotateAxisRadians(angle, axis, out) {\r\n return Vec3Utils.rotateAxisRadians(this, angle, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAround = function vec3_rotateAround(rotation, origin, out) {\r\n return Vec3Utils.rotateAround(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundDegrees = function vec3_rotateAroundDegrees(rotation, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundDegrees(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundRadians = function vec3_rotateAroundRadians(rotation, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundRadians(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundQuat = function vec3_rotateAroundQuat(rotation, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundQuat(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundAxis = function vec3_rotateAroundAxis(angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxis(this, angle, axis, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundAxisDegrees = function vec3_rotateAroundAxisDegrees(angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxisDegrees(this, angle, axis, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundAxisRadians = function vec3_rotateAroundAxisRadians(angle, axis, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundAxisRadians(this, angle, axis, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToWorld = function vec3_convertPositionToWorld(parentTransform, out) {\r\n return Vec3Utils.convertPositionToWorld(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToLocal = function vec3_convertPositionToLocal(parentTransform, out) {\r\n return Vec3Utils.convertPositionToLocal(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToWorldMatrix = function vec3_convertPositionToWorldMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToWorldMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToLocalMatrix = function vec3_convertPositionToLocalMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToLocalMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToWorldQuat = function vec3_convertPositionToWorldQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToWorldQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToLocalQuat = function vec3_convertPositionToLocalQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToLocalQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToWorld = function vec3_convertDirectionToWorld(parentTransform, out) {\r\n return Vec3Utils.convertDirectionToWorld(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToLocal = function vec3_convertDirectionToLocal(parentTransform, out) {\r\n return Vec3Utils.convertDirectionToLocal(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToWorldMatrix = function vec3_convertDirectionToWorldMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToWorldMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToLocalMatrix = function vec3_convertDirectionToLocalMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToLocalMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToWorldQuat = function vec3_convertDirectionToWorldQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToWorldQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToLocalQuat = function vec3_convertDirectionToLocalQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToLocalQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotation = function vec3_addRotation(rotation, out) {\r\n return Vec3Utils.addRotation(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotationDegrees = function vec3_addRotationDegrees(rotation, out) {\r\n return Vec3Utils.addRotationDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotationRadians = function vec3_addRotationRadians(rotation, out) {\r\n return Vec3Utils.addRotationRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotationQuat = function vec3_addRotationQuat(rotation, out) {\r\n return Vec3Utils.addRotationQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotation = function vec3_degreesAddRotation(rotation, out) {\r\n return Vec3Utils.degreesAddRotation(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotationDegrees = function vec3_degreesAddRotationDegrees(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.degreesAddRotationDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotationRadians = function vec3_degreesAddRotationRadians(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.degreesAddRotationRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotationQuat = function vec3_degreesAddRotationQuat(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.degreesAddRotationQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotation = function vec3_radiansAddRotation(rotation, out) {\r\n return Vec3Utils.radiansAddRotation(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotationDegrees = function vec3_radiansAddRotationDegrees(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.radiansAddRotationDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotationRadians = function vec3_radiansAddRotationRadians(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.radiansAddRotationRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotationQuat = function vec3_radiansAddRotationQuat(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.radiansAddRotationQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_toMatrix = function vec3_toMatrix(out = Mat3Utils.create()) {\r\n return Vec3Utils.toMatrix(this, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesToMatrix = function vec3_degreesToMatrix(out = Mat3Utils.create()) {\r\n return Vec3Utils.degreesToMatrix(this, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansToMatrix = function vec3_radiansToMatrix(out = Mat3Utils.create()) {\r\n return Vec3Utils.radiansToMatrix(this, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationTo = function vec3_rotationTo(to, out) {\r\n return Vec3Utils.rotationTo(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToDegrees = function vec3_rotationToDegrees(to, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToDegrees(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToRadians = function vec3_rotationToRadians(to, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToRadians(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToQuat = function vec3_rotationToQuat(to, out = QuatUtils.create()) {\r\n return Vec3Utils.rotationToQuat(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivoted = function vec3_rotationToPivoted(to, pivotAxis, out) {\r\n return Vec3Utils.rotationToPivoted(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivotedDegrees = function vec3_rotationToPivotedDegrees(to, pivotAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToPivotedDegrees(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivotedRadians = function vec3_rotationToPivotedRadians(to, pivotAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToPivotedRadians(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivotedQuat = function vec3_rotationToPivotedQuat(to, pivotAxis, out = QuatUtils.create()) {\r\n return Vec3Utils.rotationToPivotedQuat(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_lerp = function vec3_lerp(to, interpolationFactor, out = Vec3Utils.create()) {\r\n return Vec3Utils.lerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n vec3Extension.vec3_interpolate = function vec3_interpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = Vec3Utils.create()) {\r\n return Vec3Utils.interpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n vec3Extension.vec3_perpendicularRandom = function vec3_perpendicularRandom(out = Vec3Utils.create()) {\r\n return Vec3Utils.perpendicularRandom(this, out);\r\n };\r\n\r\n // VECTOR 4\r\n\r\n let vec4Extension = {};\r\n\r\n vec4Extension.vec4_set = function vec4_set(x, y, z, w) {\r\n return Vec4Utils.set(this, x, y, z, w);\r\n };\r\n\r\n vec4Extension.vec4_copy = function vec4_copy(vector) {\r\n return Vec4Utils.copy(vector, this);\r\n };\r\n\r\n vec4Extension.vec4_clone = function vec4_clone(out = Vec4Utils.create()) {\r\n return Vec4Utils.clone(this, out);\r\n };\r\n\r\n // QUAT\r\n\r\n let quatExtension = {};\r\n\r\n quatExtension.quat_set = function quat_set(x, y, z, w) {\r\n return QuatUtils.set(this, x, y, z, w);\r\n };\r\n\r\n quatExtension.quat_normalize = function quat_normalize(out = QuatUtils.create()) {\r\n return QuatUtils.normalize(this, out);\r\n };\r\n\r\n quatExtension.quat_copy = function quat_copy(quat) {\r\n return QuatUtils.copy(quat, this);\r\n };\r\n\r\n quatExtension.quat_clone = function quat_clone(out = QuatUtils.create()) {\r\n return QuatUtils.clone(this, out);\r\n };\r\n\r\n quatExtension.quat_identity = function quat_identity() {\r\n return QuatUtils.identity(this);\r\n };\r\n\r\n quatExtension.quat_length = function quat_length() {\r\n return QuatUtils.length(this);\r\n };\r\n\r\n quatExtension.quat_lengthSquared = function quat_lengthSquared() {\r\n return QuatUtils.lengthSquared(this);\r\n };\r\n\r\n quatExtension.quat_invert = function quat_invert(out = QuatUtils.create()) {\r\n return QuatUtils.invert(this, out);\r\n };\r\n\r\n quatExtension.quat_conjugate = function quat_conjugate(out = QuatUtils.create()) {\r\n return QuatUtils.conjugate(this, out);\r\n };\r\n\r\n quatExtension.quat_mul = function quat_mul(rotation, out = QuatUtils.create()) {\r\n return QuatUtils.mul(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_getAxis = function quat_getAxis(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxis(this, out);\r\n };\r\n\r\n quatExtension.quat_getAngle = function quat_getAngle() {\r\n return QuatUtils.getAngle(this);\r\n };\r\n\r\n quatExtension.quat_getAngleDegrees = function quat_getAngleDegrees() {\r\n return QuatUtils.getAngleDegrees(this);\r\n };\r\n\r\n quatExtension.quat_getAngleRadians = function quat_getAngleRadians() {\r\n return QuatUtils.getAngleRadians(this);\r\n };\r\n\r\n quatExtension.quat_getAxisScaled = function quat_getAxisScaled(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaled(this, out);\r\n };\r\n\r\n quatExtension.quat_getAxisScaledDegrees = function quat_getAxisScaledDegrees(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaledDegrees(this, out);\r\n };\r\n\r\n quatExtension.quat_getAxisScaledRadians = function quat_getAxisScaledRadians(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaledRadians(this, out);\r\n };\r\n\r\n quatExtension.quat_getAxes = function quat_getAxes(out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n return QuatUtils.getAxes(this, out);\r\n };\r\n\r\n quatExtension.quat_getForward = function quat_getForward(out = Vec3Utils.create()) {\r\n return QuatUtils.getForward(this, out);\r\n };\r\n\r\n quatExtension.quat_getBackward = function quat_getBackward(out) {\r\n return QuatUtils.getBackward(this, out);\r\n };\r\n\r\n quatExtension.quat_getLeft = function quat_getLeft(out = Vec3Utils.create()) {\r\n return QuatUtils.getLeft(this, out);\r\n };\r\n\r\n quatExtension.quat_getRight = function quat_getRight(out) {\r\n return QuatUtils.getRight(this, out);\r\n };\r\n\r\n quatExtension.quat_getUp = function quat_getUp(out = Vec3Utils.create()) {\r\n return QuatUtils.getUp(this, out);\r\n };\r\n\r\n quatExtension.quat_getDown = function quat_getDown(out) {\r\n return QuatUtils.getDown(this, out);\r\n };\r\n\r\n quatExtension.quat_setAxes = function quat_setAxes(left, up, forward) {\r\n return QuatUtils.setAxes(this, left, up, forward);\r\n };\r\n\r\n quatExtension.quat_setForward = function quat_setForward(forward, up = null, left = null) {\r\n return QuatUtils.setForward(this, forward, up, left);\r\n };\r\n\r\n quatExtension.quat_setBackward = function quat_setBackward(backward, up = null, left = null) {\r\n return QuatUtils.setBackward(this, backward, up, left);\r\n };\r\n\r\n quatExtension.quat_setUp = function quat_setUp(up, forward = null, left = null) {\r\n return QuatUtils.setUp(this, up, forward, left);\r\n };\r\n\r\n quatExtension.quat_setDown = function quat_setDown(down, forward = null, left = null) {\r\n return QuatUtils.setDown(this, down, forward, left);\r\n };\r\n\r\n quatExtension.quat_setLeft = function quat_setLeft(left, up = null, forward = null) {\r\n return QuatUtils.setLeft(this, left, up, forward);\r\n };\r\n\r\n quatExtension.quat_setRight = function quat_setRight(right, up = null, forward = null) {\r\n return QuatUtils.setRight(this, right, up, forward);\r\n };\r\n\r\n quatExtension.quat_toWorld = function quat_toWorld(parentQuat, out = QuatUtils.create()) {\r\n return QuatUtils.toWorld(this, parentQuat, out);\r\n };\r\n\r\n quatExtension.quat_toLocal = function quat_toLocal(parentQuat, out = QuatUtils.create()) {\r\n return QuatUtils.toLocal(this, parentQuat, out);\r\n };\r\n\r\n quatExtension.quat_fromAxis = function quat_fromAxis(angle, axis) {\r\n return QuatUtils.fromAxis(angle, axis, this);\r\n };\r\n\r\n quatExtension.quat_fromAxisDegrees = function quat_fromAxisDegrees(angle, axis) {\r\n return QuatUtils.fromAxisDegrees(angle, axis, this);\r\n };\r\n\r\n quatExtension.quat_fromAxisRadians = function quat_fromAxisRadians(angle, axis) {\r\n return QuatUtils.fromAxisRadians(angle, axis, this);\r\n };\r\n\r\n quatExtension.quat_fromAxes = function quat_fromAxes(leftAxis, upAxis, forwardAxis) {\r\n return QuatUtils.fromAxes(leftAxis, upAxis, forwardAxis, this);\r\n };\r\n\r\n quatExtension.quat_fromRadians = function quat_fromRadians(radiansRotation) {\r\n return QuatUtils.fromRadians(radiansRotation, this);\r\n };\r\n\r\n quatExtension.quat_fromDegrees = function quat_fromDegrees(degreesRotation) {\r\n return QuatUtils.fromDegrees(degreesRotation, this);\r\n };\r\n\r\n quatExtension.quat_toRadians = function quat_toRadians(out = Vec3Utils.create()) {\r\n return QuatUtils.toRadians(this, out);\r\n };\r\n\r\n quatExtension.quat_toDegrees = function quat_toDegrees(out = Vec3Utils.create()) {\r\n return QuatUtils.toDegrees(this, out);\r\n };\r\n\r\n quatExtension.quat_isNormalized = function quat_isNormalized(epsilon = MathUtils.EPSILON) {\r\n return QuatUtils.isNormalized(this, epsilon);\r\n };\r\n\r\n quatExtension.quat_addRotation = function quat_addRotation(rotation, out) {\r\n return QuatUtils.addRotation(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_addRotationDegrees = function quat_addRotationDegrees(rotation, out) {\r\n return QuatUtils.addRotationDegrees(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_addRotationRadians = function quat_addRotationRadians(rotation, out) {\r\n return QuatUtils.addRotationRadians(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_addRotationQuat = function quat_addRotationQuat(rotation, out = QuatUtils.create()) {\r\n return QuatUtils.addRotationQuat(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotation = function quat_subRotation(rotation, out) {\r\n return QuatUtils.subRotation(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotationDegrees = function quat_subRotationDegrees(rotation, out) {\r\n return QuatUtils.subRotationDegrees(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotationRadians = function quat_subRotationRadians(rotation, out) {\r\n return QuatUtils.subRotationRadians(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotationQuat = function quat_subRotationQuat(rotation, out = QuatUtils.create()) {\r\n return QuatUtils.subRotationQuat(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotationTo = function quat_rotationTo(to, out) {\r\n return QuatUtils.rotationTo(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationToDegrees = function quat_rotationToDegrees(to, out) {\r\n return QuatUtils.rotationToDegrees(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationToRadians = function quat_rotationToRadians(to, out) {\r\n return QuatUtils.rotationToRadians(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationToQuat = function quat_rotationToQuat(to, out) {\r\n return QuatUtils.rotationToQuat(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxis = function quat_rotationAroundAxis(axis, out) {\r\n return QuatUtils.rotationAroundAxis(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxisDegrees = function quat_rotationAroundAxisDegrees(axis, out = Vec3Utils.create()) {\r\n return QuatUtils.rotationAroundAxisDegrees(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxisRadians = function quat_rotationAroundAxisRadians(axis, out = Vec3Utils.create()) {\r\n return QuatUtils.rotationAroundAxisRadians(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxisQuat = function quat_rotationAroundAxisQuat(axis, out = QuatUtils.create()) {\r\n return QuatUtils.rotationAroundAxisQuat(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_getTwist = function quat_getTwist(axis, out = QuatUtils.create()) {\r\n return QuatUtils.getTwist(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_getSwing = function quat_getSwing(axis, out = QuatUtils.create()) {\r\n return QuatUtils.getSwing(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_getSwingFromTwist = function quat_getSwingFromTwist(twist, out = QuatUtils.create()) {\r\n return QuatUtils.getSwingFromTwist(this, twist, out);\r\n };\r\n\r\n quatExtension.quat_getTwistFromSwing = function quat_getTwistFromSwing(swing, out = QuatUtils.create()) {\r\n return QuatUtils.getTwistFromSwing(this, swing, out);\r\n };\r\n\r\n quatExtension.quat_fromTwistSwing = function quat_fromTwistSwing(twist, swing) {\r\n return QuatUtils.fromTwistSwing(twist, swing, this);\r\n };\r\n\r\n quatExtension.quat_toMatrix = function quat_toMatrix(out = Mat3Utils.create()) {\r\n return QuatUtils.toMatrix(this, out);\r\n };\r\n\r\n quatExtension.quat_rotate = function quat_rotate(rotation, out) {\r\n return QuatUtils.rotate(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateDegrees = function quat_rotateDegrees(rotation, out) {\r\n return QuatUtils.rotateDegrees(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateRadians = function quat_rotateRadians(rotation, out) {\r\n return QuatUtils.rotateRadians(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateQuat = function quat_rotateQuat(rotation, out) {\r\n return QuatUtils.rotateQuat(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateAxis = function quat_rotateAxis(angle, axis, out) {\r\n return QuatUtils.rotateAxis(this, angle, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotateAxisDegrees = function quat_rotateAxisDegrees(angle, axis, out) {\r\n return QuatUtils.rotateAxisDegrees(this, angle, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotateAxisRadians = function quat_rotateAxisRadians(angle, axis, out) {\r\n return QuatUtils.rotateAxisRadians(this, angle, axis, out);\r\n };\r\n\r\n quatExtension.quat_lerp = function quat_lerp(to, interpolationFactor, out = QuatUtils.create()) {\r\n return QuatUtils.lerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quatExtension.quat_interpolate = function quat_interpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n return QuatUtils.interpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n quatExtension.quat_slerp = function quat_slerp(to, interpolationFactor, out = QuatUtils.create()) {\r\n return QuatUtils.slerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quatExtension.quat_sinterpolate = function quat_sinterpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n return QuatUtils.sinterpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n // QUAT 2\r\n\r\n let quat2Extension = {};\r\n\r\n quat2Extension.quat2_set = function quat2_set(x1, y1, z1, w1, x2, y2, z2, w2) {\r\n return Quat2Utils.set(this, x1, y1, z1, w1, x2, y2, z2, w2);\r\n };\r\n\r\n quat2Extension.quat2_normalize = function quat2_normalize(out = Quat2Utils.create()) {\r\n return Quat2Utils.normalize(this, out);\r\n };\r\n\r\n quat2Extension.quat2_invert = function quat2_invert(out = Quat2Utils.create()) {\r\n return Quat2Utils.invert(this, out);\r\n };\r\n\r\n quat2Extension.quat2_conjugate = function quat2_conjugate(out = Quat2Utils.create()) {\r\n return Quat2Utils.conjugate(this, out);\r\n };\r\n\r\n quat2Extension.quat2_copy = function quat2_copy(quat) {\r\n return Quat2Utils.copy(quat, this);\r\n };\r\n\r\n quat2Extension.quat2_identity = function quat2_identity() {\r\n return Quat2Utils.identity(this);\r\n };\r\n\r\n quat2Extension.quat2_getPosition = function quat2_getPosition(out = Vec3Utils.create()) {\r\n return Quat2Utils.getPosition(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotation = function quat2_getRotation(out) {\r\n return Quat2Utils.getRotation(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotationDegrees = function quat2_getRotationDegrees(out = Vec3Utils.create()) {\r\n return Quat2Utils.getRotationDegrees(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotationRadians = function quat2_getRotationRadians(out = Vec3Utils.create()) {\r\n return Quat2Utils.getRotationRadians(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotationQuat = function quat2_getRotationQuat(out = QuatUtils.create()) {\r\n return Quat2Utils.getRotationQuat(this, out);\r\n };\r\n\r\n quat2Extension.quat2_setPosition = function quat2_setPosition(position) {\r\n return Quat2Utils.setPosition(this, position);\r\n };\r\n\r\n quat2Extension.quat2_setRotation = function quat2_setRotation(rotation) {\r\n return Quat2Utils.setRotation(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setRotationDegrees = function quat2_setRotationDegrees(rotation) {\r\n return Quat2Utils.setRotationDegrees(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setRotationRadians = function quat2_setRotationRadians(rotation) {\r\n return Quat2Utils.setRotationRadians(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setRotationQuat = function quat2_setRotationQuat(rotation) {\r\n return Quat2Utils.setRotationQuat(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotation = function quat2_setPositionRotation(position, rotation) {\r\n return Quat2Utils.setPositionRotation(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotationDegrees = function quat2_setPositionRotationDegrees(position, rotation) {\r\n return Quat2Utils.setPositionRotationDegrees(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotationRadians = function quat2_setPositionRotationRadians(position, rotation) {\r\n return Quat2Utils.setPositionRotationRadians(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotationQuat = function quat2_setPositionRotationQuat(position, rotation) {\r\n return Quat2Utils.setPositionRotationQuat(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_isNormalized = function quat2_isNormalized(epsilon = MathUtils.EPSILON) {\r\n return Quat2Utils.isNormalized(this, epsilon);\r\n };\r\n\r\n quat2Extension.quat2_length = function quat2_length() {\r\n return Quat2Utils.length(this);\r\n };\r\n\r\n quat2Extension.quat2_lengthSquared = function quat2_lengthSquared() {\r\n return Quat2Utils.lengthSquared(this);\r\n };\r\n\r\n quat2Extension.quat2_mul = function quat2_mul(quat, out = Quat2Utils.create()) {\r\n return Quat2Utils.mul(this, quat, out);\r\n };\r\n\r\n quat2Extension.quat2_getAxes = function quat2_getAxes(out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n return Quat2Utils.getAxes(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getForward = function quat2_getForward(out = Vec3Utils.create()) {\r\n return Quat2Utils.getForward(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getBackward = function quat2_getBackward(out) {\r\n return Quat2Utils.getBackward(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getLeft = function quat2_getLeft(out = Vec3Utils.create()) {\r\n return Quat2Utils.getLeft(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRight = function quat2_getRight(out) {\r\n return Quat2Utils.getRight(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getUp = function quat2_getUp(out = Vec3Utils.create()) {\r\n return Quat2Utils.getUp(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getDown = function quat2_getDown(out) {\r\n return Quat2Utils.getDown(this, out);\r\n };\r\n\r\n quat2Extension.quat2_toWorld = function quat2_toWorld(parentTransformQuat, out = Quat2Utils.create()) {\r\n return Quat2Utils.toWorld(this, parentTransformQuat, out);\r\n };\r\n\r\n quat2Extension.quat2_toLocal = function quat2_toLocal(parentTransformQuat, out = Quat2Utils.create()) {\r\n return Quat2Utils.toLocal(this, parentTransformQuat, out);\r\n };\r\n\r\n quat2Extension.quat2_rotateAxis = function quat2_rotateAxis(angle, axis, out) {\r\n return Quat2Utils.rotateAxis(this, angle, axis, out);\r\n };\r\n\r\n quat2Extension.quat2_rotateAxisDegrees = function quat2_rotateAxisDegrees(angle, axis, out) {\r\n return Quat2Utils.rotateAxisDegrees(this, angle, axis, out);\r\n };\r\n\r\n quat2Extension.quat2_rotateAxisRadians = function quat2_rotateAxisRadians(angle, axis, out = Quat2Utils.create()) {\r\n return Quat2Utils.rotateAxisRadians(this, angle, axis, out);\r\n };\r\n\r\n quat2Extension.quat2_toMatrix = function quat2_toMatrix(out = Mat4Utils.create()) {\r\n return Quat2Utils.toMatrix(this, out);\r\n };\r\n\r\n quat2Extension.quat2_fromMatrix = function quat2_fromMatrix(matrix) {\r\n return Quat2Utils.fromMatrix(matrix, this);\r\n };\r\n\r\n quat2Extension.quat2_lerp = function quat2_lerp(to, interpolationFactor, out = Quat2Utils.create()) {\r\n return Quat2Utils.lerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quat2Extension.quat2_interpolate = function quat2_interpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n return Quat2Utils.interpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n quat2Extension.quat2_slerp = function quat2_slerp(to, interpolationFactor, out = Quat2Utils.create()) {\r\n return Quat2Utils.slerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quat2Extension.quat2_sinterpolate = function quat2_sinterpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n return Quat2Utils.sinterpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n // MATRIX 4\r\n\r\n let mat4Extension = {};\r\n\r\n mat4Extension.mat4_set = function mat4_set(\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33) {\r\n return Mat4Utils.set(this,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33\r\n );\r\n };\r\n\r\n mat4Extension.mat4_copy = function mat4_copy(matrix) {\r\n return Mat4Utils.copy(matrix, this);\r\n };\r\n\r\n mat4Extension.mat4_identity = function mat4_identity() {\r\n return Mat4Utils.identity(this);\r\n };\r\n\r\n mat4Extension.mat4_invert = function mat4_invert(out = Mat4Utils.create()) {\r\n return Mat4Utils.invert(this, out);\r\n };\r\n\r\n mat4Extension.mat4_mul = function mat4_mul(matrix, out = Mat4Utils.create()) {\r\n return Mat4Utils.mul(this, matrix, out);\r\n };\r\n\r\n mat4Extension.mat4_scale = function mat4_scale(vector, out = Mat4Utils.create()) {\r\n return Mat4Utils.scale(this, vector, out);\r\n };\r\n\r\n mat4Extension.mat4_clone = function mat4_clone(out = Mat4Utils.create()) {\r\n return Mat4Utils.clone(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getPosition = function mat4_getPosition(out = Vec3Utils.create()) {\r\n return Mat4Utils.getPosition(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotation = function mat4_getRotation(out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotation(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotationDegrees = function mat4_getRotationDegrees(out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotationDegrees(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotationRadians = function mat4_getRotationRadians(out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotationRadians(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotationQuat = function mat4_getRotationQuat(out = QuatUtils.create()) {\r\n return Mat4Utils.getRotationQuat(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getScale = function mat4_getScale(out = Vec3Utils.create()) {\r\n return Mat4Utils.getScale(this, out);\r\n };\r\n\r\n mat4Extension.mat4_setPosition = function mat4_setPosition(position) {\r\n return Mat4Utils.setPosition(this, position);\r\n };\r\n\r\n mat4Extension.mat4_setRotation = function mat4_setRotation(rotation) {\r\n return Mat4Utils.setRotation(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setRotationDegrees = function mat4_setRotationDegrees(rotation) {\r\n return Mat4Utils.setRotationDegrees(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setRotationRadians = function mat4_setRotationRadians(rotation) {\r\n return Mat4Utils.setRotationRadians(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setRotationQuat = function mat4_setRotationQuat(rotation) {\r\n return Mat4Utils.setRotationQuat(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setScale = function mat4_setScale(scale) {\r\n return Mat4Utils.setScale(this, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationScale = function mat4_setPositionRotationScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationDegreesScale = function mat4_setPositionRotationDegreesScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationDegreesScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationRadiansScale = function mat4_setPositionRotationRadiansScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationRadiansScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationQuatScale = function mat4_setPositionRotationQuatScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationQuatScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotation = function mat4_setPositionRotation(position, rotation) {\r\n return Mat4Utils.setPositionRotation(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationDegrees = function mat4_setPositionRotationDegrees(position, rotation) {\r\n return Mat4Utils.setPositionRotationDegrees(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationRadians = function mat4_setPositionRotationRadians(position, rotation) {\r\n return Mat4Utils.setPositionRotationRadians(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationQuat = function mat4_setPositionRotationQuat(position, rotation) {\r\n return Mat4Utils.setPositionRotationQuat(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_getAxes = function mat4_getAxes(out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n return Mat4Utils.getAxes(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getForward = function mat4_getForward(out = Vec3Utils.create()) {\r\n return Mat4Utils.getForward(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getBackward = function mat4_getBackward(out) {\r\n return Mat4Utils.getBackward(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getLeft = function mat4_getLeft(out = Vec3Utils.create()) {\r\n return Mat4Utils.getLeft(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRight = function mat4_getRight(out) {\r\n return Mat4Utils.getRight(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getUp = function mat4_getUp(out = Vec3Utils.create()) {\r\n return Mat4Utils.getUp(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getDown = function mat4_getDown(out) {\r\n return Mat4Utils.getDown(this, out);\r\n };\r\n\r\n mat4Extension.mat4_toWorld = function mat4_toWorld(parentTransformMatrix, out = Mat4Utils.create()) {\r\n return Mat4Utils.toWorld(this, parentTransformMatrix, out);\r\n };\r\n\r\n mat4Extension.mat4_toLocal = function mat4_toLocal(parentTransformMatrix, out = Mat4Utils.create()) {\r\n return Mat4Utils.toLocal(this, parentTransformMatrix, out);\r\n };\r\n\r\n mat4Extension.mat4_hasUniformScale = function mat4_hasUniformScale() {\r\n return Mat4Utils.hasUniformScale(this);\r\n };\r\n\r\n mat4Extension.mat4_toQuat = function mat4_toQuat(out = Quat2Utils.create()) {\r\n return Mat4Utils.toQuat(this, out);\r\n };\r\n\r\n mat4Extension.mat4_fromQuat = function mat4_fromQuat(quat) {\r\n return Mat4Utils.fromQuat(quat, this);\r\n };\r\n\r\n\r\n\r\n let arrayPrototypesToExtend = [\r\n Array.prototype, Uint8ClampedArray.prototype, Uint8Array.prototype, Uint16Array.prototype, Uint32Array.prototype, Int8Array.prototype,\r\n Int16Array.prototype, Int32Array.prototype, Float32Array.prototype, Float64Array.prototype];\r\n\r\n for (let arrayPrototypeToExtend of arrayPrototypesToExtend) {\r\n PluginUtils.injectProperties(vec3Extension, arrayPrototypeToExtend, false, true, true);\r\n PluginUtils.injectProperties(vec4Extension, arrayPrototypeToExtend, false, true, true);\r\n\r\n PluginUtils.injectProperties(quatExtension, arrayPrototypeToExtend, false, true, true);\r\n PluginUtils.injectProperties(quat2Extension, arrayPrototypeToExtend, false, true, true);\r\n\r\n PluginUtils.injectProperties(mat4Extension, arrayPrototypeToExtend, false, true, true);\r\n }\r\n}", "import { Matrix3, Quaternion, Vector3 } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./mat3_type_extension.js\";\r\n\r\nexport function initMat3Extension(): void {\r\n _initMat3ExtensionProtoype();\r\n}\r\n\r\nfunction _initMat3ExtensionProtoype(): void {\r\n\r\n const mat3Extension: Record = {};\r\n\r\n mat3Extension.mat3_set = function mat3_set(this: T,\r\n m00: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): T {\r\n return Mat3Utils.set(this,\r\n m00, m01!, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!\r\n );\r\n };\r\n\r\n mat3Extension.mat3_copy = function mat3_copy(this: T, vector: Readonly): T {\r\n return Mat3Utils.copy(vector, this);\r\n };\r\n\r\n mat3Extension.mat3_clone = function mat3_clone(this: Readonly): T {\r\n return Mat3Utils.clone(this);\r\n };\r\n\r\n mat3Extension.mat3_toDegrees = function mat3_toDegrees(this: Readonly, out?: Vector3 | S): Vector3 | S {\r\n return Mat3Utils.toDegrees(this, out!);\r\n };\r\n\r\n mat3Extension.mat3_toRadians = function mat3_toRadians(this: Readonly, out?: Vector3 | S): Vector3 | S {\r\n return Mat3Utils.toRadians(this, out!);\r\n };\r\n\r\n mat3Extension.mat3_toQuat = function mat3_toQuat(this: Readonly, out?: Quaternion | S): Quaternion | S {\r\n return Mat3Utils.toQuat(this, out!);\r\n };\r\n mat3Extension.mat3_fromAxes = function mat3_fromAxes(this: T, leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly): T {\r\n return Mat3Utils.fromAxes(leftAxis, upAxis, forwardAxis, this);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(mat3Extension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}", "import { Vector2 } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { Vec2Utils } from \"../../../../cauldron/utils/array/vec2_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./vec2_type_extension.js\";\r\n\r\nexport function initVec2Extension(): void {\r\n _initVec2ExtensionProtoype();\r\n}\r\n\r\nfunction _initVec2ExtensionProtoype(): void {\r\n\r\n const vec2Extension: Record = {};\r\n\r\n vec2Extension.vec2_set = function vec2_set(this: T, x: number, y?: number): T {\r\n return Vec2Utils.set(this, x, y!);\r\n };\r\n\r\n vec2Extension.vec2_copy = function vec2_copy(this: T, vector: Readonly): T {\r\n return Vec2Utils.copy(vector, this);\r\n };\r\n\r\n vec2Extension.vec2_clone = function vec2_clone(this: Readonly): T {\r\n return Vec2Utils.clone(this);\r\n };\r\n\r\n vec2Extension.vec2_length = function vec2_length(this: Readonly): number {\r\n return Vec2Utils.length(this);\r\n };\r\n\r\n vec2Extension.vec2_normalize = function vec2_normalize(this: Readonly, out?: S): S {\r\n return Vec2Utils.normalize(this, out!);\r\n };\r\n\r\n vec2Extension.vec2_zero = function vec2_zero(this: T): T {\r\n return Vec2Utils.zero(this);\r\n };\r\n\r\n vec2Extension.vec2_isZero = function vec2_isZero(this: Readonly, epsilon?: number): boolean {\r\n return Vec2Utils.isZero(this, epsilon);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(vec2Extension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}", "import { Vector } from \"../../type_definitions/array_type_definitions.js\";\r\nimport { MathUtils } from \"../math_utils.js\";\r\n\r\n/** The overload where `T extends Vector` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `T` when `Readonly` is used */\r\nexport function clone(vector: Readonly): T;\r\nexport function clone(vector: Readonly): number[];\r\nexport function clone(vector: T): T;\r\nexport function clone(vector: Readonly): T {\r\n return vector.slice(0) as T;\r\n}\r\n\r\nexport function equals(vector: Readonly, other: Readonly, epsilon: number = 0): boolean {\r\n let equals = vector.length == other.length;\r\n\r\n for (let i = 0; i < vector.length && equals; i++) {\r\n equals = equals && (Math.abs(vector[i] - other[i]) <= epsilon);\r\n }\r\n\r\n return equals;\r\n}\r\n\r\nexport function zero(vector: T): T {\r\n for (let i = 0; i < vector.length; i++) {\r\n vector[i] = 0;\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function isZero(vector: Readonly, epsilon = 0): boolean {\r\n let zero = true;\r\n\r\n for (let i = 0; i < vector.length && zero; i++) {\r\n zero = zero && (Math.abs(vector[i]) <= epsilon);\r\n }\r\n\r\n return zero;\r\n}\r\n\r\nexport function scale(vector: Readonly, value: number): T;\r\nexport function scale(vector: Readonly, value: number, out: S): S;\r\nexport function scale(vector: Readonly, value: number, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = vector[i] * value;\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function round(vector: Readonly): T;\r\nexport function round(vector: Readonly, out: S): S;\r\nexport function round(vector: Readonly, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = Math.round(vector[i]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function floor(vector: Readonly): T;\r\nexport function floor(vector: Readonly, out: S): S;\r\nexport function floor(vector: Readonly, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = Math.floor(vector[i]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function ceil(vector: Readonly): T;\r\nexport function ceil(vector: Readonly, out: S): S;\r\nexport function ceil(vector: Readonly, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = Math.ceil(vector[i]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function clamp(vector: Readonly, start: number, end: number): T;\r\nexport function clamp(vector: Readonly, start: number, end: number, out: S): S;\r\nexport function clamp(vector: Readonly, start: number, end: number, out: T | S = VecUtils.clone(vector)): T | S {\r\n const fixedStart = (start != null) ? start : -Number.MAX_VALUE;\r\n const fixedEnd = (end != null) ? end : Number.MAX_VALUE;\r\n const min = Math.min(fixedStart, fixedEnd);\r\n const max = Math.max(fixedStart, fixedEnd);\r\n\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = MathUtils.clamp(vector[i], min, max);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function toString(vector: Readonly, decimalPlaces: number = 4): string {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n return message;\r\n}\r\n\r\nexport function log(vector: Readonly, decimalPlaces: number = 4): Vector {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n console.log(message);\r\n\r\n return vector;\r\n}\r\n\r\nexport function error(vector: Readonly, decimalPlaces: number = 4): Vector {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n console.error(message);\r\n\r\n return vector;\r\n}\r\n\r\nexport function warn(vector: Readonly, decimalPlaces: number = 4): Vector {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n console.warn(message);\r\n\r\n return vector;\r\n}\r\n\r\nexport const VecUtils = {\r\n clone,\r\n equals,\r\n zero,\r\n isZero,\r\n scale,\r\n round,\r\n floor,\r\n ceil,\r\n clamp,\r\n toString,\r\n log,\r\n error,\r\n warn\r\n} as const;\r\n\r\n\r\n\r\nfunction _buildConsoleMessage(vector: Readonly, decimalPlaces?: number): string {\r\n let message = \"[\";\r\n\r\n for (let i = 0; i < vector.length; i++) {\r\n if (i != 0) {\r\n message = message.concat(\", \");\r\n }\r\n\r\n if (decimalPlaces != null) {\r\n message = message.concat(vector[i].toFixed(decimalPlaces));\r\n } else {\r\n message = message.concat(vector[i].toString());\r\n }\r\n }\r\n\r\n message = message.concat(\"]\");\r\n return message;\r\n}", "import { Vector } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { VecUtils } from \"../../../../cauldron/utils/array/vec_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./vec_type_extension.js\";\r\n\r\nexport function initVecExtension(): void {\r\n _initVecExtensionProtoype();\r\n}\r\n\r\nfunction _initVecExtensionProtoype(): void {\r\n\r\n const vecExtension: Record = {};\r\n\r\n vecExtension.vec_clone = function vec_clone(this: Readonly): T {\r\n return VecUtils.clone(this);\r\n };\r\n\r\n vecExtension.vec_equals = function vec_equals(this: Readonly, vector: Readonly, epsilon?: number): boolean {\r\n return VecUtils.equals(this, vector, epsilon);\r\n };\r\n\r\n vecExtension.vec_zero = function vec_zero(this: T): T {\r\n return VecUtils.zero(this);\r\n };\r\n\r\n vecExtension.vec_isZero = function vec_isZero(this: Readonly, epsilon?: number): boolean {\r\n return VecUtils.isZero(this, epsilon);\r\n };\r\n\r\n vecExtension.vec_scale = function vec_scale(this: Readonly, value: number, out?: S): S {\r\n return VecUtils.scale(this, value, out!);\r\n };\r\n\r\n vecExtension.vec_round = function vec_round(this: Readonly, out?: S): S {\r\n return VecUtils.round(this, out!);\r\n };\r\n\r\n vecExtension.vec_floor = function vec_floor(this: Readonly, out?: S): S {\r\n return VecUtils.floor(this, out!);\r\n };\r\n\r\n vecExtension.vec_ceil = function vec_ceil(this: Readonly, out?: S): S {\r\n return VecUtils.ceil(this, out!);\r\n };\r\n\r\n vecExtension.vec_clamp = function vec_clamp(this: Readonly, start: number, end: number, out?: S): S {\r\n return VecUtils.clamp(this, start, end, out!);\r\n };\r\n\r\n vecExtension.vec_toString = function vec_toString(this: Readonly, decimalPlaces?: number): string {\r\n return VecUtils.toString(this, decimalPlaces);\r\n };\r\n\r\n vecExtension.vec_log = function vec_log(this: Readonly, decimalPlaces?: number): Vector {\r\n return VecUtils.log(this, decimalPlaces);\r\n };\r\n\r\n vecExtension.vec_error = function vec_error(this: Readonly, decimalPlaces?: number): Vector {\r\n return VecUtils.error(this, decimalPlaces);\r\n };\r\n\r\n vecExtension.vec_warn = function vec_warn(this: Readonly, decimalPlaces?: number): Vector {\r\n return VecUtils.warn(this, decimalPlaces);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(vecExtension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}", "import { EasingFunction, MathUtils } from \"../../../cauldron/utils/math_utils.js\";\r\nimport { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nimport \"./math_type_extension.js\";\r\n\r\nexport function initMathExtension(): void {\r\n _initMathExtensionInstance();\r\n}\r\n\r\nfunction _initMathExtensionInstance(): void {\r\n\r\n const mathExtension: Record = {};\r\n\r\n Object.defineProperty(mathExtension, \"PP_EPSILON\", {\r\n get(): number {\r\n return MathUtils.EPSILON;\r\n }\r\n });\r\n\r\n Object.defineProperty(mathExtension, \"PP_EPSILON_SQUARED\", {\r\n get(): number {\r\n return MathUtils.EPSILON_SQUARED;\r\n }\r\n });\r\n\r\n Object.defineProperty(mathExtension, \"PP_EPSILON_DEGREES\", {\r\n get(): number {\r\n return MathUtils.EPSILON_DEGREES;\r\n }\r\n });\r\n\r\n mathExtension.pp_clamp = function pp_clamp(value: number, start: number, end: number): number {\r\n return MathUtils.clamp(value, start, end);\r\n };\r\n\r\n mathExtension.pp_sign = function pp_sign(value: number, zeroSign?: number): number {\r\n return MathUtils.sign(value, zeroSign);\r\n };\r\n\r\n mathExtension.pp_toDegrees = function pp_toDegrees(angle: number): number {\r\n return MathUtils.toDegrees(angle);\r\n };\r\n\r\n mathExtension.pp_toRadians = function pp_toRadians(angle: number): number {\r\n return MathUtils.toRadians(angle);\r\n };\r\n\r\n mathExtension.pp_roundDecimal = function pp_roundDecimal(number: number, decimalPlaces: number): number {\r\n return MathUtils.roundDecimal(number, decimalPlaces);\r\n };\r\n\r\n mathExtension.pp_mapToRange = function pp_mapToRange(value: number, originRangeStart: number, originRangeEnd: number, newRangeStart: number, newRangeEnd: number): number {\r\n return MathUtils.mapToRange(value, originRangeStart, originRangeEnd, newRangeStart, newRangeEnd);\r\n };\r\n\r\n mathExtension.pp_random = function pp_random(start?: number, end?: number): number {\r\n return MathUtils.random(start, end);\r\n };\r\n\r\n mathExtension.pp_randomInt = function pp_randomInt(start: number, end: number): number {\r\n return MathUtils.randomInt(start, end);\r\n };\r\n\r\n mathExtension.pp_randomBool = function pp_randomBool(): boolean {\r\n return MathUtils.randomBool();\r\n };\r\n\r\n mathExtension.pp_randomSign = function pp_randomSign(): number {\r\n return MathUtils.randomSign();\r\n };\r\n\r\n mathExtension.pp_randomPick = function pp_randomPick(...args: T[]): T | null {\r\n return MathUtils.randomPick(...args);\r\n };\r\n\r\n mathExtension.pp_randomUUID = function pp_randomUUID(): string {\r\n return MathUtils.randomUUID();\r\n };\r\n\r\n mathExtension.pp_lerp = function pp_lerp(from: number, to: number, interpolationFactor: number): number {\r\n return MathUtils.lerp(from, to, interpolationFactor);\r\n };\r\n\r\n mathExtension.pp_interpolate = function pp_interpolate(from: number, to: number, interpolationFactor: number, easingFunction?: EasingFunction): number {\r\n return MathUtils.interpolate(from, to, interpolationFactor, easingFunction);\r\n };\r\n\r\n mathExtension.pp_interpolatePeriodic = function pp_interpolatePeriodic(from: number, to: number, interpolationFactor: number, easingFunction?: EasingFunction): number {\r\n return MathUtils.interpolatePeriodic(from, to, interpolationFactor, easingFunction);\r\n };\r\n\r\n mathExtension.pp_angleDistance = function pp_angleDistance(from: number, to: number): number {\r\n return MathUtils.angleDistance(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceDegrees = function pp_angleDistanceDegrees(from: number, to: number): number {\r\n return MathUtils.angleDistanceDegrees(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceRadians = function pp_angleDistanceRadians(from: number, to: number): number {\r\n return MathUtils.angleDistanceRadians(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceSigned = function pp_angleDistanceSigned(from: number, to: number): number {\r\n return MathUtils.angleDistanceSigned(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceSignedDegrees = function pp_angleDistanceSignedDegrees(from: number, to: number): number {\r\n return MathUtils.angleDistanceSignedDegrees(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceSignedRadians = function pp_angleDistanceSignedRadians(from: number, to: number): number {\r\n return MathUtils.angleDistanceSignedRadians(from, to);\r\n };\r\n\r\n mathExtension.pp_angleClamp = function pp_angleClamp(angle: number, usePositiveRange?: boolean): number {\r\n return MathUtils.angleClamp(angle, usePositiveRange);\r\n };\r\n\r\n mathExtension.pp_angleClampDegrees = function pp_angleClampDegrees(angle: number, usePositiveRange?: boolean): number {\r\n return MathUtils.angleClampDegrees(angle, usePositiveRange);\r\n };\r\n\r\n mathExtension.pp_angleClampRadians = function pp_angleClampRadians(angle: number, usePositiveRange?: boolean): number {\r\n return MathUtils.angleClampRadians(angle, usePositiveRange);\r\n };\r\n\r\n mathExtension.pp_isInsideAngleRange = function pp_isInsideAngleRange(angle: number, start: number, end: number, useShortestAngle?: boolean): boolean {\r\n return MathUtils.isInsideAngleRange(angle, start, end, useShortestAngle);\r\n };\r\n\r\n mathExtension.pp_isInsideAngleRangeDegrees = function pp_isInsideAngleRangeDegrees(angle: number, start: number, end: number, useShortestAngle?: boolean): boolean {\r\n return MathUtils.isInsideAngleRangeDegrees(angle, start, end, useShortestAngle);\r\n };\r\n\r\n mathExtension.pp_isInsideAngleRangeRadians = function pp_isInsideAngleRangeRadians(angle: number, start: number, end: number, useShortestAngle?: boolean): boolean {\r\n return MathUtils.isInsideAngleRangeRadians(angle, start, end, useShortestAngle);\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(mathExtension, Math, false, true, true);\r\n}", "import { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nimport \"./number_type_extension.js\";\r\n\r\nexport function initNumberExtension(): void {\r\n _initNumberExtensionPrototype();\r\n}\r\n\r\nfunction _initNumberExtensionPrototype(): void {\r\n\r\n const numberExtension: Record = {};\r\n\r\n // Needed to make it easier to use plain numbers for parameters that also accept `NumberOverFactor`\r\n numberExtension.get = function get(this: number, factor?: number): number {\r\n return this.valueOf();\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(numberExtension, Number.prototype, false, true, true);\r\n}", "import { initArrayExtension } from \"./array/array_extension.js\";\r\nimport { initArrayExtensionLegacy } from \"./array/array_extension_legacy.js\";\r\nimport { initMat3Extension } from \"./array/mat3_extension.js\";\r\nimport { initVec2Extension } from \"./array/vec2_extension.js\";\r\nimport { initVecExtension } from \"./array/vec_extension.js\";\r\nimport { initMathExtension } from \"./math_extension.js\";\r\nimport { initNumberExtension } from \"./number_extension.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./array/array_extension.js\";\r\nimport \"./array/mat3_extension.js\";\r\nimport \"./array/vec2_extension.js\";\r\nimport \"./array/vec_extension.js\";\r\nimport \"./math_extension.js\";\r\nimport \"./number_extension.js\";\r\n\r\nexport function initJSExtensions(): void {\r\n initMathExtension();\r\n\r\n initArrayExtension();\r\n initVecExtension();\r\n initVec2Extension();\r\n initMat3Extension();\r\n initArrayExtensionLegacy();\r\n\r\n initNumberExtension();\r\n}", "import { initJSExtensions } from \"./extensions/init_js_extentions.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./extensions/init_js_extentions.js\";\r\n\r\nexport function initJSPlugins(): void {\r\n initJSExtensions();\r\n}", "import { Physics, RayHit } from \"@wonderlandengine/api\";\r\nimport { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nexport function initCauldronExtensions() {\r\n _initPhysicsExtensionPrototype();\r\n _initRayHitExtensionPrototype();\r\n}\r\n\r\nfunction _initPhysicsExtensionPrototype() {\r\n\r\n let extension = {};\r\n\r\n extension.pp_getEngine = function pp_getEngine() {\r\n return this._engine;\r\n };\r\n\r\n PluginUtils.injectProperties(extension, Physics.prototype, false, true, true);\r\n}\r\n\r\nfunction _initRayHitExtensionPrototype() {\r\n\r\n let extension = {};\r\n\r\n extension.pp_getLocations = function pp_getLocations(out) {\r\n if (!out) out = Array.from({ length: this.hitCount }, () => new Float32Array(3));\r\n\r\n const wasm = this._engine.wasm;\r\n const alignedPtr = this._ptr / 4; /* Align F32 */\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const locationPtr = alignedPtr + 3 * i;\r\n out[i][0] = wasm.HEAPF32[locationPtr];\r\n out[i][1] = wasm.HEAPF32[locationPtr + 1];\r\n out[i][2] = wasm.HEAPF32[locationPtr + 2];\r\n }\r\n return out;\r\n };\r\n\r\n extension.pp_getNormals = function pp_getNormals(out) {\r\n if (!out) out = Array.from({ length: this.hitCount }, () => new Float32Array(3));\r\n\r\n const wasm = this._engine.wasm;\r\n const alignedPtr = (this._ptr + 48) / 4; /* Align F32 */\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const normalPtr = alignedPtr + 3 * i;\r\n out[i][0] = wasm.HEAPF32[normalPtr];\r\n out[i][1] = wasm.HEAPF32[normalPtr + 1];\r\n out[i][2] = wasm.HEAPF32[normalPtr + 2];\r\n }\r\n return out;\r\n };\r\n\r\n extension.pp_getDistances = function pp_getDistances(out = new Float32Array(this.hitCount)) {\r\n const wasm = this._engine.wasm;\r\n const alignedPtr = (this._ptr + 48 * 2) / 4; /* Align F32 */\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const distancePtr = alignedPtr + i;\r\n out[i] = wasm.HEAPF32[distancePtr];\r\n }\r\n return out;\r\n };\r\n\r\n extension.pp_getObjects = function pp_getObjects(out = new Array(this.hitCount)) {\r\n const HEAPU16 = this._engine.wasm.HEAPU16;\r\n const alignedPtr = (this._ptr + (48 * 2 + 16)) >> 1;\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const objectPtr = alignedPtr + i;\r\n out[i] = this._engine.wrapObject(HEAPU16[objectPtr + i]);\r\n }\r\n return out;\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(extension, RayHit.prototype, false, true, true);\r\n}", "import { Component, Object3D, WonderlandEngine, type ComponentConstructor } from \"@wonderlandengine/api\";\r\nimport { Matrix3, Matrix4, Quaternion, Quaternion2, Vector3 } from \"../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { CloneParams, ObjectUtils } from \"../../../cauldron/wl/utils/object_utils.js\";\r\nimport { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nimport \"./object_type_extension.js\";\r\n\r\nexport function initObjectExtension(): void {\r\n _initObjectExtensionProtoype();\r\n}\r\n\r\nfunction _initObjectExtensionProtoype(): void {\r\n\r\n const objectExtension: Record = {};\r\n\r\n // GETTER\r\n\r\n // Position\r\n\r\n objectExtension.pp_getPosition = function pp_getPosition(this: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPosition(this, outPosition);\r\n };\r\n\r\n objectExtension.pp_getPositionWorld = function pp_getPositionWorld(this: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPositionWorld(this, outPosition);\r\n };\r\n\r\n objectExtension.pp_getPositionLocal = function pp_getPositionLocal(this: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPositionLocal(this, outPosition);\r\n };\r\n\r\n // Rotation\r\n\r\n objectExtension.pp_getRotation = function pp_getRotation(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotation(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationDegrees = function pp_getRotationDegrees(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationDegrees(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationRadians = function pp_getRotationRadians(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationRadians(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationMatrix = function pp_getRotationMatrix(this: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationMatrix(this, outRotation!);\r\n };\r\n\r\n objectExtension.pp_getRotationQuat = function pp_getRotationQuat(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationQuat(this, outRotation);\r\n };\r\n\r\n // Rotation World\r\n\r\n objectExtension.pp_getRotationWorld = function pp_getRotationWorld(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorld(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldDegrees = function pp_getRotationWorldDegrees(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldDegrees(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldRadians = function pp_getRotationWorldRadians(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldRadians(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldMatrix = function pp_getRotationWorldMatrix(this: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationWorldMatrix(this, outRotation!);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldQuat = function pp_getRotationWorldQuat(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldQuat(this, outRotation);\r\n };\r\n\r\n // Rotation Local\r\n\r\n objectExtension.pp_getRotationLocal = function pp_getRotationLocal(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocal(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalDegrees = function pp_getRotationLocalDegrees(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalDegrees(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalRadians = function pp_getRotationLocalRadians(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalRadians(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalMatrix = function pp_getRotationLocalMatrix(this: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationLocalMatrix(this, outRotation!);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalQuat = function pp_getRotationLocalQuat(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalQuat(this, outRotation);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_getScale = function pp_getScale(this: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScale(this, outScale);\r\n };\r\n\r\n objectExtension.pp_getScaleWorld = function pp_getScaleWorld(this: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScaleWorld(this, outScale);\r\n };\r\n\r\n objectExtension.pp_getScaleLocal = function pp_getScaleLocal(this: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScaleLocal(this, outScale);\r\n };\r\n\r\n // Transform\r\n\r\n objectExtension.pp_getTransform = function pp_getTransform(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransform(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformMatrix = function pp_getTransformMatrix(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformMatrix(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformQuat = function pp_getTransformQuat(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformQuat(this, outTransform);\r\n };\r\n\r\n // Transform World\r\n\r\n objectExtension.pp_getTransformWorld = function pp_getTransformWorld(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorld(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformWorldMatrix = function pp_getTransformWorldMatrix(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldMatrix(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformWorldQuat = function pp_getTransformWorldQuat(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldQuat(this, outTransform);\r\n };\r\n\r\n // Transform Local\r\n\r\n objectExtension.pp_getTransformLocal = function pp_getTransformLocal(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocal(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformLocalMatrix = function pp_getTransformLocalMatrix(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocalMatrix(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformLocalQuat = function pp_getTransformLocalQuat(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocalQuat(this, outTransform);\r\n };\r\n\r\n // Axes\r\n\r\n objectExtension.pp_getAxes = function pp_getAxes(this: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxes(this, outAxes);\r\n };\r\n\r\n objectExtension.pp_getAxesWorld = function pp_getAxesWorld(this: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxesWorld(this, outAxes);\r\n };\r\n\r\n objectExtension.pp_getAxesLocal = function pp_getAxesLocal(this: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxesLocal(this, outAxes);\r\n };\r\n\r\n // Forward\r\n\r\n objectExtension.pp_getForward = function pp_getForward(this: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForward(this, outForward);\r\n };\r\n\r\n objectExtension.pp_getForwardWorld = function pp_getForwardWorld(this: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForwardWorld(this, outForward);\r\n };\r\n\r\n objectExtension.pp_getForwardLocal = function pp_getForwardLocal(this: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForwardLocal(this, outForward);\r\n };\r\n\r\n // Backward\r\n\r\n objectExtension.pp_getBackward = function pp_getBackward(this: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackward(this, outBackward);\r\n };\r\n\r\n objectExtension.pp_getBackwardWorld = function pp_getBackwardWorld(this: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackwardWorld(this, outBackward);\r\n };\r\n\r\n objectExtension.pp_getBackwardLocal = function pp_getBackwardLocal(this: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackwardLocal(this, outBackward);\r\n };\r\n\r\n // Up\r\n\r\n objectExtension.pp_getUp = function pp_getUp(this: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUp(this, outUp);\r\n };\r\n\r\n objectExtension.pp_getUpWorld = function pp_getUpWorld(this: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUpWorld(this, outUp);\r\n };\r\n\r\n objectExtension.pp_getUpLocal = function pp_getUpLocal(this: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUpLocal(this, outUp);\r\n };\r\n\r\n // Down\r\n\r\n objectExtension.pp_getDown = function pp_getDown(this: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDown(this, outDown);\r\n };\r\n\r\n objectExtension.pp_getDownWorld = function pp_getDownWorld(this: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDownWorld(this, outDown);\r\n };\r\n\r\n objectExtension.pp_getDownLocal = function pp_getDownLocal(this: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDownLocal(this, outDown);\r\n };\r\n\r\n // Left\r\n\r\n objectExtension.pp_getLeft = function pp_getLeft(this: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeft(this, outLeft);\r\n };\r\n\r\n objectExtension.pp_getLeftWorld = function pp_getLeftWorld(this: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeftWorld(this, outLeft);\r\n };\r\n\r\n objectExtension.pp_getLeftLocal = function pp_getLeftLocal(this: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeftLocal(this, outLeft);\r\n };\r\n\r\n // Right\r\n\r\n objectExtension.pp_getRight = function pp_getRight(this: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRight(this, outRight);\r\n };\r\n\r\n objectExtension.pp_getRightWorld = function pp_getRightWorld(this: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRightWorld(this, outRight);\r\n };\r\n\r\n objectExtension.pp_getRightLocal = function pp_getRightLocal(this: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRightLocal(this, outRight);\r\n };\r\n\r\n // SETTER\r\n\r\n // Position\r\n\r\n objectExtension.pp_setPosition = function pp_setPosition(this: Object3D, position: Readonly): Object3D {\r\n return ObjectUtils.setPosition(this, position);\r\n };\r\n\r\n objectExtension.pp_setPositionWorld = function pp_setPositionWorld(this: Object3D, position: Readonly): Object3D {\r\n return ObjectUtils.setPositionWorld(this, position);\r\n };\r\n\r\n objectExtension.pp_setPositionLocal = function pp_setPositionLocal(this: Object3D, position: Readonly): Object3D {\r\n return ObjectUtils.setPositionLocal(this, position);\r\n };\r\n\r\n // Rotation\r\n\r\n objectExtension.pp_setRotation = function pp_setRotation(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotation(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationDegrees = function pp_setRotationDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationRadians = function pp_setRotationRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationMatrix = function pp_setRotationMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationQuat = function pp_setRotationQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationQuat(this, rotation);\r\n };\r\n\r\n // Rotation World\r\n\r\n objectExtension.pp_setRotationWorld = function pp_setRotationWorld(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorld(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldDegrees = function pp_setRotationWorldDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldRadians = function pp_setRotationWorldRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldMatrix = function pp_setRotationWorldMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldQuat = function pp_setRotationWorldQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldQuat(this, rotation);\r\n };\r\n\r\n // Rotation Local\r\n\r\n objectExtension.pp_setRotationLocal = function pp_setRotationLocal(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocal(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalDegrees = function pp_setRotationLocalDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalRadians = function pp_setRotationLocalRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalMatrix = function pp_setRotationLocalMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalQuat = function pp_setRotationLocalQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalQuat(this, rotation);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_setScale = function pp_setScale(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScale(this, scale as Vector3);\r\n };\r\n\r\n objectExtension.pp_setScaleWorld = function pp_setScaleWorld(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScaleWorld(this, scale as Vector3);\r\n };\r\n\r\n objectExtension.pp_setScaleLocal = function pp_setScaleLocal(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScaleLocal(this, scale as Vector3);\r\n };\r\n\r\n // Axes \r\n\r\n objectExtension.pp_setAxes = function pp_setAxes(this: Object3D, left?: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setAxes(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setAxesWorld = function pp_setAxesWorld(this: Object3D, left?: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setAxesWorld(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setAxesLocal = function pp_setAxesLocal(this: Object3D, left?: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setAxesLocal(this, left, up, forward);\r\n };\r\n\r\n // Forward\r\n\r\n objectExtension.pp_setForward = function pp_setForward(this: Object3D, forward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setForward(this, forward, up, left);\r\n };\r\n\r\n objectExtension.pp_setForwardWorld = function pp_setForwardWorld(this: Object3D, forward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setForwardWorld(this, forward, up, left);\r\n };\r\n\r\n objectExtension.pp_setForwardLocal = function pp_setForwardLocal(this: Object3D, forward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setForwardLocal(this, forward, up, left);\r\n };\r\n\r\n // Backward\r\n\r\n objectExtension.pp_setBackward = function pp_setBackward(this: Object3D, backward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setBackward(this, backward, up, left);\r\n };\r\n\r\n objectExtension.pp_setBackwardWorld = function pp_setBackwardWorld(this: Object3D, backward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setBackwardWorld(this, backward, up, left);\r\n };\r\n\r\n objectExtension.pp_setBackwardLocal = function pp_setBackwardLocal(this: Object3D, backward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setBackwardLocal(this, backward, up, left);\r\n };\r\n\r\n // Up\r\n\r\n objectExtension.pp_setUp = function pp_setUp(this: Object3D, up: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setUp(this, up, forward, left);\r\n };\r\n\r\n objectExtension.pp_setUpWorld = function pp_setUpWorld(this: Object3D, up: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setUpWorld(this, up, forward, left);\r\n };\r\n\r\n objectExtension.pp_setUpLocal = function pp_setUpLocal(this: Object3D, up: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setUpLocal(this, up, forward, left);\r\n };\r\n\r\n // Down\r\n\r\n objectExtension.pp_setDown = function pp_setDown(this: Object3D, down: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setDown(this, down, forward, left);\r\n };\r\n\r\n objectExtension.pp_setDownWorld = function pp_setDownWorld(this: Object3D, down: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setDownWorld(this, down, forward, left);\r\n };\r\n\r\n objectExtension.pp_setDownLocal = function pp_setDownLocal(this: Object3D, down: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setDownLocal(this, down, forward, left);\r\n };\r\n\r\n // Left\r\n\r\n objectExtension.pp_setLeft = function pp_setLeft(this: Object3D, left: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setLeft(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setLeftWorld = function pp_setLeftWorld(this: Object3D, left: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setLeftWorld(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setLeftLocal = function pp_setLeftLocal(this: Object3D, left: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setLeftLocal(this, left, up, forward);\r\n };\r\n\r\n // Right\r\n\r\n objectExtension.pp_setRight = function pp_setRight(this: Object3D, right: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setRight(this, right, up, forward);\r\n };\r\n\r\n objectExtension.pp_setRightWorld = function pp_setRightWorld(this: Object3D, right: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setRightWorld(this, right, up, forward);\r\n };\r\n\r\n objectExtension.pp_setRightLocal = function pp_setRightLocal(this: Object3D, right: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setRightLocal(this, right, up, forward);\r\n };\r\n\r\n // Transform\r\n\r\n objectExtension.pp_setTransform = function pp_setTransform(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransform(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformMatrix = function pp_setTransformMatrix(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformMatrix(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformQuat = function pp_setTransformQuat(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformQuat(this, transform);\r\n };\r\n\r\n // Transform World\r\n\r\n objectExtension.pp_setTransformWorld = function pp_setTransformWorld(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformWorld(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformWorldMatrix = function pp_setTransformWorldMatrix(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformWorldMatrix(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformWorldQuat = function pp_setTransformWorldQuat(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformWorldQuat(this, transform);\r\n };\r\n\r\n // Transform Local\r\n\r\n objectExtension.pp_setTransformLocal = function pp_setTransformLocal(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformLocal(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformLocalMatrix = function pp_setTransformLocalMatrix(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformLocalMatrix(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformLocalQuat = function pp_setTransformLocalQuat(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformLocalQuat(this, transform);\r\n };\r\n\r\n // RESET\r\n\r\n // Position\r\n\r\n objectExtension.pp_resetPosition = function pp_resetPosition(this: Object3D): Object3D {\r\n return ObjectUtils.resetPosition(this);\r\n };\r\n\r\n objectExtension.pp_resetPositionWorld = function pp_resetPositionWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetPositionWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetPositionLocal = function pp_resetPositionLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetPositionLocal(this);\r\n };\r\n\r\n // Rotation\r\n\r\n objectExtension.pp_resetRotation = function pp_resetRotation(this: Object3D): Object3D {\r\n return ObjectUtils.resetRotation(this);\r\n };\r\n\r\n objectExtension.pp_resetRotationWorld = function pp_resetRotationWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetRotationWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetRotationLocal = function pp_resetRotationLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetRotationLocal(this);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_resetScale = function pp_resetScale(this: Object3D): Object3D {\r\n return ObjectUtils.resetScale(this);\r\n };\r\n\r\n objectExtension.pp_resetScaleWorld = function pp_resetScaleWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetScaleWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetScaleLocal = function pp_resetScaleLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetScaleLocal(this);\r\n };\r\n\r\n // Transform\r\n\r\n objectExtension.pp_resetTransform = function pp_resetTransform(this: Object3D): Object3D {\r\n return ObjectUtils.resetTransform(this);\r\n };\r\n\r\n objectExtension.pp_resetTransformWorld = function pp_resetTransformWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetTransformWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetTransformLocal = function pp_resetTransformLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetTransformLocal(this);\r\n };\r\n\r\n // TRANSFORMATIONS\r\n\r\n // Translate\r\n\r\n objectExtension.pp_translate = function pp_translate(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translate(this, translation);\r\n };\r\n\r\n objectExtension.pp_translateWorld = function pp_translateWorld(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translateWorld(this, translation);\r\n };\r\n\r\n objectExtension.pp_translateLocal = function pp_translateLocal(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translateLocal(this, translation);\r\n };\r\n\r\n objectExtension.pp_translateObject = function pp_translateObject(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translateObject(this, translation);\r\n };\r\n\r\n // Translate Axis\r\n\r\n objectExtension.pp_translateAxis = function pp_translateAxis(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxis(this, amount, direction);\r\n };\r\n\r\n objectExtension.pp_translateAxisWorld = function pp_translateAxisWorld(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxisWorld(this, amount, direction);\r\n };\r\n\r\n objectExtension.pp_translateAxisLocal = function pp_translateAxisLocal(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxisLocal(this, amount, direction);\r\n };\r\n\r\n objectExtension.pp_translateAxisObject = function pp_translateAxisObject(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxisObject(this, amount, direction);\r\n };\r\n\r\n // Rotate\r\n\r\n objectExtension.pp_rotate = function pp_rotate(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotate(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateDegrees = function pp_rotateDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateRadians = function pp_rotateRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateMatrix = function pp_rotateMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateQuat = function pp_rotateQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateQuat(this, rotation);\r\n };\r\n\r\n // Rotate World\r\n\r\n objectExtension.pp_rotateWorld = function pp_rotateWorld(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorld(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldDegrees = function pp_rotateWorldDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldRadians = function pp_rotateWorldRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldMatrix = function pp_rotateWorldMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldQuat = function pp_rotateWorldQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldQuat(this, rotation);\r\n };\r\n\r\n // Rotate Local\r\n\r\n objectExtension.pp_rotateLocal = function pp_rotateLocal(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocal(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalDegrees = function pp_rotateLocalDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalRadians = function pp_rotateLocalRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalMatrix = function pp_rotateLocalMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalQuat = function pp_rotateLocalQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalQuat(this, rotation);\r\n };\r\n\r\n // Rotate Object\r\n\r\n objectExtension.pp_rotateObject = function pp_rotateObject(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObject(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectDegrees = function pp_rotateObjectDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectRadians = function pp_rotateObjectRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectMatrix = function pp_rotateObjectMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectQuat = function pp_rotateObjectQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectQuat(this, rotation);\r\n };\r\n\r\n // Rotate Axis\r\n\r\n objectExtension.pp_rotateAxis = function pp_rotateAxis(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxis(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisDegrees = function pp_rotateAxisDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisRadians = function pp_rotateAxisRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Axis World\r\n\r\n objectExtension.pp_rotateAxisWorld = function pp_rotateAxisWorld(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisWorld(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisWorldDegrees = function pp_rotateAxisWorldDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisWorldDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisWorldRadians = function pp_rotateAxisWorldRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisWorldRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Axis Local\r\n\r\n objectExtension.pp_rotateAxisLocal = function pp_rotateAxisLocal(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisLocal(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisLocalDegrees = function pp_rotateAxisLocalDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisLocalDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisLocalRadians = function pp_rotateAxisLocalRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisLocalRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Axis Object\r\n\r\n objectExtension.pp_rotateAxisObject = function pp_rotateAxisObject(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisObject(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisObjectDegrees = function pp_rotateAxisObjectDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisObjectDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisObjectRadians = function pp_rotateAxisObjectRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisObjectRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Around\r\n\r\n objectExtension.pp_rotateAround = function pp_rotateAround(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAround(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundDegrees = function pp_rotateAroundDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundRadians = function pp_rotateAroundRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundMatrix = function pp_rotateAroundMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundQuat = function pp_rotateAroundQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around World\r\n\r\n objectExtension.pp_rotateAroundWorld = function pp_rotateAroundWorld(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorld(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldDegrees = function pp_rotateAroundWorldDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldRadians = function pp_rotateAroundWorldRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldMatrix = function pp_rotateAroundWorldMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldQuat = function pp_rotateAroundWorldQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around Local\r\n\r\n objectExtension.pp_rotateAroundLocal = function pp_rotateAroundLocal(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocal(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalDegrees = function pp_rotateAroundLocalDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalRadians = function pp_rotateAroundLocalRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalMatrix = function pp_rotateAroundLocalMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalQuat = function pp_rotateAroundLocalQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around Object\r\n\r\n objectExtension.pp_rotateAroundObject = function pp_rotateAroundObject(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObject(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectDegrees = function pp_rotateAroundObjectDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectRadians = function pp_rotateAroundObjectRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectMatrix = function pp_rotateAroundObjectMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectQuat = function pp_rotateAroundObjectQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around Axis\r\n\r\n objectExtension.pp_rotateAroundAxis = function pp_rotateAroundAxis(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxis(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisDegrees = function pp_rotateAroundAxisDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisRadians = function pp_rotateAroundAxisRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Rotate Around Axis World\r\n\r\n objectExtension.pp_rotateAroundAxisWorld = function pp_rotateAroundAxisWorld(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorld(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisWorldDegrees = function pp_rotateAroundAxisWorldDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisWorldRadians = function pp_rotateAroundAxisWorldRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Rotate Around Axis Local\r\n\r\n objectExtension.pp_rotateAroundAxisLocal = function pp_rotateAroundAxisLocal(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocal(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisLocalDegrees = function pp_rotateAroundAxisLocalDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisLocalRadians = function pp_rotateAroundAxisLocalRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Rotate Around Axis Object\r\n\r\n objectExtension.pp_rotateAroundAxisObject = function pp_rotateAroundAxisObject(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisObject(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisObjectDegrees = function pp_rotateAroundAxisObjectDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisObjectRadians = function pp_rotateAroundAxisObjectRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_scaleObject = function pp_scaleObject(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.scaleObject(this, scale as Vector3);\r\n };\r\n\r\n // Look At\r\n\r\n objectExtension.pp_lookAt = function pp_lookAt(this: Object3D, position: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookAt(this, position, up);\r\n };\r\n\r\n objectExtension.pp_lookAtWorld = function pp_lookAtWorld(this: Object3D, position: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookAtWorld(this, position, up);\r\n };\r\n\r\n objectExtension.pp_lookAtLocal = function pp_lookAtLocal(this: Object3D, position: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookAtLocal(this, position, up);\r\n };\r\n\r\n objectExtension.pp_lookTo = function pp_lookTo(this: Object3D, direction: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookTo(this, direction, up);\r\n };\r\n\r\n objectExtension.pp_lookToWorld = function pp_lookToWorld(this: Object3D, direction: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookToWorld(this, direction, up);\r\n };\r\n\r\n objectExtension.pp_lookToLocal = function pp_lookToLocal(this: Object3D, direction: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookToLocal(this, direction, up);\r\n };\r\n\r\n // EXTRA\r\n\r\n // Convert Vector Object World\r\n\r\n objectExtension.pp_convertPositionObjectToWorld = function pp_convertPositionObjectToWorld(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionObjectToWorld(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionObjectToWorld = function pp_convertDirectionObjectToWorld(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionObjectToWorld(this, direction, outDirection);\r\n };\r\n\r\n objectExtension.pp_convertPositionWorldToObject = function pp_convertPositionWorldToObject(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionWorldToObject(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionWorldToObject = function pp_convertDirectionWorldToObject(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionWorldToObject(this, direction, outDirection);\r\n };\r\n\r\n // Convert Vector Local World\r\n\r\n objectExtension.pp_convertPositionLocalToWorld = function pp_convertPositionLocalToWorld(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionLocalToWorld(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionLocalToWorld = function pp_convertDirectionLocalToWorld(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionLocalToWorld(this, direction, outDirection);\r\n };\r\n\r\n objectExtension.pp_convertPositionWorldToLocal = function pp_convertPositionWorldToLocal(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionWorldToLocal(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionWorldToLocal = function pp_convertDirectionWorldToLocal(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionWorldToLocal(this, direction, outDirection);\r\n };\r\n\r\n // Convert Vector Local Object\r\n\r\n objectExtension.pp_convertPositionObjectToLocal = function pp_convertPositionObjectToLocal(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionObjectToLocal(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionObjectToLocal = function pp_convertDirectionObjectToLocal(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionObjectToLocal(this, direction, outDirection);\r\n };\r\n\r\n objectExtension.pp_convertPositionLocalToObject = function pp_convertPositionLocalToObject(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionLocalToObject(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionLocalToObject = function pp_convertDirectionLocalToObject(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionLocalToObject(this, direction, outDirection);\r\n };\r\n\r\n // Convert Transform Object World\r\n\r\n objectExtension.pp_convertTransformObjectToWorld = function pp_convertTransformObjectToWorld(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorld(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToWorldMatrix = function pp_convertTransformObjectToWorldMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorldMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToWorldQuat = function pp_convertTransformObjectToWorldQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorldQuat(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToObject = function pp_convertTransformWorldToObject(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObject(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToObjectMatrix = function pp_convertTransformWorldToObjectMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObjectMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToObjectQuat = function pp_convertTransformWorldToObjectQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObjectQuat(this, transform, outTransform);\r\n };\r\n\r\n // Convert Transform Local World\r\n\r\n objectExtension.pp_convertTransformLocalToWorld = function pp_convertTransformLocalToWorld(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorld(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToWorldMatrix = function pp_convertTransformLocalToWorldMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorldMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToWorldQuat = function pp_convertTransformLocalToWorldQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorldQuat(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToLocal = function pp_convertTransformWorldToLocal(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocal(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToLocalMatrix = function pp_convertTransformWorldToLocalMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocalMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToLocalQuat = function pp_convertTransformWorldToLocalQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocalQuat(this, transform, outTransform);\r\n };\r\n\r\n // Convert Transform Object Local\r\n\r\n objectExtension.pp_convertTransformObjectToLocal = function pp_convertTransformObjectToLocal(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocal(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToLocalMatrix = function pp_convertTransformObjectToLocalMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocalMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToLocalQuat = function pp_convertTransformObjectToLocalQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocalQuat(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToObject = function pp_convertTransformLocalToObject(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObject(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToObjectMatrix = function pp_convertTransformLocalToObjectMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObjectMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToObjectQuat = function pp_convertTransformLocalToObjectQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObjectQuat(this, transform, outTransform);\r\n };\r\n\r\n // Parent\r\n\r\n objectExtension.pp_setParent = function pp_setParent(this: Object3D, newParent: Object3D, keepTransformWorld?: boolean): Object3D {\r\n return ObjectUtils.setParent(this, newParent, keepTransformWorld);\r\n };\r\n\r\n objectExtension.pp_getParent = function pp_getParent(this: Readonly): Object3D | null {\r\n return ObjectUtils.getParent(this);\r\n };\r\n\r\n // Component\r\n\r\n objectExtension.pp_addComponent = function pp_addComponent(this: Object3D, classOrType: ComponentConstructor | string, paramsOrActive?: Record | boolean, active?: boolean): T | null {\r\n return ObjectUtils.addComponent(this, classOrType, paramsOrActive, active);\r\n };\r\n\r\n objectExtension.pp_getComponent = function pp_getComponent(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponent(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentSelf = function pp_getComponentSelf(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentSelf(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentHierarchy = function pp_getComponentHierarchy(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentHierarchy(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentHierarchyBreadth = function pp_getComponentHierarchyBreadth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentHierarchyBreadth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentHierarchyDepth = function pp_getComponentHierarchyDepth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentHierarchyDepth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentDescendants = function pp_getComponentDescendants(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentDescendants(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentDescendantsBreadth = function pp_getComponentDescendantsBreadth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentDescendantsBreadth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentDescendantsDepth = function pp_getComponentDescendantsDepth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentDescendantsDepth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentChildren = function pp_getComponentChildren(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentChildren(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponents = function pp_getComponents(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponents(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsSelf = function pp_getComponentsSelf(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsSelf(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsHierarchy = function pp_getComponentsHierarchy(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchy(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsHierarchyBreadth = function pp_getComponentsHierarchyBreadth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchyBreadth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsHierarchyDepth = function pp_getComponentsHierarchyDepth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchyDepth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsDescendants = function pp_getComponentsDescendants(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendants(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsDescendantsBreadth = function pp_getComponentsDescendantsBreadth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendantsBreadth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsDescendantsDepth = function pp_getComponentsDescendantsDepth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendantsDepth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsChildren = function pp_getComponentsChildren(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsChildren(this, classOrType);\r\n };\r\n\r\n // Active\r\n\r\n objectExtension.pp_setActive = function pp_setActive(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActive(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveSelf = function pp_setActiveSelf(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveSelf(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveHierarchy = function pp_setActiveHierarchy(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchy(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveHierarchyBreadth = function pp_setActiveHierarchyBreadth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchyBreadth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveHierarchyDepth = function pp_setActiveHierarchyDepth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchyDepth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveDescendants = function pp_setActiveDescendants(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendants(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveDescendantsBreadth = function pp_setActiveDescendantsBreadth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendantsBreadth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveDescendantsDepth = function pp_setActiveDescendantsDepth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendantsDepth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveChildren = function pp_setActiveChildren(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveChildren(this, active);\r\n };\r\n\r\n // Uniform Scale\r\n\r\n objectExtension.pp_hasUniformScale = function pp_hasUniformScale(this: Readonly): boolean {\r\n return ObjectUtils.hasUniformScale(this);\r\n };\r\n\r\n objectExtension.pp_hasUniformScaleWorld = function pp_hasUniformScaleWorld(this: Readonly): boolean {\r\n return ObjectUtils.hasUniformScaleWorld(this);\r\n };\r\n\r\n objectExtension.pp_hasUniformScaleLocal = function pp_hasUniformScaleLocal(this: Readonly): boolean {\r\n return ObjectUtils.hasUniformScaleLocal(this);\r\n };\r\n\r\n // Clone\r\n\r\n objectExtension.pp_clone = function pp_clone(this: Readonly, cloneParams?: Readonly): Object3D | null {\r\n return ObjectUtils.clone(this, cloneParams);\r\n };\r\n\r\n objectExtension.pp_isCloneable = function pp_isCloneable(this: Readonly, cloneParams?: Readonly): boolean {\r\n return ObjectUtils.isCloneable(this, cloneParams);\r\n };\r\n\r\n // To String\r\n\r\n objectExtension.pp_toString = function pp_toString(this: Readonly): string {\r\n return ObjectUtils.toString(this);\r\n };\r\n\r\n objectExtension.pp_toStringExtended = function pp_toStringExtended(this: Readonly): string {\r\n return ObjectUtils.toStringExtended(this);\r\n };\r\n\r\n objectExtension.pp_toStringCompact = function pp_toStringCompact(this: Readonly): string {\r\n return ObjectUtils.toStringCompact(this);\r\n };\r\n\r\n // Get Object By Name\r\n\r\n objectExtension.pp_getObjectByName = function pp_getObjectByName(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByName(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameHierarchy = function pp_getObjectByNameHierarchy(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchy(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameHierarchyBreadth = function pp_getObjectByNameHierarchyBreadth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchyBreadth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameHierarchyDepth = function pp_getObjectByNameHierarchyDepth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchyDepth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameDescendants = function pp_getObjectByNameDescendants(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendants(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameDescendantsBreadth = function pp_getObjectByNameDescendantsBreadth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendantsBreadth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameDescendantsDepth = function pp_getObjectByNameDescendantsDepth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendantsDepth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameChildren = function pp_getObjectByNameChildren(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameChildren(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectsByName = function pp_getObjectsByName(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByName(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameHierarchy = function pp_getObjectsByNameHierarchy(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchy(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameHierarchyBreadth = function pp_getObjectsByNameHierarchyBreadth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchyBreadth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameHierarchyDepth = function pp_getObjectsByNameHierarchyDepth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchyDepth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameDescendants = function pp_getObjectsByNameDescendants(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendants(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameDescendantsBreadth = function pp_getObjectsByNameDescendantsBreadth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendantsBreadth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameDescendantsDepth = function pp_getObjectsByNameDescendantsDepth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendantsDepth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameChildren = function pp_getObjectsByNameChildren(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameChildren(this, name, isRegex);\r\n };\r\n\r\n // Get Object By ID\r\n\r\n objectExtension.pp_getObjectByID = function pp_getObjectByID(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByID(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDHierarchy = function pp_getObjectByIDHierarchy(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchy(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDHierarchyBreadth = function pp_getObjectByIDHierarchyBreadth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchyBreadth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDHierarchyDepth = function pp_getObjectByIDHierarchyDepth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchyDepth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDDescendants = function pp_getObjectByIDDescendants(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendants(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDDescendantsBreadth = function pp_getObjectByIDDescendantsBreadth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendantsBreadth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDDescendantsDepth = function pp_getObjectByIDDescendantsDepth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendantsDepth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDChildren = function pp_getObjectByIDChildren(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDChildren(this, id);\r\n };\r\n\r\n // Get Hierarchy\r\n\r\n objectExtension.pp_getHierarchyBreadth = function pp_getHierarchyBreadth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getHierarchyBreadth(this);\r\n };\r\n\r\n objectExtension.pp_getHierarchyDepth = function pp_getHierarchyDepth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getHierarchyDepth(this);\r\n };\r\n\r\n objectExtension.pp_getDescendants = function pp_getDescendants(this: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendants(this);\r\n };\r\n\r\n objectExtension.pp_getDescendantsBreadth = function pp_getDescendantsBreadth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendantsBreadth(this);\r\n };\r\n\r\n objectExtension.pp_getDescendantsDepth = function pp_getDescendantsDepth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendantsDepth(this);\r\n };\r\n\r\n objectExtension.pp_getChildren = function pp_getChildren(this: Readonly): Object3D[] {\r\n return ObjectUtils.getChildren(this);\r\n };\r\n\r\n objectExtension.pp_getSelf = function pp_getSelf(this: Readonly): Object3D {\r\n return ObjectUtils.getSelf(this);\r\n };\r\n\r\n // Cauldron\r\n\r\n objectExtension.pp_addObject = function pp_addObject(this: Object3D): Object3D {\r\n return ObjectUtils.addObject(this);\r\n };\r\n\r\n objectExtension.pp_getName = function pp_getName(this: Readonly): string {\r\n return ObjectUtils.getName(this);\r\n };\r\n\r\n objectExtension.pp_setName = function pp_setName(this: Object3D, name: string): Object3D {\r\n return ObjectUtils.setName(this, name);\r\n };\r\n\r\n objectExtension.pp_getEngine = function pp_getEngine(this: Readonly): WonderlandEngine {\r\n return ObjectUtils.getEngine(this);\r\n };\r\n\r\n objectExtension.pp_getID = function pp_getID(this: Readonly): number {\r\n return ObjectUtils.getID(this);\r\n };\r\n\r\n objectExtension.pp_markDirty = function pp_markDirty(this: Object3D): Object3D {\r\n return ObjectUtils.markDirty(this);\r\n };\r\n\r\n objectExtension.pp_isTransformChanged = function pp_isTransformChanged(this: Readonly): boolean {\r\n return ObjectUtils.isTransformChanged(this);\r\n };\r\n\r\n objectExtension.pp_equals = function pp_equals(this: Readonly, object: Readonly): boolean {\r\n return ObjectUtils.equals(this, object);\r\n };\r\n\r\n objectExtension.pp_destroy = function pp_destroy(this: Object3D): void {\r\n return ObjectUtils.destroy(this);\r\n };\r\n\r\n objectExtension.pp_reserveObjects = function pp_reserveObjects(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjects(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsSelf = function pp_reserveObjectsSelf(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsSelf(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsHierarchy = function pp_reserveObjectsHierarchy(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsHierarchy(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsDescendants = function pp_reserveObjectsDescendants(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsDescendants(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsChildren = function pp_reserveObjectsChildren(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsChildren(this, count);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMap = function pp_getComponentsAmountMap(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMap(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapSelf = function pp_getComponentsAmountMapSelf(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapSelf(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapHierarchy = function pp_getComponentsAmountMapHierarchy(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapHierarchy(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapDescendants = function pp_getComponentsAmountMapDescendants(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapDescendants(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapChildren = function pp_getComponentsAmountMapChildren(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapChildren(this, outComponentsAmountMap);\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(objectExtension, Object3D.prototype, false, true, true);\r\n}", "import { initCauldronExtensions } from \"./cauldron_extensions.js\";\r\nimport { initObjectExtension } from \"./object_extension.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./cauldron_extensions.js\";\r\nimport \"./object_extension.js\";\r\n\r\nexport function initWLExtensions(): void {\r\n initObjectExtension();\r\n initCauldronExtensions();\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initCauldronMods(): void {\r\n _initEmitterModPrototype();\r\n}\r\n\r\nfunction _initEmitterModPrototype(): void {\r\n const emitterMod: Record = {};\r\n\r\n emitterMod._flushTransactions = function _flushTransactions(this: Emitter): void {\r\n const listeners = this._listeners;\r\n const _transactions: any[] = (this as any)._transactions;\r\n\r\n for (let i = 0; i < _transactions.length; i++) {\r\n const transaction = _transactions[i];\r\n if (transaction.type == 1) {\r\n listeners.push(transaction.data);\r\n } else {\r\n this.remove(transaction.data);\r\n }\r\n }\r\n\r\n _transactions.length = 0;\r\n };\r\n\r\n PluginUtils.injectProperties(emitterMod, Emitter.prototype, false, true, true);\r\n}", "import { InputComponent, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Cursor, CursorTarget, HitTestLocation } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../../../input/cauldron/input_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { mat4_create, quat2_create, vec3_create } from \"../../../js/extensions/array/vec_create_extension.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initCursorComponentMod() {\r\n _initCursorComponentModPrototype();\r\n}\r\n\r\nfunction _initCursorComponentModPrototype() {\r\n\r\n let cursorComponentMod = {};\r\n\r\n // Modified Functions\r\n\r\n cursorComponentMod.init = function init() {\r\n this.maxDistance = 100;\r\n this.visible = false;\r\n this.globalTarget = this.object.pp_addComponent(CursorTarget);\r\n this.hitTestTarget = this.object.pp_addComponent(CursorTarget);\r\n this.hoveringObject = null;\r\n this.hoveringObjectTarget = null;\r\n\r\n this.cursorPos = vec3_create();\r\n\r\n this._collisionMask = (1 << this.collisionGroup);\r\n\r\n this._doubleClickTimer = 0;\r\n this._tripleClickTimer = 0;\r\n this._multipleClickObject = null;\r\n this._multipleClickDelay = 0.3;\r\n\r\n this._onDestroyCallbacks = [];\r\n\r\n this._prevHitLocationLocalToTarget = vec3_create();\r\n\r\n this._pointerID = null;\r\n\r\n this._updatePointerStyle = false;\r\n\r\n this._lastClientX = null;\r\n this._lastClientY = null;\r\n this._lastWidth = null;\r\n this._lastHeight = null;\r\n this._lastPointerID = null;\r\n\r\n this._lastOriginalMouseEvent = null;\r\n this._lastOriginalGamepadEvent = null;\r\n\r\n this._pointerLeaveToProcess = false;\r\n this._pointerLeaveMouseEvent = null;\r\n\r\n this._transformQuat = quat2_create();\r\n this._origin = vec3_create();\r\n this._direction = vec3_create();\r\n\r\n this._isHovering = false;\r\n\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n\r\n this._tempVec = vec3_create();\r\n\r\n this._viewComponent = null;\r\n\r\n this._cursorRayOrigin = vec3_create();\r\n this._cursorRayScale = vec3_create();\r\n\r\n this._projectionMatrix = mat4_create();\r\n\r\n this._hitTestLocation = null;\r\n this._hitTestObject = null;\r\n\r\n this._rayHitLocation = vec3_create();\r\n this._hitObjectData = [null, null, null];\r\n\r\n this._myViewEventListenersRegistered = false;\r\n };\r\n\r\n cursorComponentMod.start = function start() {\r\n if (this.handedness == 0) {\r\n let inputComp = this.object.pp_getComponent(InputComponent);\r\n if (!inputComp) {\r\n console.warn(\"cursor component on object \" + this.object.pp_getName() + \" was configured with handedness \\\"input component\\\", \" + \"but object has no input component.\");\r\n } else {\r\n this.handedness = inputComp.handedness;\r\n this.input = inputComp;\r\n }\r\n } else {\r\n this.handedness = InputUtils.getHandednessByIndex(this.handedness - 1);\r\n }\r\n\r\n this.pp_setViewComponent(this.object.pp_getComponent(ViewComponent));\r\n\r\n XRUtils.registerSessionStartEventListener(this, this.setupVREvents.bind(this), true, false, this.engine);\r\n this._onDestroyCallbacks.push(() => {\r\n XRUtils.unregisterSessionStartEventListener(this, this.engine);\r\n });\r\n\r\n if (this.cursorRayObject) {\r\n this.cursorRayObject.pp_setActive(false);\r\n this._cursorRayScale.set(this.cursorRayObject.pp_getScaleLocal());\r\n\r\n // Set ray to a good default distance of the cursor of 1m \r\n this._setCursorRayTransform(null);\r\n }\r\n\r\n this._setCursorVisibility(false);\r\n\r\n if (this.useWebXRHitTest) {\r\n this._hitTestObject = this.object.pp_addObject();\r\n this._hitTestLocation = this.hitTestObject.pp_addComponent(HitTestLocation, { scaleObject: false, });\r\n }\r\n };\r\n\r\n cursorComponentMod.update = function update(dt) {\r\n if (this._doubleClickTimer > 0) {\r\n this._doubleClickTimer -= dt;\r\n }\r\n\r\n if (this._tripleClickTimer > 0) {\r\n this._tripleClickTimer -= dt;\r\n }\r\n\r\n // If in XR, set the cursor ray based on object transform\r\n // View Component not null is currently used as a way to specify this is cursor should only work for Non XR\r\n if (XRUtils.isSessionActive(this.engine) && this._viewComponent == null) {\r\n // Since Google Cardboard tap is registered as arTouchDown without a gamepad, we need to check for gamepad presence \r\n if (this.arTouchDown && this._pp_isAR()) {\r\n let axes = XRUtils.getSession(this.engine).inputSources[0].gamepad.axes;\r\n // Screenspace Y is inverted \r\n this._direction.vec3_set(axes[0], -axes[1], -1.0);\r\n this.updateDirection();\r\n } else {\r\n this.object.pp_getPosition(this._origin);\r\n this.object.pp_getForward(this._direction);\r\n }\r\n\r\n let hitObjectData = this._pp_rayCast();\r\n this._pp_hoverBehaviour(hitObjectData[0], hitObjectData[1], hitObjectData[2], this._lastOriginalGamepadEvent);\r\n } else if (!XRUtils.isSessionActive(this.engine) && this._viewComponent != null) {\r\n if (this._lastPointerID != null) {\r\n this._pp_updateMousePos(this._lastClientX, this._lastClientY, this._lastWidth, this._lastHeight);\r\n\r\n let hitObjectData = this._pp_rayCast();\r\n this._pp_hoverBehaviour(hitObjectData[0], hitObjectData[1], hitObjectData[2], this._lastOriginalMouseEvent);\r\n\r\n if (this.hoveringObject != null) {\r\n this._pointerID = this._lastPointerID;\r\n } else {\r\n this._pointerID = null;\r\n }\r\n } else if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, this._lastOriginalMouseEvent, true); // Trigger Unhover\r\n }\r\n } else if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, null, true); // Trigger Unhover\r\n }\r\n\r\n this._pp_processPointerLeave();\r\n\r\n if (this.hoveringObject != null && (this.cursorPos[0] != 0 || this.cursorPos[1] != 0 || this.cursorPos[2] != 0)) {\r\n if (this.cursorObject) {\r\n this._setCursorVisibility(true);\r\n\r\n this.cursorObject.pp_setPosition(this.cursorPos);\r\n this.cursorObject.pp_setTransformLocalQuat(this.cursorObject.pp_getTransformLocalQuat(this._transformQuat).quat2_normalize(this._transformQuat));\r\n }\r\n\r\n if (this.cursorRayObject) {\r\n this._setCursorRayTransform(this.cursorPos);\r\n }\r\n } else {\r\n if (this.cursorObject) {\r\n this._setCursorVisibility(false);\r\n }\r\n\r\n if (this.cursorRayObject) {\r\n this._setCursorRayTransform(null);\r\n }\r\n }\r\n\r\n if (this.cursorRayObject) {\r\n if ((XRUtils.isSessionActive(this.engine) && this._viewComponent == null) || (!XRUtils.isSessionActive(this.engine) && this._viewComponent != null && this.handedness != Handedness.LEFT && this.handedness != Handedness.RIGHT)) {\r\n this.cursorRayObject.pp_setActive(true);\r\n } else {\r\n this.cursorRayObject.pp_setActive(false);\r\n }\r\n }\r\n\r\n if (this.hoveringObject == null) {\r\n this._pointerID = null;\r\n }\r\n\r\n this._updatePointerStyle = false;\r\n\r\n this._lastOriginalMouseEvent = null;\r\n this._lastOriginalGamepadEvent = null;\r\n };\r\n\r\n cursorComponentMod.onActivate = function onActivate() {\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n };\r\n\r\n cursorComponentMod.onDeactivate = function onDeactivate() {\r\n if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, null, true); // Trigger Unhover\r\n }\r\n\r\n this.hoveringObject = null;\r\n this.hoveringObjectTarget = null;\r\n\r\n this._pp_updateCursorStyle();\r\n\r\n this._setCursorVisibility(false);\r\n if (this.cursorRayObject) {\r\n this.cursorRayObject.pp_setActive(false);\r\n }\r\n\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n\r\n this._pointerID = null;\r\n\r\n this._lastPointerID = null;\r\n\r\n this._lastClientX = null;\r\n this._lastClientY = null;\r\n this._lastWidth = null;\r\n this._lastHeight = null;\r\n\r\n this._lastOriginalMouseEvent = null;\r\n this._lastOriginalGamepadEvent = null;\r\n\r\n this._pointerLeaveToProcess = false;\r\n this._pointerLeaveMouseEvent = null;\r\n };\r\n\r\n cursorComponentMod.onDestroy = function onDestroy() {\r\n if (this._hitTestObject != null) {\r\n this._hitTestObject.pp_destroy();\r\n }\r\n\r\n for (let callback of this._onDestroyCallbacks) {\r\n callback();\r\n }\r\n };\r\n\r\n cursorComponentMod.updateDirection = function () {\r\n let transformWorld = quat2_create();\r\n return function updateDirection() {\r\n this.object.pp_getPosition(this._origin);\r\n\r\n // Reverse-project the direction into view space \r\n this._direction.vec3_transformMat4(this._projectionMatrix, this._direction);\r\n this._direction.vec3_normalize(this._direction);\r\n this._direction.vec3_transformQuat(this.object.pp_getTransformQuat(transformWorld), this._direction);\r\n };\r\n }();\r\n\r\n cursorComponentMod.setupVREvents = function setupVREvents(session) {\r\n // If in XR, one-time bind the listener \r\n\r\n let onSelect = this.onSelect.bind(this);\r\n session.addEventListener(\"select\", onSelect);\r\n let onSelectStart = this.onSelectStart.bind(this);\r\n session.addEventListener(\"selectstart\", onSelectStart);\r\n let onSelectEnd = this.onSelectEnd.bind(this);\r\n session.addEventListener(\"selectend\", onSelectEnd);\r\n\r\n this._onDestroyCallbacks.push(() => {\r\n if (!XRUtils.isSessionActive(this.engine)) return;\r\n\r\n let session = XRUtils.getSession(this.engine);\r\n session.removeEventListener(\"select\", onSelect);\r\n session.removeEventListener(\"selectstart\", onSelectStart);\r\n session.removeEventListener(\"selectend\", onSelectEnd);\r\n });\r\n\r\n // After XR session was entered, the projection matrix changed \r\n this._onViewportResize();\r\n };\r\n\r\n cursorComponentMod.onSelect = function onSelect(e) {\r\n };\r\n\r\n cursorComponentMod.onSelectStart = function onSelectStart(e) {\r\n if (this.active) {\r\n if (this._pp_isAR()) {\r\n this.arTouchDown = true;\r\n this._lastOriginalGamepadEvent = e;\r\n } else if (e.inputSource.handedness == this.handedness) {\r\n this._isDown = true;\r\n this._isRealDown = true;\r\n\r\n if (!this._lastIsDown) {\r\n this._isDownForUpWithDown = true;\r\n }\r\n\r\n this._lastOriginalGamepadEvent = e;\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod.onSelectEnd = function onSelectEnd(e) {\r\n if (this.active) {\r\n if (this._pp_isAR()) {\r\n this.arTouchDown = false;\r\n this._lastOriginalGamepadEvent = e;\r\n } else if (e.inputSource.handedness == this.handedness) {\r\n if (!this._isDownForUpWithDown) {\r\n this._isUpWithNoDown = true;\r\n }\r\n\r\n this._isDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n\r\n this._lastOriginalGamepadEvent = e;\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod.onPointerMove = function onPointerMove(e) {\r\n if (this.active && !this._pointerLeaveToProcess) {\r\n // Don't care about secondary pointers \r\n if (this._pointerID != null && this._pointerID != e.pointerId) return;\r\n\r\n let bounds = document.body.getBoundingClientRect();\r\n this._pp_updateMouseData(e, e.clientX, e.clientY, bounds.width, bounds.height, e.pointerId);\r\n }\r\n };\r\n\r\n cursorComponentMod.onClick = function onClick(e) {\r\n };\r\n\r\n cursorComponentMod.onPointerDown = function onPointerDown(e) {\r\n if (this.active && !this._pointerLeaveToProcess) {\r\n // Don't care about secondary pointers or non-left clicks \r\n if ((this._pointerID != null && this._pointerID != e.pointerId) || e.button != 0) return;\r\n\r\n let bounds = document.body.getBoundingClientRect();\r\n this._pp_updateMouseData(e, e.clientX, e.clientY, bounds.width, bounds.height, e.pointerId);\r\n\r\n this._isDown = true;\r\n this._isRealDown = true;\r\n\r\n if (!this._lastIsDown) {\r\n this._isDownForUpWithDown = true;\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod.onPointerUp = function onPointerUp(e) {\r\n if (this.active && !this._pointerLeaveToProcess) {\r\n // Don't care about secondary pointers or non-left clicks \r\n if ((this._pointerID != null && this._pointerID != e.pointerId) || e.button != 0) return;\r\n\r\n let bounds = document.body.getBoundingClientRect();\r\n this._pp_updateMouseData(e, e.clientX, e.clientY, bounds.width, bounds.height, e.pointerId);\r\n\r\n if (!this._isDownForUpWithDown) {\r\n this._isUpWithNoDown = true;\r\n }\r\n\r\n this._isDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n\r\n this._updatePointerStyle = true;\r\n }\r\n };\r\n\r\n cursorComponentMod._onViewportResize = function _onViewportResize() {\r\n if (!this._viewComponent) return;\r\n\r\n // Projection matrix will change if the viewport is resized, which will affect the\r\n // projection matrix because of the aspect ratio\r\n this._viewComponent.projectionMatrix.mat4_invert(this._projectionMatrix);\r\n };\r\n\r\n cursorComponentMod._setCursorRayTransform = function _setCursorRayTransform(hitPosition) {\r\n if (!this.cursorRayObject) return;\r\n if (this.cursorRayScalingAxis != 4) {\r\n this.cursorRayObject.pp_resetScaleLocal();\r\n\r\n if (hitPosition != null) {\r\n this.cursorRayObject.pp_getPosition(this._cursorRayOrigin);\r\n let dist = this._cursorRayOrigin.vec3_distance(hitPosition);\r\n this._cursorRayScale[this.cursorRayScalingAxis] = dist;\r\n this.cursorRayObject.pp_scaleObject(this._cursorRayScale);\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod._setCursorVisibility = function _setCursorVisibility(visible) {\r\n this.visible = visible;\r\n if (!this.cursorObject) return;\r\n\r\n this.cursorObject.pp_setActive(visible);\r\n };\r\n\r\n // New Functions \r\n\r\n cursorComponentMod._pp_hoverBehaviour = function _pp_hoverBehaviour(hitObject, hitLocation, hitTestResults, originalEvent = null, forceUnhover = false) {\r\n if (!forceUnhover && hitObject != null) {\r\n let hoveringObjectChanged = false;\r\n if (this.hoveringObject == null || !this.hoveringObject.pp_equals(hitObject)) {\r\n // Unhover previous, if exists \r\n if (this.hoveringObject != null) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUnhover.notify(null, this, originalEvent);\r\n }\r\n }\r\n\r\n hoveringObjectChanged = true;\r\n\r\n // Hover new object \r\n this.hoveringObject = hitObject;\r\n this.hoveringObjectTarget = this.hoveringObject.pp_getComponent(CursorTarget);\r\n\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onHover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onHover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onHover.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._pp_updateCursorStyle();\r\n\r\n if (!this._pp_isDownToProcess() && this._isRealDown) {\r\n this._isDown = true;\r\n this._lastIsDown = true;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onDownOnHover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onDownOnHover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onDownOnHover.notify(hitTestResults, this, originalEvent);\r\n }\r\n }\r\n }\r\n\r\n if (this._updatePointerStyle) {\r\n this._pp_updateCursorStyle();\r\n }\r\n\r\n if (!hoveringObjectChanged && this._pp_isMoving(hitLocation)) {\r\n\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onMove.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onMove.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onMove.notify(hitTestResults, this, originalEvent);\r\n }\r\n }\r\n\r\n if (this._pp_isDownToProcess()) {\r\n // Cursor down \r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onDown.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onDown.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onDown.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n // Click \r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n // Multiple Clicks \r\n if (this._tripleClickTimer > 0 && this._multipleClickObject && this._multipleClickObject.pp_equals(this.hoveringObject)) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onTripleClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onTripleClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onTripleClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._tripleClickTimer = 0;\r\n } else if (this._doubleClickTimer > 0 && this._multipleClickObject && this._multipleClickObject.pp_equals(this.hoveringObject)) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onDoubleClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onDoubleClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onDoubleClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._tripleClickTimer = this._multipleClickDelay;\r\n this._doubleClickTimer = 0;\r\n } else {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onSingleClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onSingleClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onSingleClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._tripleClickTimer = 0;\r\n this._doubleClickTimer = this._multipleClickDelay;\r\n this._multipleClickObject = this.hoveringObject;\r\n }\r\n } else {\r\n // Cursor up \r\n if (!this._isUpWithNoDown && !hoveringObjectChanged && this._pp_isUpToProcess()) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUpWithDown.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUpWithDown.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUp.notify(hitTestResults, this, originalEvent);\r\n\r\n this.hitTestTarget.onUpWithDown.notify(hitTestResults, this, originalEvent);\r\n }\r\n } else if (this._isUpWithNoDown || (hoveringObjectChanged && this._pp_isUpToProcess())) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUpWithNoDown.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUpWithNoDown.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUp.notify(hitTestResults, this, originalEvent);\r\n\r\n this.hitTestTarget.onUpWithNoDown.notify(hitTestResults, this, originalEvent);\r\n }\r\n }\r\n }\r\n\r\n this._prevHitLocationLocalToTarget = this.hoveringObject.pp_convertPositionWorldToLocal(hitLocation, this._prevHitLocationLocalToTarget);\r\n } else if (this.hoveringObject != null && (forceUnhover || hitObject == null)) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUnhover.notify(null, this, originalEvent);\r\n }\r\n\r\n this.hoveringObject = null;\r\n this.hoveringObjectTarget = null;\r\n\r\n this._pp_updateCursorStyle();\r\n }\r\n\r\n if (this.hoveringObject != null) {\r\n this._lastIsDown = this._isDown;\r\n } else {\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n }\r\n\r\n this._isUpWithNoDown = false;\r\n };\r\n\r\n cursorComponentMod._pp_rayCast = function _pp_rayCast() {\r\n let rayHit =\r\n this.rayCastMode == 0\r\n ? Globals.getScene(this.engine).rayCast(\r\n this._origin,\r\n this._direction,\r\n this._collisionMask\r\n )\r\n : Globals.getPhysics(this.engine).rayCast(\r\n this._origin,\r\n this._direction,\r\n this._collisionMask,\r\n this.maxDistance\r\n );\r\n\r\n let rayHitCollisionDistanceValid = true;\r\n if (this.rayCastMode == 0 && rayHit.hitCount > 0 && rayHit.distances[0] > this.maxDistance) {\r\n rayHitCollisionDistanceValid = false;\r\n }\r\n\r\n this._hitObjectData[0] = null;\r\n this._hitObjectData[1] = null;\r\n this._hitObjectData[2] = null;\r\n\r\n let hitTestResultDistance = Infinity;\r\n if (this._hitTestLocation != null && this._hitTestLocation.visible) {\r\n this._hitTestObject.pp_getPositionWorld(this.cursorPos);\r\n this._rayHitLocation.vec3_copy(this.cursorPos);\r\n hitTestResultDistance = this.cursorPos.vec3_distance(this.object.pp_getPositionWorld(this._tempVec));\r\n\r\n this._hitObjectData[0] = this._hitTestObject;\r\n this._hitObjectData[1] = this._rayHitLocation;\r\n }\r\n\r\n this.hoveringReality = false;\r\n\r\n if (rayHit.hitCount > 0 && rayHitCollisionDistanceValid) {\r\n let rayHitDistance = rayHit.distances[0];\r\n if (rayHitDistance <= hitTestResultDistance) {\r\n // Overwrite cursorPos set by hit test location\r\n this.cursorPos.vec3_copy(rayHit.locations[0]);\r\n this._rayHitLocation.vec3_copy(this.cursorPos);\r\n\r\n this._hitObjectData[0] = rayHit.objects[0];\r\n this._hitObjectData[1] = this._rayHitLocation;\r\n } else {\r\n this.hoveringReality = true;\r\n }\r\n } else if (hitTestResultDistance == Infinity) {\r\n this.cursorPos.vec3_zero();\r\n\r\n this._hitObjectData[0] = null;\r\n this._hitObjectData[1] = null;\r\n }\r\n\r\n let xrFrame = XRUtils.getFrame(this.engine);\r\n if (this.hoveringReality && xrFrame != null) {\r\n this._hitObjectData[2] = this._hitTestLocation.getHitTestResults(xrFrame)[0];\r\n }\r\n\r\n return this._hitObjectData;\r\n };\r\n\r\n cursorComponentMod._pp_updateMouseData = function _pp_updateMouseData(e, clientX, clientY, w, h, pointerID) {\r\n this._lastClientX = clientX;\r\n this._lastClientY = clientY;\r\n this._lastWidth = w;\r\n this._lastHeight = h;\r\n this._lastPointerID = pointerID;\r\n\r\n this._lastOriginalMouseEvent = e;\r\n };\r\n\r\n cursorComponentMod._pp_updateMousePos = function _pp_updateMousePos(clientX, clientY, w, h) {\r\n // Get direction in normalized device coordinate space from mouse position \r\n let left = clientX / w;\r\n let top = clientY / h;\r\n this._direction.vec3_set(left * 2 - 1, -top * 2 + 1, -1.0);\r\n\r\n this.updateDirection();\r\n };\r\n\r\n cursorComponentMod.pp_setViewComponent = function pp_setViewComponent(viewComponent) {\r\n this._viewComponent = viewComponent;\r\n\r\n // If this object also has a view component, we will enable inverse-projected mouse clicks,\r\n // otherwise just use the objects transformation\r\n if (this._viewComponent != null) {\r\n this._viewComponent.projectionMatrix.mat4_invert(this._projectionMatrix);\r\n\r\n if (!this._myViewEventListenersRegistered) {\r\n this._myViewEventListenersRegistered = true;\r\n\r\n let onClick = this.onClick.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"click\", onClick);\r\n let onPointerDown = this.onPointerDown.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerdown\", onPointerDown);\r\n let onPointerMove = this.onPointerMove.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointermove\", onPointerMove);\r\n let onPointerUp = this.onPointerUp.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerup\", onPointerUp);\r\n let onPointerLeave = this._pp_onPointerLeave.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerleave\", onPointerLeave);\r\n\r\n let onViewportResize = this._onViewportResize.bind(this);\r\n this.engine.onResize.add(onViewportResize);\r\n\r\n this._onDestroyCallbacks.push(() => {\r\n Globals.getCanvas(this.engine).removeEventListener(\"click\", onClick);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerdown\", onPointerDown);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointermove\", onPointerMove);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerup\", onPointerUp);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerleave\", onPointerLeave);\r\n\r\n this.engine.onResize.remove(onViewportResize);\r\n\r\n this._myViewEventListenersRegistered = false;\r\n });\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod._pp_onPointerLeave = function _pp_onPointerLeave(e) {\r\n if (this._pointerID == null || this._pointerID == e.pointerId) {\r\n this._pointerLeaveToProcess = true;\r\n this._pointerLeaveMouseEvent = e;\r\n }\r\n };\r\n\r\n cursorComponentMod._pp_processPointerLeave = function _pp_processPointerLeave() {\r\n if (this._pointerLeaveToProcess) {\r\n this._pointerID = null;\r\n\r\n this._lastPointerID = null;\r\n\r\n this._lastClientX = null;\r\n this._lastClientY = null;\r\n this._lastWidth = null;\r\n this._lastHeight = null;\r\n\r\n this._lastOriginalMouseEvent = this._pointerLeaveMouseEvent;\r\n\r\n this._pointerLeaveToProcess = false;\r\n this._pointerLeaveMouseEvent = null;\r\n\r\n if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, this._lastOriginalMouseEvent, true); // Trigger Unhover\r\n }\r\n\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n }\r\n };\r\n\r\n cursorComponentMod._pp_isDownToProcess = function _pp_isDownToProcess() {\r\n return this._isDown != this._lastIsDown && this._isDown;\r\n };\r\n\r\n cursorComponentMod._pp_isUpToProcess = function _pp_isUpToProcess() {\r\n return this._isDown != this._lastIsDown && !this._isDown;\r\n };\r\n\r\n cursorComponentMod._pp_isMoving = function () {\r\n let hitLocationLocalToTarget = vec3_create();\r\n return function _pp_isMoving(hitLocation) {\r\n let moving = false;\r\n\r\n hitLocationLocalToTarget = this.hoveringObject.pp_convertPositionWorldToLocal(hitLocation, hitLocationLocalToTarget);\r\n\r\n if (!hitLocationLocalToTarget.vec_equals(this._prevHitLocationLocalToTarget, 0.0001)) {\r\n moving = true;\r\n }\r\n\r\n return moving;\r\n };\r\n }();\r\n\r\n cursorComponentMod._pp_isAR = function _pp_isAR() {\r\n let firstInputSource = XRUtils.getSession(this.engine).inputSources[0];\r\n return this.input != null && firstInputSource.handedness == \"none\" && firstInputSource.gamepad != null;\r\n };\r\n\r\n cursorComponentMod._pp_updateCursorStyle = function _pp_updateCursorStyle() {\r\n if (this.styleCursor) {\r\n if (this.hoveringObjectTarget != null && !this.hoveringObjectTarget.isSurface) {\r\n document.body.style.cursor = \"pointer\";\r\n } else if (document.body.style.cursor == \"pointer\") {\r\n document.body.style.cursor = \"default\";\r\n }\r\n }\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(cursorComponentMod, Cursor.prototype, false, true, true);\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nimport \"./cursor_target_component_type_extension.js\";\r\n\r\nexport function initCursorTargetComponentMod(): void {\r\n _initCursorTargetComponentModPrototype();\r\n}\r\n\r\nfunction _initCursorTargetComponentModPrototype(): void {\r\n\r\n const cursorTargetComponentMod: Record = {};\r\n\r\n // New Functions \r\n\r\n cursorTargetComponentMod.init = function init(this: CursorTarget): void {\r\n this.onSingleClick = new Emitter();\r\n this.onDoubleClick = new Emitter();\r\n this.onTripleClick = new Emitter();\r\n\r\n this.onDownOnHover = new Emitter();\r\n\r\n this.onUpWithDown = new Emitter();\r\n this.onUpWithNoDown = new Emitter();\r\n\r\n // Just a way to specify if this target is just used as a surface between buttons \r\n this.isSurface = false;\r\n };\r\n\r\n cursorTargetComponentMod.start = function start(): void { };\r\n cursorTargetComponentMod.update = function update(dt: number): void { };\r\n cursorTargetComponentMod.onActivate = function onActivate(): void { };\r\n cursorTargetComponentMod.onDeactivate = function onDeactivate(): void { };\r\n cursorTargetComponentMod.onDestroy = function onDestroy(): void { };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(cursorTargetComponentMod, CursorTarget.prototype, false, true, true);\r\n}", "import { MouseLookComponent } from \"@wonderlandengine/components\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { vec3_create } from \"../../../js/extensions/array/vec_create_extension.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initMouseLookComponentMod() {\r\n _initMouseLookComponentModPrototype();\r\n}\r\n\r\nfunction _initMouseLookComponentModPrototype() {\r\n\r\n let mouseLookComponentMod = {};\r\n\r\n // Modified Functions\r\n\r\n mouseLookComponentMod.init = function init() {\r\n this.pointerId = null;\r\n this.prevMoveEvent = null;\r\n\r\n this.resetMovingDelay = 0.15;\r\n this.resetMovingTimer = new Timer(this.resetMovingDelay, false);\r\n this.isMoving = false;\r\n this.mouseDown = false;\r\n\r\n this.pointerMoveListener = this._onMove.bind(this);\r\n\r\n this.contextMenuListener = function (event) {\r\n if (this.active) {\r\n event.preventDefault();\r\n }\r\n }.bind(this);\r\n\r\n this.pointerDown = function (event) {\r\n if (this.active) {\r\n if (this.pointerId != null) return;\r\n\r\n if (!this.mouseDown) {\r\n if (event.button == this.mouseButtonIndex) {\r\n this.pointerId = event.pointerId;\r\n this.mouseDown = true;\r\n // Commenting cursor style change for now since it messes with Cursor Component cursor style, which is more important to have,\r\n // since it provides a more important feedback, while here is mostly just a visual thing\r\n //document.body.style.cursor = \"grabbing\"; \r\n if (event.button == 1) {\r\n event.preventDefault(); // Prevent scrolling\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }.bind(this);\r\n\r\n this.pointerUp = function (event) {\r\n if (this.active) {\r\n if (event.pointerId != this.pointerId) return;\r\n\r\n if (this.mouseDown) {\r\n if (event.button == this.mouseButtonIndex) {\r\n this.mouseDown = false;\r\n //document.body.style.cursor = \"default\";\r\n }\r\n }\r\n }\r\n }.bind(this);\r\n\r\n this.pointerLeave = function (event) {\r\n if (this.active) {\r\n if (event.pointerId != this.pointerId) return;\r\n\r\n this.pointerId = null;\r\n this.prevMoveEvent = null;\r\n\r\n if (this.mouseDown) {\r\n this.mouseDown = false;\r\n //document.body.style.cursor = \"default\";\r\n }\r\n }\r\n }.bind(this);\r\n\r\n document.body.addEventListener(\"pointermove\", this.pointerMoveListener);\r\n\r\n if (this.requireMouseDown) {\r\n if (this.mouseButtonIndex == 2) {\r\n Globals.getCanvas(this.engine).addEventListener(\"contextmenu\", this.contextMenuListener, false);\r\n }\r\n\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerdown\", this.pointerDown);\r\n\r\n document.body.addEventListener(\"pointerup\", this.pointerUp);\r\n }\r\n\r\n document.body.addEventListener(\"pointerleave\", this.pointerLeave);\r\n };\r\n\r\n // New Functions\r\n\r\n mouseLookComponentMod.start = function start() { };\r\n mouseLookComponentMod.onActivate = function onActivate() { };\r\n\r\n mouseLookComponentMod.onDeactivate = function onDeactivate() {\r\n if (this.mouseDown) {\r\n //document.body.style.cursor = \"default\";\r\n }\r\n\r\n this.isMoving = false;\r\n this.mouseDown = false;\r\n\r\n this.pointerId = null;\r\n this.prevMoveEvent = null;\r\n };\r\n\r\n mouseLookComponentMod.onDestroy = function onDestroy() {\r\n document.body.removeEventListener(\"pointermove\", this.pointerMoveListener);\r\n Globals.getCanvas(this.engine).removeEventListener(\"contextmenu\", this.contextMenuListener);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerdown\", this.pointerDown);\r\n document.body.removeEventListener(\"pointerup\", this.pointerUp);\r\n document.body.removeEventListener(\"pointerleave\", this.pointerLeave);\r\n };\r\n\r\n mouseLookComponentMod.update = function update(dt) {\r\n if (this.resetMovingTimer.isRunning()) {\r\n this.resetMovingTimer.update(dt);\r\n if (this.resetMovingTimer.isDone()) {\r\n this.resetMovingTimer.reset();\r\n this.isMoving = false;\r\n }\r\n }\r\n\r\n if (!this.isMoving) {\r\n if (!this.requireMouseDown || !this.mouseDown) {\r\n this.pointerId = null;\r\n }\r\n\r\n this.prevMoveEvent = null;\r\n }\r\n };\r\n\r\n mouseLookComponentMod._onMove = function () {\r\n let viewForward = vec3_create();\r\n let viewUp = vec3_create();\r\n\r\n let referenceUp = vec3_create();\r\n let referenceUpNegate = vec3_create();\r\n let referenceRight = vec3_create();\r\n\r\n let newUp = vec3_create();\r\n return function _onMove(event) {\r\n if (this.active) {\r\n if (this.pointerId != null && event.pointerId != this.pointerId) return;\r\n\r\n if (this.mouseDown || !this.requireMouseDown) {\r\n\r\n viewForward = this.object.pp_getBackward(viewForward); // The view \"real\" forward is actually the backward\r\n viewUp = this.object.pp_getUp(viewUp);\r\n\r\n referenceUp.vec3_set(0, 1, 0);\r\n if (this.object.pp_getParent() != null) {\r\n referenceUp = this.object.pp_getParent().pp_getUp(referenceUp);\r\n }\r\n\r\n referenceRight = viewForward.vec3_cross(referenceUp, referenceRight);\r\n\r\n let minAngle = 1;\r\n if (viewForward.vec3_angle(referenceUp) < minAngle) {\r\n referenceRight = viewUp.vec3_negate(referenceRight).vec3_cross(referenceUp, referenceRight);\r\n } else if (viewForward.vec3_angle(referenceUp.vec3_negate(referenceUpNegate)) < minAngle) {\r\n referenceRight = viewUp.vec3_cross(referenceUp, referenceRight);\r\n } else if (!viewUp.vec3_isConcordant(referenceUp)) {\r\n referenceRight.vec3_negate(referenceRight);\r\n }\r\n referenceRight.vec3_normalize(referenceRight);\r\n\r\n let movementX = event.movementX;\r\n let movementY = event.movementY;\r\n\r\n if (movementX == null || movementY == null) {\r\n if (this.prevMoveEvent != null) {\r\n movementX = event.pageX - this.prevMoveEvent.pageX;\r\n movementY = event.pageY - this.prevMoveEvent.pageY;\r\n } else {\r\n movementX = 0;\r\n movementY = 0;\r\n }\r\n }\r\n\r\n this.rotationX = -this.sensitity * movementX;\r\n this.rotationY = -this.sensitity * movementY;\r\n\r\n this.object.pp_rotateAxis(this.rotationY, referenceRight);\r\n\r\n let maxVerticalAngle = 89 - 0.001;\r\n newUp = this.object.pp_getUp(newUp);\r\n let angleWithUp = Math.pp_angleClamp(newUp.vec3_angleSigned(referenceUp, referenceRight));\r\n if (Math.abs(angleWithUp) > maxVerticalAngle) {\r\n let fixAngle = (Math.abs(angleWithUp) - maxVerticalAngle) * Math.pp_sign(angleWithUp);\r\n this.object.pp_rotateAxis(fixAngle, referenceRight);\r\n }\r\n\r\n this.object.pp_rotateAxis(this.rotationX, referenceUp);\r\n\r\n this.prevMoveEvent = event;\r\n this.pointerId = event.pointerId;\r\n\r\n this.resetMovingTimer.start(this.resetMovingDelay);\r\n this.isMoving = true;\r\n }\r\n }\r\n };\r\n }();\r\n\r\n\r\n\r\n PluginUtils.injectProperties(mouseLookComponentMod, MouseLookComponent.prototype, false, true, true);\r\n}", "import { initCauldronMods } from \"./cauldron_mods.js\";\r\nimport { initCursorComponentMod } from \"./cursor_component_mod.js\";\r\nimport { initCursorTargetComponentMod } from \"./cursor_target_component_mod.js\";\r\nimport { initMouseLookComponentMod } from \"./mouse_look_component_mod.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./cauldron_mods.js\";\r\nimport \"./cursor_component_mod.js\";\r\nimport \"./cursor_target_component_mod.js\";\r\nimport \"./mouse_look_component_mod.js\";\r\n\r\nexport function initComponentMods(): void {\r\n initCursorComponentMod();\r\n initCursorTargetComponentMod();\r\n initMouseLookComponentMod();\r\n\r\n initCauldronMods();\r\n}", "import { initComponentMods } from \"./components/init_component_mods.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./components/init_component_mods.js\";\r\n\r\nexport function initWLMods(): void {\r\n initComponentMods();\r\n}", "import { initWLExtensions } from \"./extensions/init_wl_extentions.js\";\r\nimport { initWLMods } from \"./mods/init_wl_mods.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./extensions/init_wl_extentions.js\";\r\nimport \"./mods/init_wl_mods.js\";\r\n\r\nexport function initWLPlugins(): void {\r\n initWLExtensions();\r\n initWLMods();\r\n}", "import { initJSPlugins } from \"./js/init_js_plugins.js\";\r\nimport { initWLPlugins } from \"./wl/init_wl_plugins.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./js/init_js_plugins.js\";\r\nimport \"./wl/init_wl_plugins.js\";\r\n\r\nexport function initPlugins(): void {\r\n initJSPlugins();\r\n initWLPlugins();\r\n}", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { registerWLComponents } from \"../cauldron/wl/register_wl_components.js\";\r\nimport { ComponentUtils } from \"../cauldron/wl/utils/component_utils.js\";\r\nimport { initPlugins } from \"../plugin/init_plugins.js\";\r\nimport { Globals } from \"./globals.js\";\r\nimport { registerPPComponents } from \"./register_pp_components.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"../plugin/init_plugins.js\";\r\n\r\nexport function initPP(engine: WonderlandEngine): void {\r\n Globals.setMainEngine(engine);\r\n\r\n ComponentUtils.setDefaultWLComponentCloneCallbacks(engine);\r\n\r\n registerWLComponents(engine);\r\n registerPPComponents(engine);\r\n\r\n initPlugins();\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport * as PPAPI from \"../../index.js\";\r\n\r\nexport class AddPPToWindowComponent extends Component {\r\n static TypeName = \"pp-add-pp-to-window\";\r\n static Properties = {\r\n _myAdd: Property.bool(true)\r\n };\r\n\r\n init() {\r\n if (this._myAdd) {\r\n window.PP = {};\r\n this._addProperties(PPAPI);\r\n }\r\n }\r\n\r\n _addProperties(object) {\r\n let propertyNames = Object.getOwnPropertyNames(object);\r\n for (let propertyName of propertyNames) {\r\n if (object[propertyName] != undefined) {\r\n window.PP[propertyName] = object[propertyName];\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n window.PP = undefined;\r\n }\r\n}", "import { Howler } from \"howler\";\r\n\r\nexport function isPlaybackBlocked() {\r\n let blocked = false;\r\n\r\n if (Howler != null && Howler.state != \"running\") {\r\n blocked = true;\r\n }\r\n\r\n return blocked;\r\n}\r\n\r\nexport let AudioUtils = {\r\n isPlaybackBlocked\r\n};", "import { AudioPlayer } from \"../audio_player.js\";\r\n\r\nexport class HowlerAudioPlayer extends AudioPlayer {\r\n\r\n constructor(howl, audioSetup = null) {\r\n super(audioSetup, howl);\r\n\r\n if (audioSetup == null) {\r\n this._myAudioSetup.myAudioFilePath = this._myAudio._src;\r\n\r\n this._myAudioSetup.myLoop = this._myAudio._loop;\r\n this._myAudioSetup.myAutoPlay = this._myAudio._autoplay;\r\n\r\n this._myAudioSetup.myVolume = this._myAudio._volume;\r\n this._myAudioSetup.myRate = this._myAudio._rate;\r\n\r\n this._myAudioSetup.myPool = this._myAudio._pool;\r\n this._myAudioSetup.myPreload = this._myAudio._preload;\r\n\r\n this._myAudioSetup.myPosition = (this._myAudio._pos != null) ? this._myAudio._pos.vec3_clone() : null;\r\n this._myAudioSetup.mySpatial = this._myAudio._pos != null;\r\n this._myAudioSetup.myReferenceDistance = this._myAudio._pannerAttr.refDistance;\r\n } else {\r\n this._myAudioSetup.myAudioFilePath = this._myAudio._src;\r\n\r\n this._myAudio.loop(this._myAudioSetup.myLoop);\r\n this._myAudio._autoplay = this._myAudioSetup.myAutoPlay;\r\n\r\n this._myAudio.volume(this._myAudioSetup.myVolume);\r\n this._myAudio.rate(this._myAudioSetup.myRate);\r\n\r\n this._myAudio._pool = this._myAudioSetup.myPool;\r\n this._myAudio._preload = this._myAudioSetup.myPreload;\r\n\r\n this.updatePosition(this._myAudioSetup.myPosition);\r\n\r\n this._myAudio._pannerAttr.refDistance = this._myAudioSetup.myReferenceDistance;\r\n\r\n if (this._myAudioSetup.myAutoPlay) {\r\n this._myAudio.play();\r\n }\r\n }\r\n\r\n this._addListeners();\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Howler } from \"howler\";\r\n\r\nexport class MuteEverythingComponent extends Component {\r\n static TypeName = \"pp-mute-everything\";\r\n static Properties = {};\r\n\r\n start() {\r\n Howler.mute(true);\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Howler } from \"howler\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class SpatialAudioListenerComponent extends Component {\r\n static TypeName = \"pp-spatial-audio-listener\";\r\n static Properties = {};\r\n\r\n init() {\r\n this._myOrigin = vec3_create();\r\n this._myForward = vec3_create();\r\n this._myUp = vec3_create();\r\n }\r\n\r\n start() {\r\n this._updateAudioListener();\r\n }\r\n\r\n update(dt) {\r\n this._updateAudioListener();\r\n }\r\n\r\n _updateAudioListener() {\r\n this.object.pp_getPosition(this._myOrigin);\r\n this.object.pp_getForward(this._myForward);\r\n this.object.pp_getUp(this._myUp);\r\n\r\n Howler.pos(this._myOrigin[0], this._myOrigin[1], this._myOrigin[2]);\r\n Howler.orientation(this._myForward[0], this._myForward[1], this._myForward[2],\r\n this._myUp[0], this._myUp[1], this._myUp[2]);\r\n }\r\n}", "import { Component, PhysXComponent, Property, Shape } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\nimport { PhysicsCollisionCollector } from \"../physics/physics_collision_collector.js\";\r\nimport { RaycastParams, RaycastResults } from \"../physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../physics/physics_utils.js\";\r\n\r\n// Adjust the gravity to a low value like -0.05 to have better results, since the dynamic objects will move slowly instead of quickly falling far away\r\nexport class BenchmarkMaxPhysXComponent extends Component {\r\n static TypeName = \"pp-benchmark-max-physx\";\r\n static Properties = {\r\n _myStaticDomeSize: Property.float(40),\r\n _myStaticPhysXCount: Property.int(1000),\r\n _myDynamicDomeSize: Property.float(80),\r\n _myDynamicPhysXCount: Property.int(250),\r\n _myKinematicDomeSize: Property.float(120),\r\n _myKinematicPhysXCount: Property.int(250),\r\n _myRaycastCount: Property.int(100),\r\n _myVisualizeRaycast: Property.bool(false),\r\n _myVisualizeRaycastDelay: Property.float(0.5),\r\n\r\n // You can use this to test with convex mesh, \r\n // but u first need to add a physx with a convex mesh to the scene and read the shapeData index on the component to set it as _myShapeIndex\r\n _myUseConvexMesh: Property.bool(false),\r\n _myShapeIndex: Property.int(0),\r\n _myShapeScaleMultiplier: Property.float(1), // Used to adjust the scale of the convex mesh if too big or small based on how u imported it\r\n\r\n _myLogEnabled: Property.bool(true),\r\n _myClearConsoleBeforeLog: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myValid = false;\r\n\r\n if (!Globals.isDebugEnabled(this.engine)) return;\r\n\r\n this._myValid = true;\r\n this._myStarted = false;\r\n this._myPreStartTimer = new Timer(1);\r\n }\r\n\r\n _start() {\r\n this._myParentObject = this.object.pp_addObject();\r\n\r\n this._myRaycastParams = new RaycastParams(Globals.getPhysics(this.engine));\r\n this._myRaycastResults = new RaycastResults();\r\n\r\n this._myStaticPhysXObjects = [];\r\n this._myStaticPhysXComponents = [];\r\n this._myStaticPhysXCollectors = [];\r\n this._myDynamicPhysXObjects = [];\r\n this._myDynamicPhysXComponents = [];\r\n this._myDynamicPhysXCollectors = [];\r\n this._myKinematicPhysXObjects = [];\r\n this._myKinematicPhysXComponents = [];\r\n this._myKinematicPhysXCollectors = [];\r\n\r\n this._spawnDome(true, false);\r\n this._spawnDome(false, false);\r\n this._spawnDome(false, true);\r\n\r\n this._myStartTimer = new Timer(1);\r\n this._myTimer = new Timer(0);\r\n this._myDebugTimer = new Timer(this._myVisualizeRaycastDelay);\r\n this._myLogEnabledTimer = new Timer(1);\r\n this._myFPSHistory = [];\r\n for (let i = 0; i < 7; i++) {\r\n this._myFPSHistory.push(0);\r\n }\r\n\r\n this._myAddVelocityDelay = 10;\r\n\r\n this._myTranslateVec3 = vec3_create();\r\n this._myRotateVec3 = vec3_create();\r\n\r\n this._myStarted = true;\r\n }\r\n\r\n update(dt) {\r\n if (!this._myValid) return;\r\n\r\n if (!this._myStarted) {\r\n this._myPreStartTimer.update(dt);\r\n if (this._myPreStartTimer.isDone()) {\r\n this._start();\r\n }\r\n } else {\r\n this._myStartTimer.update(dt);\r\n if (this._myStartTimer.isDone()) {\r\n this._myTimer.update(dt);\r\n this._myDebugTimer.update(dt);\r\n this._myLogEnabledTimer.update(dt);\r\n if (this._myTimer.isDone()) {\r\n this._myTimer.start();\r\n\r\n let debugEnabled = false;\r\n if (this._myDebugTimer.isDone()) {\r\n this._myDebugTimer.start();\r\n debugEnabled = true;\r\n }\r\n\r\n debugEnabled = debugEnabled && this._myVisualizeRaycast;\r\n this._raycastTest(debugEnabled);\r\n }\r\n\r\n this._myFPSHistory.pop();\r\n this._myFPSHistory.unshift(Math.round(1 / dt));\r\n\r\n if (this._myLogEnabled) {\r\n if (this._myLogEnabledTimer.isDone()) {\r\n this._myLogEnabledTimer.start();\r\n if (this._myClearConsoleBeforeLog) {\r\n console.clear();\r\n }\r\n console.log(\"Static PhysX Dome Size:\", this._myStaticPhysXObjects.length);\r\n console.log(\"Dynamic PhysX Dome Size:\", this._myDynamicPhysXObjects.length);\r\n console.log(\"Kinematic PhysX Dome Size:\", this._myKinematicPhysXObjects.length);\r\n\r\n let staticCollisions = 0;\r\n for (let collector of this._myStaticPhysXCollectors) {\r\n staticCollisions += collector.getCollisions().length;\r\n }\r\n\r\n let dynamicCollisions = 0;\r\n for (let collector of this._myDynamicPhysXCollectors) {\r\n dynamicCollisions += collector.getCollisions().length;\r\n }\r\n\r\n let kinematicCollisions = 0;\r\n for (let collector of this._myKinematicPhysXCollectors) {\r\n kinematicCollisions += collector.getCollisions().length;\r\n }\r\n\r\n // Every collision is considered twice since it is caught by 2 physX\r\n let totalCollisions = (staticCollisions + dynamicCollisions + kinematicCollisions) / 2;\r\n\r\n console.log(\"Current Collisions Count:\", totalCollisions);\r\n console.log(\"Raycast Count:\", this._myRaycastCount);\r\n console.log(\"FPS History:\");\r\n let fpsString = \"\";\r\n for (let fps of this._myFPSHistory) {\r\n fpsString = fpsString.concat(fps, \"\\n\");\r\n }\r\n console.log(fpsString);\r\n }\r\n }\r\n }\r\n\r\n if (this._myAddVelocityDelay > 0) {\r\n this._myAddVelocityDelay--;\r\n if (this._myAddVelocityDelay == 0) {\r\n for (let physX of this._myDynamicPhysXComponents) {\r\n physX.kinematic = false;\r\n let strength = 50;\r\n physX.linearVelocity = [Math.pp_random(-strength, strength), Math.pp_random(-strength, strength), Math.pp_random(-strength, strength)];\r\n physX.angularVelocity = [Math.pp_random(-strength, strength), Math.pp_random(-strength, strength), Math.pp_random(-strength, strength)];\r\n }\r\n }\r\n }\r\n\r\n for (let physX of this._myKinematicPhysXObjects) {\r\n let strength = 5 * dt;\r\n this._myTranslateVec3.vec3_set(Math.pp_random(-strength, strength), Math.pp_random(-strength, strength), Math.pp_random(-strength, strength));\r\n physX.pp_translate(this._myTranslateVec3);\r\n\r\n let rotateStrength = 50 * dt;\r\n this._myRotateVec3.vec3_set(Math.pp_random(-rotateStrength, rotateStrength), Math.pp_random(-rotateStrength, rotateStrength), Math.pp_random(-rotateStrength, rotateStrength));\r\n physX.pp_rotate(this._myRotateVec3);\r\n }\r\n }\r\n }\r\n\r\n _raycastTest(debugEnabled) {\r\n let raycastCount = this._myRaycastCount;\r\n\r\n let distance = 10000;\r\n\r\n for (let i = 0; i < raycastCount; i++) {\r\n let origin = [Math.pp_random(1, 2) * Math.pp_randomSign(), Math.pp_random(1, 2) * Math.pp_randomSign(), Math.pp_random(1, 2) * Math.pp_randomSign()];\r\n let direction = [Math.pp_random(-1, 1), Math.pp_random(-1, 1), Math.pp_random(-1, 1)];\r\n direction.vec3_normalize(direction);\r\n\r\n this._myRaycastParams.myOrigin.vec3_copy(origin);\r\n this._myRaycastParams.myDirection.vec3_copy(direction);\r\n this._myRaycastParams.myDistance = distance;\r\n this._myRaycastParams.myBlockLayerFlags.setAllFlagsActive();\r\n\r\n let raycastResults = PhysicsUtils.raycast(this._myRaycastParams, this._myRaycastResults);\r\n\r\n if (debugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n Globals.getDebugVisualManager(this.engine).drawRaycast(this._myDebugTimer.getDuration(), raycastResults, true, 5, 0.015);\r\n }\r\n }\r\n }\r\n\r\n _spawnDome(staticDome, dynamicDome) {\r\n let maxCount = this._myStaticPhysXCount;\r\n let physXList = this._myStaticPhysXObjects;\r\n let cloves = Math.ceil(Math.sqrt(this._myStaticPhysXCount));\r\n if (!staticDome) {\r\n if (dynamicDome) {\r\n cloves = Math.ceil(Math.sqrt(this._myDynamicPhysXCount));\r\n maxCount = this._myDynamicPhysXCount;\r\n physXList = this._myDynamicPhysXObjects;\r\n } else {\r\n cloves = Math.ceil(Math.sqrt(this._myKinematicPhysXCount));\r\n maxCount = this._myKinematicPhysXCount;\r\n physXList = this._myKinematicPhysXObjects;\r\n }\r\n }\r\n\r\n let angleForClove = Math.PI * 2 / cloves;\r\n\r\n let minDistance = Math.max(0, this._myStaticDomeSize - 20);\r\n let maxDistance = this._myStaticDomeSize + 20;\r\n\r\n if (!staticDome) {\r\n if (dynamicDome) {\r\n minDistance = Math.max(0, this._myDynamicDomeSize - 20);\r\n maxDistance = this._myDynamicDomeSize + 20;\r\n } else {\r\n minDistance = Math.max(0, this._myKinematicDomeSize - 20);\r\n maxDistance = this._myKinematicDomeSize + 20;\r\n }\r\n }\r\n\r\n let minExtraRotation = 0;\r\n let maxExtraRotation = Math.pp_toRadians(10);\r\n\r\n let upDirection = vec3_create(0, 1, 0);\r\n let horizontalDirection = vec3_create(0, 0, -1);\r\n\r\n for (let i = 0; i < cloves / 2; i++) {\r\n let verticalDirection = vec3_create(0, 1, 0);\r\n\r\n let rotationAxis = vec3_create();\r\n horizontalDirection.vec3_cross(verticalDirection, rotationAxis);\r\n rotationAxis.vec3_normalize(rotationAxis);\r\n\r\n for (let j = 0; j < cloves; j++) {\r\n if (physXList.length < maxCount) {\r\n let distance = Math.random() * (maxDistance - minDistance) + minDistance;\r\n let extraAxisRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let extraUpRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let physXDirection = verticalDirection.pp_clone();\r\n\r\n physXDirection.vec3_rotateAxisRadians(extraAxisRotation, rotationAxis, physXDirection);\r\n physXDirection.vec3_rotateAxisRadians(extraUpRotation, upDirection, physXDirection);\r\n\r\n physXDirection.vec3_scale(distance, physXDirection);\r\n\r\n this._addPhysX(physXDirection, staticDome, dynamicDome);\r\n }\r\n\r\n verticalDirection.vec3_rotateAxisRadians(angleForClove / 2, rotationAxis, verticalDirection);\r\n\r\n if (physXList.length < maxCount) {\r\n let distance = Math.random() * (maxDistance - minDistance) + minDistance;\r\n let extraAxisRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let extraUpRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let physXDirection = verticalDirection.pp_clone();\r\n\r\n physXDirection.vec3_rotateAxisRadians(extraAxisRotation, rotationAxis, physXDirection);\r\n physXDirection.vec3_rotateAxisRadians(extraUpRotation, upDirection, physXDirection);\r\n\r\n physXDirection.vec3_scale(distance, physXDirection);\r\n\r\n this._addPhysX(physXDirection, staticDome, dynamicDome);\r\n }\r\n\r\n verticalDirection.vec3_rotateAxisRadians(angleForClove / 2, rotationAxis, verticalDirection);\r\n\r\n }\r\n\r\n horizontalDirection.vec3_rotateAxisRadians(angleForClove, upDirection, horizontalDirection);\r\n }\r\n }\r\n\r\n _addPhysX(physXDirection, staticDome, dynamicDome) {\r\n let position = physXDirection;\r\n let scale = Math.pp_random(1, 10);\r\n let shape = Math.pp_randomPick(Shape.Sphere, Shape.Box);\r\n if (this._myUseConvexMesh) {\r\n shape = Shape.ConvexMesh;\r\n scale *= this._myShapeScaleMultiplier;\r\n }\r\n\r\n let physX = this._myParentObject.pp_addObject();\r\n physX.pp_setPosition(position);\r\n\r\n let physXComponent = physX.pp_addComponent(PhysXComponent, {\r\n \"shape\": shape,\r\n \"shapeData\": { index: this._myShapeIndex },\r\n \"extents\": vec3_create(scale, scale, scale),\r\n \"static\": staticDome,\r\n \"kinematic\": !dynamicDome,\r\n \"mass\": 1\r\n });\r\n\r\n if (staticDome) {\r\n this._myStaticPhysXObjects.push(physX);\r\n this._myStaticPhysXComponents.push(physXComponent);\r\n this._myStaticPhysXCollectors.push(new PhysicsCollisionCollector(physXComponent));\r\n } else if (dynamicDome) {\r\n this._myDynamicPhysXObjects.push(physX);\r\n this._myDynamicPhysXComponents.push(physXComponent);\r\n this._myDynamicPhysXCollectors.push(new PhysicsCollisionCollector(physXComponent));\r\n } else {\r\n this._myKinematicPhysXObjects.push(physX);\r\n this._myKinematicPhysXComponents.push(physXComponent);\r\n this._myKinematicPhysXCollectors.push(new PhysicsCollisionCollector(physXComponent));\r\n }\r\n }\r\n\r\n onDestroy() {\r\n for (let collector of this._myStaticPhysXCollectors) {\r\n collector.destroy();\r\n }\r\n\r\n for (let collector of this._myDynamicPhysXCollectors) {\r\n collector.destroy();\r\n }\r\n\r\n for (let collector of this._myKinematicPhysXCollectors) {\r\n collector.destroy();\r\n }\r\n }\r\n}", "import { CollisionEventType, Emitter, PhysXComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\n\r\nexport class PhysicsCollisionCollector {\r\n\r\n constructor(physXComponent, trigger = false) {\r\n this._myPhysX = physXComponent;\r\n\r\n this._myTrigger = trigger;\r\n\r\n this._myCollisions = [];\r\n\r\n this._myCollisionsStart = [];\r\n this._myCollisionsEnd = [];\r\n\r\n this._myUpdateActive = false;\r\n this._myCollisionsStartToProcess = [];\r\n this._myCollisionsEndToProcess = [];\r\n\r\n this._myCollisionCallbackID = null;\r\n\r\n this._myActive = false;\r\n this.setActive(true);\r\n\r\n this._myLogEnabled = false;\r\n\r\n this._myTriggerDesyncFixDelay = new Timer(0.1);\r\n\r\n this._myCollisionEmitter = new Emitter(); // Signature: listener(currentPhysX, otherPhysX, collisionType)\r\n this._myCollisionStartEmitter = new Emitter(); // Signature: listener(currentPhysX, otherPhysX, collisionType)\r\n this._myCollisionEndEmitter = new Emitter(); // Signature: listener(currentPhysX, otherPhysX, collisionType)\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getPhysX() {\r\n return this._myPhysX;\r\n }\r\n\r\n getCollisions() {\r\n return this._myCollisions;\r\n }\r\n\r\n getCollisionsStart() {\r\n return this._myCollisionsStart;\r\n }\r\n\r\n getCollisionsEnd() {\r\n return this._myCollisionsEnd;\r\n }\r\n\r\n isActive() {\r\n return this._myActive;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this._myActive = active;\r\n\r\n this._myCollisions.pp_clear();\r\n\r\n this._myCollisionsStart.pp_clear();\r\n this._myCollisionsEnd.pp_clear();\r\n this._myUpdateActive = false;\r\n this._myCollisionsStartToProcess.pp_clear();\r\n this._myCollisionsEndToProcess.pp_clear();\r\n\r\n if (this._myActive) {\r\n this._myCollisionCallbackID = this._myPhysX.onCollision(this._onCollision.bind(this));\r\n } else if (this._myCollisionCallbackID != null) {\r\n this._myPhysX.removeCollisionCallback(this._myCollisionCallbackID);\r\n this._myCollisionCallbackID = null;\r\n }\r\n }\r\n }\r\n\r\n // Set to true only if u are going to actually update this object and don't want to lose any collision start/end events prior to updating the first time after activation\r\n setUpdateActive(active) {\r\n this._myUpdateActive = active;\r\n }\r\n\r\n // Update is not mandatory, use it only if u want to access collisions start and end\r\n update(dt) {\r\n if (!this._myActive) {\r\n return;\r\n }\r\n\r\n this._myUpdateActive = true;\r\n\r\n let prevCollisionsStartToProcess = this._myCollisionsStartToProcess;\r\n this._myCollisionsStartToProcess = this._myCollisionsStart;\r\n this._myCollisionsStartToProcess.pp_clear();\r\n this._myCollisionsStart = prevCollisionsStartToProcess;\r\n\r\n let prevCollisionsEndToProcess = this._myCollisionsEndToProcess;\r\n this._myCollisionsEndToProcess = this._myCollisionsEnd;\r\n this._myCollisionsEndToProcess.pp_clear();\r\n this._myCollisionsEnd = prevCollisionsEndToProcess;\r\n\r\n if (this._myTrigger) {\r\n this._triggerDesyncFix(dt);\r\n }\r\n }\r\n\r\n isLogEnabled() {\r\n return this._myLogEnabled;\r\n }\r\n\r\n setLogEnabled(enabled) {\r\n this._myLogEnabled = enabled;\r\n }\r\n\r\n registerCollisionEventListener(id, listener) {\r\n this._myCollisionEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterCollisionEventListener(id) {\r\n this._myCollisionEmitter.remove(id);\r\n }\r\n\r\n registerCollisionStartEventListener(id, listener) {\r\n this._myCollisionStartEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterCollisionStartEventListener(id) {\r\n this._myCollisionStartEmitter.remove(id);\r\n }\r\n\r\n registerCollisionEndEventListener(id, listener) {\r\n this._myCollisionEndEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterCollisionEndEventListener(id) {\r\n this._myCollisionEndEmitter.remove(id);\r\n }\r\n\r\n _onCollision(type, physXComponent) {\r\n if (type == CollisionEventType.Touch || type == CollisionEventType.TriggerTouch) {\r\n this._onCollisionStart(type, physXComponent);\r\n } else if (type == CollisionEventType.TouchLost || type == CollisionEventType.TriggerTouchLost) {\r\n this._onCollisionEnd(type, physXComponent);\r\n }\r\n\r\n this._myCollisionEmitter.notify(this._myPhysX, physXComponent, type);\r\n }\r\n\r\n _onCollisionStart(type, physXComponent) {\r\n if (this._myLogEnabled) {\r\n let objectFound = false;\r\n for (let object of this._myCollisions) {\r\n if (object.pp_equals(physXComponent.object)) {\r\n objectFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (objectFound) {\r\n console.error(\"Collision Start on object already collected\");\r\n }\r\n }\r\n\r\n this._myCollisions.push(physXComponent.object);\r\n\r\n if (this._myUpdateActive) {\r\n this._myCollisionsStartToProcess.push(physXComponent.object);\r\n this._myCollisionsEndToProcess.pp_removeAll(function (element) {\r\n return element.pp_equals(physXComponent.object);\r\n });\r\n }\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"Collision Start -\", this._myCollisions.length);\r\n }\r\n\r\n this._myCollisionStartEmitter.notify(this._myPhysX, physXComponent, type);\r\n }\r\n\r\n _onCollisionEnd(type, physXComponent) {\r\n if (this._myLogEnabled) {\r\n let objectFound = false;\r\n for (let object of this._myCollisions) {\r\n if (object.pp_equals(physXComponent.object)) {\r\n objectFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!objectFound) {\r\n console.error(\"Collision End on object not collected\");\r\n }\r\n }\r\n\r\n\r\n this._myCollisions.pp_removeAll(function (element) {\r\n return element.pp_equals(physXComponent.object);\r\n });\r\n\r\n if (this._myUpdateActive) {\r\n this._myCollisionsEndToProcess.push(physXComponent.object);\r\n this._myCollisionsStartToProcess.pp_removeAll(function (element) {\r\n return element.pp_equals(physXComponent.object);\r\n });\r\n }\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"Collision End -\", this._myCollisions.length);\r\n }\r\n\r\n this._myCollisionEndEmitter.notify(this._myPhysX, physXComponent, type);\r\n }\r\n\r\n _triggerDesyncFix(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n if (this._myCollisionCallbackID != null) {\r\n this._myPhysX.removeCollisionCallback(this._myCollisionCallbackID);\r\n this._myCollisionCallbackID = null;\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPhysicsCollisionCollector.prototype._triggerDesyncFix = function () {\r\n let findAllCallback = function (element) {\r\n let physX = element.pp_getComponentSelf(PhysXComponent);\r\n return physX == null || !physX.active;\r\n };\r\n return function _triggerDesyncFix(dt) {\r\n this._myTriggerDesyncFixDelay.update(dt);\r\n if (this._myTriggerDesyncFixDelay.isDone()) {\r\n this._myTriggerDesyncFixDelay.start();\r\n\r\n let collisionsToEnd = this._myCollisions.pp_findAll(findAllCallback);\r\n\r\n if (collisionsToEnd.length > 0) {\r\n //console.error(\"DESYNC RESOLVED\");\r\n\r\n for (let i = 0; i < collisionsToEnd.length; i++) {\r\n let collision = collisionsToEnd[i];\r\n\r\n let physX = collision.pp_getComponentSelf(PhysXComponent);\r\n if (physX) {\r\n this._onCollisionEnd(CollisionEventType.TriggerTouchLost, physX);\r\n } else {\r\n console.error(\"NO PHYSX, HOW?\");\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Alignment, Component, Justification, MeshComponent, Property, TextComponent } from \"@wonderlandengine/api\";\r\nimport { vec2_create, vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\nimport { ObjectPool, ObjectPoolParams } from \"../object_pool/object_pool.js\";\r\nimport { XRUtils } from \"../utils/xr_utils.js\";\r\nimport { MeshCreationParams, MeshCreationTriangleParams, MeshCreationVertexParams, MeshUtils } from \"../wl/utils/mesh_utils.js\";\r\nimport { CloneParams } from \"../wl/utils/object_utils.js\";\r\n\r\nexport class BenchmarkMaxVisibleTrianglesComponent extends Component {\r\n static TypeName = \"pp-benchmark-max-visible-triangles\";\r\n static Properties = {\r\n _myTargetFrameRate: Property.int(-1), // -1 means it will auto detect it at start\r\n _myTargetFrameRateThreshold: Property.int(3),\r\n _myStartPlaneCount: Property.int(1),\r\n _myPlaneTriangles: Property.int(100),\r\n _mySecondsBeforeDoubling: Property.float(0.5), // Higher gives a better frame rate evaluation\r\n _myDTHistoryToIgnorePercentage: Property.float(0.25),\r\n _myCloneMaterial: Property.bool(false),\r\n _myCloneMesh: Property.bool(false),\r\n\r\n _myLogEnabled: Property.bool(true),\r\n\r\n _myStartOnXRStart: Property.bool(false),\r\n _myDisplayInFrontOfPlayer: Property.bool(true),\r\n _myDisplayInFrontOfPlayerDistance: Property.float(10),\r\n\r\n _myPlaneMaterial: Property.material(),\r\n _myBackgroundMaterial: Property.material(),\r\n _myTextMaterial: Property.material(null)\r\n };\r\n\r\n _start() {\r\n this._myBackgroundSize = 4;\r\n this._myBackgroundObject.pp_setActive(true);\r\n this._myBackgroundObject.pp_setScale(this._myBackgroundSize + 0.1);\r\n this._myBackgroundObject.pp_translateLocal(vec3_create(0, 0, -0.001));\r\n\r\n this._myDoubleTimer = new Timer(this._mySecondsBeforeDoubling);\r\n this._myDone = false;\r\n\r\n this._myCurrentPlanes = this._myStartPlaneCount;\r\n\r\n this._myDTHistory = [];\r\n\r\n this._myUpperLimit = -1;\r\n this._myLowerLimit = 0;\r\n\r\n this._myPlanes = [];\r\n this._mySkipNextFrames = 0;\r\n this._myMaxWaitFrames = 0;\r\n\r\n this._myMaxPlanesReached = false;\r\n\r\n this._myFirstTime = true;\r\n }\r\n\r\n _update(dt) {\r\n // Skip lag frames after the new set of plane has been shown, wait for it to be stable\r\n {\r\n if (dt < 0.00001) {\r\n return;\r\n }\r\n\r\n if (dt > 0.5 && this._myMaxWaitFrames > 0) {\r\n this._myMaxWaitFrames--;\r\n return;\r\n }\r\n\r\n this._myMaxWaitFrames = 10;\r\n\r\n if (this._mySkipNextFrames > 0) {\r\n this._mySkipNextFrames--;\r\n return;\r\n }\r\n }\r\n\r\n if (!this._myDone) {\r\n this._myDoubleTimer.update(dt);\r\n\r\n this._myDTHistory.push(dt);\r\n\r\n if (this._myDoubleTimer.isDone()) {\r\n this._myDoubleTimer.start();\r\n\r\n let frameRate = this._computeAverageFrameRate(false);\r\n\r\n if (this._myFirstTime) {\r\n this._myFirstTime = false;\r\n } else {\r\n\r\n // If there is not lag, the current plane count is a good lower limit, otherwise the current count is now a upper threshold, we have to search below it\r\n let lagging = false;\r\n if (frameRate < this._myStableFrameRate - this._myTargetFrameRateThreshold) {\r\n this._myUpperLimit = this._myCurrentPlanes;\r\n\r\n lagging = true;\r\n\r\n if (this._myUpperLimit == 1) {\r\n this._myLowerLimit = 1;\r\n }\r\n } else {\r\n this._myLowerLimit = this._myCurrentPlanes;\r\n if (this._myUpperLimit > 0) {\r\n this._myUpperLimit = Math.max(this._myUpperLimit, this._myLowerLimit);\r\n }\r\n }\r\n\r\n this._myTriangleTextComponent.text = \"Triangles: \" + this._myCurrentPlanes * this._myRealTrianglesAmount;\r\n this._myPlaneTextComponent.text = \"Planes: \" + this._myCurrentPlanes;\r\n this._myFPSTextComponent.text = \"FPS: \" + frameRate + \" / \" + this._myStableFrameRate;\r\n\r\n if (lagging) {\r\n this._myTriangleTextComponent.material.color = this._myLagColor;\r\n this._myPlaneTextComponent.material.color = this._myLagColor;\r\n this._myFPSTextComponent.material.color = this._myLagColor;\r\n } else {\r\n this._myTriangleTextComponent.material.color = this._myNormalColor;\r\n this._myPlaneTextComponent.material.color = this._myNormalColor;\r\n this._myFPSTextComponent.material.color = this._myNormalColor;\r\n }\r\n\r\n let reset = false;\r\n\r\n // Check if the binary search is completed\r\n if ((this._myUpperLimit > 0 &&\r\n (!lagging && (this._myUpperLimit - this._myLowerLimit) <= Math.max(2, 1000 / this._myRealTrianglesAmount)) ||\r\n (lagging && (this._myUpperLimit - this._myLowerLimit) <= 1)) ||\r\n (!lagging && this._myMaxPlanesReached)) {\r\n if (frameRate < this._myStableFrameRate - this._myTargetFrameRateThreshold) {\r\n // Going a bit back with the binary search, maybe the lower limit was not lower after all cause of a bad assumption of average FPS\r\n this._myLowerLimit = Math.max(1, Math.floor(this._myUpperLimit / 2.5));\r\n this._myUpperLimit = 0;\r\n reset = true;\r\n\r\n if (this._myLogEnabled) {\r\n // Reset\r\n console.log(\"Rst - Triangles:\", this._myCurrentPlanes * this._myRealTrianglesAmount, \"- Planes:\", this._myCurrentPlanes, \"- Frame Rate:\", frameRate);\r\n }\r\n } else {\r\n if (this._myMaxPlanesReached) {\r\n if (this._myLogEnabled) {\r\n console.log(\"Aborted - Max Planes Reached\");\r\n\r\n this._myDoneTextComponent.text = \"Aborted - Max Planes Reached\";\r\n }\r\n } else {\r\n this._displayPlanes(this._myLowerLimit);\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"\\nEnd - Triangles:\", this._myLowerLimit * this._myRealTrianglesAmount, \"- Planes:\", this._myLowerLimit, \"- Frame Rate:\", frameRate);\r\n console.log(\"Plane Triangles (Adjusted):\", this._myRealTrianglesAmount);\r\n console.log(\"Target Frame Rate:\", this._myStableFrameRate, \"- Threshold: \", (this._myStableFrameRate - this._myTargetFrameRateThreshold));\r\n }\r\n\r\n this._myTriangleTextComponent.text = \"Triangles: \" + this._myLowerLimit * this._myRealTrianglesAmount;\r\n this._myPlaneTextComponent.text = \"Planes: \" + this._myLowerLimit;\r\n this._myFPSTextComponent.text = \"FPS: \" + frameRate + \" / \" + this._myStableFrameRate;\r\n\r\n this._myDoneTextComponent.text = \"End\";\r\n }\r\n this._myDone = true;\r\n }\r\n }\r\n\r\n if (lagging && !reset) {\r\n if (this._myLogEnabled) {\r\n console.log(\"Lag - Triangles:\", this._myCurrentPlanes * this._myRealTrianglesAmount, \"- Planes:\", this._myCurrentPlanes, \"- Frame Rate:\", frameRate);\r\n }\r\n }\r\n\r\n if (!this._myDone) {\r\n // Sort of binary search, if there is no upper limit yet, just double\r\n if (this._myUpperLimit > 0) {\r\n this._myCurrentPlanes = Math.floor((this._myUpperLimit + this._myLowerLimit) / 2);\r\n this._myCurrentPlanes = Math.max(this._myCurrentPlanes, 1);\r\n } else if (!reset) {\r\n this._myCurrentPlanes = this._myLowerLimit * 2;\r\n } else {\r\n this._myCurrentPlanes = this._myLowerLimit;\r\n }\r\n\r\n if (this._myCurrentPlanes > 50000) {\r\n this._myCurrentPlanes = 50000;\r\n this._myMaxPlanesReached = true;\r\n } else {\r\n this._myMaxPlanesReached = false;\r\n }\r\n }\r\n }\r\n\r\n if (!this._myDone) {\r\n this._displayPlanes(this._myCurrentPlanes);\r\n this._myElapsedTime = 0;\r\n this._myFrameCount = 0;\r\n\r\n this._mySkipNextFrames = 30;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _displayPlanes(count) {\r\n while (this._myPlanes.length > count) {\r\n let plane = this._myPlanes.pop();\r\n Globals.getObjectPoolManager(this.engine).release(this._myPoolID, plane);\r\n }\r\n\r\n while (this._myPlanes.length < count) {\r\n let plane = Globals.getObjectPoolManager(this.engine).get(this._myPoolID);\r\n this._myPlanes.push(plane);\r\n }\r\n\r\n let gridSize = 1;\r\n while (gridSize * gridSize < count) {\r\n gridSize++;\r\n }\r\n\r\n let spaceBetween = 0.01;\r\n let totalSpaceBetween = spaceBetween * (gridSize - 1);\r\n let planeSize = (this._myBackgroundSize * 2 - totalSpaceBetween) / (gridSize * 2);\r\n\r\n let currentCount = count;\r\n\r\n for (let i = 0; i < gridSize && currentCount > 0; i++) {\r\n for (let j = 0; j < gridSize && currentCount > 0; j++) {\r\n let plane = this._myPlanes[currentCount - 1];\r\n plane.pp_setScale(planeSize);\r\n\r\n let position = [-this._myBackgroundSize + planeSize + j * planeSize * 2 + j * spaceBetween, this._myBackgroundSize - planeSize - i * planeSize * 2 - i * spaceBetween, 0];\r\n\r\n plane.pp_setPositionLocal(position);\r\n plane.pp_setActive(true);\r\n\r\n currentCount--;\r\n }\r\n }\r\n }\r\n\r\n start() {\r\n this._myValid = false;\r\n\r\n if (!Globals.isDebugEnabled(this.engine)) return;\r\n\r\n this._myValid = true;\r\n\r\n if (this._myPlaneMaterial == null) {\r\n this._myPlaneMaterial = Globals.getDefaultMaterials(this.engine).myPhongOpaque.clone();\r\n this._myPlaneMaterial.diffuseColor = vec4_create(0.95, 0.95, 0.95, 1);\r\n this._myPlaneMaterial.ambientColor = vec4_create(0, 0, 0, 1);\r\n this._myPlaneMaterial.ambientFactor = 0.5;\r\n }\r\n\r\n if (this._myBackgroundMaterial == null) {\r\n this._myBackgroundMaterial = Globals.getDefaultMaterials(this.engine).myPhongOpaque.clone();\r\n this._myBackgroundMaterial.diffuseColor = vec4_create(0.25, 0.25, 0.25, 1);\r\n this._myBackgroundMaterial.ambientColor = vec4_create(0, 0, 0, 1);\r\n this._myBackgroundMaterial.ambientFactor = 0.5;\r\n }\r\n\r\n if (this._myTextMaterial == null) {\r\n this._myTextMaterial = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n }\r\n\r\n this._myLagColor = vec4_create(0.6, 0, 0, 1);\r\n this._myNormalColor = vec4_create(0.25, 0.25, 0.25, 1);\r\n\r\n this._myRealTrianglesAmount = 0;\r\n\r\n let parent = this.object;\r\n if (this._myDisplayInFrontOfPlayer) {\r\n parent = Globals.getPlayerObjects(this.engine).myHead.pp_addObject();\r\n parent.pp_rotateAxis(180, vec3_create(0, 1, 0));\r\n parent.pp_translateLocal(vec3_create(0, 0, this._myDisplayInFrontOfPlayerDistance));\r\n }\r\n\r\n this._myTrianglesObject = parent.pp_addObject();\r\n\r\n this._myBackgroundObject = this._myTrianglesObject.pp_addObject();\r\n {\r\n let meshComponent = this._myBackgroundObject.pp_addComponent(MeshComponent);\r\n meshComponent.mesh = MeshUtils.createPlane(this.engine);\r\n meshComponent.material = this._myBackgroundMaterial.clone();\r\n }\r\n\r\n this._myPlaneObject = this._myTrianglesObject.pp_addObject();\r\n {\r\n let meshComponent = this._myPlaneObject.pp_addComponent(MeshComponent);\r\n meshComponent.mesh = this._createPlaneMesh(this._myPlaneTriangles);\r\n this._myRealTrianglesAmount = meshComponent.mesh.indexData.length / 3;\r\n meshComponent.material = this._myPlaneMaterial.clone();\r\n }\r\n\r\n let poolParams = new ObjectPoolParams();\r\n if (!this._myCloneMesh) {\r\n poolParams.myInitialPoolSize = 30000;\r\n } else {\r\n if (this._myRealTrianglesAmount <= 4) {\r\n poolParams.myInitialPoolSize = 15000;\r\n } else if (this._myRealTrianglesAmount <= 8) {\r\n poolParams.myInitialPoolSize = 10000;\r\n } else if (this._myRealTrianglesAmount <= 64) {\r\n poolParams.myInitialPoolSize = 7500;\r\n } else {\r\n poolParams.myInitialPoolSize = 5000;\r\n }\r\n }\r\n poolParams.myPercentageToAddWhenEmpty = 0;\r\n poolParams.myAmountToAddWhenEmpty = 10000;\r\n poolParams.myCloneParams = new CloneParams();\r\n poolParams.myCloneParams.myComponentDeepCloneParams.setDeepCloneComponentVariable(MeshComponent.TypeName, \"material\", this._myCloneMaterial);\r\n poolParams.myCloneParams.myComponentDeepCloneParams.setDeepCloneComponentVariable(MeshComponent.TypeName, \"mesh\", this._myCloneMesh);\r\n\r\n this._myPoolID = this.type + \"_\" + Math.pp_randomUUID();\r\n Globals.getObjectPoolManager(this.engine).addPool(this._myPoolID, new ObjectPool(this._myPlaneObject, poolParams));\r\n\r\n this._myBackgroundObject.pp_setActive(false);\r\n this._myPlaneObject.pp_setActive(false);\r\n\r\n this._myStartTimer = new Timer(2);\r\n this._mySessionStarted = false;\r\n\r\n this._myTextsObject = this._myTrianglesObject.pp_addObject();\r\n //this._myTextsObject.pp_addComponent(EasyTransformComponent);\r\n\r\n this._myTriangleTextObject = this._myTextsObject.pp_addObject();\r\n //this._myTriangleTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myTriangleTextComponent = this._myTriangleTextObject.pp_addComponent(TextComponent);\r\n\r\n this._myTriangleTextComponent.alignment = Alignment.Left;\r\n this._myTriangleTextComponent.justification = Justification.Line;\r\n this._myTriangleTextComponent.material = this._myTextMaterial.clone();\r\n this._myTriangleTextComponent.material.color = this._myNormalColor;\r\n this._myTriangleTextComponent.text = \" \";\r\n //this._myTriangleTextComponent.text = \"Triangles: 9999999\";\r\n\r\n this._myPlaneTextObject = this._myTextsObject.pp_addObject();\r\n\r\n this._myPlaneTextComponent = this._myPlaneTextObject.pp_addComponent(TextComponent);\r\n //this._myPlaneTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myPlaneTextComponent.alignment = Alignment.Left;\r\n this._myPlaneTextComponent.justification = Justification.Line;\r\n this._myPlaneTextComponent.material = this._myTextMaterial.clone();\r\n this._myPlaneTextComponent.material.color = this._myNormalColor;\r\n this._myPlaneTextComponent.text = \" \";\r\n //this._myPlaneTextComponent.text = \"Planes: 9999999\";\r\n\r\n this._myFPSTextObject = this._myTextsObject.pp_addObject();\r\n\r\n this._myFPSTextComponent = this._myFPSTextObject.pp_addComponent(TextComponent);\r\n //this._myFPSTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myFPSTextComponent.alignment = Alignment.Left;\r\n this._myFPSTextComponent.justification = Justification.Line;\r\n this._myFPSTextComponent.material = this._myTextMaterial.clone();\r\n this._myFPSTextComponent.material.color = this._myNormalColor;\r\n this._myFPSTextComponent.text = \" \";\r\n //this._myFPSTextComponent.text = \"FPS: 99.99\";\r\n\r\n this._myDoneTextObject = this._myTrianglesObject.pp_addObject();\r\n\r\n this._myDoneTextComponent = this._myDoneTextObject.pp_addComponent(TextComponent);\r\n //this._myDoneTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myDoneTextComponent.alignment = Alignment.Center;\r\n this._myDoneTextComponent.justification = Justification.Line;\r\n this._myDoneTextComponent.material = this._myTextMaterial.clone();\r\n this._myDoneTextComponent.material.color = this._myNormalColor;\r\n this._myDoneTextComponent.text = \" \";\r\n //this._myDoneTextComponent.text = \"End\";\r\n\r\n this._myTextsObject.pp_setPositionLocal(vec3_create(0, 4.3, 0));\r\n this._myTextsObject.pp_setScale(2.75);\r\n\r\n this._myTriangleTextObject.pp_setPositionLocal(vec3_create(-1.4, 0, 0));\r\n this._myPlaneTextObject.pp_setPositionLocal(vec3_create(0.55, 0, 0));\r\n this._myFPSTextObject.pp_setPositionLocal(vec3_create(-0.315, 0, 0));\r\n this._myDoneTextObject.pp_setPositionLocal(vec3_create(0, -4.6, 0));\r\n this._myDoneTextObject.pp_setScale(4);\r\n\r\n this._myDTHistory = [];\r\n\r\n this._myFramesToSkip = 10;\r\n }\r\n\r\n update(dt) {\r\n if (!this._myValid) return;\r\n\r\n if (this._myFramesToSkip == 0) {\r\n if (this._mySessionStarted || !this._myStartOnXRStart) {\r\n if (this._myStartTimer.isRunning()) {\r\n this._myStartTimer.update(dt);\r\n\r\n this._myDTHistory.push(dt);\r\n\r\n if (this._myStartTimer.isDone()) {\r\n this._myStableFrameRate = this._computeAverageFrameRate(true);\r\n if (this._myTargetFrameRate > 0) {\r\n this._myStableFrameRate = this._myTargetFrameRate;\r\n }\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"\\nPlane Triangles (Adjusted):\", this._myRealTrianglesAmount);\r\n console.log(\"Target Frame Rate:\", this._myStableFrameRate, \"- Threshold: \", (this._myStableFrameRate - this._myTargetFrameRateThreshold));\r\n console.log(\"\");\r\n }\r\n this._start();\r\n }\r\n } else {\r\n this._update(dt);\r\n }\r\n } else {\r\n this._mySessionStarted = XRUtils.getSession(this.engine) != null;\r\n }\r\n } else {\r\n this._myFramesToSkip--;\r\n }\r\n }\r\n\r\n _computeAverageFrameRate(firstCompute) {\r\n let frameRate = 0;\r\n\r\n this._myDTHistory.sort();\r\n let elementsToRemove = Math.floor(this._myDTHistory.length * Math.min(0.9, this._myDTHistoryToIgnorePercentage * (firstCompute ? 2 : 1)));\r\n for (let i = 0; i < elementsToRemove && this._myDTHistory.length > 1; i++) {\r\n this._myDTHistory.pop();\r\n }\r\n\r\n let averageDT = 0;\r\n for (let dt of this._myDTHistory) {\r\n averageDT += dt;\r\n }\r\n averageDT /= this._myDTHistory.length;\r\n frameRate = Math.round(1 / averageDT);\r\n\r\n this._myDTHistory = [];\r\n\r\n return frameRate;\r\n }\r\n\r\n _createPlaneMesh(trianglesAmount) {\r\n let squaresAmount = Math.ceil(trianglesAmount / 2);\r\n\r\n let row = 1;\r\n let column = 1;\r\n\r\n let closestSqrt = 1;\r\n while (closestSqrt * closestSqrt < squaresAmount) {\r\n closestSqrt++;\r\n }\r\n\r\n row = closestSqrt;\r\n column = closestSqrt;\r\n\r\n while (row > 1 && column > 1 && row * column > squaresAmount && ((row - 1) * column >= squaresAmount)) {\r\n row--;\r\n }\r\n\r\n let meshCreationParams = new MeshCreationParams(this.engine);\r\n\r\n for (let i = 0; i < row + 1; i++) {\r\n for (let j = 0; j < column + 1; j++) {\r\n\r\n let x = (2 / column) * j;\r\n let y = (2 / row) * i;\r\n\r\n let vertexCreationParams = new MeshCreationVertexParams();\r\n\r\n vertexCreationParams.myPosition = vec3_create();\r\n vertexCreationParams.myPosition[0] = x - 1;\r\n vertexCreationParams.myPosition[1] = y - 1;\r\n vertexCreationParams.myPosition[2] = 0;\r\n\r\n vertexCreationParams.myTextureCoordinates = vec2_create();\r\n vertexCreationParams.myTextureCoordinates[0] = x / 2;\r\n vertexCreationParams.myTextureCoordinates[1] = y / 2;\r\n\r\n vertexCreationParams.myNormal = vec3_create();\r\n vertexCreationParams.myNormal[0] = 0;\r\n vertexCreationParams.myNormal[1] = 0;\r\n vertexCreationParams.myNormal[2] = 1;\r\n\r\n meshCreationParams.myVertexes.push(vertexCreationParams);\r\n }\r\n }\r\n\r\n for (let i = 0; i < row; i++) {\r\n for (let j = 0; j < column; j++) {\r\n let firstTriangle = new MeshCreationTriangleParams();\r\n firstTriangle.myIndexes[0] = (i * (column + 1)) + j;\r\n firstTriangle.myIndexes[1] = (i * (column + 1)) + j + 1;\r\n firstTriangle.myIndexes[2] = ((i + 1) * (column + 1)) + j;\r\n\r\n let secondTriangle = new MeshCreationTriangleParams();\r\n secondTriangle.myIndexes[0] = ((i + 1) * (column + 1)) + j;\r\n secondTriangle.myIndexes[1] = (i * (column + 1)) + j + 1;\r\n secondTriangle.myIndexes[2] = ((i + 1) * (column + 1)) + j + 1;\r\n\r\n meshCreationParams.myTriangles.push(firstTriangle);\r\n meshCreationParams.myTriangles.push(secondTriangle);\r\n }\r\n }\r\n\r\n let mesh = MeshUtils.create(meshCreationParams);\r\n\r\n return mesh;\r\n }\r\n\r\n onDestroy() {\r\n Globals.getObjectPoolManager(this.engine)?.destroyPool(this._myPoolID);\r\n }\r\n}", "import { Component, PhysXComponent, Property } from \"@wonderlandengine/api\";\r\n\r\nexport class AdjustHierarchyPhysXScaleComponent extends Component {\r\n static TypeName = \"pp-adjust-hierarchy-physx-scale\";\r\n static Properties = {\r\n _myWhen: Property.enum([\"Init\", \"Start\", \"First Update\"], \"Start\")\r\n };\r\n\r\n init() {\r\n if (this.active && this._myWhen == 0) {\r\n this._adjustScale();\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myWhen == 1) {\r\n this._adjustScale();\r\n }\r\n this._myFirst = true;\r\n }\r\n\r\n update(dt) {\r\n if (this._myWhen == 2 && this._myFirst) {\r\n this._myFirst = false;\r\n this._adjustScale();\r\n }\r\n }\r\n\r\n _adjustScale() {\r\n let scale = this.object.pp_getScale();\r\n let physXComponents = this.object.pp_getComponents(PhysXComponent);\r\n for (let physX of physXComponents) {\r\n physX.extents[0] = physX.extents[0] * scale[0];\r\n physX.extents[1] = physX.extents[1] * scale[1];\r\n physX.extents[2] = physX.extents[2] * scale[2];\r\n\r\n if (physX.active) {\r\n physX.active = false;\r\n physX.active = true;\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../utils/xr_utils.js\";\r\n\r\nexport class ClearConsoleOnXRSessionStartComponent extends Component {\r\n static TypeName = \"pp-clear-console-on-xr-session-start\";\r\n static Properties = {\r\n _myFirstTimeOnly: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myFirstTime = true;\r\n XRUtils.registerSessionStartEventListener(this, this._onXRSessionStart.bind(this), true, false, this.engine);\r\n }\r\n\r\n _onXRSessionStart() {\r\n if (!this._myFirstTimeOnly || this._myFirstTime) {\r\n this._myFirstTime = false;\r\n console.clear();\r\n }\r\n }\r\n\r\n onDestroy() {\r\n XRUtils.unregisterSessionStartEventListener(this, this.engine);\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../utils/xr_utils.js\";\r\n\r\nexport class SetActiveComponent extends Component {\r\n static TypeName = \"pp-set-active\";\r\n static Properties = {\r\n _myActive: Property.bool(true),\r\n _mySetActiveOn: Property.enum([\"Self\", \"Children\", \"Descendants\", \"Hierarchy\"], \"Hierarchy\"),\r\n _mySetActiveWhen: Property.enum([\"Init\", \"Start\", \"First Update\", \"Enter XR\", \"Exit XR\", \"First Enter XR\", \"First Exit XR\"], \"Init\")\r\n };\r\n\r\n init() {\r\n if (this.active && this._mySetActiveWhen == 0) {\r\n this._setActive();\r\n }\r\n }\r\n\r\n start() {\r\n if (this._mySetActiveWhen == 1) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstUpdate = true;\r\n this._myFirstXRStart = true;\r\n this._myFirstXREnd = true;\r\n\r\n if (this._mySetActiveWhen == 3 || this._mySetActiveWhen == 5) {\r\n XRUtils.registerSessionStartEventListener(this, this._onXRSessionStart.bind(this), true, true, this.engine);\r\n }\r\n\r\n if (this._mySetActiveWhen == 4 || this._mySetActiveWhen == 6) {\r\n XRUtils.registerSessionEndEventListener(this, this._onXRSessionEnd.bind(this), this.engine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._mySetActiveWhen == 2 && this._myFirstUpdate) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstUpdate = false;\r\n }\r\n\r\n _onXRSessionStart() {\r\n if (this._mySetActiveWhen == 3 || (this._mySetActiveWhen == 5 && this._myFirstXRStart)) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstXRStart = false;\r\n }\r\n\r\n _onXRSessionEnd() {\r\n if (this._mySetActiveWhen == 4 || (this._mySetActiveWhen == 6 && this._myFirstXREnd)) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstXREnd = false;\r\n }\r\n\r\n _setActive() {\r\n if (this._mySetActiveOn == 0) {\r\n this.object.pp_setActiveSelf(this._myActive);\r\n } else if (this._mySetActiveOn == 1) {\r\n this.object.pp_setActiveChildren(this._myActive);\r\n } else if (this._mySetActiveOn == 2) {\r\n this.object.pp_setActiveDescendants(this._myActive);\r\n } else {\r\n this.object.pp_setActive(this._myActive);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this.engine);\r\n }\r\n}", "import { Alignment, Component, Justification, Property } from \"@wonderlandengine/api\";\r\nimport { vec3_create, vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Timer } from \"../timer.js\";\r\n\r\nexport class ShowFPSComponent extends Component {\r\n static TypeName = \"pp-show-fps\";\r\n static Properties = {\r\n _myRefreshSeconds: Property.float(0.25),\r\n _myScreenPositionX: Property.float(1),\r\n _myScreenPositionY: Property.float(-1),\r\n _myScreenPositionZ: Property.float(1),\r\n _myScale: Property.float(1.5),\r\n _myTextMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._myColor = vec4_create(1, 1, 1, 1);\r\n if (this._myTextMaterial != null) {\r\n this._myColor.vec4_copy(this._myTextMaterial.color);\r\n }\r\n\r\n this._myScreenPosition = vec3_create(this._myScreenPositionX, this._myScreenPositionY, this._myScreenPositionZ);\r\n\r\n this._myCurrentFPS = 0;\r\n\r\n this._myTimer = new Timer(this._myRefreshSeconds);\r\n this._myTotalDT = 0;\r\n this._myFrames = 0;\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n this._myTotalDT += dt;\r\n this._myFrames++;\r\n\r\n this._myTimer.update(dt);\r\n if (this._myTimer.isDone()) {\r\n this._myTimer.start();\r\n\r\n this._myCurrentFPS = Math.round(this._myFrames / this._myTotalDT);\r\n\r\n this._myTotalDT = 0;\r\n this._myFrames = 0;\r\n }\r\n\r\n Globals.getDebugVisualManager(this.engine).drawUIText(0, this._myCurrentFPS.toFixed(0), this._myScreenPosition, this._myScale, this._myColor, Alignment.Right, Justification.Bottom);\r\n }\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { property } from \"@wonderlandengine/api/decorators.js\";\r\nimport { XRUtils } from \"../../utils/xr_utils.js\";\r\n\r\nenum _ButtonBehaviorWhenNotAvailable {\r\n NONE = \"none\",\r\n DISABLE = \"disable\",\r\n HIDE = \"hide\"\r\n}\r\n\r\n/** The buttons must first be enabled from the Wonderland Engine editor -> Project Settings / VR & AR */\r\nexport class ShowXRButtonsComponent extends Component {\r\n public static override TypeName = \"pp-show-xr-buttons\";\r\n\r\n @property.bool(true)\r\n private _myShowVRButton!: boolean;\r\n @property.enum(Object.values(_ButtonBehaviorWhenNotAvailable), _ButtonBehaviorWhenNotAvailable.DISABLE)\r\n private _myVRButtonBehaviorWhenNotAvailable!: number;\r\n\r\n @property.bool(true)\r\n private _myShowARButton!: boolean;\r\n @property.enum(Object.values(_ButtonBehaviorWhenNotAvailable), _ButtonBehaviorWhenNotAvailable.DISABLE)\r\n private _myARButtonBehaviorWhenNotAvailable!: number;\r\n\r\n private _myXRButtonsContainer: HTMLElement | null = null;\r\n private _myVRButton: HTMLElement | null = null;\r\n private _myARButton: HTMLElement | null = null;\r\n\r\n private _myFirstUpdate: boolean = false;\r\n\r\n private _myVRButtonVisibilityUpdated: boolean = false;\r\n private _myVRButtonUsabilityUpdated: boolean = false;\r\n private _myVRButtonDisabledOpacityUpdated: boolean = false;\r\n\r\n private _myARButtonVisibilityUpdated: boolean = false;\r\n private _myARButtonUsabilityUpdated: boolean = false;\r\n private _myARButtonDisabledOpacityUpdated: boolean = false;\r\n\r\n public override init(): void {\r\n this._myXRButtonsContainer = document.getElementById(\"xr-buttons-container\");\r\n\r\n this._myVRButton = document.getElementById(\"vr-button\");\r\n this._myARButton = document.getElementById(\"ar-button\");\r\n }\r\n\r\n public override start(): void {\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true);\r\n }\r\n\r\n public override update(dt: number): void {\r\n if (!this._myFirstUpdate) {\r\n this._myFirstUpdate = true;\r\n\r\n if (this._myXRButtonsContainer != null) {\r\n if (this._myShowVRButton || this._myShowARButton) {\r\n this._myXRButtonsContainer.style.setProperty(\"display\", \"flex\");\r\n } else {\r\n this._myXRButtonsContainer.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n\r\n if (this._myVRButton != null) {\r\n if (this._myShowVRButton) {\r\n this._myVRButton.style.setProperty(\"display\", \"block\");\r\n } else {\r\n this._myVRButton.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n\r\n if (this._myARButton != null) {\r\n if (this._myShowARButton) {\r\n this._myARButton.style.setProperty(\"display\", \"block\");\r\n } else {\r\n this._myARButton.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n } else {\r\n this._updateXRButtons(dt);\r\n }\r\n }\r\n\r\n private _updateXRButtons(dt: number): void {\r\n if (this._myShowVRButton) {\r\n if (!this._myVRButtonUsabilityUpdated) {\r\n if (this._myVRButton != null) {\r\n if (!this._myVRButtonVisibilityUpdated) {\r\n this._myVRButton.style.setProperty(\"transform\", \"scale(1)\");\r\n this._myVRButtonVisibilityUpdated = true;\r\n }\r\n\r\n if (!this._myVRButtonUsabilityUpdated) {\r\n if (XRUtils.isVRSupported()) {\r\n this._myVRButton.style.setProperty(\"opacity\", \"1\");\r\n this._myVRButton.style.setProperty(\"pointer-events\", \"all\");\r\n\r\n this._myVRButtonUsabilityUpdated = true;\r\n } else if (!this._myVRButtonDisabledOpacityUpdated) {\r\n switch (this._myVRButtonBehaviorWhenNotAvailable) {\r\n case 0:\r\n this._myVRButton.style.setProperty(\"opacity\", \"1\");\r\n this._myVRButton.style.setProperty(\"pointer-events\", \"all\");\r\n break;\r\n case 1:\r\n this._myVRButton.style.setProperty(\"opacity\", \"0.5\");\r\n break;\r\n case 2:\r\n this._myVRButton.style.setProperty(\"display\", \"none\");\r\n break;\r\n }\r\n\r\n this._myVRButtonDisabledOpacityUpdated = true;\r\n }\r\n }\r\n } else {\r\n this._myVRButtonUsabilityUpdated = true;\r\n }\r\n }\r\n }\r\n\r\n if (this._myShowARButton) {\r\n if (!this._myARButtonUsabilityUpdated) {\r\n if (this._myARButton != null) {\r\n if (!this._myARButtonVisibilityUpdated) {\r\n this._myARButton.style.setProperty(\"transform\", \"scale(1)\");\r\n this._myARButtonVisibilityUpdated = true;\r\n }\r\n\r\n if (!this._myARButtonUsabilityUpdated) {\r\n if (XRUtils.isARSupported()) {\r\n this._myARButton.style.setProperty(\"opacity\", \"1\");\r\n this._myARButton.style.setProperty(\"pointer-events\", \"all\");\r\n\r\n this._myARButtonUsabilityUpdated = true;\r\n } else if (!this._myARButtonDisabledOpacityUpdated) {\r\n switch (this._myARButtonBehaviorWhenNotAvailable) {\r\n case 0:\r\n this._myARButton.style.setProperty(\"opacity\", \"1\");\r\n this._myARButton.style.setProperty(\"pointer-events\", \"all\");\r\n break;\r\n case 1:\r\n this._myARButton.style.setProperty(\"opacity\", \"0.5\");\r\n break;\r\n case 2:\r\n this._myARButton.style.setProperty(\"display\", \"none\");\r\n break;\r\n }\r\n\r\n this._myARButtonDisabledOpacityUpdated = true;\r\n }\r\n }\r\n } else {\r\n this._myARButtonUsabilityUpdated = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _onXRSessionStart(): void {\r\n if (this._myXRButtonsContainer != null) {\r\n this._myXRButtonsContainer.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n\r\n private _onXRSessionEnd(): void {\r\n if (this._myXRButtonsContainer != null && (this._myShowVRButton || this._myShowARButton)) {\r\n this._myXRButtonsContainer.style.removeProperty(\"display\");\r\n }\r\n }\r\n}", "/*\r\n You can also use plain functions for state/transition if u want to do something simple and quick\r\n\r\n Signatures:\r\n function stateUpdate(dt, fsm)\r\n function init(fsm, initStateData)\r\n function transition(fsm, transitionData)\r\n*/\r\n\r\nimport { Emitter } from \"@wonderlandengine/api\";\r\n\r\nexport class StateData {\r\n\r\n constructor(stateID, stateObject) {\r\n this.myID = stateID;\r\n this.myObject = stateObject;\r\n }\r\n}\r\n\r\nexport class TransitionData {\r\n\r\n constructor(transitionID, fromStateData, toStateData, transitionObject, skipStateFunction) {\r\n this.myID = transitionID;\r\n this.myFromState = fromStateData;\r\n this.myToState = toStateData;\r\n this.myObject = transitionObject;\r\n this.mySkipStateFunction = skipStateFunction;\r\n }\r\n}\r\n\r\nexport let PerformMode = {\r\n IMMEDIATE: 0,\r\n DELAYED: 1\r\n};\r\n\r\nexport let PerformDelayedMode = {\r\n QUEUE: 0,\r\n KEEP_FIRST: 1,\r\n KEEP_LAST: 2\r\n};\r\n\r\nexport let SkipStateFunction = {\r\n NONE: 0,\r\n END: 1,\r\n START: 2,\r\n BOTH: 3\r\n};\r\n\r\nexport class FSM {\r\n\r\n constructor(performMode = PerformMode.IMMEDIATE, performDelayedMode = PerformDelayedMode.QUEUE) {\r\n this._myCurrentStateData = null;\r\n\r\n this._myStates = new Map();\r\n this._myTransitions = new Map();\r\n\r\n this._myLogEnabled = false;\r\n this._myLogShowDelayedInfo = false;\r\n this._myLogFSMName = \"FSM\";\r\n\r\n this._myPerformMode = performMode;\r\n this._myPerformDelayedMode = performDelayedMode;\r\n this._myPendingPerforms = [];\r\n this._myCurrentlyPerformedTransition = null;\r\n\r\n this._myInitEmitter = new Emitter(); // Signature: listener(fsm, initStateData, initTransitionObject, ...args)\r\n this._myInitIDEmitters = new Map(); // Signature: listener(fsm, initStateData, initTransitionObject, ...args)\r\n this._myTransitionEmitter = new Emitter(); // Signature: listener(fsm, fromStateData, toStateData, transitionData, performMode, ...args)\r\n this._myTransitionIDEmitters = []; // Signature: listener(fsm, fromStateData, toStateData, transitionData, performMode, ...args)\r\n }\r\n\r\n addState(stateID, state = null) {\r\n let stateObject = null;\r\n if (!state || typeof state == \"function\") {\r\n stateObject = {};\r\n if (typeof state == \"function\") {\r\n stateObject.update = function update() { return state(...arguments); };\r\n } else {\r\n stateObject.update = null;\r\n }\r\n stateObject.clone = function clone() {\r\n let cloneObject = {};\r\n cloneObject.update = this.update;\r\n cloneObject.clone = this.clone;\r\n return cloneObject;\r\n };\r\n } else {\r\n stateObject = state;\r\n }\r\n\r\n let stateData = new StateData(stateID, stateObject);\r\n this._myStates.set(stateID, stateData);\r\n this._myTransitions.set(stateID, new Map());\r\n }\r\n\r\n addTransition(fromStateID, toStateID, transitionID, transition = null, skipStateFunction = SkipStateFunction.NONE) {\r\n let transitionObject = null;\r\n if (!transition || typeof transition == \"function\") {\r\n transitionObject = {};\r\n if (typeof transition == \"function\") {\r\n transitionObject.perform = function perform() { return transition(...arguments); };\r\n } else {\r\n transitionObject.perform = null;\r\n }\r\n transitionObject.clone = function clone() {\r\n let cloneObject = {};\r\n cloneObject.perform = this.perform;\r\n cloneObject.clone = this.clone;\r\n return cloneObject;\r\n };\r\n } else {\r\n transitionObject = transition;\r\n }\r\n\r\n if (this.hasState(fromStateID) && this.hasState(toStateID)) {\r\n let transitionsFromState = this._getTransitionsFromState(fromStateID);\r\n\r\n let transitionData = new TransitionData(transitionID, this.getState(fromStateID), this.getState(toStateID), transitionObject, skipStateFunction);\r\n transitionsFromState.set(transitionID, transitionData);\r\n } else {\r\n if (!this.hasState(fromStateID) && !this.hasState(toStateID)) {\r\n console.error(\"Can't add transition:\", transitionID, \"- from state not found:\", fromStateID, \"- to state not found:\", toStateID);\r\n } else if (!this.hasState(fromStateID)) {\r\n console.error(\"Can't add transition:\", transitionID, \"- from state not found:\", fromStateID);\r\n } else if (!this.hasState(toStateID)) {\r\n console.error(\"Can't add transition:\", transitionID, \"- to state not found:\", toStateID);\r\n }\r\n }\r\n }\r\n\r\n init(initStateID, initTransition = null, ...args) {\r\n let initTransitionObject = initTransition;\r\n if (initTransition && typeof initTransition == \"function\") {\r\n initTransitionObject = {};\r\n initTransitionObject.performInit = initTransition;\r\n }\r\n\r\n if (this.hasState(initStateID)) {\r\n let initStateData = this._myStates.get(initStateID);\r\n\r\n if (this._myLogEnabled) {\r\n console.log(this._myLogFSMName, \"- Init:\", initStateID);\r\n }\r\n\r\n if (initTransitionObject && initTransitionObject.performInit) {\r\n initTransitionObject.performInit(this, initStateData, ...args);\r\n } else if (initStateData.myObject && initStateData.myObject.init) {\r\n initStateData.myObject.init(this, initStateData, ...args);\r\n }\r\n\r\n this._myCurrentStateData = initStateData;\r\n\r\n this._myInitEmitter.notify(this, initStateData, initTransitionObject, ...args);\r\n\r\n if (this._myInitIDEmitters.size > 0) {\r\n let emitter = this._myInitIDEmitters.get(initStateID);\r\n if (emitter != null) {\r\n emitter.notify(this, initStateData, initTransitionObject, ...args);\r\n }\r\n }\r\n } else if (this._myLogEnabled) {\r\n console.warn(this._myLogFSMName, \"- Init state not found:\", initStateID);\r\n }\r\n }\r\n\r\n update(dt, ...args) {\r\n if (this._myPendingPerforms.length > 0) {\r\n for (let i = 0; i < this._myPendingPerforms.length; i++) {\r\n this._perform(this._myPendingPerforms[i].myID, PerformMode.DELAYED, ...this._myPendingPerforms[i].myArgs);\r\n }\r\n this._myPendingPerforms = [];\r\n }\r\n\r\n if (this._myCurrentStateData && this._myCurrentStateData.myObject && this._myCurrentStateData.myObject.update) {\r\n this._myCurrentStateData.myObject.update(dt, this, ...args);\r\n }\r\n }\r\n\r\n perform(transitionID, ...args) {\r\n if (this._myPerformMode == PerformMode.DELAYED) {\r\n this.performDelayed(transitionID, ...args);\r\n } else {\r\n this.performImmediate(transitionID, ...args);\r\n }\r\n }\r\n\r\n performDelayed(transitionID, ...args) {\r\n let performDelayed = false;\r\n\r\n switch (this._myPerformDelayedMode) {\r\n case PerformDelayedMode.QUEUE:\r\n this._myPendingPerforms.push(new _PendingPerform(transitionID, ...args));\r\n performDelayed = true;\r\n break;\r\n case PerformDelayedMode.KEEP_FIRST:\r\n if (!this.hasPendingPerforms()) {\r\n this._myPendingPerforms.push(new _PendingPerform(transitionID, ...args));\r\n performDelayed = true;\r\n }\r\n break;\r\n case PerformDelayedMode.KEEP_LAST:\r\n this.resetPendingPerforms();\r\n this._myPendingPerforms.push(new _PendingPerform(transitionID, ...args));\r\n performDelayed = true;\r\n break;\r\n }\r\n\r\n return performDelayed;\r\n }\r\n\r\n performImmediate(transitionID, ...args) {\r\n return this._perform(transitionID, PerformMode.IMMEDIATE, ...args);\r\n }\r\n\r\n canPerform(transitionID) {\r\n return this.hasTransitionFromState(this._myCurrentStateData.myID, transitionID);\r\n }\r\n\r\n canGoTo(stateID, transitionID = null) {\r\n return this.hasTransitionFromStateToState(this._myCurrentStateData.myID, stateID, transitionID);\r\n }\r\n\r\n isInState(stateID) {\r\n return this._myCurrentStateData != null && this._myCurrentStateData.myID == stateID;\r\n }\r\n\r\n isPerformingTransition() {\r\n return this._myCurrentlyPerformedTransition != null;\r\n }\r\n\r\n getCurrentlyPerformedTransition() {\r\n return this._myCurrentlyPerformedTransition;\r\n }\r\n\r\n hasBeenInit() {\r\n return this._myCurrentStateData != null;\r\n }\r\n\r\n reset() {\r\n this.resetState();\r\n this.resetPendingPerforms();\r\n }\r\n\r\n resetState() {\r\n this._myCurrentStateData = null;\r\n }\r\n\r\n resetPendingPerforms() {\r\n this._myPendingPerforms = [];\r\n }\r\n\r\n getCurrentState() {\r\n return this._myCurrentStateData;\r\n }\r\n\r\n getCurrentTransitions() {\r\n return this.getTransitionsFromState(this._myCurrentStateData.myID);\r\n }\r\n\r\n getCurrentTransitionsToState(stateID) {\r\n return this.getTransitionsFromStateToState(this._myCurrentStateData.myID, stateID);\r\n }\r\n\r\n getState(stateID) {\r\n return this._myStates.get(stateID);\r\n }\r\n\r\n getStates() {\r\n return this._myStates.values();\r\n }\r\n\r\n getTransitions() {\r\n let transitions = [];\r\n\r\n for (let transitionsFromState of this._myTransitions.values()) {\r\n for (let transitionData of transitionsFromState.values()) {\r\n transitions.push(transitionData);\r\n }\r\n }\r\n\r\n return transitions;\r\n }\r\n\r\n getTransitionsFromState(fromStateID) {\r\n let transitionsFromState = this._getTransitionsFromState(fromStateID);\r\n return Array.from(transitionsFromState.values());\r\n }\r\n\r\n getTransitionsFromStateToState(fromStateID, toStateID) {\r\n let transitionsFromState = this._getTransitionsFromState(fromStateID);\r\n\r\n let transitionsToState = [];\r\n for (let transitionData of transitionsFromState.values()) {\r\n if (transitionData.myToState.myID == toStateID) {\r\n transitionsToState.push(transitionData);\r\n }\r\n }\r\n\r\n return transitionsToState;\r\n }\r\n\r\n removeState(stateID) {\r\n if (this.hasState(stateID)) {\r\n this._myStates.delete(stateID);\r\n this._myTransitions.delete(stateID);\r\n\r\n for (let transitionsFromState of this._myTransitions.values()) {\r\n let toDelete = [];\r\n for (let [transitionID, transitionData] of transitionsFromState.entries()) {\r\n if (transitionData.myToState.myID == stateID) {\r\n toDelete.push(transitionID);\r\n }\r\n }\r\n\r\n for (let transitionID of toDelete) {\r\n transitionsFromState.delete(transitionID);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n removeTransitionFromState(fromStateID, transitionID) {\r\n let fromTransitions = this._getTransitionsFromState(fromStateID);\r\n if (fromTransitions) {\r\n return fromTransitions.delete(transitionID);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n hasState(stateID) {\r\n return this._myStates.has(stateID);\r\n }\r\n\r\n hasTransitionFromState(fromStateID, transitionID) {\r\n let transitions = this.getTransitionsFromState(fromStateID);\r\n\r\n let transitionIndex = transitions.findIndex(function (transition) {\r\n return transition.myID == transitionID;\r\n });\r\n\r\n return transitionIndex >= 0;\r\n }\r\n\r\n hasTransitionFromStateToState(fromStateID, toStateID, transitionID = null) {\r\n let transitions = this.getTransitionsFromStateToState(fromStateID, toStateID);\r\n\r\n let hasTransition = false;\r\n if (transitionID) {\r\n let transitionIndex = transitions.findIndex(function (transition) {\r\n return transition.myID == transitionID;\r\n });\r\n\r\n hasTransition = transitionIndex >= 0;\r\n } else {\r\n hasTransition = transitions.length > 0;\r\n }\r\n\r\n return hasTransition;\r\n }\r\n\r\n setPerformMode(performMode) {\r\n this._myPerformMode = performMode;\r\n }\r\n\r\n getPerformMode() {\r\n return this._myPerformMode;\r\n }\r\n\r\n setPerformDelayedMode(performDelayedMode) {\r\n this._myPerformDelayedMode = performDelayedMode;\r\n }\r\n\r\n getPerformDelayedMode() {\r\n return this._myPerformDelayedMode;\r\n }\r\n\r\n hasPendingPerforms() {\r\n return this._myPendingPerforms.length > 0;\r\n }\r\n\r\n getPendingPerforms() {\r\n return this._myPendingPerforms.pp_clone();\r\n }\r\n\r\n clone(deepClone = false) {\r\n if (!this.isCloneable(deepClone)) {\r\n return null;\r\n }\r\n\r\n let cloneFSM = new FSM();\r\n\r\n cloneFSM._myLogEnabled = this._myLogEnabled;\r\n cloneFSM._myLogShowDelayedInfo = this._myLogShowDelayedInfo;\r\n cloneFSM._myLogFSMName = this._myLogFSMName;\r\n\r\n cloneFSM._myPerformMode = this._myPerformMode;\r\n cloneFSM._myPerformDelayedMode = this._myPerformDelayedMode;\r\n cloneFSM._myPendingPerforms = this._myPendingPerforms.pp_clone();\r\n\r\n for (let entry of this._myStates.entries()) {\r\n let stateData = null;\r\n\r\n if (deepClone) {\r\n stateData = new StateData(entry[1].myID, entry[1].myObject.clone());\r\n } else {\r\n stateData = new StateData(entry[1].myID, entry[1].myObject);\r\n }\r\n\r\n cloneFSM._myStates.set(stateData.myID, stateData);\r\n }\r\n\r\n for (let entry of this._myTransitions.entries()) {\r\n let transitionsFromState = new Map();\r\n cloneFSM._myTransitions.set(entry[0], transitionsFromState);\r\n\r\n for (let transitonEntry of entry[1].entries()) {\r\n let transitionData = null;\r\n\r\n let fromState = cloneFSM.getState(transitonEntry[1].myFromState.myID);\r\n let toState = cloneFSM.getState(transitonEntry[1].myToState.myID);\r\n\r\n if (deepClone) {\r\n transitionData = new TransitionData(transitonEntry[1].myID, fromState, toState, transitonEntry[1].myObject.clone(), transitonEntry[1].mySkipStateFunction);\r\n } else {\r\n transitionData = new TransitionData(transitonEntry[1].myID, fromState, toState, transitonEntry[1].myObject, transitonEntry[1].mySkipStateFunction);\r\n }\r\n\r\n transitionsFromState.set(transitionData.myID, transitionData);\r\n }\r\n }\r\n\r\n if (this._myCurrentStateData) {\r\n cloneFSM._myCurrentStateData = cloneFSM.getState(this._myCurrentStateData.myID);\r\n }\r\n\r\n return cloneFSM;\r\n }\r\n\r\n isCloneable(deepClone = false) {\r\n if (!deepClone) {\r\n return true;\r\n }\r\n\r\n let deepCloneable = true;\r\n\r\n for (let entry of this._myStates.entries()) {\r\n deepCloneable = deepCloneable && entry[1].myObject.clone != null;\r\n }\r\n\r\n for (let entry of this._myTransitions.entries()) {\r\n for (let transitonEntry of entry[1].entries()) {\r\n deepCloneable = deepCloneable && transitonEntry[1].myObject.clone != null;\r\n }\r\n }\r\n\r\n return deepCloneable;\r\n }\r\n\r\n setLogEnabled(active, fsmName = null, showDelayedInfo = false) {\r\n this._myLogEnabled = active;\r\n this._myLogShowDelayedInfo = showDelayedInfo;\r\n if (fsmName) {\r\n this._myLogFSMName = \"FSM: \".concat(fsmName);\r\n }\r\n }\r\n\r\n registerInitEventListener(listenerID, listener) {\r\n this._myInitEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterInitEventListener(listenerID) {\r\n this._myInitEmitter.remove(listenerID);\r\n }\r\n\r\n registerInitIDEventListener(initStateID, listenerID, listener) {\r\n let initStateIDEmitter = this._myInitIDEmitters.get(initStateID);\r\n if (initStateIDEmitter == null) {\r\n this._myInitIDEmitters.set(initStateID, new Emitter());\r\n initStateIDEmitter = this._myInitIDEmitters.get(initStateID);\r\n }\r\n\r\n initStateIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterInitIDEventListener(initStateID, listenerID) {\r\n let initStateIDEmitter = this._myInitIDEmitters.get(initStateID);\r\n if (initStateIDEmitter != null) {\r\n initStateIDEmitter.remove(listenerID);\r\n\r\n if (initStateIDEmitter.isEmpty) {\r\n this._myInitIDEmitters.delete(initStateID);\r\n }\r\n }\r\n }\r\n\r\n registerTransitionEventListener(listenerID, listener) {\r\n this._myTransitionEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterTransitionEventListener(listenerID) {\r\n this._myTransitionEmitter.remove(listenerID);\r\n }\r\n\r\n // The fsm IDs can be null, that means that the listener is called whenever only the valid IDs match\r\n // This let you register to all the transitions with a specific ID and from of a specific state but to every state (toStateID == null)\r\n registerTransitionIDEventListener(fromStateID, toStateID, transitionID, listenerID, listener) {\r\n let internalTransitionIDEmitter = null;\r\n for (let value of this._myTransitionIDEmitters) {\r\n if (value[0] == fromStateID && value[1] == toStateID && value[2] == transitionID) {\r\n internalTransitionIDEmitter = value[3];\r\n break;\r\n }\r\n }\r\n\r\n if (internalTransitionIDEmitter == null) {\r\n let transitionIDEmitter = [];\r\n transitionIDEmitter[0] = fromStateID;\r\n transitionIDEmitter[1] = toStateID;\r\n transitionIDEmitter[2] = transitionID;\r\n transitionIDEmitter[3] = new Emitter();\r\n\r\n internalTransitionIDEmitter = transitionIDEmitter[3];\r\n\r\n this._myTransitionIDEmitters.push(transitionIDEmitter);\r\n }\r\n\r\n internalTransitionIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterTransitionIDEventListener(fromStateID, toStateID, transitionID, listenerID) {\r\n let internalTransitionIDEmitter = null;\r\n for (let value of this._myTransitionIDEmitters) {\r\n if (value[0] == fromStateID && value[1] == toStateID && value[2] == transitionID) {\r\n internalTransitionIDEmitter = value[3];\r\n break;\r\n }\r\n }\r\n\r\n if (internalTransitionIDEmitter != null) {\r\n internalTransitionIDEmitter.remove(listenerID);\r\n\r\n if (internalTransitionIDEmitter.isEmpty) {\r\n this._myTransitionIDEmitters.pp_remove(element => element[0] == fromStateID && element[1] == toStateID && element[2] == transitionID);\r\n }\r\n }\r\n }\r\n\r\n _perform(transitionID, performMode, ...args) {\r\n if (this.isPerformingTransition()) {\r\n let currentlyPerformedTransition = this.getCurrentlyPerformedTransition();\r\n let consoleArguments = [this._myLogFSMName, \"- Trying to perform:\", transitionID];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n consoleArguments.push(\"- But another transition is currently being performed -\", currentlyPerformedTransition.myID);\r\n console.warn(...consoleArguments);\r\n\r\n return false;\r\n }\r\n\r\n if (this._myCurrentStateData) {\r\n if (this.canPerform(transitionID)) {\r\n let transitions = this._myTransitions.get(this._myCurrentStateData.myID);\r\n let transitionToPerform = transitions.get(transitionID);\r\n\r\n this._myCurrentlyPerformedTransition = transitionToPerform;\r\n\r\n let fromState = this._myCurrentStateData;\r\n let toState = this._myStates.get(transitionToPerform.myToState.myID);\r\n\r\n if (this._myLogEnabled) {\r\n let consoleArguments = [this._myLogFSMName, \"- From:\", fromState.myID, \"- To:\", toState.myID, \"- With:\", transitionID];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n console.log(...consoleArguments);\r\n }\r\n\r\n if (transitionToPerform.mySkipStateFunction != SkipStateFunction.END && transitionToPerform.mySkipStateFunction != SkipStateFunction.BOTH &&\r\n fromState.myObject && fromState.myObject.end) {\r\n fromState.myObject.end(this, transitionToPerform, ...args);\r\n }\r\n\r\n if (transitionToPerform.myObject && transitionToPerform.myObject.perform) {\r\n transitionToPerform.myObject.perform(this, transitionToPerform, ...args);\r\n }\r\n\r\n if (transitionToPerform.mySkipStateFunction != SkipStateFunction.START && transitionToPerform.mySkipStateFunction != SkipStateFunction.BOTH &&\r\n toState.myObject && toState.myObject.start) {\r\n toState.myObject.start(this, transitionToPerform, ...args);\r\n }\r\n\r\n this._myCurrentStateData = transitionToPerform.myToState;\r\n\r\n this._myTransitionEmitter.notify(this, fromState, toState, transitionToPerform, performMode, ...args);\r\n\r\n if (this._myTransitionIDEmitters.length > 0) {\r\n let internalTransitionIDEmitters = [];\r\n for (let value of this._myTransitionIDEmitters) {\r\n if ((value[0] == null || value[0] == fromState.myID) &&\r\n (value[1] == null || value[1] == toState.myID) &&\r\n (value[2] == null || value[2] == transitionToPerform.myID)) {\r\n internalTransitionIDEmitters.push(value[3]);\r\n }\r\n }\r\n\r\n for (let emitter of internalTransitionIDEmitters) {\r\n emitter.notify(this, fromState, toState, transitionToPerform, performMode, ...args);\r\n }\r\n }\r\n\r\n this._myCurrentlyPerformedTransition = null;\r\n\r\n return true;\r\n } else if (this._myLogEnabled) {\r\n let consoleArguments = [this._myLogFSMName, \"- No Transition:\", transitionID, \"- From:\", this._myCurrentStateData.myID];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n console.warn(...consoleArguments);\r\n }\r\n } else if (this._myLogEnabled) {\r\n let consoleArguments = [this._myLogFSMName, \"- FSM not initialized yet\"];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n console.warn(...consoleArguments);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _getTransitionsFromState(fromStateID) {\r\n return this._myTransitions.get(fromStateID);\r\n }\r\n}\r\n\r\nclass _PendingPerform {\r\n\r\n constructor(transitionID, ...args) {\r\n this.myID = transitionID;\r\n this.myArgs = args;\r\n }\r\n}", "/*\r\n There is no need to inherit from this state, especially since states can be only functions\r\n It's more like an example of what is needed\r\n \r\n If you don't specify some functions the fsm will just skip them\r\n Or consider them always valid\r\n\r\n The param state is of type StateData and can be used to retrieve the stateID and other data\r\n The param transition is of type TransitionData and can be used to retrieve the transitionID, the from and to states and other data\r\n*/\r\n\r\nexport class State {\r\n\r\n // Called every frame if this is the current state\r\n // You can retrieve this state data by calling fsm.getCurrentState()\r\n update(dt, fsm, ...args) {\r\n }\r\n\r\n // Called when the fsm is started with this init state if no init transition object is specified or it does not have a performInit function\r\n // Since the state is set as the current one after the init, you can't use fsm.getCurrentState() to get it, so it is forwarded as a param if needed\r\n init(fsm, state, ...args) {\r\n }\r\n\r\n // Called when entering this state if no transition object is specified or it does not have a perform function\r\n // You can get this state data by accesing to the to state data inside the transition\r\n start(fsm, transition, ...args) {\r\n }\r\n\r\n // Called when exiting this state if no transition function is specified\r\n // You can get this state data by accesing to the from state data inside the transition\r\n end(fsm, transition, ...args) {\r\n }\r\n}", "/*\r\n There is no need to inherit from this transition, especially since states can be only transitions\r\n It's more like an example of what is needed\r\n \r\n The param transition (forwarded at the end every function) is of type TransitionData and can be used to retrieve the transitionID and other data\r\n The initState param is of type StateData and can be used to retrieve the stateID and other data\r\n*/\r\n\r\nexport class Transition {\r\n\r\n // Called if this is used as an init transition for the fsm\r\n performInit(fsm, initState, ...args) {\r\n\r\n }\r\n\r\n // Called when performing a transition\r\n // You can find the from and to states inside the transition params\r\n perform(fsm, transition, ...args) {\r\n }\r\n}", "import { Timer } from \"../../cauldron/timer.js\";\r\nimport { State } from \"../state.js\";\r\n\r\nexport class TimerState extends State {\r\n\r\n constructor(duration = 0, transitionToPerformOnEnd = null, ...transitionArgs) {\r\n super();\r\n\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n\r\n this._myTimer = new Timer(duration, false);\r\n }\r\n\r\n setDuration(duration) {\r\n this._myTimer.setDuration(duration);\r\n }\r\n\r\n setTransitionToPerformOnEnd(transitionToPerformOnEnd, ...transitionArgs) {\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n }\r\n\r\n onEnd(callback, id = null) {\r\n this._myTimer.onEnd(callback, id);\r\n }\r\n\r\n unregisterOnEnd(id = null) {\r\n this._myTimer.unregisterOnEnd(id);\r\n }\r\n\r\n update(dt, fsm) {\r\n this._myTimer.update(dt);\r\n if (this._myTimer.isDone()) {\r\n if (this._myTransitionToPerformOnEnd != null) {\r\n fsm.perform(this._myTransitionToPerformOnEnd, ...this._myTransitionArgs);\r\n }\r\n }\r\n }\r\n\r\n start(fsm, transition, duration = null, transitionToPerformOnEnd = null, ...transitionArgs) {\r\n this._myTimer.start(duration);\r\n if (transitionToPerformOnEnd != null) {\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n }\r\n }\r\n\r\n init(fsm, state, duration = null, transitionToPerformOnEnd = null, ...transitionArgs) {\r\n this._myTimer.start(duration);\r\n if (transitionToPerformOnEnd != null) {\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n }\r\n }\r\n}", "// RGB is in [0,1], alpha is not changed\r\nexport function rgbToHSV(rgb) {\r\n let hsv = rgb.pp_clone();\r\n\r\n let r = rgb[0];\r\n let g = rgb[1];\r\n let b = rgb[2];\r\n\r\n let max = Math.max(r, g, b), min = Math.min(r, g, b),\r\n d = max - min,\r\n h,\r\n s = (max == 0 ? 0 : d / max),\r\n v = max;\r\n\r\n switch (max) {\r\n case min: h = 0; break;\r\n case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;\r\n case g: h = (b - r) + d * 2; h /= 6 * d; break;\r\n case b: h = (r - g) + d * 4; h /= 6 * d; break;\r\n }\r\n\r\n hsv[0] = h;\r\n hsv[1] = s;\r\n hsv[2] = v;\r\n\r\n return hsv;\r\n}\r\n\r\n// Alpha is not changed\r\nexport function hsvToRGB(hsv) {\r\n let rgb = hsv.pp_clone();\r\n\r\n let h = hsv[0];\r\n let s = hsv[1];\r\n let v = hsv[2];\r\n\r\n let r, g, b, i, f, p, q, t;\r\n i = Math.floor(h * 6);\r\n f = h * 6 - i;\r\n p = v * (1 - s);\r\n q = v * (1 - f * s);\r\n t = v * (1 - (1 - f) * s);\r\n\r\n switch (i % 6) {\r\n case 0: r = v, g = t, b = p; break;\r\n case 1: r = q, g = v, b = p; break;\r\n case 2: r = p, g = v, b = t; break;\r\n case 3: r = p, g = q, b = v; break;\r\n case 4: r = t, g = p, b = v; break;\r\n case 5: r = v, g = p, b = q; break;\r\n }\r\n\r\n rgb[0] = r;\r\n rgb[1] = g;\r\n rgb[2] = b;\r\n\r\n return rgb;\r\n}\r\n\r\nexport function rgbCodeToHuman(rgb) {\r\n return ColorUtils.color1To255(rgb);\r\n}\r\n\r\nexport function rgbHumanToCode(rgb) {\r\n return ColorUtils.color255To1(rgb);\r\n}\r\n\r\nexport function hsvCodeToHuman(hsv) {\r\n return ColorUtils.color1To255(hsv);\r\n}\r\n\r\nexport function hsvHumanToCode(hsv) {\r\n return ColorUtils.color255To1(hsv);\r\n}\r\n\r\nexport function color255To1(color) {\r\n let result = color.pp_clone();\r\n\r\n for (let i = 0; i < result.length; i++) {\r\n result[i] /= 255;\r\n result[i] = Math.pp_clamp(result[i], 0, 1);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function color1To255(color) {\r\n let result = color.pp_clone();\r\n\r\n for (let i = 0; i < result.length; i++) {\r\n result[i] = Math.round(result[i] * 255);\r\n result[i] = Math.pp_clamp(result[i], 0, 255);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport let ColorUtils = {\r\n rgbToHSV,\r\n hsvToRGB,\r\n rgbCodeToHuman,\r\n rgbHumanToCode,\r\n hsvCodeToHuman,\r\n hsvHumanToCode,\r\n color255To1,\r\n color1To255\r\n};", "let _myAnalyticsEnabled = false;\r\n\r\nlet _mySendDataCallback = null;\r\n\r\nlet _myEventsSentOnce = [];\r\n\r\nlet _myDataLogEnabled = false;\r\nlet _myEventsLogEnabled = false;\r\n\r\nlet _myErrorsLogEnabled = false;\r\n\r\nexport function setAnalyticsEnabled(enabled) {\r\n _myAnalyticsEnabled = enabled;\r\n}\r\n\r\nexport function isAnalyticsEnabled() {\r\n return _myAnalyticsEnabled;\r\n}\r\n\r\nexport function setSendDataCallback(callback) {\r\n _mySendDataCallback = callback;\r\n}\r\n\r\nexport function sendData(...args) {\r\n try {\r\n if (_myAnalyticsEnabled) {\r\n if (_myDataLogEnabled) {\r\n console.log(\"Analytics Data: \" + args);\r\n }\r\n\r\n if (_mySendDataCallback != null) {\r\n _mySendDataCallback(...args);\r\n } else if (_myErrorsLogEnabled) {\r\n console.error(\"You need to set the send data callback\");\r\n }\r\n }\r\n } catch (error) {\r\n if (_myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n\r\nexport function sendEvent(eventName, value = null, sendOnce = false) {\r\n try {\r\n if (_myAnalyticsEnabled) {\r\n let sendEventAllowed = true;\r\n\r\n if (sendOnce) {\r\n sendEventAllowed = !AnalyticsUtils.hasEventAlreadyBeenSent(eventName);\r\n }\r\n\r\n if (sendEventAllowed) {\r\n if (_myEventsLogEnabled) {\r\n if (value != null) {\r\n console.log(\"Analytics Event: \" + eventName + \" - Value: \" + value);\r\n } else {\r\n console.log(\"Analytics Event: \" + eventName);\r\n }\r\n }\r\n\r\n if (_mySendDataCallback != null) {\r\n if (value != null) {\r\n _mySendDataCallback(\"event\", eventName, { \"value\": value });\r\n } else {\r\n _mySendDataCallback(\"event\", eventName);\r\n }\r\n\r\n if (sendOnce) {\r\n _myEventsSentOnce.pp_pushUnique(eventName);\r\n }\r\n } else if (_myErrorsLogEnabled) {\r\n console.error(\"You need to set the send data callback\");\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n if (_myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n\r\nexport function sendEventOnce(eventName, value = null) {\r\n AnalyticsUtils.sendEvent(eventName, value, true);\r\n}\r\n\r\nexport function clearEventSentOnceState(eventName) {\r\n _myEventsSentOnce.pp_removeEqual(eventName);\r\n}\r\n\r\nexport function clearAllEventsSentOnceState() {\r\n _myEventsSentOnce.pp_clear();\r\n}\r\n\r\nexport function hasEventAlreadyBeenSent(eventName) {\r\n return _myEventsSentOnce.pp_hasEqual(eventName);\r\n}\r\n\r\nexport function getEventsAlreadyBeenSent() {\r\n return _myEventsSentOnce;\r\n}\r\n\r\nexport function setDataLogEnabled(enabled) {\r\n _myDataLogEnabled = enabled;\r\n}\r\n\r\nexport function isDataLogEnabled() {\r\n return _myDataLogEnabled;\r\n}\r\n\r\nexport function setEventsLogEnabled(enabled) {\r\n _myEventsLogEnabled = enabled;\r\n}\r\n\r\nexport function isEventsLogEnabled() {\r\n return _myEventsLogEnabled;\r\n}\r\n\r\nexport function setErrorsLogEnabled(enabled) {\r\n _myErrorsLogEnabled = enabled;\r\n}\r\n\r\nexport function isErrorsLogEnabled() {\r\n return _myErrorsLogEnabled;\r\n}\r\n\r\nexport let AnalyticsUtils = {\r\n setAnalyticsEnabled,\r\n isAnalyticsEnabled,\r\n setSendDataCallback,\r\n sendData,\r\n sendEvent,\r\n sendEventOnce,\r\n clearEventSentOnceState,\r\n clearAllEventsSentOnceState,\r\n hasEventAlreadyBeenSent,\r\n getEventsAlreadyBeenSent,\r\n setDataLogEnabled,\r\n isDataLogEnabled,\r\n setEventsLogEnabled,\r\n isEventsLogEnabled,\r\n setErrorsLogEnabled,\r\n isErrorsLogEnabled\r\n};", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport let setAlpha = function () {\r\n let color = vec4_create();\r\n return function setAlpha(material, alpha) {\r\n if (material.color != null) {\r\n color.vec4_copy(material.color);\r\n color[3] = alpha;\r\n material.color = color;\r\n }\r\n\r\n if (material.diffuseColor != null) {\r\n color.vec4_copy(material.diffuseColor);\r\n color[3] = alpha;\r\n material.diffuseColor = color;\r\n }\r\n\r\n if (material.ambientColor != null) {\r\n color.vec4_copy(material.ambientColor);\r\n color[3] = alpha;\r\n material.ambientColor = color;\r\n }\r\n };\r\n}();\r\n\r\nexport function setObjectAlpha(object, alpha) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material != null) {\r\n MaterialUtils.setAlpha(meshComponent.material, alpha);\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectMaterial(object, material, cloneMaterial = false) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (cloneMaterial) {\r\n meshComponent.material = material.clone();\r\n } else {\r\n meshComponent.material = material;\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectClonedMaterials(object) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material != null) {\r\n meshComponent.material = meshComponent.material.clone();\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectSpecularColor(object, color) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material.specularColor != null) {\r\n meshComponent.material.specularColor = color;\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectFogColor(object, color) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material.fogColor != null) {\r\n meshComponent.material.fogColor = color;\r\n }\r\n }\r\n}\r\n\r\nexport let MaterialUtils = {\r\n setAlpha,\r\n setObjectAlpha,\r\n setObjectMaterial,\r\n setObjectClonedMaterials,\r\n setObjectSpecularColor,\r\n setObjectFogColor\r\n};", "import { TextComponent } from \"@wonderlandengine/api\";\r\n\r\nexport function setClonedMaterials(object) {\r\n let textComponents = object.pp_getComponents(TextComponent);\r\n\r\n for (let textComponent of textComponents) {\r\n if (textComponent.material != null) {\r\n textComponent.material = textComponent.material.clone();\r\n }\r\n }\r\n}\r\n\r\nexport let TextUtils = {\r\n setClonedMaterials\r\n};", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { VisualTransform, VisualTransformParams } from \"../../cauldron/visual/elements/visual_transform.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class DebugTransformComponent extends Component {\r\n static TypeName = \"pp-debug-transform\";\r\n static Properties = {\r\n _myLength: Property.float(0.1),\r\n _myThickness: Property.float(0.005)\r\n };\r\n\r\n start() {\r\n this._myStarted = false;\r\n\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n this._myDebugVisualTransform = null;\r\n\r\n this._myDebugTransformParams = new VisualTransformParams(this.engine);\r\n this._myDebugTransformParams.myLength = this._myLength;\r\n this._myDebugTransformParams.myThickness = this._myThickness;\r\n\r\n this._myDebugVisualTransform = new VisualTransform(this._myDebugTransformParams);\r\n this._myDebugVisualTransform.setVisible(Globals.isDebugEnabled(this.engine));\r\n\r\n this._myStarted = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n this.object.pp_getTransform(this._myDebugTransformParams.myTransform);\r\n this._myDebugVisualTransform.paramsUpdated();\r\n this._myDebugVisualTransform.setVisible(true);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myStarted) {\r\n this._myDebugVisualTransform.destroy();\r\n }\r\n }\r\n}", "// #TODO Add getter/setter accessors overwrite\r\n// #TODO If both a class and the parent class are in the list, they should be overwritten in parent first order\r\n// #TODO How to overwrite class and objects from modules?\r\n// #TODO Some functions, like glMatrix.vec3.copy, are defined as getter, how to overwrite them?\r\n\r\nimport { JSUtils } from \"../../cauldron/utils/js_utils.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class DebugFunctionsOverwriterParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myObjectsByReference = []; // You can specify to count the call on a specific object instance\r\n this.myObjectsByPath = []; // If you want you can specify the instance by path, but it means it must be reachable from window\r\n\r\n this.myClassesByReference = []; // By Reference means by using a reference to the class, like doing Timer, but also let ref = Timer and use ref\r\n this.myClassesByPath = []; // By Path means by using the full class path, like \"Timer\", this is requiredneeded if u want to count the constructor\r\n\r\n // You can also count the call to a specific function, but it must be reachable from window, no reference way\r\n // It's mostly for global functions, which could be tracked anyway using window as object reference\r\n this.myFunctionsByPath = [];\r\n\r\n this.myExcludeConstructors = false; // Constructor calls count can be a problem for some classes (like Array)\r\n this.myExcludeJSObjectFunctions = false;\r\n\r\n this.myFunctionNamesToInclude = []; // Empty means every function is included, can be a regex (. must be escaped with \\\\.)\r\n this.myFunctionNamesToExclude = []; // Empty means no function is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n // These can be used if u want to have a bit more control on function name filtering\r\n this.myFunctionPathsToInclude = []; // Empty means every function is included, can be a regex (. must be escaped with \\\\.)\r\n this.myFunctionPathsToExclude = []; // Empty means no function is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myObjectAddObjectDescendantsDepthLevel = 0; // You can specify if you want to also count the OBJECT descendants of the objects you have specified\r\n this.myObjectAddClassDescendantsDepthLevel = 0; // You can specify if you want to also count the CLASS descendants of the objects you have specified\r\n // The depth level specify how deep in the hierarchy, level 0 means no recursion, 1 only children, 2 also grand children, and so on\r\n // -1 to select all the hierarchy\r\n\r\n // These filters are only useful if u are doing recursion\r\n this.myObjectNamesToInclude = []; // Empty means every object is included, can be a regex (. must be escaped with \\\\.)\r\n this.myObjectNamesToExclude = []; // Empty means no object is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myClassNamesToInclude = []; // Empty means every class is included, can be a regex (. must be escaped with \\\\.)\r\n this.myClassNamesToExclude = []; // Empty means no class is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myObjectPathsToInclude = []; // Empty means every object is included, can be a regex (. must be escaped with \\\\.)\r\n this.myObjectPathsToExclude = []; // Empty means no object is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myClassPathsToInclude = []; // Empty means every class is included, can be a regex (. must be escaped with \\\\.)\r\n this.myClassPathsToExclude = []; // Empty means no class is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n // Tricks\r\n // - you can specify an object/class/function as a pair [object, \"name\"] instead of just object\r\n // and the name, if not null, will be used as path instead of the default one\r\n // WARNING: this means that there is a specific case, an array of 2 elements with a string, which can't be tracked if you don't put it inside an array like above\r\n\r\n this.myLogEnabled = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class DebugFunctionsOverwriter {\r\n\r\n constructor(params = new DebugFunctionsOverwriterParams()) {\r\n this._myParams = params;\r\n\r\n this._myPropertiesAlreadyOverwritten = new Map();\r\n }\r\n\r\n overwriteFunctions() {\r\n let classesAndParents = this._getReferencesAndParents(this._myParams.myClassesByReference, this._myParams.myClassesByPath, true);\r\n let objectsAndParents = this._getReferencesAndParents(this._myParams.myObjectsByReference, this._myParams.myObjectsByPath, false);\r\n let functionsAndParents = this._getReferencesAndParents([], this._myParams.myFunctionsByPath, false);\r\n\r\n this._objectAddDescendants(objectsAndParents, classesAndParents);\r\n\r\n for (let referenceAndParent of classesAndParents) {\r\n let reference = referenceAndParent[0];\r\n let referenceParent = referenceAndParent[1];\r\n let referenceName = referenceAndParent[2];\r\n let referencePath = referenceAndParent[3];\r\n let referenceNameForFilter = referenceAndParent[4];\r\n\r\n this._overwriteReferenceFunctions(reference, referenceParent, referenceName, referencePath, referenceNameForFilter, true);\r\n }\r\n\r\n for (let referenceAndParent of objectsAndParents) {\r\n let reference = referenceAndParent[0];\r\n let referenceParent = referenceAndParent[1];\r\n let referenceName = referenceAndParent[2];\r\n let referencePath = referenceAndParent[3];\r\n let referenceNameForFilter = referenceAndParent[4];\r\n\r\n this._overwriteReferenceFunctions(reference, referenceParent, referenceName, referencePath, referenceNameForFilter, false);\r\n }\r\n\r\n for (let referenceAndParent of functionsAndParents) {\r\n let referenceParent = referenceAndParent[1];\r\n let referenceName = referenceAndParent[2];\r\n let referencePath = referenceAndParent[3];\r\n\r\n this._overwriteFunction(referenceParent, referenceName, null, null, referencePath, false, true);\r\n }\r\n }\r\n\r\n // Hooks\r\n\r\n _getOverwrittenFunction(reference, propertyName, referencePath, isClass, isFunction) {\r\n return JSUtils.getObjectProperty(reference, propertyName);\r\n }\r\n\r\n _getOverwrittenConstructor(reference, propertyName, referencePath, isClass, isFunction) {\r\n return JSUtils.getObjectProperty(reference, propertyName);\r\n }\r\n\r\n _onOverwriteSuccess(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n\r\n }\r\n\r\n _onOverwriteFailure(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n\r\n }\r\n\r\n // Hooks end\r\n\r\n _overwriteReferenceFunctions(reference, referenceParent, referenceName, referencePath, referenceNameForFilter, isClass) {\r\n let includePathList = this._myParams.myObjectPathsToInclude;\r\n let excludePathList = this._myParams.myObjectPathsToExclude;\r\n let includeNameList = this._myParams.myObjectNamesToInclude;\r\n let excludeNameList = this._myParams.myObjectNamesToExclude;\r\n if (isClass) {\r\n includePathList = this._myParams.myClassPathsToInclude;\r\n excludePathList = this._myParams.myClassPathsToExclude;\r\n includeNameList = this._myParams.myClassNamesToInclude;\r\n excludeNameList = this._myParams.myClassNamesToExclude;\r\n }\r\n\r\n let validReferencePath = this._filterName(referencePath, includePathList, excludePathList);\r\n let validReferenceName = this._filterName(referenceNameForFilter, includeNameList, excludeNameList);\r\n if (validReferencePath && validReferenceName) {\r\n let propertyNames = JSUtils.getObjectPropertyNames(reference);\r\n if (propertyNames.pp_hasEqual(\"constructor\")) {\r\n propertyNames.unshift(\"constructor\"); // Be sure it's added first to spot bugs, not important that it appears twice in the list\r\n }\r\n\r\n for (let propertyName of propertyNames) {\r\n let overwriteTargetReference = null;\r\n\r\n let referenceParentForConstructor = null;\r\n let referenceNameForConstructor = null;\r\n\r\n if (isClass) {\r\n let fixedReference = reference;\r\n\r\n if (referenceParent != null) {\r\n let ownReferenceDescriptor = Object.getOwnPropertyDescriptor(referenceParent, referenceName);\r\n if (ownReferenceDescriptor != null && ownReferenceDescriptor.value != null) {\r\n fixedReference = ownReferenceDescriptor.value;\r\n }\r\n }\r\n\r\n overwriteTargetReference = fixedReference.prototype;\r\n if (overwriteTargetReference == null) {\r\n overwriteTargetReference = fixedReference;\r\n } else {\r\n try {\r\n let referenceProperty = JSUtils.getObjectProperty(overwriteTargetReference, propertyName);\r\n if (referenceProperty == null) {\r\n overwriteTargetReference = fixedReference;\r\n }\r\n } catch (error) {\r\n overwriteTargetReference = fixedReference;\r\n }\r\n }\r\n\r\n referenceParentForConstructor = referenceParent;\r\n referenceNameForConstructor = referenceName;\r\n } else {\r\n overwriteTargetReference = reference;\r\n }\r\n\r\n this._overwriteFunction(overwriteTargetReference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, false);\r\n\r\n }\r\n }\r\n }\r\n\r\n _overwriteFunction(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction) {\r\n try {\r\n let propertyCountedAlready = this._myPropertiesAlreadyOverwritten.get(propertyName) != null && this._myPropertiesAlreadyOverwritten.get(propertyName).pp_hasEqual(reference);\r\n if (!propertyCountedAlready) {\r\n if (JSUtils.isFunctionByName(reference, propertyName) || (propertyName == \"constructor\" && JSUtils.isClassByName(reference, propertyName))) {\r\n if (!this._myParams.myExcludeJSObjectFunctions || !this._isJSObjectFunction(propertyName)) {\r\n let validFunctionName = this._filterName(propertyName, this._myParams.myFunctionNamesToInclude, this._myParams.myFunctionNamesToExclude);\r\n let validFunctionPath = this._filterName((referencePath != null ? referencePath + \".\" : \"\") + propertyName, this._myParams.myFunctionPathsToInclude, this._myParams.myFunctionPathsToExclude);\r\n if (validFunctionName && validFunctionPath) {\r\n if (!this._myPropertiesAlreadyOverwritten.has(propertyName)) {\r\n this._myPropertiesAlreadyOverwritten.set(propertyName, []);\r\n }\r\n\r\n let overwriteSuccess = false;\r\n let isConstructor = false;\r\n if (propertyName != \"constructor\") {\r\n try {\r\n let newFunction = this._getOverwrittenFunction(reference, propertyName, referencePath, isClass, isFunction);\r\n if (newFunction != JSUtils.getObjectProperty(reference, propertyName)) {\r\n overwriteSuccess = JSUtils.overwriteObjectProperty(newFunction, reference, propertyName, false, true, this._myParams.myLogEnabled);\r\n } else {\r\n overwriteSuccess = true;\r\n }\r\n } catch (error) {\r\n overwriteSuccess = false;\r\n\r\n if (this._myParams.myLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n } else if (!this._myParams.myExcludeConstructors && isClass && referenceParentForConstructor != null) {\r\n let referenceForConstructor = JSUtils.getObjectProperty(referenceParentForConstructor, referenceNameForConstructor);\r\n if (referenceForConstructor != null && referenceForConstructor.prototype != null) {\r\n isConstructor = true;\r\n\r\n try {\r\n let newConstructor = this._getOverwrittenConstructor(referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction);\r\n if (newConstructor != referenceForConstructor) {\r\n overwriteSuccess = JSUtils.overwriteObjectProperty(newConstructor, referenceParentForConstructor, referenceNameForConstructor, false, true, this._myParams.myLogEnabled);\r\n if (overwriteSuccess) {\r\n overwriteSuccess = JSUtils.overwriteObjectProperty(newConstructor, referenceForConstructor.prototype, propertyName, false, true, this._myParams.myLogEnabled);\r\n }\r\n } else {\r\n overwriteSuccess = true;\r\n }\r\n } catch (error) {\r\n overwriteSuccess = false;\r\n\r\n if (this._myParams.myLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (overwriteSuccess) {\r\n this._myPropertiesAlreadyOverwritten.get(propertyName).push(reference);\r\n this._onOverwriteSuccess(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor);\r\n } else {\r\n this._onOverwriteFailure(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n if (this._myParams.myLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n }\r\n\r\n _getReferencesAndParents(byReferenceList, byPathList, isClass) {\r\n let referenceAndParents = [];\r\n\r\n let equalCallback = (first, second) => first[0] == second[0];\r\n\r\n for (let pathPair of byPathList) {\r\n let path = pathPair;\r\n let referenceName = \"\";\r\n let referencePath = pathPair;\r\n let referenceNameForFilter = \"\";\r\n\r\n if (pathPair != null && Array.isArray(pathPair) && pathPair.length != null && pathPair.length == 2 && typeof pathPair[1] == \"string\") {\r\n path = pathPair[0];\r\n referencePath = pathPair[1];\r\n }\r\n\r\n referenceName = JSUtils.getObjectNameFromPath(path);\r\n referenceNameForFilter = JSUtils.getObjectNameFromPath(referencePath);\r\n\r\n let reference = JSUtils.getObjectFromPath(path, window);\r\n let referenceParent = JSUtils.getObjectParentFromPath(path, window);\r\n\r\n if (reference != null) {\r\n referenceAndParents.pp_pushUnique([reference, referenceParent, referenceName, referencePath, referenceNameForFilter], equalCallback);\r\n }\r\n }\r\n\r\n for (let referencePair of byReferenceList) {\r\n let reference = referencePair;\r\n let referenceName = \"\";\r\n let referencePath = \"\";\r\n let referenceNameForFilter = \"\";\r\n\r\n if (referencePair != null && referencePair.length != null && referencePair.length == 2 && typeof referencePair[1] == \"string\") {\r\n reference = referencePair[0];\r\n referencePath = referencePair[1];\r\n referenceNameForFilter = JSUtils.getObjectNameFromPath(referencePath);\r\n } else {\r\n referencePath = isClass ? reference.name : null;\r\n referenceNameForFilter = isClass ? reference.name : null;\r\n }\r\n\r\n if (isClass) {\r\n referenceName = reference.name;\r\n } else {\r\n referenceName = JSUtils.getObjectNameFromPath(referencePath);\r\n }\r\n\r\n if (reference != null) {\r\n referenceAndParents.pp_pushUnique([reference, null, referenceName, referencePath, referenceNameForFilter], equalCallback);\r\n }\r\n }\r\n\r\n return referenceAndParents;\r\n }\r\n\r\n _objectAddDescendants(objectsAndParents, classesAndParents) {\r\n let equalCallback = (first, second) => first[0] == second[0];\r\n\r\n let objectsToVisit = [];\r\n for (let objectAndParent of objectsAndParents) {\r\n objectsToVisit.pp_pushUnique([objectAndParent[0], 0, objectAndParent[3]], equalCallback);\r\n }\r\n\r\n while (objectsToVisit.length > 0) {\r\n let objectToVisit = objectsToVisit.shift();\r\n\r\n let object = objectToVisit[0];\r\n let objectLevel = objectToVisit[1];\r\n let objectPath = objectToVisit[2];\r\n\r\n if ((\r\n objectLevel + 1 <= this._myParams.myObjectAddObjectDescendantsDepthLevel || this._myParams.myObjectAddObjectDescendantsDepthLevel == -1) ||\r\n objectLevel + 1 <= this._myParams.myObjectAddClassDescendantsDepthLevel || this._myParams.myObjectAddClassDescendantsDepthLevel == -1) {\r\n\r\n let propertyNames = null;\r\n try {\r\n propertyNames = JSUtils.getObjectPropertyNames(object);\r\n } catch (error) {\r\n continue;\r\n }\r\n\r\n for (let propertyName of propertyNames) {\r\n let objectProperty = null;\r\n\r\n try {\r\n objectProperty = JSUtils.getObjectProperty(object, propertyName);\r\n if (objectProperty == null) {\r\n continue;\r\n }\r\n } catch (error) {\r\n continue;\r\n }\r\n\r\n let currentPath = \"\";\r\n let currentName = \"\";\r\n if (objectPath != null) {\r\n currentName = propertyName;\r\n currentPath = objectPath + \".\" + currentName;\r\n } else {\r\n currentName = propertyName;\r\n currentPath = currentName;\r\n }\r\n\r\n let isClass = JSUtils.isClassByName(object, propertyName);\r\n let isObject = JSUtils.isObjectByName(object, propertyName);\r\n\r\n let includePathList = this._myParams.myObjectPathsToInclude;\r\n let excludePathList = this._myParams.myObjectPathsToExclude;\r\n let includeNameList = this._myParams.myObjectNamesToInclude;\r\n let excludeNameList = this._myParams.myObjectNamesToExclude;\r\n if (isClass) {\r\n includePathList = this._myParams.myClassPathsToInclude;\r\n excludePathList = this._myParams.myClassPathsToExclude;\r\n includeNameList = this._myParams.myClassNamesToInclude;\r\n excludeNameList = this._myParams.myClassNamesToExclude;\r\n }\r\n\r\n let validReferencePath = this._filterName(currentPath, includePathList, excludePathList);\r\n let validReferenceName = this._filterName(propertyName, includeNameList, excludeNameList);\r\n if (validReferencePath && validReferenceName) {\r\n if (isObject && (objectLevel + 1 <= this._myParams.myObjectAddObjectDescendantsDepthLevel || this._myParams.myObjectAddObjectDescendantsDepthLevel == -1)) {\r\n objectsAndParents.pp_pushUnique([objectProperty, object, propertyName, currentPath, currentName], equalCallback);\r\n }\r\n\r\n if (isClass && propertyName != \"constructor\" && (objectLevel + 1 <= this._myParams.myObjectAddClassDescendantsDepthLevel || this._myParams.myObjectAddClassDescendantsDepthLevel == -1)) {\r\n classesAndParents.pp_pushUnique([objectProperty, object, propertyName, currentPath, currentName], equalCallback);\r\n }\r\n\r\n if (isObject) {\r\n objectsToVisit.pp_pushUnique([objectProperty, objectLevel + 1, currentPath], equalCallback);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _filterName(name, includeList, excludeList) {\r\n let validName = includeList.length == 0;\r\n for (let includeName of includeList) {\r\n if (name.match(includeName) != null) {\r\n validName = true;\r\n break;\r\n }\r\n }\r\n\r\n if (validName) {\r\n for (let excludeName of excludeList) {\r\n if (name.match(excludeName) != null) {\r\n validName = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return validName;\r\n }\r\n\r\n _isJSObjectFunction(propertyName) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nDebugFunctionsOverwriter.prototype._isJSObjectFunction = function () {\r\n let jsObjectFunctions = [\r\n \"__defineGetter__\", \"__defineSetter__\", \"hasOwnProperty\", \"__lookupGetter__\", \"__lookupSetter__\", \"isPrototypeOf\",\r\n \"propertyIsEnumerable\", \"toString\", \"valueOf\", \"__proto__\", \"toLocaleString\", \"arguments\", \"caller\", \"apply\", \"bind\", \"call\", \"callee\"];\r\n return function _isJSObjectFunction(propertyName) {\r\n return jsObjectFunctions.pp_hasEqual(propertyName);\r\n };\r\n}();", "import { JSUtils } from \"../../../cauldron/utils/js_utils.js\";\r\nimport { DebugFunctionsOverwriter, DebugFunctionsOverwriterParams } from \"../debug_functions_overwriter.js\";\r\n\r\nexport class DebugFunctionsPerformanceAnalyzerParams extends DebugFunctionsOverwriterParams {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.myExecutionTimeAnalysisEnabled = true;\r\n\r\n this.myAddPathPrefixToFunctionID = true;\r\n // This works at best when the object/class is specified as path\r\n // since with reference it's not possible to get the full path or get the variable name of the reference\r\n\r\n this.myFilterDebugFunctionsPerformanceAnalyzerClasses = true;\r\n }\r\n}\r\n\r\nexport class DebugFunctionPerformanceAnalysisResults {\r\n\r\n constructor() {\r\n this.myReference = null;\r\n this.myName = \"\";\r\n this.myPath = \"\";\r\n this.myID = \"\";\r\n\r\n this.myCallsCount = 0;\r\n this.myTotalExecutionTime = 0;\r\n this.myTotalExecutionTimePercentage = 0;\r\n this.myAverageExecutionTime = 0;\r\n this.myTimeElapsedSinceLastReset = 0;\r\n\r\n this._myTotalExecutionTimeInternal = 0;\r\n }\r\n\r\n reset() {\r\n this.myCallsCount = 0;\r\n this.myTotalExecutionTime = 0;\r\n this.myTotalExecutionTimePercentage = 0;\r\n this.myAverageExecutionTime = 0;\r\n this.myTimeElapsedSinceLastReset = 0;\r\n\r\n this._myTotalExecutionTimeInternal = 0;\r\n }\r\n\r\n max(other) {\r\n this.myCallsCount = Math.max(this.myCallsCount, other.myCallsCount);\r\n this.myTotalExecutionTime = Math.max(this.myTotalExecutionTime, other.myTotalExecutionTime);\r\n this.myTotalExecutionTimePercentage = Math.max(this.myTotalExecutionTimePercentage, other.myTotalExecutionTimePercentage);\r\n this.myAverageExecutionTime = Math.max(this.myAverageExecutionTime, other.myAverageExecutionTime);\r\n }\r\n\r\n copy(other) {\r\n this.myReference = other.myReference;\r\n this.myName = other.myName;\r\n this.myPath = other.myPath;\r\n this.myID = other.myID;\r\n\r\n this.myCallsCount = other.myCallsCount;\r\n this.myTotalExecutionTime = other.myTotalExecutionTime;\r\n this.myTotalExecutionTimePercentage = other.myTotalExecutionTimePercentage;\r\n this.myAverageExecutionTime = other.myAverageExecutionTime;\r\n this.myTimeElapsedSinceLastReset = other.myTimeElapsedSinceLastReset;\r\n\r\n this._myTotalExecutionTimeInternal = other._myTotalExecutionTimeInternal;\r\n }\r\n}\r\n\r\nexport let DebugFunctionsPerformanceAnalyzerSortOrder = {\r\n NONE: 0,\r\n CALLS_COUNT: 1,\r\n TOTAL_EXECUTION_TIME: 2,\r\n AVERAGE_EXECUTION_TIME: 3\r\n};\r\n\r\nexport class DebugFunctionsPerformanceAnalyzer extends DebugFunctionsOverwriter {\r\n\r\n constructor(params = new DebugFunctionsPerformanceAnalyzerParams()) {\r\n super(params);\r\n\r\n this._myFunctionPerformanceAnalysisResults = new Map();\r\n this._myFunctionPerformanceAnalysisMaxResults = new Map();\r\n\r\n this._myResultsAlreadyAdded = false;\r\n\r\n this._myExecutionTimes = {\r\n myOverheadExecutionTimeSinceLastReset: 0,\r\n myLastFunctionExecutionTime: 0,\r\n myOriginalFunctionOverheadExecutionTimes: []\r\n };\r\n this._myTimeOfLastReset = window.performance.now();\r\n this._myMaxTimeElapsedSinceLastReset = 0;\r\n\r\n let originalPush = Array.prototype[\"push\"];\r\n let originalPop = Array.prototype[\"pop\"];\r\n this._myExecutionTimes.myOriginalFunctionOverheadExecutionTimes.push = function () { return originalPush.bind(this)(...arguments); };\r\n this._myExecutionTimes.myOriginalFunctionOverheadExecutionTimes.pop = function () { return originalPop.bind(this)(...arguments); };\r\n }\r\n\r\n overwriteFunctions() {\r\n super.overwriteFunctions();\r\n\r\n this.resetResults();\r\n this.resetMaxResults();\r\n }\r\n\r\n getTimeElapsedSinceLastReset() {\r\n return window.performance.now() - this._myTimeOfLastReset - this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset;\r\n }\r\n\r\n getMaxTimeElapsedSinceLastReset() {\r\n this._myMaxTimeElapsedSinceLastReset = Math.max(this._myMaxTimeElapsedSinceLastReset, this.getTimeElapsedSinceLastReset());\r\n return this._myMaxTimeElapsedSinceLastReset;\r\n }\r\n\r\n resetResults() {\r\n this._updateDerivatesResults();\r\n this._updateMaxResults();\r\n\r\n for (let property of this._myFunctionPerformanceAnalysisResults.keys()) {\r\n this._myFunctionPerformanceAnalysisResults.get(property).reset();\r\n }\r\n\r\n this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset = 0;\r\n\r\n this._myTimeOfLastReset = window.performance.now();\r\n }\r\n\r\n resetMaxResults() {\r\n this._myMaxTimeElapsedSinceLastReset = 0;\r\n for (let property of this._myFunctionPerformanceAnalysisMaxResults.keys()) {\r\n this._myFunctionPerformanceAnalysisMaxResults.get(property).reset();\r\n }\r\n }\r\n\r\n getResults(sortOrder = DebugFunctionsPerformanceAnalyzerSortOrder.NONE) {\r\n this._updateDerivatesResults();\r\n this._updateMaxResults();\r\n\r\n let results = this._myFunctionPerformanceAnalysisResults;\r\n results = this._sortResults(results, sortOrder);\r\n return results;\r\n }\r\n\r\n getMaxResults(sortOrder = DebugFunctionsPerformanceAnalyzerSortOrder.NONE) {\r\n this._updateDerivatesResults();\r\n this._updateMaxResults();\r\n\r\n let results = this._myFunctionPerformanceAnalysisMaxResults;\r\n results = this._sortResults(results, sortOrder);\r\n return results;\r\n }\r\n\r\n _getOverwrittenFunction(reference, propertyName, referencePath, isClass, isFunction) {\r\n return this._getOverwrittenFunctionInternal(reference, propertyName, referencePath, isClass, isFunction, false);\r\n }\r\n\r\n _getOverwrittenConstructor(reference, propertyName, referencePath, isClass, isFunction) {\r\n return this._getOverwrittenFunctionInternal(reference, propertyName, referencePath, isClass, isFunction, true);\r\n }\r\n\r\n _onOverwriteSuccess(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n this._myResultsAlreadyAdded = false;\r\n }\r\n\r\n _onOverwriteFailure(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n if (this._myResultsAlreadyAdded) {\r\n let propertyID = this._getPropertyID(propertyName, referencePath, isFunction, isConstructor);\r\n this._myFunctionPerformanceAnalysisResults.delete(propertyID);\r\n }\r\n }\r\n\r\n _sortResults(results, sortOrder) {\r\n let sortedResults = results;\r\n\r\n if (sortOrder != DebugFunctionsPerformanceAnalyzerSortOrder.NONE) {\r\n sortedResults = new Map([...results.entries()].sort(function (first, second) {\r\n let sortResult = 0;\r\n\r\n if (sortOrder == DebugFunctionsPerformanceAnalyzerSortOrder.CALLS_COUNT) {\r\n sortResult = -(first[1].myCallsCount - second[1].myCallsCount);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myTotalExecutionTime - second[1].myTotalExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myAverageExecutionTime - second[1].myAverageExecutionTime);\r\n }\r\n }\r\n } else if (sortOrder == DebugFunctionsPerformanceAnalyzerSortOrder.TOTAL_EXECUTION_TIME) {\r\n sortResult = -(first[1].myTotalExecutionTime - second[1].myTotalExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myAverageExecutionTime - second[1].myAverageExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myCallsCount - second[1].myCallsCount);\r\n }\r\n }\r\n } else {\r\n sortResult = -(first[1].myAverageExecutionTime - second[1].myAverageExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myTotalExecutionTime - second[1].myTotalExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myCallsCount - second[1].myCallsCount);\r\n }\r\n }\r\n }\r\n\r\n return sortResult;\r\n }));\r\n }\r\n\r\n return sortedResults;\r\n }\r\n\r\n _getPropertyID(propertyName, referencePath, isFunction, isConstructor) {\r\n let id = isConstructor ? \"constructor\" : propertyName;\r\n\r\n if (referencePath != null && this._myParams.myAddPathPrefixToFunctionID) {\r\n if (!isFunction) {\r\n id = referencePath + \".\" + id;\r\n } else {\r\n id = referencePath;\r\n }\r\n }\r\n\r\n return id;\r\n }\r\n\r\n _updateDerivatesResults() {\r\n let timeElapsedSinceLastReset = this.getTimeElapsedSinceLastReset();\r\n let beforeTime = window.performance.now();\r\n\r\n for (let property of this._myFunctionPerformanceAnalysisResults.keys()) {\r\n let results = this._myFunctionPerformanceAnalysisResults.get(property);\r\n\r\n if (timeElapsedSinceLastReset != 0) {\r\n results.myTotalExecutionTimePercentage = results.myTotalExecutionTime / timeElapsedSinceLastReset;\r\n } else {\r\n if (results.myCallsCount != 0) {\r\n results.myTotalExecutionTimePercentage = 1;\r\n } else {\r\n results.myTotalExecutionTimePercentage = 0;\r\n }\r\n }\r\n\r\n if (results.myCallsCount != 0) {\r\n results.myAverageExecutionTime = results.myTotalExecutionTime / results.myCallsCount;\r\n } else {\r\n results.myAverageExecutionTime = 0;\r\n }\r\n\r\n results.myTimeElapsedSinceLastReset = timeElapsedSinceLastReset;\r\n }\r\n\r\n this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now() - beforeTime;\r\n }\r\n\r\n _updateMaxResults() {\r\n let beforeTime = window.performance.now();\r\n\r\n this._myMaxTimeElapsedSinceLastReset = Math.max(this._myMaxTimeElapsedSinceLastReset, this.getTimeElapsedSinceLastReset());\r\n\r\n for (let property of this._myFunctionPerformanceAnalysisResults.keys()) {\r\n if (this._myFunctionPerformanceAnalysisMaxResults.has(property)) {\r\n this._myFunctionPerformanceAnalysisMaxResults.get(property).max(this._myFunctionPerformanceAnalysisResults.get(property));\r\n } else {\r\n let maxResults = new DebugFunctionPerformanceAnalysisResults();\r\n maxResults.copy(this._myFunctionPerformanceAnalysisResults.get(property));\r\n this._myFunctionPerformanceAnalysisMaxResults.set(property, maxResults);\r\n }\r\n }\r\n\r\n this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now() - beforeTime;\r\n }\r\n\r\n _getOverwrittenFunctionInternal(reference, propertyName, referencePath, isClass, isFunction, isConstructor) {\r\n let newFunction = JSUtils.getObjectProperty(reference, propertyName);\r\n\r\n if (!this._myParams.myFilterDebugFunctionsPerformanceAnalyzerClasses || !this._isPerformanceAnalyzer(reference, propertyName, isClass)) {\r\n if (propertyName != \"_myPerformanceAnalyzerOriginalFunction\") {\r\n let propertyID = this._getPropertyID(propertyName, referencePath, isFunction, isConstructor);\r\n\r\n this._myResultsAlreadyAdded = this._myFunctionPerformanceAnalysisResults.has(propertyID);\r\n let analysisResults = new DebugFunctionPerformanceAnalysisResults();\r\n\r\n analysisResults.myReference = reference;\r\n analysisResults.myName = propertyName;\r\n analysisResults.myPath = referencePath;\r\n analysisResults.myID = referencePath;\r\n\r\n this._myFunctionPerformanceAnalysisResults.set(propertyID, analysisResults);\r\n\r\n try {\r\n let functionPerformanceAnalysisResults = this._myFunctionPerformanceAnalysisResults.get(propertyID);\r\n let executionTimes = this._myExecutionTimes;\r\n\r\n let originalFunction = reference[propertyName];\r\n let functionCallOverhead = 0.000175; // ms taken by an analyzed function that is empty\r\n let overheadError = 0.00035; // ms to add to adjust a bit for window.performance.now() max precision which is 0.0005\r\n\r\n let executionTimeAnalysisEnabled = this._myParams.myExecutionTimeAnalysisEnabled;\r\n\r\n if (!isConstructor) {\r\n newFunction = function () {\r\n let startTime = window.performance.now();\r\n\r\n let errorToThrow = null;\r\n let returnValue = undefined;\r\n let boundOriginalFunction = null;\r\n let startOriginalFunctionTime = 0;\r\n let endOriginalFunctionTime = 0;\r\n let originalFunctionOverheadExecutionTime = 0;\r\n let executionTimeToAdjust = 0;\r\n let executionTime = 0;\r\n let beforeOverhead = 0;\r\n let inBetweenOverhead = 0;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes.push(0);\r\n\r\n startOriginalFunctionTime = window.performance.now();\r\n endOriginalFunctionTime = window.performance.now();\r\n\r\n try {\r\n boundOriginalFunction = originalFunction.bind(this);\r\n startOriginalFunctionTime = window.performance.now();\r\n returnValue = boundOriginalFunction(...arguments);\r\n endOriginalFunctionTime = window.performance.now();\r\n } catch (error) {\r\n endOriginalFunctionTime = window.performance.now();\r\n errorToThrow = error;\r\n }\r\n } else {\r\n try {\r\n boundOriginalFunction = originalFunction.bind(this);\r\n returnValue = boundOriginalFunction(...arguments);\r\n } catch (error) {\r\n errorToThrow = error;\r\n }\r\n }\r\n\r\n functionPerformanceAnalysisResults.myCallsCount += 1;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n originalFunctionOverheadExecutionTime = executionTimes.myOriginalFunctionOverheadExecutionTimes.pop();\r\n\r\n executionTimeToAdjust = endOriginalFunctionTime - startOriginalFunctionTime - originalFunctionOverheadExecutionTime;\r\n executionTime = executionTimeToAdjust - functionCallOverhead;\r\n if (originalFunction._myPerformanceAnalyzerHasBeenOverwritten) {\r\n executionTime = executionTimes.myLastFunctionExecutionTime;\r\n }\r\n\r\n functionPerformanceAnalysisResults._myTotalExecutionTimeInternal += executionTime;\r\n functionPerformanceAnalysisResults.myTotalExecutionTime = Math.max(0, functionPerformanceAnalysisResults._myTotalExecutionTimeInternal);\r\n\r\n executionTimes.myLastFunctionExecutionTime = executionTime;\r\n\r\n beforeOverhead = startOriginalFunctionTime - startTime;\r\n inBetweenOverhead = beforeOverhead - endOriginalFunctionTime - overheadError;\r\n if (executionTimes.myOriginalFunctionOverheadExecutionTimes.length > 0) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n inBetweenOverhead + originalFunctionOverheadExecutionTime + overheadError * 2.75;\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n window.performance.now();\r\n }\r\n\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += inBetweenOverhead;\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now();\r\n }\r\n\r\n if (errorToThrow != null) {\r\n throw errorToThrow;\r\n }\r\n\r\n return returnValue;\r\n };\r\n } else {\r\n newFunction = function () {\r\n let startTime = window.performance.now();\r\n\r\n let errorToThrow = null;\r\n let returnValue = undefined;\r\n let startOriginalFunctionTime = 0;\r\n let endOriginalFunctionTime = 0;\r\n let originalFunctionOverheadExecutionTime = 0;\r\n let executionTimeToAdjust = 0;\r\n let executionTime = 0;\r\n let beforeOverhead = 0;\r\n let inBetweenOverhead = 0;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes.push(0);\r\n\r\n startOriginalFunctionTime = window.performance.now();\r\n endOriginalFunctionTime = window.performance.now();\r\n\r\n try {\r\n startOriginalFunctionTime = window.performance.now();\r\n returnValue = new originalFunction(...arguments);\r\n endOriginalFunctionTime = window.performance.now();\r\n } catch (error) {\r\n endOriginalFunctionTime = window.performance.now();\r\n errorToThrow = error;\r\n }\r\n } else {\r\n try {\r\n returnValue = new originalFunction(...arguments);\r\n } catch (error) {\r\n errorToThrow = error;\r\n }\r\n }\r\n\r\n functionPerformanceAnalysisResults.myCallsCount += 1;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n originalFunctionOverheadExecutionTime = executionTimes.myOriginalFunctionOverheadExecutionTimes.pop();\r\n\r\n executionTimeToAdjust = endOriginalFunctionTime - startOriginalFunctionTime - originalFunctionOverheadExecutionTime;\r\n executionTime = executionTimeToAdjust - functionCallOverhead;\r\n if (originalFunction._myPerformanceAnalyzerHasBeenOverwritten) {\r\n executionTime = executionTimes.myLastFunctionExecutionTime;\r\n }\r\n\r\n functionPerformanceAnalysisResults._myTotalExecutionTimeInternal += executionTime;\r\n functionPerformanceAnalysisResults.myTotalExecutionTime = Math.max(0, functionPerformanceAnalysisResults._myTotalExecutionTimeInternal);\r\n\r\n executionTimes.myLastFunctionExecutionTime = executionTime;\r\n\r\n beforeOverhead = startOriginalFunctionTime - startTime;\r\n inBetweenOverhead = beforeOverhead - endOriginalFunctionTime - overheadError;\r\n if (executionTimes.myOriginalFunctionOverheadExecutionTimes.length > 0) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n inBetweenOverhead + originalFunctionOverheadExecutionTime + overheadError * 2.75;\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n window.performance.now();\r\n }\r\n\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += inBetweenOverhead;\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now();\r\n }\r\n\r\n if (errorToThrow != null) {\r\n throw errorToThrow;\r\n }\r\n\r\n return returnValue;\r\n };\r\n }\r\n\r\n if (newFunction != null) {\r\n Object.defineProperty(newFunction, \"_myPerformanceAnalyzerHasBeenOverwritten\", {\r\n value: true,\r\n enumerable: false,\r\n configurable: false,\r\n writable: false\r\n });\r\n\r\n Object.defineProperty(newFunction, \"_myPerformanceAnalyzerOriginalFunction\", {\r\n value: originalFunction,\r\n enumerable: false,\r\n configurable: false,\r\n writable: false\r\n });\r\n }\r\n } catch (error) {\r\n if (this._myParams.myLogEnabled) {\r\n console.error(\"Function:\", propertyName, \"of:\", reference, \"can't be overwritten.\\nError:\", error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return newFunction;\r\n }\r\n\r\n _isPerformanceAnalyzer(reference, propertyName, isClass) {\r\n let isPerformanceAnalyzer = false;\r\n\r\n if (isClass) {\r\n if (reference == DebugFunctionsPerformanceAnalyzer.prototype || reference == DebugFunctionPerformanceAnalysisResults.prototype) {\r\n isPerformanceAnalyzer = true;\r\n }\r\n }\r\n\r\n return isPerformanceAnalyzer;\r\n }\r\n}", "import { Timer } from \"../../../cauldron/cauldron/timer.js\";\r\nimport { DebugFunctionsPerformanceAnalyzerSortOrder } from \"./debug_functions_performance_analyzer.js\";\r\n\r\nexport class DebugFunctionsPerformanceAnalysisResultsLoggerParams {\r\n\r\n constructor() {\r\n this.myPerformanceAnalyzer = null;\r\n\r\n this.myLogTitle = \"Functions Performance Analysis Results\";\r\n this.mySecondsBetweenLogs = 1;\r\n this.myLogFunction = \"log\";\r\n\r\n this.myFormatLog = true;\r\n this.myFormatLogIndentationCharacter = \"-\";\r\n\r\n this.myLogMaxResults = false;\r\n\r\n this.myLogSortOrder = DebugFunctionsPerformanceAnalyzerSortOrder.NONE;\r\n\r\n this.myLogMaxAmountOfFunctions = null;\r\n\r\n this.myLogFunctionsWithCallsCountAbove = null;\r\n this.myLogFunctionsWithTotalExecutionTimePercentageAbove = null;\r\n\r\n this.myLogCallsCountResults = false;\r\n this.myLogTotalExecutionTimeResults = false;\r\n this.myLogTotalExecutionTimePercentageResults = false;\r\n this.myLogAverageExecutionTimeResults = false;\r\n\r\n this.myClearConsoleBeforeLog = false;\r\n }\r\n}\r\n\r\nexport class DebugFunctionsPerformanceAnalysisResultsLogger {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myLogTimer = new Timer(this._myParams.mySecondsBetweenLogs);\r\n\r\n this._myMaxNameLength = 0;\r\n this._myMaxCallsCountLength = 0;\r\n this._myMaxTotalExecutionTimeLength = 0;\r\n this._myMaxTotalExecutionTimePercentageLength = 0;\r\n this._myMaxAverageExecutionTimeLength = 0;\r\n }\r\n\r\n update(dt) {\r\n if (this._myParams.myPerformanceAnalyzer == null) {\r\n return;\r\n }\r\n\r\n this._myLogTimer.update(dt);\r\n if (this._myLogTimer.isDone()) {\r\n this._myLogTimer.start();\r\n\r\n let timeSinceLastReset = this._myParams.myPerformanceAnalyzer.getTimeElapsedSinceLastReset();\r\n if (this._myParams.myLogMaxResults) {\r\n timeSinceLastReset = this._myParams.myPerformanceAnalyzer.getMaxTimeElapsedSinceLastReset();\r\n }\r\n\r\n let analysisResults = null;\r\n if (!this._myParams.myLogMaxResults) {\r\n analysisResults = this._myParams.myPerformanceAnalyzer.getResults(this._myParams.myLogSortOrder);\r\n } else {\r\n analysisResults = this._myParams.myPerformanceAnalyzer.getMaxResults(this._myParams.myLogSortOrder);\r\n }\r\n\r\n if (this._myParams.myLogFunctionsWithCallsCountAbove != null) {\r\n let analysisResultsClone = new Map(analysisResults);\r\n analysisResults = new Map();\r\n let keys = [...analysisResultsClone.keys()];\r\n for (let i = 0; i < keys.length; i++) {\r\n let results = analysisResultsClone.get(keys[i]);\r\n if (results.myCallsCount > this._myParams.myLogFunctionsWithCallsCountAbove) {\r\n analysisResults.set(keys[i], results);\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myLogFunctionsWithTotalExecutionTimePercentageAbove != null) {\r\n let analysisResultsClone = new Map(analysisResults);\r\n analysisResults = new Map();\r\n let keys = [...analysisResultsClone.keys()];\r\n for (let i = 0; i < keys.length; i++) {\r\n let results = analysisResultsClone.get(keys[i]);\r\n if (results.myTotalExecutionTimePercentage * 100 > this._myParams.myLogFunctionsWithTotalExecutionTimePercentageAbove) {\r\n analysisResults.set(keys[i], results);\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myLogMaxAmountOfFunctions != null) {\r\n let analysisResultsClone = new Map(analysisResults);\r\n analysisResults = new Map();\r\n let keys = [...analysisResultsClone.keys()];\r\n for (let i = 0; i < this._myParams.myLogMaxAmountOfFunctions && i < keys.length; i++) {\r\n let counter = analysisResultsClone.get(keys[i]);\r\n analysisResults.set(keys[i], counter);\r\n }\r\n }\r\n\r\n if (this._myParams.myClearConsoleBeforeLog) {\r\n console.clear();\r\n }\r\n\r\n let analysisResultsToLog = new Map();\r\n for (let key of analysisResults.keys()) {\r\n let currentResults = analysisResults.get(key);\r\n\r\n let resultsToLog = {};\r\n if (this._myParams.myLogCallsCountResults) {\r\n resultsToLog.myCallsCount = currentResults.myCallsCount;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimeResults) {\r\n resultsToLog.myTotalExecutionTime = currentResults.myTotalExecutionTime;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimePercentageResults) {\r\n resultsToLog.myTotalExecutionTimePercentage = currentResults.myTotalExecutionTimePercentage;\r\n }\r\n\r\n if (this._myParams.myLogAverageExecutionTimeResults) {\r\n resultsToLog.myAverageExecutionTime = currentResults.myAverageExecutionTime;\r\n }\r\n\r\n analysisResultsToLog.set(key, resultsToLog);\r\n }\r\n\r\n let resultsText = \"\";\r\n\r\n for (let entry of analysisResults.entries()) {\r\n let name = entry[0];\r\n let results = entry[1];\r\n\r\n this._myMaxNameLength = Math.max(this._myMaxNameLength, name.length);\r\n\r\n this._myMaxCallsCountLength = Math.max(this._myMaxCallsCountLength, results.myCallsCount.toFixed(0).length);\r\n this._myMaxTotalExecutionTimeLength = Math.max(this._myMaxTotalExecutionTimeLength, results.myTotalExecutionTime.toFixed(5).length);\r\n this._myMaxTotalExecutionTimePercentageLength = Math.max(this._myMaxTotalExecutionTimePercentageLength, (results.myTotalExecutionTimePercentage * 100).toFixed(2).length);\r\n this._myMaxAverageExecutionTimeLength = Math.max(this._myMaxAverageExecutionTimeLength, results.myAverageExecutionTime.toFixed(5).length);\r\n }\r\n\r\n for (let entry of analysisResults.entries()) {\r\n let name = entry[0];\r\n let results = entry[1];\r\n\r\n let parametersToLog = 0;\r\n if (this._myParams.myLogCallsCountResults) {\r\n parametersToLog++;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimeResults) {\r\n parametersToLog++;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimePercentageResults) {\r\n parametersToLog++;\r\n }\r\n\r\n if (this._myParams.myLogAverageExecutionTimeResults) {\r\n parametersToLog++;\r\n }\r\n\r\n let textOrdered = [];\r\n\r\n let callsCountText = ((parametersToLog > 1) ? \"Calls Count: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxCallsCountLength - results.myCallsCount.toFixed(0).length; i++) {\r\n callsCountText += \" \";\r\n }\r\n }\r\n callsCountText += results.myCallsCount.toFixed(0);\r\n\r\n let totalExecutionTimeText = ((parametersToLog > 1) ? \"Total Time: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxTotalExecutionTimeLength - results.myTotalExecutionTime.toFixed(5).length; i++) {\r\n totalExecutionTimeText += \" \";\r\n }\r\n }\r\n totalExecutionTimeText += results.myTotalExecutionTime.toFixed(5) + \"ms\";\r\n\r\n let totalExecutionTimePercentageText = ((parametersToLog > 1) ? \"Total Time: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxTotalExecutionTimePercentageLength - (results.myTotalExecutionTimePercentage * 100).toFixed(2).length; i++) {\r\n totalExecutionTimePercentageText += \" \";\r\n }\r\n }\r\n totalExecutionTimePercentageText += (results.myTotalExecutionTimePercentage * 100).toFixed(2) + \"%\";\r\n\r\n let averageExecutionTimeText = ((parametersToLog > 1) ? \"Average Time: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxAverageExecutionTimeLength - results.myAverageExecutionTime.toFixed(5).length; i++) {\r\n averageExecutionTimeText += \" \";\r\n }\r\n }\r\n averageExecutionTimeText += results.myAverageExecutionTime.toFixed(5) + \"ms\";\r\n\r\n if (!this._myParams.myLogCallsCountResults) {\r\n callsCountText = null;\r\n }\r\n\r\n if (!this._myParams.myLogTotalExecutionTimeResults) {\r\n totalExecutionTimeText = null;\r\n }\r\n\r\n if (!this._myParams.myLogTotalExecutionTimePercentageResults) {\r\n totalExecutionTimePercentageText = null;\r\n }\r\n\r\n if (!this._myParams.myLogAverageExecutionTimeResults) {\r\n averageExecutionTimeText = null;\r\n }\r\n\r\n switch (this._myParams.myLogSortOrder) {\r\n case DebugFunctionsPerformanceAnalyzerSortOrder.CALLS_COUNT:\r\n textOrdered.push(callsCountText);\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(averageExecutionTimeText);\r\n break;\r\n case DebugFunctionsPerformanceAnalyzerSortOrder.TOTAL_EXECUTION_TIME:\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(averageExecutionTimeText);\r\n textOrdered.push(callsCountText);\r\n break;\r\n case DebugFunctionsPerformanceAnalyzerSortOrder.AVERAGE_EXECUTION_TIME:\r\n textOrdered.push(averageExecutionTimeText);\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(callsCountText);\r\n break;\r\n default:\r\n textOrdered.push(callsCountText);\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(averageExecutionTimeText);\r\n }\r\n\r\n resultsText += \"\\n\";\r\n if (this._myParams.myFormatLog) {\r\n let nameIndented = name + \" \";\r\n while (nameIndented.length < this._myMaxNameLength + 1) {\r\n nameIndented += this._myParams.myFormatLogIndentationCharacter;\r\n }\r\n nameIndented += this._myParams.myFormatLogIndentationCharacter + \" \";\r\n resultsText += nameIndented;\r\n } else {\r\n resultsText += name + \" - \";\r\n }\r\n\r\n let avoidFirst = true;\r\n for (let text of textOrdered) {\r\n if (text != null) {\r\n if (avoidFirst) {\r\n avoidFirst = false;\r\n } else {\r\n resultsText += \" - \";\r\n }\r\n\r\n resultsText += text;\r\n }\r\n }\r\n }\r\n\r\n if ((this._myParams.myLogTotalExecutionTimeResults || this._myParams.myLogTotalExecutionTimePercentageResults || this._myParams.myLogAverageExecutionTimeResults)) {\r\n console[this._myParams.myLogFunction](\"\\n\" + this._myParams.myLogTitle, \"\\n\\nTotal Time:\", timeSinceLastReset.toFixed(5), \"ms\\n\", resultsText);\r\n } else {\r\n console[this._myParams.myLogFunction](\"\\n\" + this._myParams.myLogTitle, \"\\n\", resultsText);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\nimport { GamepadButtonID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { DebugFunctionsPerformanceAnalysisResultsLogger, DebugFunctionsPerformanceAnalysisResultsLoggerParams } from \"../debug_functions_performance_analysis_results_logger.js\";\r\nimport { DebugFunctionsPerformanceAnalyzer, DebugFunctionsPerformanceAnalyzerParams } from \"../debug_functions_performance_analyzer.js\";\r\n\r\nexport class DebugFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-functions-performance-analyzer\";\r\n static Properties = {\r\n _myObjectsByPath: Property.string(\"\"),\r\n _myClassesByPath: Property.string(\"\"),\r\n _myFunctionsByPath: Property.string(\"\"),\r\n _myDelayStart: Property.float(0.0),\r\n _myLogTitle: Property.string(\"Functions Performance Analysis Results\"),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myExcludeJSObjectFunctions: Property.bool(true),\r\n _myAddPathPrefixToFunctionID: Property.bool(true),\r\n _myObjectAddObjectDescendantsDepthLevel: Property.int(0),\r\n _myObjectAddClassDescendantsDepthLevel: Property.int(0),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false),\r\n _myClassesByReference: Property.enum([\"Code Driven\"], \"Code Driven\"),\r\n _myObjectsByReference: Property.enum([\"Code Driven\"], \"Code Driven\")\r\n };\r\n\r\n init() {\r\n this._myActive = false;\r\n\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n this._myActive = true;\r\n\r\n this._myFunctionsPerformanceAnalyzer = null;\r\n this._myFunctionsPerformanceAnalysisResultsLogger = null;\r\n\r\n this._mySkipFirstUpdate = true;\r\n this._myStartTimer = new Timer(this._myDelayStart);\r\n if (this._myDelayStart == 0) {\r\n this._myStartTimer.end();\r\n this._mySkipFirstUpdate = false;\r\n this._start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myActive) {\r\n if (this._mySkipFirstUpdate) {\r\n this._mySkipFirstUpdate = false;\r\n return;\r\n }\r\n\r\n if (this._myStartTimer.isRunning()) {\r\n this._myStartTimer.update(dt);\r\n if (this._myStartTimer.isDone()) {\r\n this._start();\r\n }\r\n } else {\r\n this._myFunctionsPerformanceAnalysisResultsLogger.update(dt);\r\n this._myFunctionsPerformanceAnalyzer.resetResults();\r\n }\r\n\r\n if (this._myResetMaxResultsShortcutEnabled) {\r\n if (Globals.getLeftGamepad(this.engine).getButtonInfo(GamepadButtonID.SELECT).isPressEnd(3)) {\r\n this._myFunctionsPerformanceAnalyzer.resetMaxResults();\r\n }\r\n }\r\n }\r\n }\r\n\r\n _start() {\r\n let functionsPerformanceAnalyzerParams = new DebugFunctionsPerformanceAnalyzerParams(this.engine);\r\n\r\n if (this._myObjectsByPath.length > 0) {\r\n let toIncludeList = [...this._myObjectsByPath.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myObjectsByPath.push(...toIncludeList);\r\n }\r\n\r\n if (this._myClassesByPath.length > 0) {\r\n let toIncludeList = [...this._myClassesByPath.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myClassesByPath.push(...toIncludeList);\r\n }\r\n\r\n if (this._myFunctionsByPath.length > 0) {\r\n let toIncludeList = [...this._myFunctionsByPath.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myFunctionsByPath.push(...toIncludeList);\r\n }\r\n\r\n functionsPerformanceAnalyzerParams.myExcludeConstructors = this._myExcludeConstructors;\r\n functionsPerformanceAnalyzerParams.myExcludeJSObjectFunctions = this._myExcludeJSObjectFunctions;\r\n functionsPerformanceAnalyzerParams.myAddPathPrefixToFunctionID = this._myAddPathPrefixToFunctionID;\r\n\r\n if (this._myFunctionPathsToInclude.length > 0) {\r\n let toIncludeList = [...this._myFunctionPathsToInclude.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myFunctionPathsToInclude.push(...toIncludeList);\r\n }\r\n\r\n if (this._myFunctionPathsToExclude.length > 0) {\r\n let toExcludeList = [...this._myFunctionPathsToExclude.split(\",\")];\r\n for (let i = 0; i < toExcludeList.length; i++) {\r\n toExcludeList[i] = toExcludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myFunctionPathsToExclude.push(...toExcludeList);\r\n }\r\n\r\n functionsPerformanceAnalyzerParams.myObjectAddObjectDescendantsDepthLevel = this._myObjectAddObjectDescendantsDepthLevel;\r\n functionsPerformanceAnalyzerParams.myObjectAddClassDescendantsDepthLevel = this._myObjectAddClassDescendantsDepthLevel;\r\n\r\n functionsPerformanceAnalyzerParams.myExecutionTimeAnalysisEnabled = this._myLogTotalExecutionTimeResults || this._myLogTotalExecutionTimePercentageResults || this._myLogAverageExecutionTimeResults;\r\n\r\n functionsPerformanceAnalyzerParams.myClassesByReference = (this._myClassesByReference != 0) ? this._myClassesByReference : [];\r\n functionsPerformanceAnalyzerParams.myObjectsByReference = (this._myObjectsByReference != 0) ? this._myObjectsByReference : [];\r\n\r\n this._myFunctionsPerformanceAnalyzer = new DebugFunctionsPerformanceAnalyzer(functionsPerformanceAnalyzerParams);\r\n this._myFunctionsPerformanceAnalyzer.overwriteFunctions();\r\n\r\n let functionsPerformanceAnalysisResultsLoggerParams = new DebugFunctionsPerformanceAnalysisResultsLoggerParams();\r\n functionsPerformanceAnalysisResultsLoggerParams.myPerformanceAnalyzer = this._myFunctionsPerformanceAnalyzer;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogTitle = this._myLogTitle;\r\n\r\n functionsPerformanceAnalysisResultsLoggerParams.mySecondsBetweenLogs = this._mySecondsBetweenLogs;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogFunction = [\"log\", \"error\", \"warn\", \"debug\"][this._myLogFunction];\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogMaxAmountOfFunctions = (this._myLogMaxAmountOfFunctions >= 0) ? this._myLogMaxAmountOfFunctions : null;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogFunctionsWithCallsCountAbove = (this._myLogFunctionsWithCallsCountAbove >= 0) ? this._myLogFunctionsWithCallsCountAbove : null;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogFunctionsWithTotalExecutionTimePercentageAbove = (this._myLogFunctionsWithTotalExecutionTimePercentageAbove >= 0) ? this._myLogFunctionsWithTotalExecutionTimePercentageAbove : null;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogMaxResults = this._myLogMaxResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myClearConsoleBeforeLog = this._myClearConsoleBeforeLog;\r\n\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogSortOrder = this._myLogSortOrder;\r\n\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogCallsCountResults = this._myLogCallsCountResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogTotalExecutionTimeResults = this._myLogTotalExecutionTimeResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogTotalExecutionTimePercentageResults = this._myLogTotalExecutionTimePercentageResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogAverageExecutionTimeResults = this._myLogAverageExecutionTimeResults;\r\n\r\n this._myFunctionsPerformanceAnalysisResultsLogger = new DebugFunctionsPerformanceAnalysisResultsLogger(functionsPerformanceAnalysisResultsLoggerParams);\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugPPFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-pp-functions-performance-analyzer\";\r\n static Properties = {\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByPath: \"PP\",\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"PP Functions Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude,\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myObjectAddObjectDescendantsDepthLevel: 1,\r\n _myObjectAddClassDescendantsDepthLevel: 1,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "\r\nimport { Component, Property } from \"@wonderlandengine/api\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugArrayFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-array-functions-performance-analyzer\";\r\n static Properties = {\r\n _myIncludeOnlyMainArrayTypes: Property.bool(true),\r\n _myIncludeOnlyArrayExtensionFunctions: Property.bool(false),\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n let classesByPath = \"Array, Uint8ClampedArray, Uint8Array, Uint16Array, Uint32Array, Int8Array, Int16Array, Int32Array, Float32Array, Float64Array\";\r\n if (this._myIncludeOnlyMainArrayTypes) {\r\n classesByPath = \"Array, Uint8Array, Uint16Array, Float32Array\";\r\n }\r\n\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myClassesByPath: classesByPath,\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"Array Functions Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude + (this._myFunctionPathsToInclude.length > 0 && this._myIncludeOnlyArrayExtensionFunctions ? \", \" : \"\") + (this._myIncludeOnlyArrayExtensionFunctions ? \"pp_, vec_, vec2_, vec3_, vec4_, quat_, quat2_, mat3_, mat4_, _pp_, _vec_, _quat_\" : \"\"),\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../../../cauldron/utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../../../cauldron/utils/array/quat_utils.js\";\r\nimport { Vec2Utils } from \"../../../../cauldron/utils/array/vec2_utils.js\";\r\nimport { Vec3Utils } from \"../../../../cauldron/utils/array/vec3_utils.js\";\r\nimport { Vec4Utils } from \"../../../../cauldron/utils/array/vec4_utils.js\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugPPArrayCreationPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-pp-array-creation-performance-analyzer\";\r\n static Properties = {\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByReference: [\r\n [Vec2Utils, \"Vec2Utils\"],\r\n [Vec3Utils, \"Vec3Utils\"],\r\n [Vec4Utils, \"Vec4Utils\"],\r\n [QuatUtils, \"QuatUtils\"],\r\n [Quat2Utils, \"Quat2Utils\"],\r\n [Mat3Utils, \"Mat3Utils\"],\r\n [Mat4Utils, \"Mat4Utils\"]\r\n ],\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"PP Array Creation Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: \"create\",\r\n _myExcludeConstructors: true,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugWLFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-wl-functions-performance-analyzer\";\r\n static Properties = {\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByPath: \"WL\",\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"WL Functions Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude,\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myObjectAddObjectDescendantsDepthLevel: 1,\r\n _myObjectAddClassDescendantsDepthLevel: 1,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "import { AnimationComponent, CollisionComponent, Component, InputComponent, LightComponent, MeshComponent, PhysXComponent, Property, TextComponent, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugWLComponentsFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-wl-components-functions-performance-analyzer\";\r\n static Properties = {\r\n _myAnalyzeComponentTypes: Property.bool(true),\r\n _myAnalyzeComponentInstances: Property.bool(false),\r\n _myComponentInstanceID: Property.enum([\"Object ID\", \"Object Name\", \"Object ID - Object Name\"], \"Object ID - Object Name\"),\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myStartTimer = new Timer(this._myDelayStart);\r\n if (this._myDelayStart == 0) {\r\n this._myStartTimer.end();\r\n this._start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myStartTimer.isRunning()) {\r\n this._myStartTimer.update(dt);\r\n if (this._myStartTimer.isDone()) {\r\n this._start();\r\n }\r\n }\r\n }\r\n\r\n _start() {\r\n\r\n let objectsByReference = [];\r\n let classesByReference = [];\r\n\r\n if (this._myAnalyzeComponentInstances) {\r\n this._addComponentInstanceReferences(objectsByReference);\r\n }\r\n\r\n if (this._myAnalyzeComponentTypes) {\r\n this._addComponentTypeReferences(classesByReference);\r\n }\r\n\r\n this._myAnalyzerComponent = this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByReference: objectsByReference,\r\n _myClassesByReference: classesByReference,\r\n _myDelayStart: 0,\r\n _myLogTitle: \"WL Components Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude,\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myObjectAddClassDescendantsDepthLevel: 0,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n\r\n _addComponentTypeReferences(classesByReference) {\r\n let nativeComponentClasses = [\r\n AnimationComponent,\r\n CollisionComponent,\r\n InputComponent,\r\n LightComponent,\r\n MeshComponent,\r\n PhysXComponent,\r\n TextComponent,\r\n ViewComponent\r\n ];\r\n\r\n for (let nativeComponentClass of nativeComponentClasses) {\r\n classesByReference.push([nativeComponentClass.prototype, \"{\\\"\" + nativeComponentClass.TypeName + \"\\\"}\"]);\r\n }\r\n\r\n for (let componentClass of ComponentUtils.getJavascriptComponentClassesByIndex(this.engine)) {\r\n classesByReference.push([componentClass.prototype, \"{\\\"\" + componentClass.TypeName + \"\\\"}\"]);\r\n }\r\n }\r\n\r\n _addComponentInstanceReferences(objectsByReference) {\r\n // #TODO add native components\r\n\r\n for (let componentInstance of ComponentUtils.getJavascriptComponentInstances(this.engine)) {\r\n let id = \"\";\r\n\r\n switch (this._myComponentInstanceID) {\r\n case 0:\r\n id = componentInstance.object.pp_getID();\r\n break;\r\n case 1:\r\n id = componentInstance.object.pp_getName();\r\n break;\r\n case 2:\r\n id = componentInstance.object.pp_getID();\r\n if (componentInstance.object.pp_getName().length > 0) {\r\n id = id + \" - \" + componentInstance.object.pp_getName();\r\n }\r\n break;\r\n }\r\n\r\n objectsByReference.push([componentInstance,\r\n \"{\\\"\" + componentInstance.type + \"\\\"}[\" + id + \"]\"]);\r\n }\r\n }\r\n}", "import { quat_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class Direction2DTo3DConverterParams {\r\n\r\n constructor() {\r\n this.myStartFlyingForward = false;\r\n this.myStartFlyingRight = false;\r\n\r\n this.myAutoUpdateFlyForward = false;\r\n this.myAutoUpdateFlyRight = false;\r\n\r\n this.myResetFlyForwardWhenZero = false;\r\n this.myResetFlyRightWhenZero = false;\r\n\r\n this.myMinAngleToFlyForwardUp = 90;\r\n this.myMinAngleToFlyForwardDown = 90;\r\n this.myMinAngleToFlyRightUp = 90;\r\n this.myMinAngleToFlyRightDown = 90;\r\n\r\n // Settings when flying is not active, used to adjust the directions and flat them\r\n this.myAdjustForwardWhenCloseToUp = true;\r\n this.myAdjustRightWhenCloseToUp = true;\r\n this.myAdjustForwardWhenCloseToUpAngleThreshold = 10;\r\n this.myAdjustRightWhenCloseToUpAngleThreshold = 10;\r\n\r\n this.myInvertForwardWhenUpsideDown = false;\r\n this.myInvertRightWhenUpsideDown = false;\r\n\r\n this.myAdjustLastValidFlatForwardOverConversionReferenceRotation = true;\r\n this.myAdjustLastValidFlatRightOverConversionReferenceRotation = true;\r\n }\r\n}\r\n\r\nexport class Direction2DTo3DConverter {\r\n\r\n constructor(params = new Direction2DTo3DConverterParams()) {\r\n this._myParams = params;\r\n\r\n this._myFlyingForward = this._myParams.myStartFlyingForward;\r\n this._myFlyingRight = this._myParams.myStartFlyingRight;\r\n\r\n this._myLastConvertRotationQuat = quat_create();\r\n this._myLastConvertRotationQuatValid = false;\r\n\r\n this._myLastValidFlatForward = vec3_create();\r\n this._myLastValidFlatRight = vec3_create();\r\n }\r\n\r\n // @direction3DUp can be used to flat the direction if the @conversionTransform is not aligned with it\r\n // It's also needed to specify the fly axis, if different from the @conversionTransform up\r\n // If @direction3DUp is null, @conversionTransform up is used\r\n convert(direction2D, conversionTransform, direction3DUp = null, outDirection3D = vec3_create()) {\r\n return this.convertTransform(direction2D, conversionTransform, direction3DUp, outDirection3D);\r\n }\r\n\r\n isFlying() {\r\n return this._myFlyingForward || this._myFlyingRight;\r\n }\r\n\r\n isFlyingForward() {\r\n return this._myFlyingForward;\r\n }\r\n\r\n isFlyingRight() {\r\n return this._myFlyingRight;\r\n }\r\n\r\n startFlying() {\r\n this._myFlyingForward = true;\r\n this._myFlyingRight = true;\r\n }\r\n\r\n startFlyingForward() {\r\n this._myFlyingForward = true;\r\n }\r\n\r\n startFlyingRight() {\r\n this._myFlyingRight = true;\r\n }\r\n\r\n stopFlying() {\r\n this._myFlyingForward = false;\r\n this._myFlyingRight = false;\r\n }\r\n\r\n stopFlyingForward() {\r\n this._myFlyingForward = false;\r\n }\r\n\r\n stopFlyingRight() {\r\n this._myFlyingRight = false;\r\n }\r\n\r\n resetFly() {\r\n this.resetFlyForward();\r\n this.resetFlyRight();\r\n }\r\n\r\n resetFlyForward() {\r\n if (this._myParams.myStartFlyingForward) {\r\n this.startFlyingForward();\r\n } else {\r\n this.stopFlyingForward();\r\n }\r\n }\r\n\r\n resetFlyRight() {\r\n if (this._myParams.myStartFlyingRight) {\r\n this.startFlyingRight();\r\n } else {\r\n this.stopFlyingRight();\r\n }\r\n }\r\n\r\n resetLastValidFlatDirections() {\r\n this._myLastValidFlatForward.vec3_zero();\r\n this._myLastValidFlatRight.vec3_zero();\r\n }\r\n\r\n resetLastValidFlatForward() {\r\n this._myLastValidFlatForward.vec3_zero();\r\n }\r\n\r\n resetLastValidFlatRight() {\r\n this._myLastValidFlatRight.vec3_zero();\r\n }\r\n\r\n resetLastConvertTransform() {\r\n this._myLastConvertRotationQuatValid = false;\r\n this._myLastConvertRotationQuat.quat_identity();\r\n }\r\n\r\n // Convert Alternatives\r\n\r\n // If @direction3DUp is null, vec3_create(0, 1, 0) is used\r\n // Does not work properly if @conversionForward is aligned with @direction3DUp\r\n convertForward(direction2D, conversionForward, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n // @direction3DUp can be used to flat the direction if the @conversionTransform is not aligned with it\r\n // It's also needed to specify the fly axis, if different from the @conversionTransform up\r\n // If @direction3DUp is null, conversionTransform up is used\r\n convertTransform(direction2D, conversionTransform, direction3DUp = null, outDirection3D = vec3_create()) {\r\n return this.convertTransformMatrix(direction2D, conversionTransform, direction3DUp, outDirection3D);\r\n }\r\n\r\n convertTransformMatrix(direction2D, conversionTransformMatrix, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n convertTransformQuat(direction2D, conversionTransformQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n convertRotationQuat(direction2D, conversionRotationQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nDirection2DTo3DConverter.prototype.convertForward = function () {\r\n let rotationQuat = quat_create();\r\n return function convertForward(direction2D, conversionForward, direction3DUp = null, outDirection3D = vec3_create()) {\r\n rotationQuat.quat_identity();\r\n rotationQuat.quat_setForward(conversionForward, direction3DUp);\r\n return this.convertRotationQuat(direction2D, rotationQuat, direction3DUp, outDirection3D);\r\n };\r\n}();\r\n\r\nDirection2DTo3DConverter.prototype.convertTransformMatrix = function () {\r\n let rotationQuat = quat_create();\r\n return function convertTransformMatrix(direction2D, conversionTransformMatrix, direction3DUp = null, outDirection3D = vec3_create()) {\r\n rotationQuat = conversionTransformMatrix.mat4_getRotationQuat(rotationQuat);\r\n return this.convertRotationQuat(direction2D, rotationQuat, direction3DUp, outDirection3D);\r\n };\r\n}();\r\n\r\nDirection2DTo3DConverter.prototype.convertTransformQuat = function () {\r\n let rotationQuat = quat_create();\r\n return function convertTransformQuat(direction2D, conversionTransformQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n rotationQuat = conversionTransformQuat.quat2_getRotationQuat(rotationQuat);\r\n return this.convertRotationQuat(direction2D, rotationQuat, direction3DUp, outDirection3D);\r\n };\r\n}();\r\n\r\nDirection2DTo3DConverter.prototype.convertRotationQuat = function () {\r\n let forward = vec3_create();\r\n let right = vec3_create();\r\n let up = vec3_create();\r\n let direction3DUpNegate = vec3_create();\r\n let forwardScaled = vec3_create();\r\n let rightScaled = vec3_create();\r\n let rotationToNewConvertPivoted = quat_create();\r\n return function convertRotationQuat(direction2D, conversionRotationQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n outDirection3D.vec3_zero();\r\n\r\n if (this._myParams.myAdjustLastValidFlatForwardOverConversionReferenceRotation || this._myParams.myAdjustLastValidFlatRightOverConversionReferenceRotation) {\r\n if (direction3DUp != null) {\r\n if (this._myLastConvertRotationQuatValid) {\r\n rotationToNewConvertPivoted = this._myLastConvertRotationQuat.quat_rotationToQuat(conversionRotationQuat, rotationToNewConvertPivoted).\r\n quat_rotationAroundAxisQuat(direction3DUp, rotationToNewConvertPivoted);\r\n if (Math.pp_angleClamp(rotationToNewConvertPivoted.quat_getAngle(), true) > Math.PP_EPSILON_DEGREES) {\r\n if (this._myParams.myAdjustLastValidFlatForwardOverConversionReferenceRotation) {\r\n this._myLastValidFlatForward.vec3_rotateQuat(rotationToNewConvertPivoted, this._myLastValidFlatForward);\r\n }\r\n\r\n if (this._myParams.myAdjustLastValidFlatRightOverConversionReferenceRotation) {\r\n this._myLastValidFlatRight.vec3_rotateQuat(rotationToNewConvertPivoted, this._myLastValidFlatRight);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (direction2D.vec2_isZero()) {\r\n let resetFlyForward = this._myParams.myAutoUpdateFlyForward && this._myParams.myResetFlyForwardWhenZero;\r\n if (resetFlyForward) {\r\n this.resetFlyForward();\r\n }\r\n\r\n let resetFlyRight = this._myParams.myAutoUpdateFlyRight && this._myParams.myResetFlyRightWhenZero;\r\n if (resetFlyRight) {\r\n this.resetFlyRight();\r\n }\r\n } else {\r\n\r\n forward = conversionRotationQuat.quat_getForward(forward);\r\n right = conversionRotationQuat.quat_getRight(right);\r\n up = conversionRotationQuat.quat_getUp(up);\r\n\r\n if (direction3DUp != null) {\r\n let upsideDown = !direction3DUp.vec3_isConcordant(up);\r\n\r\n direction3DUpNegate = direction3DUp.vec3_negate(direction3DUpNegate);\r\n\r\n // Check if it is flying based on the convert transform orientation \r\n if (this._myParams.myAutoUpdateFlyForward) {\r\n let angleForwardWithDirectionUp = forward.vec3_angle(direction3DUp);\r\n this._myFlyingForward = this._myFlyingForward ||\r\n (angleForwardWithDirectionUp < 90 - this._myParams.myMinAngleToFlyForwardUp || angleForwardWithDirectionUp > 90 + this._myParams.myMinAngleToFlyForwardDown);\r\n }\r\n\r\n if (this._myParams.myAutoUpdateFlyRight) {\r\n let angleRightWithDirectionUp = right.vec3_angle(direction3DUp);\r\n this._myFlyingRight = this._myFlyingRight ||\r\n (angleRightWithDirectionUp < 90 - this._myParams.myMinAngleToFlyRightUp || angleRightWithDirectionUp > 90 + this._myParams.myMinAngleToFlyRightDown);\r\n }\r\n\r\n // Remove the component to prevent flying, if needed\r\n if (!this._myFlyingForward) {\r\n // If the forward is too similar to the up (or down) take the last valid forward\r\n if (this._myParams.myAdjustForwardWhenCloseToUp && !this._myLastValidFlatForward.vec3_isZero(Math.PP_EPSILON) &&\r\n (forward.vec3_angle(direction3DUp) < this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold ||\r\n forward.vec3_angle(direction3DUpNegate) < this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold)) {\r\n forward.pp_copy(this._myLastValidFlatForward);\r\n } else if (upsideDown && this._myParams.myInvertForwardWhenUpsideDown) {\r\n forward.vec3_negate(forward);\r\n }\r\n\r\n forward = forward.vec3_removeComponentAlongAxis(direction3DUp, forward);\r\n forward.vec3_normalize(forward);\r\n\r\n\r\n if (forward.vec3_isZero(Math.PP_EPSILON)) {\r\n if (!this._myLastValidFlatForward.vec3_isZero(Math.PP_EPSILON)) {\r\n forward.pp_copy(this._myLastValidFlatForward);\r\n } else {\r\n forward.vec3_set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!this._myFlyingRight) {\r\n // If the right is too similar to the up (or down) take the last valid right\r\n if (this._myParams.myAdjustRightWhenCloseToUp && !this._myLastValidFlatRight.vec3_isZero(Math.PP_EPSILON) &&\r\n (right.vec3_angle(direction3DUp) < this._myParams.myAdjustRightWhenCloseToUpAngleThreshold ||\r\n right.vec3_angle(direction3DUpNegate) < this._myParams.myAdjustRightWhenCloseToUpAngleThreshold)) {\r\n right.pp_copy(this._myLastValidFlatRight);\r\n } else if (upsideDown && this._myParams.myInvertRightWhenUpsideDown) {\r\n right.vec3_negate(right);\r\n }\r\n\r\n right = right.vec3_removeComponentAlongAxis(direction3DUp, right);\r\n right.vec3_normalize(right);\r\n\r\n if (right.vec3_isZero(Math.PP_EPSILON)) {\r\n if (!this._myLastValidFlatRight.vec3_isZero(Math.PP_EPSILON)) {\r\n right.pp_copy(this._myLastValidFlatRight);\r\n } else {\r\n right.vec3_set(-1, 0, 0);\r\n }\r\n }\r\n }\r\n\r\n // Update last valid\r\n if ((forward.vec3_angle(direction3DUp) >= this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold && forward.vec3_angle(direction3DUpNegate) >= this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold) ||\r\n (direction2D[1] != 0 && this._myLastValidFlatForward.vec3_isZero(Math.PP_EPSILON))) {\r\n this._myLastValidFlatForward = forward.vec3_removeComponentAlongAxis(direction3DUp, this._myLastValidFlatForward);\r\n this._myLastValidFlatForward.vec3_normalize(this._myLastValidFlatForward);\r\n }\r\n\r\n if ((right.vec3_angle(direction3DUp) >= this._myParams.myAdjustRightWhenCloseToUpAngleThreshold && right.vec3_angle(direction3DUpNegate) >= this._myParams.myAdjustRightWhenCloseToUpAngleThreshold) ||\r\n (direction2D[0] != 0 && this._myLastValidFlatRight.vec3_isZero(Math.PP_EPSILON))) {\r\n this._myLastValidFlatRight = right.vec3_removeComponentAlongAxis(direction3DUp, this._myLastValidFlatRight);\r\n this._myLastValidFlatRight.vec3_normalize(this._myLastValidFlatRight);\r\n }\r\n }\r\n\r\n // Compute direction 3D\r\n outDirection3D = right.vec3_scale(direction2D[0], rightScaled).vec3_add(forward.vec3_scale(direction2D[1], forwardScaled), outDirection3D);\r\n\r\n if (direction3DUp != null && !this._myFlyingForward && !this._myFlyingRight) {\r\n outDirection3D = outDirection3D.vec3_removeComponentAlongAxis(direction3DUp, outDirection3D);\r\n }\r\n\r\n outDirection3D.vec3_normalize(outDirection3D);\r\n }\r\n\r\n this._myLastConvertRotationQuat.quat_copy(conversionRotationQuat);\r\n this._myLastConvertRotationQuatValid = true;\r\n\r\n return outDirection3D;\r\n };\r\n}();", "import { EasingFunction } from \"../../../cauldron/utils/math_utils.js\";\r\n\r\nexport type RoundingFunction = (numberToRound: number, fromNumber: number, toNumber: number) => number;\r\n\r\n// You can just put fromNumber if u want a number that doesn't actually change -> new NumberOverFactor(0)\r\nexport class NumberOverFactor {\r\n\r\n private _myFromNumber: number;\r\n private _myToNumber: number;\r\n\r\n private _myFromFactor: number;\r\n private _myToFactor: number;\r\n\r\n private _myEasingFunction: EasingFunction;\r\n\r\n private _myRoundingFunction: RoundingFunction | null; // Math.round/floor/ceil can be used\r\n\r\n constructor(fromNumber: number, toNumber: number = fromNumber, fromFactor: number = 0, toFactor: number = 0, easingFunction: EasingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n this._myFromNumber = fromNumber;\r\n this._myToNumber = toNumber;\r\n\r\n this._myFromFactor = fromFactor;\r\n this._myToFactor = toFactor;\r\n\r\n this._myEasingFunction = easingFunction;\r\n\r\n this._myRoundingFunction = roundingFunction;\r\n }\r\n\r\n get(factor: number): number {\r\n const interpolationFactor = this._myEasingFunction(Math.pp_mapToRange(factor, this._myFromFactor, this._myToFactor, 0, 1));\r\n let numberOverFactor = Math.pp_lerp(this._myFromNumber, this._myToNumber, interpolationFactor);\r\n\r\n if (this._myRoundingFunction != null) {\r\n numberOverFactor = this._myRoundingFunction(numberOverFactor, this._myFromNumber, this._myToNumber);\r\n }\r\n\r\n return numberOverFactor;\r\n }\r\n\r\n getAverage(factor: number): number {\r\n return this.get(factor);\r\n }\r\n\r\n getRange(factor: number): [number, number] {\r\n const numberOverFactor = this.get(factor);\r\n return [numberOverFactor, numberOverFactor];\r\n }\r\n\r\n getMax(factor: number): number {\r\n return this.get(factor);\r\n }\r\n\r\n getMin(factor: number): number {\r\n return this.get(factor);\r\n }\r\n\r\n isInside(number: number, factor: number): boolean {\r\n const numberOverFactor = this.get(factor);\r\n\r\n return numberOverFactor == number;\r\n }\r\n\r\n isInsideAngleRange(number: number, factor: number): boolean {\r\n return this.isInsideAngleRangeDegrees(number, factor);\r\n }\r\n\r\n isInsideAngleRangeDegrees(number: number, factor: number): boolean {\r\n const numberOverFactor = this.get(factor);\r\n\r\n const clampedNumber = Math.pp_angleClampDegrees(number);\r\n const clampedNumberOverFactor = Math.pp_angleClampDegrees(numberOverFactor);\r\n\r\n return clampedNumber == clampedNumberOverFactor;\r\n }\r\n\r\n isInsideAngleRangeRadians(number: number, factor: number): boolean {\r\n const numberOverFactor = this.get(factor);\r\n\r\n const clampedNumber = Math.pp_angleClampRadians(number);\r\n const clampedNumberOverFactor = Math.pp_angleClampRadians(numberOverFactor);\r\n\r\n return clampedNumber == clampedNumberOverFactor;\r\n }\r\n}\r\n\r\nexport class IntOverFactor extends NumberOverFactor {\r\n\r\n constructor(fromNumber: number, toNumber: number = fromNumber, fromFactor: number = 0, toFactor: number = 0, easingFunction: EasingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n if (roundingFunction == null) {\r\n roundingFunction = function (numberToRound: number, fromNumber: number, toNumber: number): number {\r\n let roundedNumber = null;\r\n\r\n const useFloor = fromNumber <= toNumber;\r\n if (useFloor) {\r\n roundedNumber = Math.floor(numberToRound);\r\n } else {\r\n roundedNumber = Math.ceil(numberToRound);\r\n }\r\n\r\n return roundedNumber;\r\n };\r\n }\r\n\r\n super(fromNumber, toNumber, fromFactor, toFactor, easingFunction, roundingFunction);\r\n }\r\n}\r\n\r\n// You can just put fromRange if u want a range that doesn't actually change -> new NumberOverFactor([1, 25])\r\nexport class NumberRangeOverFactor {\r\n\r\n private _myFromNumberOverFactor: NumberOverFactor;\r\n private _myToNumberOverFactor: NumberOverFactor;\r\n\r\n private _myRoundingFunction: RoundingFunction | null; // Math.round/floor/ceil can be used\r\n\r\n constructor(fromRange: [number, number], toRange: [number, number] = fromRange, fromFactor: number = 0, toFactor: number = 0, easingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n\r\n this._myFromNumberOverFactor = new NumberOverFactor(fromRange[0], toRange[0], fromFactor, toFactor, easingFunction, roundingFunction);\r\n this._myToNumberOverFactor = new NumberOverFactor(fromRange[1], toRange[1], fromFactor, toFactor, easingFunction, roundingFunction);\r\n\r\n this._myRoundingFunction = roundingFunction;\r\n }\r\n\r\n get(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n let randomNumberOverFactor = null;\r\n\r\n if (this._myRoundingFunction) {\r\n randomNumberOverFactor = Math.pp_randomInt(fromNumber, toNumber);\r\n } else {\r\n randomNumberOverFactor = Math.pp_random(fromNumber, toNumber);\r\n }\r\n\r\n return randomNumberOverFactor;\r\n }\r\n\r\n getAverage(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n let averageNumberOverFactor = (fromNumber + toNumber) / 2;\r\n if (this._myRoundingFunction) {\r\n averageNumberOverFactor = this._myRoundingFunction(averageNumberOverFactor, fromNumber, toNumber);\r\n }\r\n\r\n return averageNumberOverFactor;\r\n }\r\n\r\n getRange(factor: number): [number, number] {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return [fromNumber, toNumber];\r\n }\r\n\r\n getMax(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.max(fromNumber, toNumber);\r\n }\r\n\r\n getMin(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.min(fromNumber, toNumber);\r\n }\r\n\r\n isInside(number: number, factor: number): boolean {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n const min = Math.min(fromNumber, toNumber);\r\n const max = Math.max(fromNumber, toNumber);\r\n\r\n return number >= min && number <= max;\r\n }\r\n\r\n isInsideAngleRange(number: number, factor: number): boolean {\r\n return this.isInsideAngleRangeDegrees(number, factor);\r\n }\r\n\r\n isInsideAngleRangeDegrees(number: number, factor: number): boolean {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.pp_isInsideAngleRangeDegrees(number, fromNumber, toNumber);\r\n }\r\n\r\n isInsideAngleRangeRadians(number: number, factor: number): boolean {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.pp_isInsideAngleRangeRadians(number, fromNumber, toNumber);\r\n }\r\n}\r\n\r\nexport class IntRangeOverFactor extends NumberRangeOverFactor {\r\n\r\n constructor(fromRange: [number, number], toRange: [number, number] = fromRange, fromFactor: number = 0, toFactor: number = 0, easingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n if (roundingFunction == null) {\r\n roundingFunction = function (numberToRound: number, fromNumber: number, toNumber: number): number {\r\n let roundedNumber = null;\r\n\r\n const useFloor = fromNumber <= toNumber;\r\n if (useFloor) {\r\n roundedNumber = Math.floor(numberToRound);\r\n } else {\r\n roundedNumber = Math.ceil(numberToRound);\r\n }\r\n\r\n return roundedNumber;\r\n };\r\n }\r\n\r\n super(fromRange, toRange, fromFactor, toFactor, easingFunction, roundingFunction);\r\n }\r\n}", "import { Component, Emitter, PhysXComponent, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../cauldron/wl/utils/component_utils.js\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class GrabbableComponent extends Component {\r\n static TypeName = \"pp-grabbable\";\r\n static Properties = {\r\n _myThrowLinearVelocityMultiplier: Property.float(1),\r\n _myThrowAngularVelocityMultiplier: Property.float(1),\r\n _myKinematicValueOnRelease: Property.enum([\"True\", \"False\", \"Own\"], \"False\"),\r\n _myParentOnRelease: Property.enum([\"Scene\", \"Own\"], \"Own\")\r\n };\r\n\r\n init() {\r\n this._myGrabbed = false;\r\n\r\n this._myGrabber = null;\r\n\r\n this._myOldParent = null;\r\n this._myPhysX = null;\r\n this._myOldKinematicValue = null;\r\n\r\n this._myGrabEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n this._myThrowEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n this._myReleaseEmitter = new Emitter(); // Signature: listener(grabber, grabbable, isThrow)\r\n }\r\n\r\n start() {\r\n this._myOldParent = this.object.pp_getParent();\r\n this._myPhysX = this.object.pp_getComponent(PhysXComponent);\r\n }\r\n\r\n onDeactivate() {\r\n this.release();\r\n }\r\n\r\n grab(grabber) {\r\n if (!this.isGrabbed()) {\r\n this._myOldKinematicValue = this._myPhysX.kinematic;\r\n }\r\n\r\n this.release();\r\n\r\n this._myPhysX.kinematic = true;\r\n\r\n this._myOldParent = this.object.pp_getParent();\r\n this.object.pp_setParent(grabber);\r\n\r\n this._myGrabbed = true;\r\n\r\n this._myGrabEmitter.notify(grabber, this);\r\n }\r\n\r\n throw(linearVelocity, angularVelocity) {\r\n if (this._myGrabbed) {\r\n let grabber = this._myGrabber;\r\n\r\n this._release();\r\n\r\n // #TODO For now kinematic is not updated instantly, add the if as soon as it is\r\n //if (!this._myPhysX.kinematic) {\r\n this._myPhysX.linearVelocity = linearVelocity.vec3_scale(this._myThrowLinearVelocityMultiplier);\r\n this._myPhysX.angularVelocity = angularVelocity.vec3_scale(this._myThrowAngularVelocityMultiplier);\r\n //}\r\n\r\n this._myThrowEmitter.notify(grabber, this);\r\n this._myReleaseEmitter.notify(grabber, this, true);\r\n }\r\n }\r\n\r\n release() {\r\n if (this._myGrabbed) {\r\n let grabber = this._myGrabber;\r\n\r\n this._release();\r\n\r\n this._myReleaseEmitter.notify(grabber, this, false);\r\n }\r\n }\r\n\r\n getLinearVelocity() {\r\n return this._myPhysX.linearVelocity.vec3_clone();\r\n }\r\n\r\n getAngularVelocity() {\r\n return this.getAngularVelocityDegrees();\r\n }\r\n\r\n getAngularVelocityDegrees() {\r\n let angularVelocityDegrees = vec3_create();\r\n\r\n this._myPhysX.angularVelocity.vec3_toDegrees(angularVelocityDegrees);\r\n\r\n return angularVelocityDegrees;\r\n }\r\n\r\n getAngularVelocityRadians() {\r\n return this._myPhysX.angularVelocity.vec3_clone();\r\n }\r\n\r\n isGrabbed() {\r\n return this._myGrabbed;\r\n }\r\n\r\n getGrabber() {\r\n return this._myGrabber;\r\n }\r\n\r\n registerGrabEventListener(id, listener) {\r\n this._myGrabEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterGrabEventListener(id) {\r\n this._myGrabEmitter.remove(id);\r\n }\r\n\r\n registerThrowEventListener(id, listener) {\r\n this._myThrowEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterThrowEventListener(id) {\r\n this._myThrowEmitter.remove(id);\r\n }\r\n\r\n registerReleaseEventListener(id, listener) {\r\n this._myReleaseEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterReleaseEventListener(id) {\r\n this._myReleaseEmitter.remove(id);\r\n }\r\n\r\n _release() {\r\n if (this._myParentOnRelease == 0) {\r\n this.object.pp_setParent(Globals.getSceneObjects(this.engine).myDynamics);\r\n } else {\r\n this.object.pp_setParent(this._myOldParent);\r\n }\r\n\r\n this._myGrabbed = false;\r\n this._myGrabber = null;\r\n\r\n if (this._myKinematicValueOnRelease == 0) {\r\n this._myPhysX.kinematic = true;\r\n } else if (this._myKinematicValueOnRelease == 1) {\r\n this._myPhysX.kinematic = false;\r\n } else if (this._myOldKinematicValue != null) {\r\n this._myPhysX.kinematic = this._myOldKinematicValue;\r\n }\r\n\r\n if (this._myPhysX.kinematic) {\r\n this._myPhysX.linearVelocity = vec3_create();\r\n this._myPhysX.angularVelocity = vec3_create();\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n\r\n pp_clonePostProcess(clonedComponent) {\r\n clonedComponent.start();\r\n }\r\n}", "import { Component, Emitter, PhysXComponent, Property } from \"@wonderlandengine/api\";\r\nimport { PhysicsCollisionCollector } from \"../../cauldron/physics/physics_collision_collector.js\";\r\nimport { EasingFunction } from \"../../cauldron/utils/math_utils.js\";\r\nimport { HandednessIndex } from \"../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../input/cauldron/input_utils.js\";\r\nimport { GamepadButtonEvent, GamepadButtonID } from \"../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { GrabbableComponent } from \"./grabbable_component.js\";\r\n\r\nexport class GrabberHandComponent extends Component {\r\n static TypeName = \"pp-grabber-hand\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myGrabButton: Property.enum([\"Select\", \"Squeeze\", \"Both\", \"Both Exclusive\"], \"Squeeze\"), // @\"Both Exclusive\" means u can use both buttons but you have to use the same button you grabbed with to throw\r\n _mySnapGrabbableOnOrigin: Property.bool(false),\r\n _myMaxNumberOfObjects: Property.int(1), // How many objects you can grab at the same time\r\n\r\n // ADVANCED SETTINGS\r\n _myThrowVelocitySource: Property.enum([\"Hand\", \"Grabbable\"], \"Hand\"),\r\n _myThrowLinearVelocityMultiplier: Property.float(1), // Multiply the overall throw speed, so slow throws will be multiplied too\r\n _myThrowMaxLinearSpeed: Property.float(15),\r\n _myThrowAngularVelocityMultiplier: Property.float(0.5),\r\n _myThrowMaxAngularSpeed: Property.float(1080), // @Degrees\r\n _myThrowLinearVelocityBoost: Property.float(1.75), // This boost is applied from 0% to 100% based on how fast you throw, so slow throws are not affected\r\n _myThrowLinearVelocityBoostMinSpeedThreshold: Property.float(0.6), // 0% boost is applied if plain throw speed is under this value\r\n _myThrowLinearVelocityBoostMaxSpeedThreshold: Property.float(2.5), // 100% boost is applied if plain throw speed is over this value\r\n };\r\n\r\n init() {\r\n this._myGrabbables = [];\r\n\r\n this._myGamepad = null;\r\n\r\n this._myActiveGrabButton = null;\r\n\r\n this._myLinearVelocityHistorySize = 5;\r\n this._myLinearVelocityHistorySpeedAverageSamplesFromStart = 1;\r\n this._myLinearVelocityHistoryDirectionAverageSamplesFromStart = 3;\r\n this._myLinearVelocityHistoryDirectionAverageSkipFromStart = 0;\r\n\r\n this._myHandLinearVelocityHistory = new Array(this._myLinearVelocityHistorySize);\r\n this._myHandLinearVelocityHistory.fill(vec3_create());\r\n\r\n this._myAngularVelocityHistorySize = 1;\r\n this._myHandAngularVelocityHistory = new Array(this._myAngularVelocityHistorySize);\r\n this._myHandAngularVelocityHistory.fill(vec3_create());\r\n\r\n this._myThrowMaxAngularSpeedRadians = Math.pp_toRadians(this._myThrowMaxAngularSpeed);\r\n\r\n this._myGrabEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n this._myThrowEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n\r\n this._myDebugEnabled = false;\r\n }\r\n\r\n start() {\r\n if (this._myHandedness == HandednessIndex.LEFT) {\r\n this._myGamepad = Globals.getLeftGamepad(this.engine);\r\n } else {\r\n this._myGamepad = Globals.getRightGamepad(this.engine);\r\n }\r\n\r\n this._myPhysX = this.object.pp_getComponent(PhysXComponent);\r\n this._myCollisionsCollector = new PhysicsCollisionCollector(this._myPhysX, true);\r\n }\r\n\r\n update(dt) {\r\n this._myCollisionsCollector.update(dt);\r\n\r\n if (this._myGrabbables.length > 0) {\r\n this._updateLinearVelocityHistory();\r\n this._updateAngularVelocityHistory();\r\n }\r\n }\r\n\r\n grab(grabButton = null) {\r\n this._grab(grabButton);\r\n }\r\n\r\n throw(throwButton = null) {\r\n this._throw(throwButton);\r\n }\r\n\r\n getGamepad() {\r\n return this._myGamepad;\r\n }\r\n\r\n getHandedness() {\r\n return InputUtils.getHandednessByIndex(this._myHandedness);\r\n }\r\n\r\n registerGrabEventListener(id, listener) {\r\n this._myGrabEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterGrabEventListener(id) {\r\n this._myGrabEmitter.remove(id);\r\n }\r\n\r\n registerThrowEventListener(id, listener) {\r\n this._myThrowEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterThrowEventListener(id) {\r\n this._myThrowEmitter.remove(id);\r\n }\r\n\r\n onActivate() {\r\n if (this._myGamepad != null) {\r\n if (this._myGrabButton == 0) {\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SELECT));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SELECT));\r\n } else if (this._myGrabButton == 1) {\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SQUEEZE));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SQUEEZE));\r\n } else {\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SQUEEZE));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SQUEEZE));\r\n\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SELECT));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SELECT));\r\n }\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n this.throw();\r\n\r\n if (this._myGamepad != null) {\r\n if (this._myGrabButton == 0) {\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this);\r\n } else if (this._myGrabButton == 1) {\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this);\r\n } else {\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this);\r\n\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this);\r\n }\r\n }\r\n }\r\n\r\n _grab(grabButton) {\r\n if (this._myGrabbables.length >= this._myMaxNumberOfObjects) {\r\n return;\r\n }\r\n\r\n if (this._myGrabButton == 2 || this._myActiveGrabButton == null || this._myActiveGrabButton == grabButton || grabButton == null) {\r\n let grabbablesToGrab = [];\r\n\r\n let collisions = this._myCollisionsCollector.getCollisions();\r\n for (let i = 0; i < collisions.length; i++) {\r\n let grabbable = collisions[i].pp_getComponent(GrabbableComponent);\r\n if (grabbable && grabbable.active) {\r\n grabbablesToGrab.push(grabbable);\r\n }\r\n }\r\n\r\n let grabberPosition = this.object.pp_getPosition();\r\n grabbablesToGrab.sort(function (first, second) {\r\n let firstPosition = first.object.pp_getPosition();\r\n let secondPosition = second.object.pp_getPosition();\r\n\r\n let firstDistance = firstPosition.vec3_distance(grabberPosition);\r\n let secondDistance = secondPosition.vec3_distance(grabberPosition);\r\n\r\n return Math.pp_sign(firstDistance - secondDistance, 0);\r\n });\r\n\r\n for (let grabbableToGrab of grabbablesToGrab) {\r\n if (!this._isAlreadyGrabbed(grabbableToGrab)) {\r\n let grabbableData = new _GrabberHandComponentGrabbableData(grabbableToGrab, this._myThrowVelocitySource == 1, this._myLinearVelocityHistorySize, this._myAngularVelocityHistorySize);\r\n this._myGrabbables.push(grabbableData);\r\n grabbableToGrab.grab(this.object);\r\n grabbableToGrab.registerReleaseEventListener(this, this._onRelease.bind(this));\r\n\r\n if (this._mySnapGrabbableOnOrigin) {\r\n grabbableToGrab.object.pp_resetPositionLocal();\r\n }\r\n\r\n this._myGrabEmitter.notify(this, grabbableToGrab);\r\n }\r\n\r\n if (this._myGrabbables.length >= this._myMaxNumberOfObjects) {\r\n break;\r\n }\r\n }\r\n\r\n if (this._myGrabbables.length > 0) {\r\n if (this._myActiveGrabButton == null) {\r\n this._myActiveGrabButton = grabButton;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _throw(throwButton) {\r\n if (this._myGrabButton == 2 || this._myActiveGrabButton == null || this._myActiveGrabButton == throwButton || throwButton == null) {\r\n if (this._myGrabbables.length > 0) {\r\n let linearVelocity = null;\r\n let angularVelocity = null;\r\n\r\n if (this._myThrowVelocitySource == 0) {\r\n linearVelocity = this._computeReleaseLinearVelocity(this._myHandLinearVelocityHistory);\r\n angularVelocity = this._computeReleaseAngularVelocity(this._myHandAngularVelocityHistory);\r\n }\r\n\r\n for (let grabbableData of this._myGrabbables) {\r\n let grabbable = grabbableData.getGrabbable();\r\n\r\n grabbable.unregisterReleaseEventListener(this);\r\n\r\n if (this._myThrowVelocitySource == 1) {\r\n linearVelocity = this._computeReleaseLinearVelocity(grabbableData.getLinearVelocityHistory());\r\n angularVelocity = this._computeReleaseAngularVelocity(grabbableData.getAngularVelocityHistory());\r\n }\r\n\r\n grabbable.throw(linearVelocity, angularVelocity);\r\n\r\n this._myThrowEmitter.notify(this, grabbable);\r\n }\r\n\r\n this._myGrabbables = [];\r\n }\r\n\r\n this._myActiveGrabButton = null;\r\n }\r\n }\r\n\r\n _onRelease(grabber, grabbable) {\r\n grabbable.unregisterReleaseEventListener(this);\r\n this._myGrabbables.pp_remove(element => element.getGrabbable() == grabbable);\r\n\r\n if (this._myGrabbables.length <= 0) {\r\n this._myActiveGrabButton = null;\r\n }\r\n }\r\n\r\n _updateLinearVelocityHistory() {\r\n let handPose = this._myGamepad.getHandPose();\r\n this._myHandLinearVelocityHistory.unshift(handPose.getLinearVelocity());\r\n this._myHandLinearVelocityHistory.pop();\r\n\r\n for (let grabbable of this._myGrabbables) {\r\n grabbable.updateLinearVelocityHistory();\r\n }\r\n }\r\n\r\n _updateAngularVelocityHistory() {\r\n let handPose = this._myGamepad.getHandPose();\r\n this._myHandAngularVelocityHistory.unshift(handPose.getAngularVelocityRadians());\r\n this._myHandAngularVelocityHistory.pop();\r\n\r\n for (let grabbable of this._myGrabbables) {\r\n grabbable.updateAngularVelocityHistory();\r\n }\r\n }\r\n\r\n _computeReleaseLinearVelocity(linearVelocityHistory) {\r\n // Speed\r\n let speed = linearVelocityHistory[0].vec3_length();\r\n for (let i = 1; i < this._myLinearVelocityHistorySpeedAverageSamplesFromStart; i++) {\r\n speed += linearVelocityHistory[i].vec3_length();\r\n }\r\n speed /= this._myLinearVelocityHistorySpeedAverageSamplesFromStart;\r\n\r\n // This way I give an increasing and smooth boost to the throw so that when u want to perform a weak throw, the value is not changed, but if u put more speed\r\n // it will be boosted to make it easier and still feel good and natural (value does not increase suddenly)\r\n let speedEaseMultiplier = Math.pp_mapToRange(speed, this._myThrowLinearVelocityBoostMinSpeedThreshold, this._myThrowLinearVelocityBoostMaxSpeedThreshold, 0, 1);\r\n speedEaseMultiplier = EasingFunction.easeIn(speedEaseMultiplier);\r\n\r\n // Add the boost to the speed\r\n let extraSpeed = speed * (speedEaseMultiplier * this._myThrowLinearVelocityBoost);\r\n speed += extraSpeed;\r\n speed *= this._myThrowLinearVelocityMultiplier;\r\n speed = Math.pp_clamp(speed, 0, this._myThrowMaxLinearSpeed);\r\n\r\n if (this._myDebugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n this._debugDirectionLines(linearVelocityHistory);\r\n }\r\n\r\n // Direction\r\n let directionCurrentWeight = this._myLinearVelocityHistoryDirectionAverageSamplesFromStart;\r\n let lastDirectionIndex = this._myLinearVelocityHistoryDirectionAverageSkipFromStart + this._myLinearVelocityHistoryDirectionAverageSamplesFromStart;\r\n let direction = vec3_create();\r\n for (let i = this._myLinearVelocityHistoryDirectionAverageSkipFromStart; i < lastDirectionIndex; i++) {\r\n let currentDirection = linearVelocityHistory[i];\r\n currentDirection.vec3_scale(directionCurrentWeight, currentDirection);\r\n direction.vec3_add(currentDirection, direction);\r\n\r\n directionCurrentWeight--;\r\n }\r\n direction.vec3_normalize(direction);\r\n\r\n direction.vec3_scale(speed, direction);\r\n\r\n return direction;\r\n }\r\n\r\n _computeReleaseAngularVelocity(angularVelocityHistory) {\r\n let angularVelocity = angularVelocityHistory[0];\r\n\r\n // Speed\r\n let speed = angularVelocity.vec3_length();\r\n\r\n speed = Math.pp_clamp(speed * this._myThrowAngularVelocityMultiplier, 0, this._myThrowMaxAngularSpeedRadians);\r\n\r\n // Direction\r\n let direction = angularVelocity;\r\n direction.vec3_normalize(direction);\r\n\r\n direction.vec3_scale(speed, direction);\r\n\r\n return direction;\r\n }\r\n\r\n _debugDirectionLines(linearVelocityHistory) {\r\n for (let j = this._myLinearVelocityHistoryDirectionAverageSkipFromStart + this._myLinearVelocityHistoryDirectionAverageSamplesFromStart; j > this._myLinearVelocityHistoryDirectionAverageSkipFromStart; j--) {\r\n\r\n let directionCurrentWeight = j - this._myLinearVelocityHistoryDirectionAverageSkipFromStart;\r\n let lastDirectionIndex = j - this._myLinearVelocityHistoryDirectionAverageSkipFromStart;\r\n let direction = vec3_create();\r\n for (let i = this._myLinearVelocityHistoryDirectionAverageSkipFromStart; i < lastDirectionIndex; i++) {\r\n let currentDirection = linearVelocityHistory[i].pp_clone();\r\n currentDirection.vec3_scale(directionCurrentWeight, currentDirection);\r\n direction.vec3_add(currentDirection, direction);\r\n\r\n directionCurrentWeight--;\r\n }\r\n direction.vec3_normalize(direction);\r\n\r\n let color = 1 / j;\r\n\r\n Globals.getDebugVisualManager(this.engine).drawLine(5, this.object.pp_getPosition(), direction, 0.2, vec4_create(color, color, color, 1));\r\n }\r\n }\r\n\r\n _isAlreadyGrabbed(grabbable) {\r\n let found = this._myGrabbables.pp_find(element => element.getGrabbable() == grabbable);\r\n return found != null;\r\n }\r\n}\r\n\r\nclass _GrabberHandComponentGrabbableData {\r\n\r\n constructor(grabbable, useGrabbableAsVelocitySource, linearVelocityHistorySize, angularVelocityHistorySize) {\r\n this._myGrabbable = grabbable;\r\n this._myUseGrabbableAsVelocitySource = useGrabbableAsVelocitySource;\r\n\r\n if (this._myUseGrabbableAsVelocitySource) {\r\n this._myLinearVelocityHistory = new Array(linearVelocityHistorySize);\r\n this._myLinearVelocityHistory.fill(vec3_create());\r\n\r\n this._myAngularVelocityHistory = new Array(angularVelocityHistorySize);\r\n this._myAngularVelocityHistory.fill(vec3_create());\r\n }\r\n }\r\n\r\n getGrabbable() {\r\n return this._myGrabbable;\r\n }\r\n\r\n getLinearVelocityHistory() {\r\n return this._myLinearVelocityHistory;\r\n }\r\n\r\n getAngularVelocityHistory() {\r\n return this._myAngularVelocityHistory;\r\n }\r\n\r\n updateLinearVelocityHistory() {\r\n if (this._myUseGrabbableAsVelocitySource) {\r\n this._myLinearVelocityHistory.unshift(this._myGrabbable.getLinearVelocity());\r\n this._myLinearVelocityHistory.pop();\r\n }\r\n }\r\n\r\n updateAngularVelocityHistory() {\r\n if (this._myUseGrabbableAsVelocitySource) {\r\n this._myAngularVelocityHistory.unshift(this._myGrabbable.getAngularVelocityRadians());\r\n this._myAngularVelocityHistory.pop();\r\n }\r\n }\r\n\r\n onDestroy() {\r\n this._myCollisionsCollector.destroy();\r\n }\r\n}", "let _myDummyServer = null;\r\nlet _myUseDummyServerOnSDKMissing = false;\r\nlet _myUseDummyServerOnError = false;\r\n\r\nexport let CAError = {\r\n NONE: 0,\r\n CA_SDK_MISSING: 1,\r\n DUMMY_NOT_INITIALIZED: 2,\r\n GET_LEADERBOARD_FAILED: 3,\r\n SUBMIT_SCORE_FAILED: 4,\r\n GET_USER_FAILED: 5,\r\n USER_NOT_LOGGED_IN: 6,\r\n USER_HAS_NO_SCORE: 7\r\n};\r\n\r\nexport function setUseDummyServerOnSDKMissing(useDummyServer) {\r\n _myUseDummyServerOnSDKMissing = useDummyServer;\r\n}\r\n\r\nexport function setUseDummyServerOnError(useDummyServer) {\r\n _myUseDummyServerOnError = useDummyServer;\r\n}\r\n\r\nexport function setDummyServer(dummyServer) {\r\n _myDummyServer = dummyServer;\r\n}\r\n\r\nexport function isUseDummyServerOnSDKMissing() {\r\n return _myUseDummyServerOnSDKMissing;\r\n}\r\n\r\nexport function isUseDummyServerOnError() {\r\n return _myUseDummyServerOnError;\r\n}\r\n\r\nexport function getDummyServer() {\r\n return _myDummyServer;\r\n}\r\n\r\nexport function isSDKAvailable() {\r\n return window.heyVR != null;\r\n}\r\n\r\nexport function getSDK() {\r\n return window.heyVR;\r\n}\r\n\r\nexport function getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback = null, onErrorCallback = null, useDummyServerOverride = null) {\r\n if (CAUtils.isSDKAvailable()) {\r\n try {\r\n _getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount).then(function (result) {\r\n if (result.leaderboard != null) {\r\n if (!aroundPlayer) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback(result.leaderboard);\r\n }\r\n } else {\r\n let userLeaderboard = result.leaderboard;\r\n CAUtils.getUser(\r\n function (user) {\r\n let userName = user.displayName;\r\n let userValid = false;\r\n for (let userLeaderboardEntry of userLeaderboard) {\r\n if (userLeaderboardEntry.displayName == userName) {\r\n userValid = true;\r\n break;\r\n }\r\n }\r\n if (userValid) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback(userLeaderboard);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.USER_HAS_NO_SCORE);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Searching for around player but the user has not submitted a score yet\";\r\n error.type = CAError.USER_HAS_NO_SCORE;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n },\r\n function (error, result) {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, error.type);\r\n } else if (onErrorCallback != null) {\r\n onErrorCallback(error, result);\r\n }\r\n },\r\n false);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.GET_LEADERBOARD_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get leaderboard failed\";\r\n error.type = CAError.GET_LEADERBOARD_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n }\r\n }).catch(function (result) {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.GET_LEADERBOARD_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get leaderboard failed\";\r\n error.type = CAError.GET_LEADERBOARD_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n });\r\n } catch (error) {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.GET_LEADERBOARD_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get leaderboard failed\";\r\n error.type = CAError.GET_LEADERBOARD_FAILED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnSDKMissing && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.CA_SDK_MISSING);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Construct Arcade SDK missing\";\r\n error.type = CAError.CA_SDK_MISSING;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (_myDummyServer) {\r\n _myDummyServer.getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, caError);\r\n } else {\r\n if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Dummy server not initialized\";\r\n error.type = CAError.DUMMY_NOT_INITIALIZED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function submitScore(leaderboardID, scoreToSubmit, onDoneCallback = null, onErrorCallback = null, useDummyServerOverride = null) {\r\n if (CAUtils.isSDKAvailable()) {\r\n try {\r\n _submitScore(leaderboardID, scoreToSubmit).then(function (result) {\r\n if (result.scoreSubmitted) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback();\r\n }\r\n } else if (result.scoreSubmitted != null) {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.USER_NOT_LOGGED_IN);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"The score can't be submitted because the user is not logged in\";\r\n error.type = CAError.USER_NOT_LOGGED_IN;\r\n onErrorCallback(error, result);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.SUBMIT_SCORE_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Submit score failed\";\r\n error.type = CAError.SUBMIT_SCORE_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n }\r\n }).catch(function (result) {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.SUBMIT_SCORE_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Submit score failed\";\r\n error.type = CAError.SUBMIT_SCORE_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n });\r\n } catch (error) {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.SUBMIT_SCORE_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Submit score failed\";\r\n error.type = CAError.SUBMIT_SCORE_FAILED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnSDKMissing && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.CA_SDK_MISSING);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Construct Arcade SDK missing\";\r\n error.type = CAError.CA_SDK_MISSING;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (_myDummyServer) {\r\n _myDummyServer.submitScore(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, caError);\r\n } else {\r\n if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Dummy server not initialized\";\r\n error.type = CAError.DUMMY_NOT_INITIALIZED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function getUser(onDoneCallback = null, onErrorCallback = null, useDummyServerOverride = null) {\r\n if (CAUtils.isSDKAvailable()) {\r\n try {\r\n _getUser().then(function (result) {\r\n if (result.user != null && result.user.displayName != null) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback(result.user);\r\n }\r\n } else if (result.user != null) {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.USER_NOT_LOGGED_IN);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"User not logged in\";\r\n error.type = CAError.USER_NOT_LOGGED_IN;\r\n onErrorCallback(error, result);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.GET_USER_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get user failed\";\r\n error.type = CAError.GET_USER_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n }\r\n }).catch(function (result) {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.GET_USER_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get user failed\";\r\n error.type = CAError.GET_USER_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n });\r\n } catch (error) {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.GET_USER_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get user failed\";\r\n error.type = CAError.GET_USER_FAILED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnSDKMissing && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.CA_SDK_MISSING);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Construct Arcade SDK missing\";\r\n error.type = CAError.CA_SDK_MISSING;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function getUserDummy(onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (_myDummyServer) {\r\n _myDummyServer.getUser(onDoneCallback, onErrorCallback, caError);\r\n } else {\r\n if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Dummy server not initialized\";\r\n error.type = CAError.DUMMY_NOT_INITIALIZED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport let CAUtils = {\r\n setUseDummyServerOnSDKMissing,\r\n setUseDummyServerOnError,\r\n setDummyServer,\r\n isUseDummyServerOnSDKMissing,\r\n isUseDummyServerOnError,\r\n getDummyServer,\r\n isSDKAvailable,\r\n getSDK,\r\n getLeaderboard,\r\n getLeaderboardDummy,\r\n submitScore,\r\n submitScoreDummy,\r\n getUser,\r\n getUserDummy\r\n};\r\n\r\n\r\n\r\n\r\nfunction _getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount) {\r\n let heyVR = CAUtils.getSDK();\r\n\r\n if (aroundPlayer) {\r\n return heyVR.leaderboard.getMy(leaderboardID, scoresAmount).then(function (result) {\r\n let adjustedLeaderboard = [];\r\n for (let leaderboardEntry of result) {\r\n adjustedLeaderboard.push({ rank: leaderboardEntry.rank - 1, displayName: leaderboardEntry.user, score: leaderboardEntry.score });\r\n }\r\n return { leaderboard: adjustedLeaderboard };\r\n }).catch(function (error) {\r\n if (error != null && error.status != null && error.status.debug == \"err_unauthenticated\") {\r\n return { leaderboard: [] };\r\n } else {\r\n return { leaderboard: null };\r\n }\r\n });\r\n } else {\r\n return heyVR.leaderboard.get(leaderboardID, scoresAmount).then(function (result) {\r\n let adjustedLeaderboard = [];\r\n for (let leaderboardEntry of result) {\r\n adjustedLeaderboard.push({ rank: leaderboardEntry.rank - 1, displayName: leaderboardEntry.user, score: leaderboardEntry.score });\r\n }\r\n return { leaderboard: adjustedLeaderboard };\r\n }).catch(function () {\r\n return { leaderboard: null };\r\n });\r\n }\r\n}\r\n\r\nfunction _submitScore(leaderboardID, scoreToSubmit) {\r\n let heyVR = CAUtils.getSDK();\r\n return heyVR.leaderboard.postScore(leaderboardID, scoreToSubmit).then(function () {\r\n return { scoreSubmitted: true };\r\n }).catch(function (error) {\r\n if (error != null && error.status != null && error.status.debug == \"err_unauthenticated\") {\r\n return { scoreSubmitted: false };\r\n } else {\r\n return { scoreSubmitted: null };\r\n }\r\n });\r\n}\r\n\r\nfunction _getUser() {\r\n let heyVR = CAUtils.getSDK();\r\n return heyVR.user.getName().then(result => {\r\n return { user: { displayName: result } };\r\n }).catch(function (error) {\r\n if (error != null && error.status != null && error.status.debug == \"err_unauthenticated\") {\r\n return { user: { displayName: null } };\r\n } else {\r\n return { user: null };\r\n }\r\n });\r\n}", "import { CAError } from \"./ca_utils.js\";\r\n\r\nexport class CADummyServer {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n let leaderboard = null;\r\n\r\n if (caError != CAError.CA_SDK_MISSING) {\r\n if (aroundPlayer && (caError == CAError.USER_NOT_LOGGED_IN || caError == CAError.USER_HAS_NO_SCORE)) {\r\n leaderboard = [\r\n { rank: 0, displayName: \"Sign In\", score: 0 },\r\n { rank: 1, displayName: \"And\", score: 0 },\r\n { rank: 2, displayName: \"Play\", score: 0 },\r\n { rank: 3, displayName: \"On\", score: 0 },\r\n { rank: 4, displayName: \"HeyVR\", score: 0 },\r\n { rank: 5, displayName: \"To\", score: 0 },\r\n { rank: 6, displayName: \"Submit\", score: 0 },\r\n { rank: 7, displayName: \"Your\", score: 0 },\r\n { rank: 8, displayName: \"Own\", score: 0 },\r\n { rank: 9, displayName: \"Score\", score: 0 }\r\n ];\r\n } else {\r\n leaderboard = [\r\n { rank: 0, displayName: \"An\", score: 0 },\r\n { rank: 1, displayName: \"Error\", score: 0 },\r\n { rank: 2, displayName: \"Has\", score: 0 },\r\n { rank: 3, displayName: \"Occurred\", score: 0 },\r\n { rank: 4, displayName: \"While\", score: 0 },\r\n { rank: 5, displayName: \"Trying\", score: 0 },\r\n { rank: 6, displayName: \"To\", score: 0 },\r\n { rank: 7, displayName: \"Retrieve\", score: 0 },\r\n { rank: 8, displayName: \"The\", score: 0 },\r\n { rank: 9, displayName: \"Leaderboard\", score: 0 }\r\n ];\r\n }\r\n } else {\r\n if (aroundPlayer) {\r\n leaderboard = [\r\n { rank: 0, displayName: \"Sign In\", score: 0 },\r\n { rank: 1, displayName: \"And\", score: 0 },\r\n { rank: 2, displayName: \"Play\", score: 0 },\r\n { rank: 3, displayName: \"On\", score: 0 },\r\n { rank: 4, displayName: \"HeyVR\", score: 0 },\r\n { rank: 5, displayName: \"To\", score: 0 },\r\n { rank: 6, displayName: \"Submit\", score: 0 },\r\n { rank: 7, displayName: \"Your\", score: 0 },\r\n { rank: 8, displayName: \"Own\", score: 0 },\r\n { rank: 9, displayName: \"Score\", score: 0 }\r\n ];\r\n } else {\r\n leaderboard = [\r\n { rank: 0, displayName: \"The\", score: 0 },\r\n { rank: 1, displayName: \"Top 10\", score: 0 },\r\n { rank: 2, displayName: \"Leaderboard\", score: 0 },\r\n { rank: 3, displayName: \"Is\", score: 0 },\r\n { rank: 4, displayName: \"Available\", score: 0 },\r\n { rank: 5, displayName: \"Only\", score: 0 },\r\n { rank: 5, displayName: \"When\", score: 0 },\r\n { rank: 7, displayName: \"Playing\", score: 0 },\r\n { rank: 8, displayName: \"On\", score: 0 },\r\n { rank: 9, displayName: \"HeyVR\", score: 0 },\r\n ];\r\n }\r\n }\r\n\r\n while (leaderboard.length > scoresAmount) {\r\n leaderboard.pop();\r\n }\r\n\r\n if (onDoneCallback != null) {\r\n onDoneCallback(leaderboard);\r\n }\r\n }\r\n\r\n submitScore(leaderboardID, scoreToSubmit, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback();\r\n }\r\n }\r\n\r\n getUser(onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n let user = {};\r\n user.displayName = \"Florian\";\r\n\r\n if (onDoneCallback != null) {\r\n onDoneCallback(user);\r\n }\r\n }\r\n}", "import { Component, Property, TextComponent } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../cauldron/wl/utils/component_utils.js\";\r\nimport { CADummyServer } from \"./ca_dummy_server.js\";\r\nimport { CAUtils } from \"./ca_utils.js\";\r\n\r\nexport class CADisplayLeaderboardComponent extends Component {\r\n static TypeName = \"pp-ca-display-leaderboard\";\r\n static Properties = {\r\n _myUsernamesTextObject: Property.object(),\r\n _myScoresTextObject: Property.object(),\r\n _myLeaderboardID: Property.string(\"\"),\r\n _myLocal: Property.bool(false),\r\n _myAscending: Property.bool(false),\r\n _myScoresAmount: Property.int(10),\r\n _myScoreFormat: Property.enum([\"Value\", \"Hours:Minutes:Seconds\", \"Minutes:Seconds\", \"Seconds\", \"Hours:Minutes\", \"Minutes\"], \"Value\"),\r\n _myPositionAndUsernameSeparator: Property.string(\" - \"),\r\n _myNumberOfLinesBetweenScores: Property.int(1),\r\n _myAddDefaultCADummyServer: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myUsernamesTextComponent = null;\r\n this._myScoresTextComponent = null;\r\n\r\n this._myStarted = false;\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n if (this._myAddDefaultCADummyServer) {\r\n CAUtils.setDummyServer(new CADummyServer());\r\n CAUtils.setUseDummyServerOnSDKMissing(true);\r\n CAUtils.setUseDummyServerOnError(true);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (!this._myStarted) {\r\n this._myStarted = true;\r\n\r\n if (this._myUsernamesTextObject != null) {\r\n this._myUsernamesTextComponent = this._myUsernamesTextObject.pp_getComponent(TextComponent);\r\n }\r\n\r\n if (this._myScoresTextObject != null) {\r\n this._myScoresTextComponent = this._myScoresTextObject.pp_getComponent(TextComponent);\r\n }\r\n\r\n this.updateLeaderboard();\r\n }\r\n }\r\n\r\n updateLeaderboard() {\r\n CAUtils.getLeaderboard(this._myLeaderboardID, this._myAscending, this._myLocal, this._myScoresAmount, this._onLeaderboardRetrieved.bind(this));\r\n }\r\n\r\n _onLeaderboardRetrieved(leaderboard) {\r\n if (this._myDestroyed) return;\r\n\r\n let namesText = \"\";\r\n let scoresText = \"\";\r\n\r\n let maxRankDigit = 0;\r\n for (let value of leaderboard) {\r\n let rank = value.rank + 1;\r\n if (rank.toFixed(0).length > maxRankDigit) {\r\n maxRankDigit = rank.toFixed(0).length;\r\n }\r\n }\r\n\r\n for (let value of leaderboard) {\r\n let rank = value.rank + 1;\r\n let fixedRank = rank.toFixed(0);\r\n while (fixedRank.length < maxRankDigit) {\r\n fixedRank = \"0\".concat(fixedRank);\r\n }\r\n\r\n let newlines = \"\\n\";\r\n for (let i = 0; i < this._myNumberOfLinesBetweenScores; i++) {\r\n newlines = newlines + \"\\n\";\r\n }\r\n\r\n namesText = namesText.concat(fixedRank, this._myPositionAndUsernameSeparator, value.displayName, newlines);\r\n\r\n let convertedScore = this._formatScore(value.score);\r\n scoresText = scoresText.concat(convertedScore, newlines);\r\n }\r\n\r\n if (this._myUsernamesTextComponent != null) {\r\n this._myUsernamesTextComponent.text = namesText;\r\n }\r\n\r\n if (this._myScoresTextComponent != null) {\r\n this._myScoresTextComponent.text = scoresText;\r\n }\r\n }\r\n\r\n _formatScore(score) {\r\n let convertedScore = score.toString();\r\n\r\n if (this._myScoreFormat == 1) {\r\n convertedScore = this._formatTime(score, true, true, true);\r\n } else if (this._myScoreFormat == 2) {\r\n convertedScore = this._formatTime(score, false, true, true);\r\n } else if (this._myScoreFormat == 3) {\r\n convertedScore = this._formatTime(score, false, false, true);\r\n } else if (this._myScoreFormat == 4) {\r\n convertedScore = this._formatTime(score, true, true, false);\r\n } else if (this._myScoreFormat == 5) {\r\n convertedScore = this._formatTime(score, false, true, false);\r\n }\r\n\r\n return convertedScore;\r\n }\r\n\r\n _formatTime(score, displayHours, displayMinutes, displaySeconds) {\r\n let time = Math.floor(score / 1000);\r\n\r\n let hours = 0;\r\n if (displayHours) {\r\n hours = Math.floor(time / 3600);\r\n time -= hours * 3600;\r\n }\r\n\r\n let minutes = 0;\r\n if (displayMinutes) {\r\n minutes = Math.floor(time / 60);\r\n time -= minutes * 60;\r\n }\r\n\r\n let seconds = 0;\r\n if (displaySeconds) {\r\n seconds = Math.floor(time);\r\n }\r\n\r\n let convertedTime = \"\";\r\n\r\n if (displaySeconds) {\r\n convertedTime = (seconds.toFixed(0).length < 2 && (displayMinutes || displayHours)) ? \"0\".concat(seconds.toFixed(0)) : seconds.toFixed(0);\r\n }\r\n\r\n if (displayMinutes) {\r\n convertedTime = ((minutes.toFixed(0).length < 2 && (displaySeconds || displayHours)) ? \"0\".concat(minutes.toFixed(0)) : minutes.toFixed(0)) + (displaySeconds ? \":\" + convertedTime : \"\");\r\n }\r\n\r\n if (displayHours) {\r\n convertedTime = ((hours.toFixed(0).length < 2 && (displaySeconds || displayMinutes)) ? \"0\".concat(hours.toFixed(0)) : hours.toFixed(0)) + (displayMinutes ? \":\" + convertedTime : \"\");\r\n }\r\n\r\n return convertedTime;\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n\r\n onDestroy() {\r\n this._myDestroyed = true;\r\n }\r\n}", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckParams } from \"./collision_params.js\";\r\n\r\nexport function generate360TeleportParamsFromMovementParams(movementParams: Readonly, outTeleportParams = new CollisionCheckParams()): CollisionCheckParams {\r\n outTeleportParams.copy(movementParams);\r\n\r\n outTeleportParams.myHalfConeAngle = 180;\r\n outTeleportParams.myHalfConeSliceAmount = Math.round((outTeleportParams.myHalfConeAngle / movementParams.myHalfConeAngle) * movementParams.myHalfConeSliceAmount);\r\n\r\n outTeleportParams.myCheckHorizontalFixedForwardEnabled = true;\r\n outTeleportParams.myCheckHorizontalFixedForward = vec3_create(0, 0, 1);\r\n\r\n return outTeleportParams;\r\n}\r\n\r\nexport const CollisionCheckUtils = {\r\n generate360TeleportParamsFromMovementParams\r\n} as const;", "import { PhysicsLayerFlags } from \"../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { quat_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class CharacterColliderSetup {\r\n\r\n constructor() {\r\n this.myHeight = 0;\r\n\r\n this.myHorizontalCheckParams = new CharacterColliderHorizontalCheckParams();\r\n this.myVerticalCheckParams = new CharacterColliderVerticalCheckParams();\r\n\r\n this.myWallSlideParams = new CharacterColliderWallSlideParams();\r\n\r\n this.myGroundParams = new CharacterColliderSurfaceParams();\r\n this.myCeilingParams = new CharacterColliderSurfaceParams();\r\n\r\n this.mySplitMovementParams = new CharacterColliderSplitMovementParams();\r\n\r\n this.myAdditionalParams = new CharacterColliderAdditionalParams();\r\n\r\n this.myDebugParams = new CharacterColliderDebugParams();\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport let CharacterColliderHorizontalPositionVerticalCheckDirection = {\r\n UPWARD: 0, // Gives less issues with a ground based movement, but may also collide a bit more, resulting in less sliding\r\n DOWNWARD: 1, // Gives less issues with a ceiling based movement (unusual), but may also collide a bit more, resulting in less sliding and more stuck in front of a wall\r\n BOTH: 2 // Check both directions, more expensive (2x checks) and better prevent collisions, sliding more, but is more expensive and gives more issues \r\n\r\n // _\r\n // The issues means that a small step at the end of a slope, maybe due to 2 rectangles, one for the floor and the other for the slope like this -> / \r\n // can create a small step if the floor rectangle is a bit above the end of the slope, this will make the character get stuck thinking it's a wall\r\n // BOTH do a more \"aggressive\" vertical check that makes the character get less stuck in other situations, but can get stuck in this one\r\n // The better solution is to properly create the level, and if possible combine the 2 rectangles by having the floor a little below the end of the slope (like this -> /-)\r\n // The step that is created \"on the other side\" in fact can easily be ignored thanks to the myHorizontalCheckFeetDistanceToIgnore param\r\n // If the level is properly created the best solution should be UPWARD\r\n // and also myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision = false\r\n};\r\n\r\nexport class CharacterColliderHorizontalCheckParams {\r\n\r\n constructor() {\r\n this.myHorizontalCheckConeRadius = 0;\r\n this.myHorizontalCheckConeHalfAngle = 0;\r\n\r\n this.myHorizontalHeightCheckEnabled = false;\r\n\r\n this.myHorizontalCheckFeetDistanceToIgnore = 0;\r\n this.myHorizontalCheckHeadDistanceToIgnore = 0;\r\n // These distances can be used to make the character ignore small steps (like a stair step) so they can move on it\r\n // It also needs the surface pop out to be enabeld to then snap on the step\r\n\r\n this.myHorizontalCheckFixedForwardEnabled = false; // This is basically only useful if the cone angle is 180 degrees\r\n this.myHorizontalCheckFixedForward = vec3_create();\r\n\r\n this.myHorizontalMovementCheckEnabled = false;\r\n\r\n this.myHorizontalMovementCheckRadialSteps = 0;\r\n\r\n this.myHorizontalMovementCheckSplitMovementEnabled = false;\r\n this.myHorizontalMovementCheckSplitMovementMaxSteps = null;\r\n this.myHorizontalMovementCheckSplitMovementMaxStepLength = null;\r\n this.myHorizontalMovementCheckSplitMovementMinStepLength = null;\r\n\r\n this.myHorizontalMovementCheckGetBetterReferenceHit = false;\r\n // If the horizontal movement finds a hit it stops looking, but could end up having a bad reference collision hit\r\n // This makes it so it will check a better hit to use later for the slide\r\n\r\n this.myHorizontalMovementHorizontalRadialCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalStraightCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = false;\r\n\r\n this.myHorizontalMovementHeightCheckSteps = 0;\r\n this.myHorizontalMovementHeightHorizontalCheckEnabled = false;\r\n this.myHorizontalMovementHeightVerticalCheckEnabled = false;\r\n\r\n this.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled = false;\r\n\r\n this.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled = false;\r\n\r\n this.myHorizontalMovementVerticalStraightCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = false;\r\n\r\n this.myHorizontalPositionCheckEnabled = false;\r\n this.myHorizontalPositionCheckConeHalfSlices = 0;\r\n this.myHorizontalPositionHorizontalBorderCheckEnabled = false;\r\n this.myHorizontalPositionHorizontalRadialCheckEnabled = false;\r\n\r\n this.myHorizontalPositionHeightCheckSteps = 0;\r\n this.myHorizontalPositionHeightHorizontalCheckEnabled = false;\r\n this.myHorizontalPositionHeightVerticalCheckEnabled = false;\r\n\r\n this.myHorizontalPositionVerticalStraightCheckEnabled = false;\r\n this.myHorizontalPositionVerticalStraightCentralCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled = false;\r\n\r\n this.myHorizontalPositionVerticalCheckGetFarthestHit = false; // Not very useful but already implemented so\r\n\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = false;\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = false;\r\n // If the horizontal check does not hit the vertical hit will be restored\r\n // The fact that the horizontal does not hit could be due to the fact that it thinks that the collision can be ignored\r\n // so restoring the vertical hit can be a bit safer (since u are actually colliding) but also can lead to false positive\r\n\r\n this.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision = false; // true gives less issues, but may also collide a bit more, resulting in less sliding\r\n this.myHorizontalPositionVerticalCheckDirection = CharacterColliderHorizontalPositionVerticalCheckDirection.UPWARD;\r\n\r\n this.myHorizontalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHorizontalCheckObjectsToIgnore = [];\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderVerticalCheckParams {\r\n\r\n constructor() {\r\n this.myVerticalCheckCircumferenceRadius = 0;\r\n\r\n this.myVerticalCheckCircumferenceSlices = 0;\r\n this.myVerticalCheckCircumferenceCentralCheckEnabled = false;\r\n this.myVerticalCheckCircumferenceRadialSteps = 0;\r\n this.myVerticalCheckCircumferenceRotationPerRadialStep = 0;\r\n\r\n this.myVerticalCheckFixedForwardEnabled = false;\r\n this.myVerticalCheckFixedForward = vec3_create();\r\n\r\n this.myVerticalMovementCheckEnabled = false;\r\n this.myVerticalMovementCheckReductionEnabled = false;\r\n this.myVerticalMovementCheckPerformCheckOnBothSides = false;\r\n\r\n this.myVerticalPositionCheckEnabled = false;\r\n\r\n this.myVerticalCheckAllowHitsInsideCollisionIfOneValid = false;\r\n // If at least one vertical raycast is valid (no hit, outside collision) is it ok if the other checks are completely inside a collision\r\n // let you keep moving vertically if only partially inside a wall\r\n\r\n this.myVerticalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myVerticalCheckObjectsToIgnore = [];\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport let CharacterColliderSlideFlickerPreventionMode = {\r\n NONE: 0,\r\n USE_PREVIOUS_RESULTS: 1, // Allow some flicker before stabilizing but avoid stopping for a 1 frame flicker only (false positive), is also less expensive\r\n COLLISION_ANGLE_ABOVE_90_DEGREES: 2, // Prevents most flicker apart those on almost flat surface, can have some false positive, always check when sliding into opposite direction\r\n COLLISION_ANGLE_ABOVE_90_DEGREES_OR_MOVEMENT_ANGLE_ABOVE_85_DEGREES: 3, // Less flicker than COLLISION_ANGLE_ABOVE_90_DEGREES but more false positive, always check when sliding into opposite direction\r\n ALWAYS: 4 // Less flicker than COLLISION_ANGLE_ABOVE_90_DEGREES_OR_MOVEMENT_ANGLE_ABOVE_85_DEGREES but more false positive\r\n};\r\n\r\nexport class CharacterColliderWallSlideParams {\r\n\r\n constructor() {\r\n this.myWallSlideEnabled = false;\r\n\r\n this.myWallSlideMaxAttempts = 0;\r\n\r\n this.myCheckBothWallSlideDirections = false;\r\n // Expensive, 2 times the checks since it basically check again on the other slide direction\r\n // This can fix some edge cases in which u can get stuck instead of sliding\r\n // It basically require that u also add flicker prevention\r\n\r\n this.myWallSlideFlickerPreventionMode = CharacterColliderSlideFlickerPreventionMode.NONE;\r\n\r\n this.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = false;\r\n // This flag make it so the prevention is done only if it was already sliding\r\n // This can lead to a few frames of flicker if u go toward a corner directly, but allow the movement to be more fluid, avoiding getting stuck and false positive\r\n\r\n this.myWallSlideFlickerPreventionForceCheckCounter = 0;\r\n // If the collision think it needs to check for flicker, it will keep checking for the next X frames based on this value even if the condition are not met anymore\r\n // This help in catching the flicker when the direction is not changing every frame but every 2-3 for example\r\n // It's especially useful if combo-ed with CharacterColliderSlideFlickerPreventionMode.USE_PREVIOUS_RESULTS, making it a bit less fluid but also less flickering\r\n\r\n this.my90DegreesWallSlideAdjustDirectionSign = false;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderSurfaceParams {\r\n\r\n constructor() {\r\n this.mySurfaceSnapEnabled = false;\r\n this.mySurfaceSnapMaxDistance = 0;\r\n\r\n this.mySurfacePopOutEnabled = false;\r\n this.mySurfacePopOutMaxDistance = 0;\r\n\r\n this.mySurfaceAngleToIgnore = 0;\r\n\r\n this.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle = null;\r\n // Between this value and mySurfaceAngleToIgnore, use the perceived angle to see if u can actually ignore the surface\r\n // This basically means that on steep surface u could still go up by moving diagonally\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance = null;\r\n this.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance = null;\r\n // If the collision with the surface is above this max value, even if the surface angle is ignorable do not ignore it\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = null;\r\n // If the collision with the surface happens during the horizontal movement check, if the horizontal movement left (total movement to perform minus hit distance)\r\n // is above this value do not ignore it otherwise you would ignore a surface but are actually going too much inside it\r\n\r\n this.myCollectSurfaceInfo = false;\r\n\r\n this.myOnSurfaceMaxOutsideDistance = 0;\r\n this.myOnSurfaceMaxInsideDistance = 0;\r\n\r\n this.myBaseInsideCollisionCheckEnabled = false;\r\n this.myOnSurfaceIfBaseInsideCollision = false;\r\n\r\n this.myCollectSurfaceNormalMaxOutsideDistance = 0;\r\n this.myCollectSurfaceNormalMaxInsideDistance = 0;\r\n\r\n this.myCollectSurfaceDistanceOutsideDistance = 0;\r\n this.myCollectSurfaceDistanceInsideDistance = 0;\r\n\r\n this.myCollectSurfaceCollisionHitOutsideDistance = 0;\r\n this.myCollectSurfaceCollisionHitInsideDistance = 0;\r\n\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = false;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = false;\r\n // This make it so when a character moves horizontally on a slope it also add a vertical movement so that the movement is actually on the slope plane\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle = null;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle = null;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle = null;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle = null;\r\n // This can be used to limit the adjustment so that on steep slopes u can bounce off, or anyway don't add a huge vertical movement due to a very steep slope\r\n\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill = false;\r\n // This make it so when a character moves vertically on a slope (sort of sliding down the slope) it also add a horizontal movement so that the movement is actually on the slope plane\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle = null;\r\n // This can be used to make it so the movement (and therefore the slide) only happens above a certain angle, like u want to slide down only on steep surfaces\r\n\r\n this.myMovementMustStayOnSurface = false;\r\n this.myMovementMustStayOnSurfaceHitMaxAngle = null;\r\n this.myMovementMustStayOnIgnorableSurfaceAngleDownhill = false;\r\n this.myMovementMustStayOnSurfaceAngleDownhill = null;\r\n\r\n this.myTeleportMustBeOnSurface = false;\r\n this.myTeleportMustBeOnIgnorableSurfaceAngle = false;\r\n this.myTeleportMustBeOnSurfaceAngle = null;\r\n\r\n this.myCheckTransformMustBeOnSurface = false;\r\n this.myCheckTransformMustBeOnIgnorableSurfaceAngle = false;\r\n this.myCheckTransformMustBeOnSurfaceAngle = null;\r\n\r\n this.myRecollectSurfaceInfoOnSurfaceCheckFailed = false;\r\n // Instead of copying the previous surface info on fail, regather them\r\n\r\n this.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle = false;\r\n // If u start on a not ignorable perceived angle (above angle to ignore) u normally can't even try to move uphill, this will let you try and see if with that movement\r\n // you could end up in a ignorable perceived angle position\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderSplitMovementParams {\r\n\r\n constructor() {\r\n this.mySplitMovementEnabled = false;\r\n\r\n this.mySplitMovementMaxSteps = null;\r\n this.mySplitMovementMaxStepLength = null;\r\n this.mySplitMovementMinStepLength = null;\r\n\r\n this.mySplitMovementStopOnHorizontalMovementFailed = false;\r\n this.mySplitMovementStopOnVerticalMovementFailed = false;\r\n\r\n /*\r\n this will not be available until the bridge is removed with a new implementation that directly use the collider and results\r\n \r\n this.mySplitMovementStopOnCallback = null; // Signature: callback(paramsToBeDefined)\r\n */\r\n\r\n this.mySplitMovementStopReturnPreviousResults = false;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderAdditionalParams {\r\n\r\n constructor() {\r\n this.myPositionOffsetLocal = vec3_create();\r\n this.myRotationOffsetLocalQuat = quat_create();\r\n\r\n /*\r\n these will not be available until the bridge is removed with a new implementation that directly use the collider and results\r\n\r\n this.myExtraMovementCheckCallback = null; // Signature: callback(paramsToBeDefined)\r\n this.myExtraTeleportCheckCallback = null; // Signature: callback(paramsToBeDefined)\r\n this.myExtraCheckTransformCheckCallback = null; // Signature: callback(paramsToBeDefined)\r\n */\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderDebugParams {\r\n\r\n constructor() {\r\n this.myVisualDebugEnabled = false;\r\n\r\n this.myVisualDebugMovementEnabled = false;\r\n\r\n this.myVisualDebugHorizontalMovementCheckEnabled = false;\r\n this.myVisualDebugHorizontalPositionCheckEnabled = false;\r\n\r\n this.myVisualDebugVerticalMovementCheckEnabled = false;\r\n this.myVisualDebugVerticalPositionCheckEnabled = false;\r\n\r\n this.myVisualDebugSlideEnabled = false;\r\n\r\n this.myVisualDebugGroundInfoEnabled = false;\r\n this.myVisualDebugCeilingInfoEnabled = false;\r\n\r\n this.myVisualDebugResultsEnabled = false;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCharacterColliderSetup.prototype.copy = function copy(other) {\r\n this.myHeight = other.myHeight;\r\n\r\n this.myHorizontalCheckParams.copy(other.myHorizontalCheckParams);\r\n this.myVerticalCheckParams.copy(other.myVerticalCheckParams);\r\n\r\n this.myWallSlideParams.copy(other.myWallSlideParams);\r\n\r\n this.myGroundParams.copy(other.myGroundParams);\r\n this.myCeilingParams.copy(other.myCeilingParams);\r\n\r\n this.mySplitMovementParams.copy(other.mySplitMovementParams);\r\n\r\n this.myAdditionalParams.copy(other.myAdditionalParams);\r\n\r\n this.myDebugParams.copy(other.myDebugParams);\r\n};\r\n\r\nCharacterColliderHorizontalCheckParams.prototype.copy = function copy(other) {\r\n this.myHorizontalCheckConeRadius = other.myHorizontalCheckConeRadius;\r\n this.myHorizontalCheckConeHalfAngle = other.myHorizontalCheckConeHalfAngle;\r\n\r\n this.myHorizontalHeightCheckEnabled = other.myHorizontalHeightCheckEnabled;\r\n\r\n this.myHorizontalCheckFeetDistanceToIgnore = other.myHorizontalCheckFeetDistanceToIgnore;\r\n this.myHorizontalCheckHeadDistanceToIgnore = other.myHorizontalCheckHeadDistanceToIgnore;\r\n\r\n this.myHorizontalCheckFixedForwardEnabled = other.myHorizontalCheckFixedForwardEnabled;\r\n this.myHorizontalCheckFixedForward.vec3_copy(other.myHorizontalCheckFixedForward);\r\n\r\n this.myHorizontalMovementCheckEnabled = other.myHorizontalMovementCheckEnabled;\r\n\r\n this.myHorizontalMovementCheckRadialSteps = other.myHorizontalMovementCheckRadialSteps;\r\n\r\n this.myHorizontalMovementCheckSplitMovementEnabled = other.myHorizontalMovementCheckSplitMovementEnabled;\r\n this.myHorizontalMovementCheckSplitMovementMaxSteps = other.myHorizontalMovementCheckSplitMovementMaxSteps;\r\n this.myHorizontalMovementCheckSplitMovementMaxStepLength = other.myHorizontalMovementCheckSplitMovementMaxStepLength;\r\n this.myHorizontalMovementCheckSplitMovementMinStepLength = other.myHorizontalMovementCheckSplitMovementMinStepLength;\r\n\r\n this.myHorizontalMovementCheckGetBetterReferenceHit = other.myHorizontalMovementCheckGetBetterReferenceHit;\r\n\r\n this.myHorizontalMovementHorizontalRadialCheckEnabled = other.myHorizontalMovementHorizontalRadialCheckEnabled;\r\n this.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled = other.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled;\r\n this.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled = other.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled;\r\n this.myHorizontalMovementHorizontalStraightCheckEnabled = other.myHorizontalMovementHorizontalStraightCheckEnabled;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = other.myHorizontalMovementHorizontalStraightCentralCheckEnabled;\r\n\r\n this.myHorizontalMovementHeightCheckSteps = other.myHorizontalMovementHeightCheckSteps;\r\n this.myHorizontalMovementHeightVerticalCheckEnabled = other.myHorizontalMovementHeightVerticalCheckEnabled;\r\n this.myHorizontalMovementHeightHorizontalCheckEnabled = other.myHorizontalMovementHeightHorizontalCheckEnabled;\r\n\r\n this.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled = other.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled;\r\n this.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled = other.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled;\r\n\r\n this.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled;\r\n this.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled;\r\n this.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled;\r\n this.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled;\r\n\r\n this.myHorizontalMovementVerticalStraightCheckEnabled = other.myHorizontalMovementVerticalStraightCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = other.myHorizontalMovementVerticalStraightCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled;\r\n\r\n this.myHorizontalPositionCheckEnabled = other.myHorizontalPositionCheckEnabled;\r\n this.myHorizontalPositionCheckConeHalfSlices = other.myHorizontalPositionCheckConeHalfSlices;\r\n this.myHorizontalPositionHorizontalBorderCheckEnabled = other.myHorizontalPositionHorizontalBorderCheckEnabled;\r\n this.myHorizontalPositionHorizontalRadialCheckEnabled = other.myHorizontalPositionHorizontalRadialCheckEnabled;\r\n\r\n this.myHorizontalPositionHeightCheckSteps = other.myHorizontalPositionHeightCheckSteps;\r\n this.myHorizontalPositionHeightHorizontalCheckEnabled = other.myHorizontalPositionHeightHorizontalCheckEnabled;\r\n this.myHorizontalPositionHeightVerticalCheckEnabled = other.myHorizontalPositionHeightVerticalCheckEnabled;\r\n\r\n this.myHorizontalPositionVerticalStraightCheckEnabled = other.myHorizontalPositionVerticalStraightCheckEnabled;\r\n this.myHorizontalPositionVerticalStraightCentralCheckEnabled = other.myHorizontalPositionVerticalStraightCentralCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled = other.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled = other.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled;\r\n this.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled = other.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled;\r\n this.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled = other.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled = other.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled = other.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled;\r\n\r\n this.myHorizontalPositionVerticalCheckGetFarthestHit = other.myHorizontalPositionVerticalCheckGetFarthestHit;\r\n\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = other.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit;\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = other.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit;\r\n\r\n this.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision = other.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision;\r\n this.myHorizontalPositionVerticalCheckDirection = other.myHorizontalPositionVerticalCheckDirection;\r\n\r\n this.myHorizontalCheckBlockLayerFlags.setMask(other.myHorizontalCheckBlockLayerFlags.getMask());\r\n this.myHorizontalCheckObjectsToIgnore.pp_copy(other.myHorizontalCheckObjectsToIgnore);\r\n};\r\n\r\nCharacterColliderVerticalCheckParams.prototype.copy = function copy(other) {\r\n this.myVerticalCheckCircumferenceRadius = other.myVerticalCheckCircumferenceRadius;\r\n\r\n this.myVerticalCheckCircumferenceSlices = other.myVerticalCheckCircumferenceSlices;\r\n this.myVerticalCheckCircumferenceCentralCheckEnabled = other.myVerticalCheckCircumferenceCentralCheckEnabled;\r\n this.myVerticalCheckCircumferenceRadialSteps = other.myVerticalCheckCircumferenceRadialSteps;\r\n this.myVerticalCheckCircumferenceRotationPerRadialStep = other.myVerticalCheckCircumferenceRotationPerRadialStep;\r\n\r\n this.myVerticalCheckFixedForwardEnabled = other.myVerticalCheckFixedForwardEnabled;\r\n this.myVerticalCheckFixedForward.vec3_copy(other.myVerticalCheckFixedForward);\r\n\r\n this.myVerticalMovementCheckEnabled = other.myVerticalMovementCheckEnabled;\r\n this.myVerticalMovementCheckReductionEnabled = other.myVerticalMovementCheckReductionEnabled;\r\n this.myVerticalMovementCheckPerformCheckOnBothSides = other.myVerticalMovementCheckPerformCheckOnBothSides;\r\n\r\n this.myVerticalPositionCheckEnabled = other.myVerticalPositionCheckEnabled;\r\n\r\n this.myVerticalCheckAllowHitsInsideCollisionIfOneValid = other.myVerticalCheckAllowHitsInsideCollisionIfOneValid;\r\n\r\n this.myVerticalCheckBlockLayerFlags.setMask(other.myVerticalCheckBlockLayerFlags.getMask());\r\n this.myVerticalCheckObjectsToIgnore.pp_copy(other.myVerticalCheckObjectsToIgnore);\r\n};\r\n\r\nCharacterColliderWallSlideParams.prototype.copy = function copy(other) {\r\n this.myWallSlideEnabled = other.myWallSlideEnabled;\r\n\r\n this.myWallSlideMaxAttempts = other.myWallSlideMaxAttempts;\r\n\r\n this.myCheckBothWallSlideDirections = other.myCheckBothWallSlideDirections;\r\n\r\n this.myWallSlideFlickerPreventionMode = other.myWallSlideFlickerPreventionMode;\r\n\r\n this.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = other.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding;\r\n\r\n this.myWallSlideFlickerPreventionForceCheckCounter = other.myWallSlideFlickerPreventionForceCheckCounter;\r\n\r\n this.my90DegreesWallSlideAdjustDirectionSign = other.my90DegreesWallSlideAdjustDirectionSign;\r\n};\r\n\r\nCharacterColliderSurfaceParams.prototype.copy = function copy(other) {\r\n this.mySurfaceSnapEnabled = other.mySurfaceSnapEnabled;\r\n this.mySurfaceSnapMaxDistance = other.mySurfaceSnapMaxDistance;\r\n\r\n this.mySurfacePopOutEnabled = other.mySurfacePopOutEnabled;\r\n this.mySurfacePopOutMaxDistance = other.mySurfacePopOutMaxDistance;\r\n\r\n this.mySurfaceAngleToIgnore = other.mySurfaceAngleToIgnore;\r\n this.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle = other.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle;\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance = other.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance;\r\n this.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance = other.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance;\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = other.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n\r\n this.myCollectSurfaceInfo = other.myCollectSurfaceInfo;\r\n\r\n this.myOnSurfaceMaxOutsideDistance = other.myOnSurfaceMaxOutsideDistance;\r\n this.myOnSurfaceMaxInsideDistance = other.myOnSurfaceMaxInsideDistance;\r\n\r\n this.myBaseInsideCollisionCheckEnabled = other.myBaseInsideCollisionCheckEnabled;\r\n this.myOnSurfaceIfBaseInsideCollision = other.myOnSurfaceIfBaseInsideCollision;\r\n\r\n this.myCollectSurfaceNormalMaxOutsideDistance = other.myCollectSurfaceNormalMaxOutsideDistance;\r\n this.myCollectSurfaceNormalMaxInsideDistance = other.myCollectSurfaceNormalMaxInsideDistance;\r\n\r\n this.myCollectSurfaceDistanceOutsideDistance = other.myCollectSurfaceDistanceOutsideDistance;\r\n this.myCollectSurfaceDistanceInsideDistance = other.myCollectSurfaceDistanceInsideDistance;\r\n\r\n this.myCollectSurfaceCollisionHitOutsideDistance = other.myCollectSurfaceCollisionHitOutsideDistance;\r\n this.myCollectSurfaceCollisionHitInsideDistance = other.myCollectSurfaceCollisionHitInsideDistance;\r\n\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle;\r\n\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill = other.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill;\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle = other.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle;\r\n\r\n this.myMovementMustStayOnSurface = other.myMovementMustStayOnSurface;\r\n this.myMovementMustStayOnSurfaceHitMaxAngle = other.myMovementMustStayOnSurfaceHitMaxAngle;\r\n this.myMovementMustStayOnIgnorableSurfaceAngleDownhill = other.myMovementMustStayOnIgnorableSurfaceAngleDownhill;\r\n this.myMovementMustStayOnSurfaceAngleDownhill = other.myMovementMustStayOnSurfaceAngleDownhill;\r\n\r\n this.myTeleportMustBeOnSurface = other.myTeleportMustBeOnSurface;\r\n this.myTeleportMustBeOnIgnorableSurfaceAngle = other.myTeleportMustBeOnIgnorableSurfaceAngle;\r\n this.myTeleportMustBeOnSurfaceAngle = other.myTeleportMustBeOnSurfaceAngle;\r\n\r\n this.myCheckTransformMustBeOnSurface = other.myCheckTransformMustBeOnSurface;\r\n this.myCheckTransformMustBeOnIgnorableSurfaceAngle = other.myCheckTransformMustBeOnIgnorableSurfaceAngle;\r\n this.myCheckTransformMustBeOnSurfaceAngle = other.myCheckTransformMustBeOnSurfaceAngle;\r\n\r\n this.myRecollectSurfaceInfoOnSurfaceCheckFailed = other.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n\r\n this.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle = other.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle;\r\n};\r\n\r\nCharacterColliderSplitMovementParams.prototype.copy = function copy(other) {\r\n this.mySplitMovementEnabled = other.mySplitMovementEnabled;\r\n\r\n this.mySplitMovementMaxSteps = other.mySplitMovementMaxSteps;\r\n this.mySplitMovementMaxStepLength = other.mySplitMovementMaxStepLength;\r\n this.mySplitMovementMinStepLength = other.mySplitMovementMinStepLength;\r\n\r\n this.mySplitMovementStopOnHorizontalMovementFailed = other.mySplitMovementStopOnHorizontalMovementFailed;\r\n this.mySplitMovementStopOnVerticalMovementFailed = other.mySplitMovementStopOnVerticalMovementFailed;\r\n\r\n /*\r\n this.mySplitMovementStopOnCallback = other.mySplitMovementStopOnCallback;\r\n */\r\n\r\n this.mySplitMovementStopReturnPreviousResults = other.mySplitMovementStopReturnPreviousResults;\r\n};\r\n\r\nCharacterColliderAdditionalParams.prototype.copy = function copy(other) {\r\n this.myPositionOffsetLocal.vec3_copy(other.myPositionOffsetLocal);\r\n this.myRotationOffsetLocalQuat.quat_copy(other.myRotationOffsetLocalQuat);\r\n\r\n /*\r\n this.myExtraMovementCheckCallback = other.myExtraMovementCheckCallback;\r\n this.myExtraTeleportCheckCallback = other.myExtraTeleportCheckCallback;\r\n this.myExtraCheckTransformCheckCallback = other.myExtraCheckTransformCheckCallback;\r\n */\r\n};\r\n\r\nCharacterColliderDebugParams.prototype.copy = function copy(other) {\r\n this.myVisualDebugEnabled = other.myVisualDebugEnabled;\r\n\r\n this.myVisualDebugMovementEnabled = other.myVisualDebugMovementEnabled;\r\n\r\n this.myVisualDebugHorizontalMovementCheckEnabled = other.myVisualDebugHorizontalMovementCheckEnabled;\r\n this.myVisualDebugHorizontalPositionCheckEnabled = other.myVisualDebugHorizontalPositionCheckEnabled;\r\n\r\n this.myVisualDebugVerticalMovementCheckEnabled = other.myVisualDebugVerticalMovementCheckEnabled;\r\n this.myVisualDebugVerticalPositionCheckEnabled = other.myVisualDebugVerticalPositionCheckEnabled;\r\n\r\n this.myVisualDebugSlideEnabled = other.myVisualDebugSlideEnabled;\r\n\r\n this.myVisualDebugGroundInfoEnabled = other.myVisualDebugGroundInfoEnabled;\r\n this.myVisualDebugCeilingInfoEnabled = other.myVisualDebugCeilingInfoEnabled;\r\n\r\n this.myVisualDebugResultsEnabled = other.myVisualDebugResultsEnabled;\r\n};", "import { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport function computeGroundPerceivedAngle(surfaceNormal, direction, up) {\r\n return this.computeSurfacePerceivedAngle(surfaceNormal, direction, up, true);\r\n}\r\n\r\nexport function computeCeilingPerceivedAngle(surfaceNormal, direction, up) {\r\n return this.computeSurfacePerceivedAngle(surfaceNormal, direction, up, false);\r\n}\r\n\r\nexport let computeSurfacePerceivedAngle = function () {\r\n let directionOnSurface = vec3_create();\r\n let verticalDirection = vec3_create();\r\n return function computeSurfacePerceivedAngle(surfaceNormal, direction, up, ground) {\r\n let surfacePerceivedAngle = 0;\r\n\r\n verticalDirection.vec3_copy(up);\r\n if (!ground) {\r\n verticalDirection.vec3_negate(verticalDirection);\r\n }\r\n\r\n let surfaceAngle = surfaceNormal.vec3_angle(verticalDirection);\r\n if (surfaceAngle <= Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 0;\r\n } else if (surfaceAngle >= 180 - Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 180;\r\n }\r\n\r\n directionOnSurface = direction.vec3_projectOnPlaneAlongAxis(surfaceNormal, up, directionOnSurface);\r\n surfacePerceivedAngle = directionOnSurface.vec3_angle(direction);\r\n\r\n let fartherOnUp = directionOnSurface.vec3_isFartherAlongAxis(direction, up);\r\n if ((!fartherOnUp && ground) || (fartherOnUp && !ground)) {\r\n surfacePerceivedAngle *= -1;\r\n }\r\n\r\n if (Math.abs(surfacePerceivedAngle) >= surfaceAngle) {\r\n if (surfaceAngle != 0 && surfaceAngle != 180) {\r\n surfacePerceivedAngle = surfaceAngle * Math.pp_sign(surfacePerceivedAngle);\r\n } else {\r\n surfacePerceivedAngle = surfaceAngle;\r\n }\r\n }\r\n\r\n return surfacePerceivedAngle;\r\n };\r\n}();\r\n\r\nexport let CharacterControllerUtils = {\r\n computeGroundPerceivedAngle,\r\n computeCeilingPerceivedAngle,\r\n computeSurfacePerceivedAngle\r\n};", "import { PhysicsLayerFlags } from \"../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { CharacterColliderSetup, CharacterColliderSlideFlickerPreventionMode } from \"./character_collider_setup.js\";\r\n\r\nexport let CharacterColliderSetupSimplifiedCreationAccuracyLevel = {\r\n VERY_LOW: 0,\r\n LOW: 1,\r\n MEDIUM: 2,\r\n HIGH: 3,\r\n VERY_HIGH: 4\r\n};\r\n\r\nexport class CharacterColliderSetupSimplifiedCreationParams {\r\n\r\n constructor() {\r\n this.myHeight = 0;\r\n this.myRadius = 0;\r\n\r\n this.myAccuracyLevel = CharacterColliderSetupSimplifiedCreationAccuracyLevel.VERY_LOW;\r\n\r\n this.myIsPlayer = false;\r\n\r\n this.myCheckOnlyFeet = false;\r\n\r\n this.myMaxSpeed = 0;\r\n this.myAverageFPS = 72;\r\n\r\n this.myCanFly = false;\r\n\r\n this.myShouldSlideAlongWall = false;\r\n\r\n this.myCollectGroundInfo = false;\r\n this.myShouldSnapOnGround = false;\r\n this.myMaxDistanceToSnapOnGround = 0;\r\n this.myMaxWalkableGroundAngle = 0;\r\n this.myMaxWalkableGroundStepHeight = 0;\r\n this.myShouldNotFallFromEdges = false;\r\n\r\n this.myHorizontalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHorizontalCheckObjectsToIgnore = [];\r\n\r\n this.myVerticalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myVerticalCheckObjectsToIgnore = [];\r\n\r\n this.myHorizontalCheckDebugEnabled = false;\r\n this.myVerticalCheckDebugEnabled = false;\r\n }\r\n}\r\n\r\nexport function createSimplified(simplifiedCreationParams, outCharacterColliderSetup = new CharacterColliderSetup()) {\r\n outCharacterColliderSetup.myHeight = simplifiedCreationParams.myHeight;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeRadius = simplifiedCreationParams.myRadius;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadius = simplifiedCreationParams.myRadius / 2;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForwardEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForward.vec3_set(0, 0, 1);\r\n\r\n if (!simplifiedCreationParams.myCheckOnlyFeet || simplifiedCreationParams.myCanFly) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalHeightCheckEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalPositionCheckEnabled = true;\r\n }\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideEnabled = simplifiedCreationParams.myShouldSlideAlongWall;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore = simplifiedCreationParams.myMaxWalkableGroundStepHeight;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myGroundParams.mySurfaceSnapMaxDistance = simplifiedCreationParams.myMaxDistanceToSnapOnGround;\r\n outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance = simplifiedCreationParams.myMaxDistanceToSnapOnGround > 0 ?\r\n simplifiedCreationParams.myMaxDistanceToSnapOnGround : (simplifiedCreationParams.myRadius > 0.1) ? 0.1 : 0.01;\r\n outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance = Math.max(outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance, outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore);\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = simplifiedCreationParams.myRadius * 0.75;\r\n\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceInfo = simplifiedCreationParams.myCollectGroundInfo || simplifiedCreationParams.myMaxWalkableGroundAngle > 0;\r\n outCharacterColliderSetup.myGroundParams.mySurfaceSnapEnabled = simplifiedCreationParams.myShouldSnapOnGround;\r\n outCharacterColliderSetup.myGroundParams.mySurfacePopOutEnabled = true;\r\n outCharacterColliderSetup.myGroundParams.mySurfaceAngleToIgnore = simplifiedCreationParams.myMaxWalkableGroundAngle;\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngle = true;\r\n\r\n outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxOutsideDistance = 0.001;\r\n outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxInsideDistance = 0.001;\r\n\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance = (simplifiedCreationParams.myRadius > 0.1) ? 0.1 : 0.01;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = true;\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = true;\r\n\r\n if (simplifiedCreationParams.myCanFly) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckHeadDistanceToIgnore = outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceInfo = outCharacterColliderSetup.myGroundParams.myCollectSurfaceInfo;\r\n outCharacterColliderSetup.myCeilingParams.mySurfacePopOutEnabled = outCharacterColliderSetup.myGroundParams.mySurfacePopOutEnabled;\r\n outCharacterColliderSetup.myCeilingParams.mySurfaceAngleToIgnore = outCharacterColliderSetup.myGroundParams.mySurfaceAngleToIgnore;\r\n\r\n outCharacterColliderSetup.myCeilingParams.mySurfaceSnapMaxDistance = outCharacterColliderSetup.myGroundParams.mySurfaceSnapMaxDistance;\r\n outCharacterColliderSetup.myCeilingParams.mySurfacePopOutMaxDistance = outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance;\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = outCharacterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngle = outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngle;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myOnSurfaceMaxOutsideDistance = outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myOnSurfaceMaxInsideDistance = outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxInsideDistance;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceDistanceOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceDistanceInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceInsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitInsideDistance;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n }\r\n\r\n if (simplifiedCreationParams.myShouldNotFallFromEdges) {\r\n outCharacterColliderSetup.myGroundParams.myMovementMustStayOnSurface = true;\r\n outCharacterColliderSetup.myGroundParams.myMovementMustStayOnSurfaceAngleDownhill = Math.max(60, outCharacterColliderSetup.myGroundParams.mySurfaceAngleToIgnore);\r\n }\r\n\r\n\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckBlockLayerFlags.copy(simplifiedCreationParams.myHorizontalCheckBlockLayerFlags);\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckObjectsToIgnore.pp_copy(simplifiedCreationParams.myHorizontalCheckObjectsToIgnore);\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckBlockLayerFlags.copy(simplifiedCreationParams.myVerticalCheckBlockLayerFlags);\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckObjectsToIgnore.pp_copy(simplifiedCreationParams.myVerticalCheckObjectsToIgnore);\r\n\r\n\r\n\r\n if (simplifiedCreationParams.myHorizontalCheckDebugEnabled) {\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugHorizontalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugHorizontalPositionCheckEnabled = true;\r\n }\r\n\r\n if (simplifiedCreationParams.myVerticalCheckDebugEnabled) {\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugVerticalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugVerticalPositionCheckEnabled = true;\r\n }\r\n\r\n\r\n\r\n // ACCURACY\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.VERY_LOW) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle = 60;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightVerticalCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightVerticalCheckEnabled = true;\r\n\r\n // Enable based on speed?\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckEnabled = false;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightCheckSteps = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalRadialCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalStraightCheckEnabled = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices = 4;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceCentralCheckEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 1;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckReductionEnabled = true;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckAllowHitsInsideCollisionIfOneValid = true;\r\n\r\n if (simplifiedCreationParams.myIsPlayer) {\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 2;\r\n outCharacterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign = true;\r\n }\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.LOW) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckRadialSteps = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightCheckSteps = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 2;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep = 180 / outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 2;\r\n outCharacterColliderSetup.myWallSlideParams.myCheckBothWallSlideDirections = false;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionMode = CharacterColliderSlideFlickerPreventionMode.NONE;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = false;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionForceCheckCounter = 0;\r\n outCharacterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign = false;\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.MEDIUM) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightHorizontalCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices = 2;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightHorizontalCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalBorderCheckEnabled = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckPerformCheckOnBothSides = true;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices = 6;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 2;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep = 180 / outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 3;\r\n outCharacterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign = true;\r\n\r\n if (simplifiedCreationParams.myIsPlayer) {\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionMode = CharacterColliderSlideFlickerPreventionMode.USE_PREVIOUS_RESULTS;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = true;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionForceCheckCounter = 4;\r\n }\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.HIGH) {\r\n if (outCharacterColliderSetup.myWallSlideParams.myWallSlideEnabled) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckGetBetterReferenceHit = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = true;\r\n }\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled = false;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = false;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices = 8;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 2;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep = 180 / outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 4;\r\n\r\n if (simplifiedCreationParams.myIsPlayer) {\r\n outCharacterColliderSetup.myWallSlideParams.myCheckBothWallSlideDirections = true;\r\n }\r\n\r\n\r\n\r\n outCharacterColliderSetup.myGroundParams.myBaseInsideCollisionCheckEnabled = true;\r\n outCharacterColliderSetup.myCeilingParams.myBaseInsideCollisionCheckEnabled = true;\r\n\r\n\r\n\r\n let safeRadius = simplifiedCreationParams.myRadius * 0.75;\r\n if (simplifiedCreationParams.myMaxSpeed / simplifiedCreationParams.myAverageFPS > safeRadius) {\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementEnabled = true;\r\n\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps = Math.ceil((simplifiedCreationParams.myMaxSpeed / simplifiedCreationParams.myAverageFPS) / safeRadius);\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength = safeRadius;\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength = safeRadius;\r\n }\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.VERY_HIGH) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightCheckSteps = 2;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalRadialCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled = false;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = false;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightCheckSteps = 2;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myGroundParams.myRecollectSurfaceInfoOnSurfaceCheckFailed = true;\r\n outCharacterColliderSetup.myCeilingParams.myRecollectSurfaceInfoOnSurfaceCheckFailed = outCharacterColliderSetup.myGroundParams.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n }\r\n\r\n return outCharacterColliderSetup;\r\n}\r\n\r\nexport function createTeleportColliderSetupFromMovementColliderSetup(movementColliderSetup, outTeleportColliderSetup = new CharacterColliderSetup()) {\r\n outTeleportColliderSetup.copy(movementColliderSetup);\r\n\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle = 180;\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices =\r\n Math.round((outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle / movementColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle)\r\n * movementColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices);\r\n\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForwardEnabled = true;\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForward.vec3_set(0, 0, 1);\r\n\r\n return outTeleportColliderSetup;\r\n}\r\n\r\nexport let CharacterColliderSetupUtils = {\r\n createSimplified,\r\n createTeleportColliderSetupFromMovementColliderSetup\r\n};", "import { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { Quat2Utils } from \"../../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { mat4_create, quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\n\r\nexport let NonVRReferenceSpaceMode = {\r\n NO_FLOOR: 0,\r\n FLOOR: 1,\r\n NO_FLOOR_THEN_KEEP_VR: 2,\r\n FLOOR_THEN_KEEP_VR: 3\r\n};\r\n\r\nexport class PlayerHeadManagerParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.mySessionChangeResyncEnabled = false;\r\n\r\n this.myBlurEndResyncEnabled = false;\r\n this.myBlurEndResyncRotation = false;\r\n\r\n this.myResetTransformOnViewResetEnabled = true;\r\n\r\n this.myNextEnterSessionResyncHeight = false;\r\n this.myEnterSessionResyncHeight = false;\r\n\r\n this.myExitSessionResyncHeight = false;\r\n this.myExitSessionResyncVerticalAngle = false;\r\n this.myExitSessionRemoveRightTilt = false; // For now right tilt is removed even if this setting is false, if the vertical angle has to be adjusted\r\n this.myExitSessionAdjustMaxVerticalAngle = false;\r\n this.myExitSessionMaxVerticalAngle = 0;\r\n this.myExitSessionResetNonVRTransformLocal = true;\r\n\r\n this.myNonVRFloorBasedMode = NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR;\r\n\r\n this.myRotateFeetKeepUp = false;\r\n\r\n this.myDefaultHeightNonVR = 0;\r\n this.myDefaultHeightVRWithoutFloor = 0;\r\n this.myDefaultHeightVRWithFloor = null; // null means just keep the detected one\r\n this.myForeheadExtraHeight = 0;\r\n // Can be used to always add a bit of height, for example to compensate the fact \r\n // that the default height is actually the eye height and you may want to also add a forehead offset\r\n\r\n this.myEngine = engine;\r\n\r\n this.myDebugEnabled = false;\r\n }\r\n}\r\n\r\n// Could be intended as the generic player body manager (maybe with hands and stuff also)\r\nexport class PlayerHeadManager {\r\n\r\n constructor(params = new PlayerHeadManagerParams()) {\r\n this._myParams = params;\r\n\r\n this._myCurrentHead = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n\r\n this._mySessionChangeResyncHeadTransform = null;\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myCurrentHeadTransformLocalQuat = quat2_create();\r\n\r\n this._myDelaySessionChangeResyncCounter = 0; // Needed because VR head takes some frames to get the tracked position\r\n this._myDelayBlurEndResyncCounter = 0;\r\n this._myDelayBlurEndResyncTimer = new Timer(5, false);\r\n this._myVisibilityHidden = false;\r\n\r\n this._mySessionActive = false;\r\n this._mySessionBlurred = false;\r\n\r\n this._myIsSyncedDelayCounter = 0;\r\n\r\n this._myViewResetThisFrame = false;\r\n this._myViewResetEventListener = null;\r\n\r\n this._myHeightNonVR = 0;\r\n this._myHeightNonVROnEnterSession = 0;\r\n this._myHeightVRWithoutFloor = null;\r\n this._myHeightVRWithFloor = null;\r\n this._myHeightOffsetWithFloor = 0;\r\n this._myHeightOffsetWithoutFloor = 0;\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n this._myDelayNextEnterSessionSetHeightVRCounter = 0;\r\n\r\n this._myLastReferenceSpaceIsFloorBased = null;\r\n\r\n this._myActive = true;\r\n this._myDestroyed = false;\r\n\r\n // Config\r\n\r\n this._myResyncCounterFrames = 3;\r\n this._myIsSyncedDelayCounterFrames = 1;\r\n }\r\n\r\n start() {\r\n this._setHeightHeadNonVR(this._myParams.myDefaultHeightNonVR);\r\n this._setHeightHeadVRWithoutFloor(this._myParams.myDefaultHeightVRWithoutFloor);\r\n this._setHeightHeadVRWithFloor(this._myParams.myDefaultHeightVRWithFloor);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, true, this._myParams.myEngine);\r\n }\r\n\r\n setActive(active) {\r\n this._myActive = active;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n getPlayer() {\r\n return Globals.getPlayerObjects(this._myParams.myEngine).myPlayer;\r\n }\r\n\r\n getHead() {\r\n return this._myCurrentHead;\r\n }\r\n\r\n getHeightHead() {\r\n return this.getHeightEyes() + this._myParams.myForeheadExtraHeight;\r\n }\r\n\r\n getHeightEyes() {\r\n // Implemented outside class definition\r\n }\r\n\r\n getTransformFeetQuat(outTransformFeetQuat = quat2_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getTransformHeadQuat(outTransformFeetQuat = quat2_create()) {\r\n return this.getHead().pp_getTransformQuat(outTransformFeetQuat);\r\n }\r\n\r\n getPositionFeet(outPositionFeet = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPositionHead(outPositionHead = vec3_create()) {\r\n return this._myCurrentHead.pp_getPosition(outPositionHead);\r\n }\r\n\r\n getRotationFeetQuat(outRotationFeetQuat = quat_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotationHeadQuat(outRotationHeadQuat = quat_create()) {\r\n return this.getHead().pp_getRotationQuat(outRotationHeadQuat);\r\n }\r\n\r\n isSynced() {\r\n return this._myIsSyncedDelayCounter == 0 && this._myDelaySessionChangeResyncCounter == 0 && this._myDelayNextEnterSessionSetHeightVRCounter == 0 && this._myDelayBlurEndResyncCounter == 0 && !this._myDelayBlurEndResyncTimer.isRunning() && !this._mySessionBlurred;\r\n }\r\n\r\n setHeightHead(height, setOnlyForActiveOne = true) {\r\n this._setHeightHead(height, height, height, setOnlyForActiveOne);\r\n }\r\n\r\n resetHeightHeadToDefault(resetOnlyForActiveOne = true) {\r\n this._setHeightHead(this._myHeightNonVR, this._myHeightVRWithoutFloor, this._myHeightVRWithFloor, resetOnlyForActiveOne);\r\n }\r\n\r\n setHeightHeadNonVR(height) {\r\n this._setHeightHeadNonVR(height);\r\n\r\n if (!this._mySessionActive) {\r\n this._updateHeightOffset();\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n }\r\n }\r\n\r\n setHeightHeadVRWithoutFloor(height) {\r\n this._setHeightHeadVRWithoutFloor(height);\r\n\r\n if (this._mySessionActive) {\r\n this._updateHeightOffset();\r\n }\r\n }\r\n\r\n resetHeightHeadVRWithFloor() {\r\n this.setHeightHeadVRWithFloor(null);\r\n }\r\n\r\n setHeightHeadVRWithFloor(height = null) {\r\n this._setHeightHeadVRWithFloor(height);\r\n\r\n if (this._mySessionActive) {\r\n this._updateHeightOffset();\r\n }\r\n }\r\n\r\n getDefaultHeightHeadNonVR() {\r\n return this._myHeightNonVR;\r\n }\r\n\r\n getDefaultHeightHeadVRWithoutFloor() {\r\n return this._myHeightVRWithoutFloor;\r\n }\r\n\r\n getDefaultHeightHeadVRWithFloor() {\r\n return this._myHeightVRWithFloor;\r\n }\r\n\r\n moveFeet(movement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n moveHead(movement) {\r\n this.moveFeet(movement);\r\n }\r\n\r\n teleportPositionHead(teleportPosition) {\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPositionFeet(teleportPosition) {\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPlayerToHeadTransformQuat(headTransformQuat) {\r\n // Implemented outside class definition\r\n }\r\n\r\n rotateFeetQuat(rotationQuat, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n rotateHeadQuat(rotationQuat) {\r\n // #TODO Rotate feet with this and then rotate head freely if possible\r\n // Implemented outside class definition \r\n }\r\n\r\n canRotateFeet() {\r\n return true;\r\n }\r\n\r\n canRotateHead() {\r\n return !this._mySessionActive;\r\n }\r\n\r\n setRotationFeetQuat(rotationQuat, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n setRotationHeadQuat() {\r\n // Implemented outside class definition \r\n }\r\n\r\n lookAtFeet(position, up = null, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n lookToFeet(direction, up = null, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n lookAtHead(position, up = null) {\r\n }\r\n\r\n lookToHead(direction, up = null) {\r\n }\r\n\r\n resetCameraNonXR() {\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_resetTransformLocal();\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n }\r\n\r\n update(dt) {\r\n this._myViewResetThisFrame = false;\r\n\r\n if (this._myIsSyncedDelayCounter != 0) {\r\n this._myIsSyncedDelayCounter--;\r\n this._myIsSyncedDelayCounter = Math.max(0, this._myIsSyncedDelayCounter);\r\n }\r\n\r\n if (this._myDelaySessionChangeResyncCounter > 0) {\r\n this._myDelaySessionChangeResyncCounter--;\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n this._sessionChangeResync();\r\n this._myIsSyncedDelayCounter = this._myIsSyncedDelayCounterFrames;\r\n }\r\n }\r\n\r\n if (this._myDelayBlurEndResyncCounter > 0 && !this._myDelayBlurEndResyncTimer.isRunning()) {\r\n this._myDelayBlurEndResyncCounter--;\r\n if (this._myDelayBlurEndResyncCounter == 0) {\r\n this._blurEndResync();\r\n this._myIsSyncedDelayCounter = this._myIsSyncedDelayCounterFrames;\r\n }\r\n }\r\n\r\n // Not really used since visibility hidden end is not considered a special case anymore\r\n if (this._myDelayBlurEndResyncTimer.isRunning()) {\r\n if (this._myDelayBlurEndResyncCounter > 0) {\r\n this._myDelayBlurEndResyncCounter--;\r\n } else {\r\n this._myDelayBlurEndResyncTimer.update(dt);\r\n if (this._myDelayBlurEndResyncTimer.isDone()) {\r\n this._blurEndResync();\r\n this._myIsSyncedDelayCounter = this._myIsSyncedDelayCounterFrames;\r\n }\r\n }\r\n }\r\n\r\n if (this._myDelayNextEnterSessionSetHeightVRCounter > 0) {\r\n this._myDelayNextEnterSessionSetHeightVRCounter--;\r\n if (this._myDelayNextEnterSessionSetHeightVRCounter == 0) {\r\n if (this._mySessionActive) {\r\n let isFloor = XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine);\r\n if (isFloor && this._myNextEnterSessionSetHeightVRWithFloor) {\r\n let currentHeadPosition = this._myCurrentHead.pp_getPosition();\r\n\r\n let floorHeight = this._myHeightVRWithFloor - this._myParams.myForeheadExtraHeight;\r\n let currentHeadHeight = this._getPositionEyesHeight(currentHeadPosition);\r\n\r\n this._myHeightOffsetWithFloor = this._myHeightOffsetWithFloor + (floorHeight - currentHeadHeight);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n } else if (!isFloor && this._myNextEnterSessionSetHeightVRWithoutFloor) {\r\n let currentHeadPosition = this._myCurrentHead.pp_getPosition();\r\n\r\n let floorHeight = this._myHeightVRWithoutFloor - this._myParams.myForeheadExtraHeight;\r\n let currentHeadHeight = this._getPositionEyesHeight(currentHeadPosition);\r\n\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (floorHeight - currentHeadHeight);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.isSynced()) {\r\n this._myCurrentHead.pp_getTransformLocalQuat(this._myCurrentHeadTransformLocalQuat);\r\n }\r\n\r\n if (this._myParams.myDebugEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n this._debugUpdate(dt);\r\n }\r\n }\r\n\r\n _setHeightHead(heightNonVR, heightVRWithoutFloor, heightVRWithFloor, setOnlyForActiveOne = true) {\r\n if (!setOnlyForActiveOne || !this._mySessionActive) {\r\n this._setHeightHeadNonVR(heightNonVR);\r\n }\r\n\r\n if (!setOnlyForActiveOne || this._mySessionActive) {\r\n this._setHeightHeadVRWithoutFloor(heightVRWithoutFloor);\r\n this._setHeightHeadVRWithFloor(heightVRWithFloor);\r\n }\r\n\r\n this._updateHeightOffset();\r\n\r\n if (!this._mySessionActive) {\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n }\r\n }\r\n\r\n _setHeightHeadNonVR(height) {\r\n this._myHeightNonVR = height;\r\n this._myHeightNonVROnEnterSession = height;\r\n }\r\n\r\n _setHeightHeadVRWithoutFloor(heightWithoutFloor) {\r\n if (heightWithoutFloor != null) {\r\n this._myHeightVRWithoutFloor = heightWithoutFloor;\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n\r\n if (this._mySessionActive) {\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (heightWithoutFloor - this.getHeightHead());\r\n } else {\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = true;\r\n }\r\n } else {\r\n this._myHeightVRWithoutFloor = null;\r\n this._myHeightOffsetWithoutFloor = 0;\r\n }\r\n }\r\n\r\n _setHeightHeadVRWithFloor(heightWithFloor) {\r\n if (heightWithFloor != null) {\r\n this._myHeightVRWithFloor = heightWithFloor;\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n\r\n if (this._mySessionActive) {\r\n this._myHeightOffsetWithFloor = this._myHeightOffsetWithFloor + (heightWithFloor - this.getHeightHead());\r\n } else {\r\n this._myNextEnterSessionSetHeightVRWithFloor = true;\r\n }\r\n } else {\r\n this._myHeightVRWithFloor = null;\r\n this._myHeightOffsetWithFloor = 0;\r\n }\r\n }\r\n\r\n _shouldNonVRUseVRWithFloor() {\r\n return (this._myLastReferenceSpaceIsFloorBased == null && this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR) ||\r\n (this._myLastReferenceSpaceIsFloorBased != null && this._myLastReferenceSpaceIsFloorBased &&\r\n (this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.NO_FLOOR_THEN_KEEP_VR || this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR));\r\n }\r\n\r\n _shouldNonVRUseVRWithoutFloor() {\r\n return (this._myLastReferenceSpaceIsFloorBased == null && this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.NO_FLOOR_THEN_KEEP_VR) ||\r\n (this._myLastReferenceSpaceIsFloorBased != null && !this._myLastReferenceSpaceIsFloorBased &&\r\n (this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.NO_FLOOR_THEN_KEEP_VR || this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR));\r\n }\r\n\r\n _setCameraNonXRHeight(height) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _debugUpdate(dt) {\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawLineEnd(0, this.getPositionFeet(), this.getPositionHead(), vec4_create(1, 0, 0, 1), 0.01);\r\n\r\n console.error(this.getHeightEyes());\r\n }\r\n\r\n _getPositionEyesHeight(position) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionStart(manualCall, session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionEnd(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionBlurStart(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionBlurEnd(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onViewReset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _blurEndResync() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _sessionChangeResync() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setReferenceSpaceHeightOffset(offset, amountToRemove) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateHeightOffset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _getHeadTransformFromLocal(transformLocal) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _resyncHeadRotationForward(resyncHeadRotation) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.getReferenceSpace(this._myParams.myEngine)?.removeEventListener?.(\"reset\", this._myViewResetEventListener);\r\n XRUtils.getSession(this._myParams.myEngine)?.removeEventListener(\"visibilitychange\", this._myVisibilityChangeEventListener);\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerHeadManager.prototype.getHeightEyes = function () {\r\n let headPosition = vec3_create();\r\n return function getHeightEyes() {\r\n headPosition = this._myCurrentHead.pp_getPosition(headPosition);\r\n let eyesHeight = this._getPositionEyesHeight(headPosition);\r\n\r\n return eyesHeight;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.getTransformFeetQuat = function () {\r\n let feetPosition = vec3_create();\r\n let feetRotationQuat = quat_create();\r\n return function getTransformFeetQuat(outTransformFeetQuat = quat2_create()) {\r\n outTransformFeetQuat.quat2_setPositionRotationQuat(this.getPositionFeet(feetPosition), this.getRotationFeetQuat(feetRotationQuat));\r\n return outTransformFeetQuat;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.getRotationFeetQuat = function () {\r\n let playerUp = vec3_create();\r\n let headForward = vec3_create();\r\n return function getRotationFeetQuat(outRotationFeetQuat = quat_create()) {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n headForward = this._myCurrentHead.pp_getForward(headForward);\r\n\r\n // Feet are considered to always be flat on the player up\r\n let angleWithUp = headForward.vec3_angle(playerUp);\r\n let mingAngle = 10;\r\n if (angleWithUp < mingAngle) {\r\n headForward = this._myCurrentHead.pp_getDown(headForward);\r\n } else if (angleWithUp > 180 - mingAngle) {\r\n headForward = this._myCurrentHead.pp_getUp(headForward);\r\n }\r\n\r\n headForward = headForward.vec3_removeComponentAlongAxis(playerUp, headForward);\r\n headForward.vec3_normalize(headForward);\r\n\r\n outRotationFeetQuat.quat_setUp(playerUp, headForward);\r\n return outRotationFeetQuat;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.getPositionFeet = function () {\r\n let headPosition = vec3_create();\r\n let playerUp = vec3_create();\r\n return function getPositionFeet(outPositionFeet = vec3_create()) {\r\n headPosition = this._myCurrentHead.pp_getPosition(headPosition);\r\n let headHeight = this._getPositionEyesHeight(headPosition);\r\n\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n outPositionFeet = headPosition.vec3_sub(playerUp.vec3_scale(headHeight, outPositionFeet), outPositionFeet);\r\n\r\n return outPositionFeet;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.moveFeet = function moveFeet(movement) {\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_translate(movement);\r\n};\r\n\r\nPlayerHeadManager.prototype.rotateFeetQuat = function () {\r\n let playerUp = vec3_create();\r\n let rotationAxis = vec3_create();\r\n let currentHeadPosition = vec3_create();\r\n let currentFeetRotation = quat_create();\r\n let newFeetRotation = quat_create();\r\n let fixedNewFeetRotation = quat_create();\r\n let newFeetForward = vec3_create();\r\n let fixedRotation = quat_create();\r\n let newHeadPosition = vec3_create();\r\n let headAdjustmentMovement = vec3_create();\r\n return function rotateFeetQuat(rotationQuat, keepUpOverride = null) {\r\n let angle = rotationQuat.quat_getAngleRadians();\r\n if (angle <= 0.00001) {\r\n return;\r\n }\r\n\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n rotationAxis = rotationQuat.quat_getAxis(rotationAxis);\r\n\r\n if (!rotationAxis.vec3_isOnAxis(playerUp) &&\r\n ((keepUpOverride == null && this._myParams.myFeetRotationKeepUp) || (keepUpOverride))) {\r\n currentFeetRotation = this.getRotationFeetQuat(currentFeetRotation);\r\n\r\n newFeetRotation = currentFeetRotation.quat_rotateQuat(rotationQuat, newFeetRotation);\r\n newFeetForward = newFeetRotation.quat_getForward(newFeetForward);\r\n\r\n fixedNewFeetRotation.quat_copy(newFeetRotation);\r\n fixedNewFeetRotation.quat_setUp(playerUp, newFeetForward);\r\n\r\n fixedRotation = currentFeetRotation.quat_rotationToQuat(fixedNewFeetRotation, fixedRotation);\r\n } else {\r\n fixedRotation.quat_copy(rotationQuat);\r\n }\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateAroundQuat(fixedRotation, currentHeadPosition);\r\n\r\n newHeadPosition = this._myCurrentHead.pp_getPosition(newHeadPosition);\r\n\r\n headAdjustmentMovement = currentHeadPosition.vec3_sub(newHeadPosition, headAdjustmentMovement);\r\n if (headAdjustmentMovement.vec3_length() > 0.00001) {\r\n this.moveFeet(headAdjustmentMovement);\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.rotateHeadQuat = function () {\r\n let newHeadRotation = quat_create();\r\n let newHeadUp = vec3_create();\r\n return function rotateHeadQuat(rotationQuat) {\r\n if (this.canRotateHead()) {\r\n this._myCurrentHead.pp_rotateQuat(rotationQuat);\r\n newHeadRotation = this._myCurrentHead.pp_getRotationQuat(newHeadRotation);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myHead.pp_setRotationQuat(newHeadRotation);\r\n\r\n if (!this._mySessionActive) {\r\n newHeadRotation = newHeadRotation.quat_rotateAxisRadians(Math.PI, newHeadRotation.quat_getUp(newHeadUp), newHeadRotation);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_setRotationQuat(newHeadRotation);\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.setRotationFeetQuat = function () {\r\n let currentRotationQuat = quat_create();\r\n let rotationQuatToRotate = quat_create();\r\n return function setRotationFeetQuat(rotationQuat, keepUpOverride = null) {\r\n currentRotationQuat = this.getRotationFeetQuat(currentRotationQuat);\r\n rotationQuatToRotate = currentRotationQuat.quat_rotationToQuat(rotationQuat, rotationQuatToRotate);\r\n this.rotateFeetQuat(rotationQuatToRotate, keepUpOverride);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.setRotationHeadQuat = function () {\r\n let currentRotationQuat = quat_create();\r\n let rotationQuatToRotate = quat_create();\r\n return function setRotationHeadQuat(rotationQuat) {\r\n currentRotationQuat = this.getRotationHeadQuat(currentRotationQuat);\r\n rotationQuatToRotate = currentRotationQuat.quat_rotationToQuat(rotationQuat, rotationQuatToRotate);\r\n this.rotateHeadQuat(rotationQuatToRotate);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.teleportPositionHead = function () {\r\n let currentHeadPosition = vec3_create();\r\n let teleportMovementToPerform = vec3_create();\r\n return function teleportPositionHead(teleportPosition) {\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n teleportMovementToPerform = teleportPosition.vec3_sub(currentHeadPosition, teleportMovementToPerform);\r\n this.moveFeet(teleportMovementToPerform);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.teleportPositionFeet = function () {\r\n let currentFeetPosition = vec3_create();\r\n let teleportMovementToPerform = vec3_create();\r\n return function teleportPositionFeet(teleportPosition) {\r\n currentFeetPosition = this.getPositionFeet(currentFeetPosition);\r\n teleportMovementToPerform = teleportPosition.vec3_sub(currentFeetPosition, teleportMovementToPerform);\r\n this.moveFeet(teleportMovementToPerform);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.teleportPlayerToHeadTransformQuat = function () {\r\n let headPosition = vec3_create();\r\n let playerUp = vec3_create();\r\n let flatCurrentPlayerPosition = vec3_create();\r\n let flatNewPlayerPosition = vec3_create();\r\n let teleportMovement = vec3_create();\r\n let playerForward = vec3_create();\r\n let headForward = vec3_create();\r\n let referenceSpaceForward = vec3_create();\r\n let referenceSpaceForwardNegated = vec3_create();\r\n let rotationToPerform = quat_create();\r\n return function teleportPlayerToHeadTransformQuat(headTransformQuat) {\r\n headPosition = headTransformQuat.quat2_getPosition(headPosition);\r\n\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n flatCurrentPlayerPosition = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getPosition(flatCurrentPlayerPosition).vec3_removeComponentAlongAxis(playerUp, flatCurrentPlayerPosition);\r\n flatNewPlayerPosition = headPosition.vec3_removeComponentAlongAxis(playerUp, flatNewPlayerPosition);\r\n\r\n teleportMovement = flatNewPlayerPosition.vec3_sub(flatCurrentPlayerPosition, teleportMovement);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_translate(teleportMovement);\r\n\r\n playerForward = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getForward(playerForward);\r\n headForward = headTransformQuat.quat2_getForward(headForward);\r\n\r\n rotationToPerform = playerForward.vec3_rotationToPivotedQuat(headForward, playerUp, rotationToPerform);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateQuat(rotationToPerform);\r\n\r\n // Adjust player rotation based on the reference space rotation, which should not actually be touched,\r\n // but just in case\r\n\r\n playerForward = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getForward(playerForward);\r\n\r\n referenceSpaceForward = Globals.getPlayerObjects(this._myParams.myEngine).myReferenceSpace.pp_getForward(referenceSpaceForward);\r\n referenceSpaceForwardNegated = referenceSpaceForward.vec3_negate(referenceSpaceForwardNegated);\r\n\r\n rotationToPerform = referenceSpaceForwardNegated.vec3_rotationToPivotedQuat(playerForward, playerUp, rotationToPerform);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateQuat(rotationToPerform);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookAtFeet = function () {\r\n let direction = vec3_create();\r\n let feetPosition = vec3_create();\r\n return function lookAtFeet(position, up = null, keepUpOverride = null) {\r\n feetPosition = this.getPositionFeet(feetPosition);\r\n direction = position.vec3_sub(feetPosition, direction).vec3_normalize(direction);\r\n\r\n this.lookToFeet(direction, up, keepUpOverride);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookToFeet = function () {\r\n let feetRotation = quat_create();\r\n return function lookToFeet(direction, up = null, keepUpOverride = null) {\r\n feetRotation = this.getRotationFeetQuat(feetRotation);\r\n feetRotation.quat_setForward(direction, up);\r\n this.setRotationFeetQuat(feetRotation, keepUpOverride);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookAtHead = function () {\r\n let direction = vec3_create();\r\n let headPosition = vec3_create();\r\n return function lookAtHead(position, up = null) {\r\n headPosition = this.getPositionHead(headPosition);\r\n direction = position.vec3_sub(headPosition, direction).vec3_normalize(direction);\r\n\r\n this.lookToHead(direction, up);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookToHead = function () {\r\n let headRotation = quat_create();\r\n return function lookToHead(direction, up = null) {\r\n headRotation = this.getRotationHeadQuat(headRotation);\r\n headRotation.quat_setForward(direction, up);\r\n this.setRotationHeadQuat(headRotation);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._getPositionEyesHeight = function () {\r\n let playerPosition = vec3_create();\r\n let playerUp = vec3_create();\r\n let heightVector = vec3_create();\r\n return function _getPositionEyesHeight(position) {\r\n playerPosition = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getPosition(playerPosition);\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n heightVector = position.vec3_sub(playerPosition, heightVector).vec3_componentAlongAxis(playerUp, heightVector);\r\n let height = heightVector.vec3_length();\r\n if (!playerUp.vec3_isConcordant(heightVector)) {\r\n height = -height;\r\n }\r\n\r\n return height;\r\n };\r\n}();\r\n\r\n// #TODO What happens if the player go in the blurred state before the scene has loaded?\r\nPlayerHeadManager.prototype._onXRSessionStart = function () {\r\n return function _onXRSessionStart(manualCall, session) {\r\n let nonVRCurrentEyesHeight = this._getPositionEyesHeight(Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_getPosition());\r\n this._myHeightNonVROnEnterSession = nonVRCurrentEyesHeight + this._myParams.myForeheadExtraHeight;\r\n\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myVisibilityHidden = false;\r\n\r\n this._myDelaySessionChangeResyncCounter = 0;\r\n this._myDelayBlurEndResyncCounter = 0;\r\n this._myDelayBlurEndResyncTimer.reset();\r\n this._myDelayNextEnterSessionSetHeightVRCounter = 0;\r\n\r\n let referenceSpace = XRUtils.getReferenceSpace(this._myParams.myEngine);\r\n\r\n if (referenceSpace.addEventListener != null) {\r\n this._myViewResetEventListener = this._onViewReset.bind(this);\r\n referenceSpace.addEventListener(\"reset\", this._myViewResetEventListener);\r\n }\r\n\r\n this._myLastReferenceSpaceIsFloorBased = XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine);\r\n\r\n this._myVisibilityChangeEventListener = function (event) {\r\n if (event.session.visibilityState != \"visible\") {\r\n if (!this._mySessionBlurred) {\r\n this._onXRSessionBlurStart(event.session);\r\n }\r\n\r\n this._myVisibilityHidden = session.visibilityState == \"hidden\";\r\n } else {\r\n if (this._mySessionBlurred) {\r\n this._onXRSessionBlurEnd(event.session);\r\n }\r\n\r\n this._myVisibilityHidden = false;\r\n }\r\n }.bind(this);\r\n\r\n session.addEventListener(\"visibilitychange\", this._myVisibilityChangeEventListener);\r\n\r\n if (this._myParams.mySessionChangeResyncEnabled && !manualCall && this._myActive) {\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n this._mySessionChangeResyncHeadTransform = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n }\r\n\r\n this._myDelaySessionChangeResyncCounter = this._myResyncCounterFrames;\r\n } else {\r\n this._myDelaySessionChangeResyncCounter = 0;\r\n this._mySessionChangeResyncHeadTransform = null;\r\n }\r\n\r\n if (this._myNextEnterSessionSetHeightVRWithFloor || this._myNextEnterSessionSetHeightVRWithoutFloor) {\r\n this._myDelayNextEnterSessionSetHeightVRCounter = this._myResyncCounterFrames;\r\n }\r\n\r\n this._mySessionActive = true;\r\n this._mySessionBlurred = false;\r\n\r\n if (this._myActive) {\r\n this._updateHeightOffset();\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onXRSessionEnd = function () {\r\n return function _onXRSessionEnd(session) {\r\n if (this._myParams.mySessionChangeResyncEnabled && this._myActive) {\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n let previousHeadTransform = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n\r\n if (this._myBlurRecoverHeadTransform != null) {\r\n previousHeadTransform = this._myBlurRecoverHeadTransform;\r\n }\r\n\r\n this._mySessionChangeResyncHeadTransform = previousHeadTransform;\r\n }\r\n\r\n this._myDelaySessionChangeResyncCounter = this._myResyncCounterFrames;\r\n } else {\r\n this._myDelaySessionChangeResyncCounter = 0;\r\n this._mySessionChangeResyncHeadTransform = null;\r\n }\r\n\r\n this._myDelayNextEnterSessionSetHeightVRCounter = 0;\r\n\r\n this._myVisibilityChangeEventListener = null;\r\n this._myViewResetEventListener = null;\r\n\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myVisibilityHidden = false;\r\n\r\n this._myDelayBlurEndResyncCounter = 0;\r\n this._myDelayBlurEndResyncTimer.reset();\r\n\r\n this._mySessionActive = false;\r\n this._mySessionBlurred = false;\r\n\r\n if (this._myActive) {\r\n this._updateHeightOffset();\r\n\r\n if (this._myParams.myExitSessionResetNonVRTransformLocal) {\r\n this.resetCameraNonXR();\r\n } else {\r\n this._setCameraNonXRHeight(this._myHeightNonVROnEnterSession);\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onXRSessionBlurStart = function () {\r\n return function _onXRSessionBlurStart(session) {\r\n if (this._myActive) {\r\n if (this._myParams.myBlurEndResyncEnabled && this._myBlurRecoverHeadTransform == null && this._mySessionActive) {\r\n if (this._myDelaySessionChangeResyncCounter > 0) {\r\n this._myBlurRecoverHeadTransform = this._mySessionChangeResyncHeadTransform;\r\n } else {\r\n this._myBlurRecoverHeadTransform = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n }\r\n } else if (!this._mySessionActive || !this._myParams.myBlurEndResyncEnabled) {\r\n this._myBlurRecoverHeadTransform = null;\r\n }\r\n }\r\n\r\n this._myDelayBlurEndResyncCounter = 0;\r\n\r\n this._mySessionBlurred = true;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onXRSessionBlurEnd = function () {\r\n return function _onXRSessionBlurEnd(session) {\r\n if (this._myActive) {\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n if (this._myParams.myBlurEndResyncEnabled && this._myBlurRecoverHeadTransform != null && this._mySessionActive) {\r\n this._myDelayBlurEndResyncCounter = this._myResyncCounterFrames;\r\n if (this._myVisibilityHidden) {\r\n //this._myDelayBlurEndResyncTimer.start();\r\n\r\n // This was added because on the end of hidden u can have the resync delay cause of the guardian resync\r\n // but I just decided to skip this since it's not reliable and the guardian resync can happen in other cases\r\n // with no notification anyway\r\n }\r\n } else {\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myDelayBlurEndResyncCounter = 0;\r\n }\r\n } else {\r\n this._myDelaySessionChangeResyncCounter = this._myResyncCounterFrames;\r\n this._myBlurRecoverHeadTransform = null;\r\n }\r\n }\r\n\r\n this._mySessionBlurred = false;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onViewReset = function () {\r\n let identityTransformQuat = Quat2Utils.identity(quat2_create());\r\n let prevHeadPosition = vec3_create();\r\n let resetHeadPosition = vec3_create();\r\n return function _onViewReset() {\r\n if (this._myActive) {\r\n if (!this._myViewResetThisFrame && this._myParams.myResetTransformOnViewResetEnabled && this._mySessionActive && this.isSynced()) {\r\n this._myViewResetThisFrame = true;\r\n let previousHeadTransformQuat = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n this.teleportPlayerToHeadTransformQuat(previousHeadTransformQuat);\r\n\r\n let isFloor = XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine);\r\n if (!isFloor) {\r\n let resetHeadTransformQuat = this._getHeadTransformFromLocal(identityTransformQuat);\r\n let prevHeadHeight = this._getPositionEyesHeight(previousHeadTransformQuat.quat2_getPosition(prevHeadPosition));\r\n let currentHeadHeight = this._getPositionEyesHeight(resetHeadTransformQuat.quat2_getPosition(resetHeadPosition));\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (prevHeadHeight - currentHeadHeight);\r\n this._updateHeightOffset();\r\n }\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._blurEndResync = function () {\r\n let playerUp = vec3_create();\r\n let currentHeadPosition = vec3_create();\r\n let recoverHeadPosition = vec3_create();\r\n let flatCurrentHeadPosition = vec3_create();\r\n let flatRecoverHeadPosition = vec3_create();\r\n let recoverMovement = vec3_create();\r\n let recoverHeadForward = vec3_create();\r\n let currentHeadForward = vec3_create();\r\n let rotationToPerform = quat_create();\r\n return function _blurEndResync() {\r\n if (this._myBlurRecoverHeadTransform != null) {\r\n if (this._mySessionChangeResyncHeadTransform != null) {\r\n this._myBlurRecoverHeadTransform = null;\r\n this._sessionChangeResync();\r\n } else {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n recoverHeadPosition = this._myBlurRecoverHeadTransform.quat2_getPosition(recoverHeadPosition);\r\n\r\n flatCurrentHeadPosition = currentHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatCurrentHeadPosition);\r\n flatRecoverHeadPosition = recoverHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatRecoverHeadPosition);\r\n\r\n recoverMovement = flatRecoverHeadPosition.vec3_sub(flatCurrentHeadPosition, recoverMovement);\r\n this.moveFeet(recoverMovement);\r\n\r\n recoverHeadForward = this._myBlurRecoverHeadTransform.quat2_getForward(recoverHeadForward);\r\n currentHeadForward = this._myCurrentHead.pp_getForward(currentHeadForward);\r\n rotationToPerform = currentHeadForward.vec3_rotationToPivotedQuat(recoverHeadForward, playerUp, rotationToPerform);\r\n\r\n if (this._myParams.myBlurEndResyncRotation) {\r\n this.rotateFeetQuat(rotationToPerform);\r\n }\r\n\r\n this._myBlurRecoverHeadTransform = null;\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._sessionChangeResync = function () {\r\n let currentHeadPosition = vec3_create();\r\n let resyncHeadPosition = vec3_create();\r\n let resyncHeadRotation = quat_create();\r\n let playerUp = vec3_create();\r\n let flatCurrentHeadPosition = vec3_create();\r\n let flatResyncHeadPosition = vec3_create();\r\n let resyncMovement = vec3_create();\r\n let resyncHeadForward = vec3_create();\r\n let resyncHeadUp = vec3_create();\r\n let resyncHeadRight = vec3_create();\r\n let playerPosition = vec3_create();\r\n let newPlayerPosition = vec3_create();\r\n let fixedHeadRight = vec3_create();\r\n let fixedHeadLeft = vec3_create();\r\n let fixedHeadUp = vec3_create();\r\n let fixedHeadForward = vec3_create();\r\n let fixedHeadRotation = quat_create();\r\n return function _sessionChangeResync() {\r\n if (this._myBlurRecoverHeadTransform == null && this._mySessionChangeResyncHeadTransform != null) {\r\n if (this._mySessionActive) {\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n resyncHeadPosition = this._mySessionChangeResyncHeadTransform.quat2_getPosition(resyncHeadPosition);\r\n resyncHeadRotation = this._mySessionChangeResyncHeadTransform.quat2_getRotationQuat(resyncHeadRotation);\r\n\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n flatCurrentHeadPosition = currentHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatCurrentHeadPosition);\r\n flatResyncHeadPosition = resyncHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatResyncHeadPosition);\r\n\r\n resyncMovement = flatResyncHeadPosition.vec3_sub(flatCurrentHeadPosition, resyncMovement);\r\n this.moveFeet(resyncMovement);\r\n\r\n if (this._myParams.myEnterSessionResyncHeight || this._myParams.myNextEnterSessionResyncHeight) {\r\n this._myParams.myNextEnterSessionResyncHeight = false;\r\n let resyncHeadHeight = this._getPositionEyesHeight(resyncHeadPosition);\r\n let currentHeadHeight = this._getPositionEyesHeight(currentHeadPosition);\r\n\r\n this._myHeightVRWithoutFloor = resyncHeadHeight + this._myParams.myForeheadExtraHeight;\r\n this._myHeightVRWithFloor = resyncHeadHeight + this._myParams.myForeheadExtraHeight;\r\n this._myHeightOffsetWithFloor = this._myHeightOffsetWithFloor + (resyncHeadHeight - currentHeadHeight);\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (resyncHeadHeight - currentHeadHeight);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n }\r\n\r\n this._resyncHeadRotationForward(resyncHeadRotation);\r\n } else {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n resyncHeadPosition = this._mySessionChangeResyncHeadTransform.quat2_getPosition(resyncHeadPosition);\r\n flatResyncHeadPosition = resyncHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatResyncHeadPosition);\r\n\r\n playerPosition = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getPosition(playerPosition);\r\n newPlayerPosition = flatResyncHeadPosition.vec3_add(playerPosition.vec3_componentAlongAxis(playerUp, newPlayerPosition), newPlayerPosition);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_setPosition(newPlayerPosition);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_resetPositionLocal();\r\n\r\n if (this._myParams.myExitSessionResyncHeight) {\r\n let resyncHeadHeight = this._getPositionEyesHeight(resyncHeadPosition);\r\n this._myHeightNonVR = resyncHeadHeight + this._myParams.myForeheadExtraHeight;\r\n }\r\n\r\n this._updateHeightOffset();\r\n\r\n if (this._myParams.myExitSessionResyncHeight || this._myParams.myExitSessionResetNonVRTransformLocal) {\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n } else {\r\n this._setCameraNonXRHeight(this._myHeightNonVROnEnterSession);\r\n }\r\n\r\n resyncHeadRotation = this._mySessionChangeResyncHeadTransform.quat2_getRotationQuat(resyncHeadRotation);\r\n\r\n if (this._myParams.myExitSessionRemoveRightTilt ||\r\n this._myParams.myExitSessionAdjustMaxVerticalAngle || !this._myParams.myExitSessionResyncVerticalAngle) {\r\n resyncHeadForward = resyncHeadRotation.quat_getForward(resyncHeadForward);\r\n resyncHeadUp = resyncHeadRotation.quat_getUp(resyncHeadUp);\r\n\r\n fixedHeadRight = resyncHeadForward.vec3_cross(playerUp, fixedHeadRight);\r\n fixedHeadRight.vec3_normalize(fixedHeadRight);\r\n\r\n if (!resyncHeadUp.vec3_isConcordant(playerUp)) {\r\n let angleForwardUp = resyncHeadForward.vec3_angle(playerUp);\r\n let negateAngle = 45;\r\n if (angleForwardUp > (180 - negateAngle) || angleForwardUp < negateAngle) {\r\n // This way I get a good fixed result for both head upside down and head rotated on forward\r\n // When the head is looking down and a bit backward (more than 135 degrees), I want the forward to actually\r\n // be the opposite because it's like u rotate back the head up and look forward again\r\n fixedHeadRight.vec3_negate(fixedHeadRight);\r\n }\r\n }\r\n\r\n if (fixedHeadRight.vec3_isZero(0.000001)) {\r\n fixedHeadRight = resyncHeadRotation.quat_getRight(fixedHeadRight);\r\n }\r\n\r\n fixedHeadUp = fixedHeadRight.vec3_cross(resyncHeadForward, fixedHeadUp);\r\n fixedHeadUp.vec3_normalize(fixedHeadUp);\r\n fixedHeadForward = fixedHeadUp.vec3_cross(fixedHeadRight, fixedHeadForward);\r\n fixedHeadForward.vec3_normalize(fixedHeadForward);\r\n\r\n fixedHeadRotation.quat_fromAxes(fixedHeadRight.vec3_negate(fixedHeadLeft), fixedHeadUp, fixedHeadForward);\r\n resyncHeadRotation.quat_copy(fixedHeadRotation);\r\n }\r\n\r\n if (this._myParams.myExitSessionAdjustMaxVerticalAngle || !this._myParams.myExitSessionResyncVerticalAngle) {\r\n resyncHeadUp = resyncHeadRotation.quat_getUp(resyncHeadUp);\r\n resyncHeadRight = resyncHeadRotation.quat_getRight(resyncHeadRight);\r\n\r\n let maxVerticalAngle = Math.max(0, this._myParams.myExitSessionMaxVerticalAngle - 0.0001);\r\n if (!this._myParams.myExitSessionResyncVerticalAngle) {\r\n maxVerticalAngle = 0;\r\n }\r\n\r\n let angleWithUp = Math.pp_angleClamp(resyncHeadUp.vec3_angleSigned(playerUp, resyncHeadRight));\r\n if (Math.abs(angleWithUp) > maxVerticalAngle) {\r\n let fixAngle = (Math.abs(angleWithUp) - maxVerticalAngle) * Math.pp_sign(angleWithUp);\r\n resyncHeadRotation = resyncHeadRotation.quat_rotateAxis(fixAngle, resyncHeadRight, resyncHeadRotation);\r\n }\r\n }\r\n\r\n this.setRotationHeadQuat(resyncHeadRotation);\r\n }\r\n\r\n this._mySessionChangeResyncHeadTransform = null;\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._resyncHeadRotationForward = function () {\r\n let playerUp = vec3_create();\r\n let resyncHeadForward = vec3_create();\r\n let resyncHeadUp = vec3_create();\r\n let fixedResyncHeadRotation = quat_create();\r\n return function _resyncHeadRotationForward(resyncHeadRotation) {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n resyncHeadForward = resyncHeadRotation.quat_getForward(resyncHeadForward);\r\n resyncHeadUp = resyncHeadRotation.quat_getUp(resyncHeadUp);\r\n fixedResyncHeadRotation.quat_copy(resyncHeadRotation);\r\n fixedResyncHeadRotation.quat_setUp(playerUp, resyncHeadForward);\r\n\r\n if (!resyncHeadUp.vec3_isConcordant(playerUp)) {\r\n // If it was upside down, it's like it has to rotate the neck back up,so the forward is actually on the opposite side\r\n fixedResyncHeadRotation.quat_rotateAxis(180, playerUp, fixedResyncHeadRotation);\r\n }\r\n\r\n this.setRotationFeetQuat(fixedResyncHeadRotation);\r\n return;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._setCameraNonXRHeight = function () {\r\n let cameraNonVRPosition = vec3_create();\r\n let cameraNonVRPositionLocalToPlayer = vec3_create();\r\n let adjustedCameraNonVRPosition = vec3_create();\r\n let playerTranform = mat4_create();\r\n return function _setCameraNonXRHeight(height) {\r\n let eyeHeight = height - this._myParams.myForeheadExtraHeight;\r\n cameraNonVRPosition = Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_getPosition(cameraNonVRPosition);\r\n cameraNonVRPositionLocalToPlayer = cameraNonVRPosition.vec3_convertPositionToLocal(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), cameraNonVRPositionLocalToPlayer);\r\n cameraNonVRPositionLocalToPlayer.vec3_set(cameraNonVRPositionLocalToPlayer[0], eyeHeight, cameraNonVRPositionLocalToPlayer[2]);\r\n adjustedCameraNonVRPosition = cameraNonVRPositionLocalToPlayer.vec3_convertPositionToWorld(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), adjustedCameraNonVRPosition);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_setPosition(adjustedCameraNonVRPosition);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._updateHeightOffset = function () {\r\n return function _updateHeightOffset() {\r\n if (this._mySessionActive) {\r\n if (XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine)) {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithFloor, 0);\r\n } else {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithoutFloor, 0);\r\n }\r\n } else {\r\n if (this._shouldNonVRUseVRWithFloor()) {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithFloor, 0);\r\n } else if (this._shouldNonVRUseVRWithoutFloor()) {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithoutFloor, 0);\r\n } else if (this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR) {\r\n this._setReferenceSpaceHeightOffset(0, 0);\r\n } else {\r\n this._setReferenceSpaceHeightOffset(this._myHeightNonVR, this._myParams.myForeheadExtraHeight);\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._setReferenceSpaceHeightOffset = function () {\r\n let referenceSpacePosition = vec3_create();\r\n let referenceSpacePositionLocalToPlayer = vec3_create();\r\n let adjustedReferenceSpacePosition = vec3_create();\r\n let playerTranform = mat4_create();\r\n return function _setReferenceSpaceHeightOffset(offset, amountToRemove) {\r\n if (offset != null) {\r\n referenceSpacePosition = Globals.getPlayerObjects(this._myParams.myEngine).myReferenceSpace.pp_getPosition(referenceSpacePosition);\r\n referenceSpacePositionLocalToPlayer = referenceSpacePosition.vec3_convertPositionToLocal(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), referenceSpacePositionLocalToPlayer);\r\n referenceSpacePositionLocalToPlayer.vec3_set(referenceSpacePositionLocalToPlayer[0], offset - amountToRemove, referenceSpacePositionLocalToPlayer[2]);\r\n adjustedReferenceSpacePosition = referenceSpacePositionLocalToPlayer.vec3_convertPositionToWorld(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), adjustedReferenceSpacePosition);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myReferenceSpace.pp_setPosition(adjustedReferenceSpacePosition);\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._getHeadTransformFromLocal = function () {\r\n return function _getHeadTransformFromLocal(transformLocal) {\r\n return this._myCurrentHead.pp_convertTransformLocalToWorldQuat(transformLocal);\r\n };\r\n}();", "import { PhysicsLayerFlags } from \"../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { CollisionCheckBridge } from \"../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { CollisionCheckUtils } from \"../../../character_controller/collision/legacy/collision_check/collision_check_utils.js\";\r\nimport { CollisionCheckParams, CollisionRuntimeParams } from \"../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\n\r\nexport let PlayerTransformManagerSyncFlag = {\r\n BODY_COLLIDING: 0,\r\n HEAD_COLLIDING: 1,\r\n FAR: 2,\r\n FLOATING: 3\r\n};\r\n\r\nexport class PlayerTransformManagerParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n\r\n this.myMovementCollisionCheckParams = null;\r\n this.myTeleportCollisionCheckParams = null; // Can be left null and will be generated from the movement one\r\n this.myTeleportCollisionCheckParamsCopyFromMovement = false;\r\n this.myTeleportCollisionCheckParamsCheck360 = false;\r\n\r\n this.myAlwaysSyncPositionWithReal = false;\r\n this.myAlwaysSyncHeadPositionWithReal = false;\r\n\r\n // Sync for VR and Non VR\r\n this.mySyncEnabledFlagMap = new Map();\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, true);\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, true);\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FAR, true);\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, true);\r\n\r\n this.mySyncPositionFlagMap = new Map();\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, true);\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.FAR, true);\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, true);\r\n\r\n this.mySyncPositionHeadFlagMap = new Map();\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, true);\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n this.mySyncRotationFlagMap = new Map();\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n this.mySyncHeightFlagMap = new Map();\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n this.myIsLeaningValidAboveDistance = false; // Used to make the character fall if it's leaning too much\r\n this.myLeaningValidDistance = 0;\r\n\r\n // Settings for both hop and lean\r\n this.myIsFloatingValidIfVerticalMovement = false;\r\n this.myIsFloatingValidIfVerticalMovementAndRealOnGround = false; // #TODO This is more an override\r\n this.myIsFloatingValidIfRealOnGround = false;\r\n this.myIsFloatingValidIfSteepGround = false;\r\n this.myIsFloatingValidIfVerticalMovementAndSteepGround = false;\r\n\r\n this.myFloatingSplitCheckEnabled = false;\r\n this.myFloatingSplitCheckMinLength = null;\r\n this.myFloatingSplitCheckMaxLength = null;\r\n this.myFloatingSplitCheckMaxSteps = null;\r\n this.myFloatingSplitCheckStepEqualLength = false;\r\n this.myFloatingSplitCheckStepEqualLengthMinLength = 0;\r\n\r\n this.myMaxDistanceFromRealToSyncEnabled = false;\r\n this.myMaxDistanceFromRealToSync = 0;\r\n // Max distance to resync valid with head, if you head is further do not resync\r\n\r\n this.myHeadRadius = 0;\r\n this.myHeadCollisionBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHeadCollisionObjectsToIgnore = [];\r\n // Can be used if when resetting to feet there might be dynamic objects which you would like to exclude for this reset check,\r\n // but you might still to normally avoid, for example for opbject you can grab and therefore put close to the ehad, which are not a big deal\r\n // and you can accept being able to see inside them when resetting the head, but not for normal movements\r\n this.myHeadCollisionBlockLayerFlagsForResetToFeet = null;\r\n\r\n this.myRotateOnlyIfSynced = false;\r\n this.myResetRealResetRotationIfUpChanged = true;\r\n\r\n // This make it so the head must be able to reach from the feet to the real head, sort of\r\n // like you were teleported in a space squashed to your feet and then have to get up\r\n // It can be used to prevent being able to see through the floor, since when the head is reset to the real one\r\n // if the real one is on the other side of the above floor there would be no collision\r\n // The risk is that, if you have objects close to your feet, your head could get stuck on them while trying to \"get up\"\r\n // and the view could be obscured thinking you have those objects in your view\r\n this.myResetHeadToFeetInsteadOfReal = false;\r\n\r\n // This other flag is to fix the above issue, doing the \"squash and get up\" only if the head is not reachable normally\r\n // The above issue can still happen but should be more rare, only if you teleport to a place where there could be garbage stuff\r\n this.myResetHeadToFeetInsteadOfRealOnlyIfRealNotReachable = false;\r\n\r\n this.myResetHeadToFeetMoveTowardReal = true;\r\n\r\n // Can be used to specify that the head should reset a bit above the actual feet level, so to avoid small objects that could very frequently\r\n // happen to be close to the floor\r\n this.myResetHeadToFeetUpOffset = 0.25;\r\n this.myResetHeadToFeetGroudnAngleIgnoreEnabled = false;\r\n\r\n this.myResetHeadToRealMinDistance = 0;\r\n\r\n //this.myDistanceToStartApplyGravityWhenFloating = 0; // This should be moved outisde, that is, if it is floating stop gravity\r\n\r\n // Set valid if head synced (head manager)\r\n\r\n this.myRealMovementAllowVerticalAdjustments = false;\r\n // This true means that the real movement should also snap on ground or fix the vertical to pop from it\r\n // You may want this if u want that while real moving u can also climb stairs\r\n\r\n // Real movement apply vertical snap or not (other option to apply gravity) \r\n // (gravity inside this class?) only when movement is applied not for head only)\r\n\r\n this.myUpdatePositionValid = false;\r\n this.myUpdatePositionHeadValid = true;\r\n this.myUpdateRealPositionValid = false;\r\n this.myUpdateRealPositionHeadValid = false;\r\n\r\n this.myMinHeight = null;\r\n this.myMaxHeight = null;\r\n\r\n // These and the callbacks does not makes much sense\r\n // The colliding things are made to not sync the real position, but if the height is below and the body is not colliding\r\n // There is not reason not to resync, even if u put the real back on the valid the height will stay the same\r\n // If someone puts the head in the ground, there is no way for me to resync and make the head pop out sadly\r\n // In this case u either accept that u can move without seeing, or stop moving until the obscure is on\r\n this.myIsBodyCollidingWhenHeightBelowValue = null; // Could be removed and added with the custom check callback if u want it\r\n this.myIsBodyCollidingWhenHeightAboveValue = null;\r\n\r\n this.myIsBodyCollidingExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n this.myIsLeaningExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n this.myIsHoppingExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n this.myIsFarExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n\r\n this.myResetToValidOnEnterSession = false;\r\n this.myResetToValidOnExitSession = false;\r\n\r\n this.myAlwaysResetRealPositionNonVR = false;\r\n this.myAlwaysResetRealRotationNonVR = false;\r\n this.myAlwaysResetRealHeightNonVR = false;\r\n\r\n this.myAlwaysResetRealPositionVR = false;\r\n this.myAlwaysResetRealRotationVR = false;\r\n this.myAlwaysResetRealHeightVR = false;\r\n\r\n this.myNeverResetRealPositionNonVR = false;\r\n this.myNeverResetRealRotationNonVR = false;\r\n this.myNeverResetRealHeightNonVR = false;\r\n\r\n this.myResetRealHeightNonVROnExitSession = false;\r\n\r\n this.myNeverResetRealPositionVR = false;\r\n this.myNeverResetRealRotationVR = false;\r\n this.myNeverResetRealHeightVR = false;\r\n\r\n this.myResetRealOnMove = false;\r\n this.myResetRealOnTeleport = false;\r\n\r\n this.mySyncPositionDisabled = false;\r\n\r\n this.myEngine = engine;\r\n\r\n this.myDebugEnabled = false;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\nexport class PlayerTransformManager {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myRealMovementCollisionCheckParams = null;\r\n this._generateRealMovementParamsFromMovementParams();\r\n\r\n this._myCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myRealCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n if (this._myParams.myTeleportCollisionCheckParamsCopyFromMovement) {\r\n this._generateTeleportParamsFromMovementParams();\r\n }\r\n\r\n this._myHeadCollisionCheckParams = null;\r\n this._setupHeadCollisionCheckParams();\r\n\r\n this._myValidPosition = vec3_create();\r\n this._myValidRotationQuat = quat_create();\r\n this._myValidHeight = 0;\r\n this._myValidPositionHead = vec3_create();\r\n this._myValidPositionHeadBackupForResetToFeet = vec3_create();\r\n\r\n this._myIsBodyColliding = false;\r\n this._myIsHeadColliding = false;\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n this._myIsFar = false;\r\n\r\n this._myLastValidMovementDirection = vec3_create();\r\n this._myIsPositionValid = false;\r\n this._myIsPositionHeadValid = false;\r\n this._myIsRealPositionValid = false;\r\n this._myIsRealHeadositionValid = false;\r\n\r\n this._myResetRealOnHeadSynced = false;\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n\r\n this._myActive = true;\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this.resetToReal(true);\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, true, this._myParams.myEngine);\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setActive(active) {\r\n this._myActive = active;\r\n }\r\n\r\n // update should be before to check the new valid transform and if the head new transform is fine\r\n // then update movements, so that they will use the proper transform\r\n // pre/post update?\r\n // For sliding if previous frame no horizontal movement then reset sliding on pre update\r\n // In generale capire come fare per risolvere i problemi quando c'è un move solo verticale che sputtana i dati dello sliding precedente\r\n // che servono per far slidare bene anche dopo, magari un flag per dire non aggiornare le cose relative al movimento orizzontale\r\n // o un move check solo verticale\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n move(movement, outCollisionRuntimeParams = null, forceMove = false) {\r\n // Collision runtime will copy the result, so that u can use that for later reference like if it was sliding\r\n // Maybe there should be a way to sum all the things happened for proper movement in a summary runtime\r\n // or maybe the move should be done once per frame, or at least in theory\r\n\r\n // Collision check and move\r\n\r\n // Move should move the valid transform, but also move the player object so that they head, even is colliding is dragged with it\r\n // Also teleport, should get the difference from previous and move the player object, this will keep the relative position head-to-valid\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPosition(position, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n // Collision check and teleport, if force teleport teleport in any case\r\n // Use current valid rotation\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPositionRotationQuat(position, rotationQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n // Collision check and teleport, if force teleport teleport in any case\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportTransformQuat(transformQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n // Collision check and teleport, if force teleport teleport in any case\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n // Quick way to force teleport to a position and reset the real to this\r\n forceTeleportAndReset(position, rotationQuat) {\r\n this.teleportPositionRotationQuat(position, rotationQuat, null, true);\r\n\r\n this._myPlayerTransformManager.resetReal(true, true, undefined, undefined, undefined, true);\r\n }\r\n\r\n rotateQuat(rotationQuat) {\r\n // Implemented outside class definition\r\n }\r\n\r\n setRotationQuat(rotationQuat) {\r\n // Implemented outside class definition\r\n }\r\n\r\n setHeight(height, forceSet = false) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPlayer() {\r\n return this._myParams.myPlayerHeadManager.getPlayer();\r\n }\r\n\r\n getHead() {\r\n return this._myParams.myPlayerHeadManager.getHead();\r\n }\r\n\r\n getTransformQuat(outTransformQuat = quat2_create()) {\r\n return outTransformQuat.quat2_setPositionRotationQuat(this.getPosition(this._myValidPosition), this.getRotationQuat(this._myValidRotationQuat));\r\n }\r\n\r\n getPosition(outPosition = vec3_create()) {\r\n return outPosition.vec3_copy(this._myValidPosition);\r\n }\r\n\r\n getRotationQuat(outRotation = quat_create()) {\r\n return outRotation.quat_copy(this._myValidRotationQuat);\r\n }\r\n\r\n getPositionHead(outPosition = vec3_create()) {\r\n return outPosition.vec3_copy(this._myValidPositionHead);\r\n }\r\n\r\n getTransformHeadQuat(outTransformQuat = quat2_create()) {\r\n return outTransformQuat.quat2_setPositionRotationQuat(this.getPositionHead(this._myValidPositionHead), this.getRotationQuat(this._myValidRotationQuat));\r\n }\r\n\r\n getHeight() {\r\n return this._myValidHeight;\r\n }\r\n\r\n getTransformRealQuat(outTransformQuat = quat2_create()) {\r\n return this.getPlayerHeadManager().getTransformFeetQuat(outTransformQuat);\r\n }\r\n\r\n getTransformHeadRealQuat(outTransformQuat = quat2_create()) {\r\n return this.getPlayerHeadManager().getTransformHeadQuat(outTransformQuat);\r\n }\r\n\r\n getPositionReal(outPosition = vec3_create()) {\r\n return this.getPlayerHeadManager().getPositionFeet(outPosition);\r\n }\r\n\r\n getPositionHeadReal(outPosition = vec3_create()) {\r\n return this.getPlayerHeadManager().getPositionHead(outPosition);\r\n }\r\n\r\n getRotationRealQuat(outRotation = quat_create()) {\r\n return this.getPlayerHeadManager().getRotationFeetQuat(outRotation);\r\n }\r\n\r\n getHeightReal() {\r\n return this._myParams.myPlayerHeadManager.getHeightHead();\r\n }\r\n\r\n isSynced(syncFlagMap = null) {\r\n let isBodyColliding = this.isBodyColliding() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.BODY_COLLIDING));\r\n let isHeadColliding = this.isHeadColliding() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.HEAD_COLLIDING));\r\n let isFar = this.isFar() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.FAR));\r\n let isFloating = this.isFloating() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.FLOATING));\r\n return !isBodyColliding && !isHeadColliding && !isFar && !isFloating;\r\n }\r\n\r\n resetReal(resetPosition = true, resetRotation = false, resetHeight = false, resetHeadToReal = true, updateValidToReal = false, ignoreResetHeadMinDistance = false) {\r\n // Implemented outside class definition\r\n }\r\n\r\n updateValidToReal() {\r\n this._updateValidToReal(0);\r\n }\r\n\r\n updateValidHeadToRealHead() {\r\n this._updateValidHeadToRealHead(0);\r\n }\r\n\r\n updateValidHeadToRealHeadIfNeeded() {\r\n if (this._myResetHeadToFeetDirty) {\r\n this._updateValidHeadToRealHead(0);\r\n }\r\n }\r\n\r\n resetToReal(resetToPlayerInsteadOfHead = false, updateValidToReal = false) {\r\n if (resetToPlayerInsteadOfHead) {\r\n this._myValidPosition = this.getPlayerHeadManager().getPlayer().pp_getPosition(this._myValidPosition);\r\n } else {\r\n this._myValidPosition = this.getPositionReal(this._myValidPosition);\r\n }\r\n\r\n if (!this._myParams.myAlwaysSyncPositionWithReal) {\r\n this._myValidPositionHead = this.getPositionHeadReal(this._myValidPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this._myResetHeadToFeetDirty = false;\r\n }\r\n\r\n if (resetToPlayerInsteadOfHead) {\r\n this._myValidRotationQuat = this.getPlayerHeadManager().getPlayer().pp_getRotationQuat(this._myValidRotationQuat);\r\n } else {\r\n this._myValidRotationQuat = this.getRotationRealQuat(this._myValidRotationQuat);\r\n }\r\n\r\n this._myValidHeight = Math.pp_clamp(this.getHeightReal(), this._myParams.myMinHeight, this._myParams.myMaxHeight);\r\n\r\n if (updateValidToReal) {\r\n this._updateValidToReal(0);\r\n }\r\n }\r\n\r\n resetHeadToReal() {\r\n if (!this._myParams.myAlwaysSyncPositionWithReal) {\r\n this._myValidPositionHead = this.getPositionHeadReal(this._myValidPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this._myResetHeadToFeetDirty = false;\r\n }\r\n }\r\n\r\n resetHeadToFeet() {\r\n // Implemented outside class definition\r\n }\r\n\r\n isBodyColliding() {\r\n return this._myIsBodyColliding;\r\n }\r\n\r\n isHeadColliding() {\r\n return this._myIsHeadColliding;\r\n }\r\n\r\n isFloating() {\r\n return this.isLeaning() || this.isHopping();\r\n }\r\n\r\n isLeaning() {\r\n return this._myIsLeaning;\r\n }\r\n\r\n isHopping() {\r\n return this._myIsHopping;\r\n }\r\n\r\n isFar() {\r\n return this._myIsFar;\r\n }\r\n\r\n getDistanceToReal() {\r\n // Implemented outside class definition\r\n }\r\n\r\n getDistanceToRealHead() {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPlayerHeadManager() {\r\n return this._myParams.myPlayerHeadManager;\r\n }\r\n\r\n getMovementCollisionCheckParams() {\r\n return this._myParams.myMovementCollisionCheckParams;\r\n }\r\n\r\n getTeleportCollisionCheckParams() {\r\n return this._myParams.myTeleportCollisionCheckParams;\r\n }\r\n\r\n collisionCheckParamsUpdated() {\r\n if (this._myParams.myTeleportCollisionCheckParamsCopyFromMovement) {\r\n this._generateTeleportParamsFromMovementParams();\r\n }\r\n\r\n this._generateRealMovementParamsFromMovementParams();\r\n }\r\n\r\n isPositionValid() {\r\n return this._myIsPositionValid;\r\n }\r\n\r\n isPositionHeadValid() {\r\n return this._myIsPositionHeadValid;\r\n }\r\n\r\n isPositionRealValid() {\r\n return this._myIsRealPositionValid;\r\n }\r\n\r\n isPositionHeadRealValid() {\r\n return this._myIsRealPositionHeadValid;\r\n }\r\n\r\n getCollisionRuntimeParams() {\r\n return this._myCollisionRuntimeParams;\r\n }\r\n\r\n getRealCollisionRuntimeParams() {\r\n return this._myRealCollisionRuntimeParams;\r\n }\r\n\r\n _updateCollisionHeight() {\r\n let validHeight = this.getHeight();\r\n let realHeight = Math.pp_clamp(this.getHeightReal(), this._myParams.myMinHeight, this._myParams.myMaxHeight);\r\n\r\n this._myParams.myMovementCollisionCheckParams.myHeight = validHeight;\r\n this._myParams.myTeleportCollisionCheckParams.myHeight = validHeight;\r\n\r\n this._myRealMovementCollisionCheckParams.myHeight = realHeight;\r\n }\r\n\r\n _setupHeadCollisionCheckParams() {\r\n this._myHeadCollisionCheckParams = new CollisionCheckParams();\r\n let params = this._myHeadCollisionCheckParams;\r\n\r\n params.myRadius = this._myParams.myHeadRadius;\r\n params.myDistanceFromFeetToIgnore = 0;\r\n params.myDistanceFromHeadToIgnore = 0;\r\n\r\n params.mySplitMovementEnabled = true;\r\n params.mySplitMovementMaxLengthEnabled = true;\r\n params.mySplitMovementMaxLength = params.myRadius * 0.75;\r\n params.mySplitMovementMinLengthEnabled = true;\r\n params.mySplitMovementMinLength = params.mySplitMovementMaxLength;\r\n params.mySplitMovementMaxStepsEnabled = true;\r\n params.mySplitMovementMaxSteps = 3;\r\n params.mySplitMovementStopWhenHorizontalMovementCanceled = true;\r\n params.mySplitMovementStopWhenVerticalMovementCanceled = true;\r\n\r\n params.myHorizontalMovementCheckEnabled = true;\r\n params.myHorizontalMovementRadialStepAmount = 1;\r\n params.myHorizontalMovementCheckDiagonalOutward = true;\r\n params.myHorizontalMovementCheckDiagonalInward = true;\r\n params.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = true;\r\n params.myHorizontalMovementCheckVerticalDiagonalUpwardInward = true;\r\n\r\n params.myHorizontalPositionCheckEnabled = true;\r\n params.myHalfConeAngle = 180;\r\n params.myHalfConeSliceAmount = 3;\r\n params.myCheckConeBorder = true;\r\n params.myCheckConeRay = true;\r\n params.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = false;\r\n params.myHorizontalPositionCheckVerticalDirectionType = 0;\r\n\r\n params.myHeight = params.myRadius; // On purpose the height \"radius\" is half, to avoid hitting before with head than body collision (through height)\r\n params.myPositionOffsetLocal.vec3_set(0, -params.myRadius / 2, 0);\r\n\r\n params.myCheckHeight = true;\r\n params.myCheckHeightVerticalMovement = true;\r\n params.myCheckHeightVerticalPosition = true;\r\n params.myHeightCheckStepAmountMovement = 2;\r\n params.myHeightCheckStepAmountPosition = 2;\r\n params.myCheckHeightTopMovement = true;\r\n params.myCheckHeightTopPosition = true;\r\n params.myCheckVerticalStraight = true;\r\n\r\n params.myCheckVerticalFixedForwardEnabled = true;\r\n params.myCheckVerticalFixedForward = vec3_create(0, 0, 1);\r\n\r\n params.myCheckHorizontalFixedForwardEnabled = true;\r\n params.myCheckHorizontalFixedForward = vec3_create(0, 0, 1);\r\n\r\n params.myVerticalMovementCheckEnabled = true;\r\n params.myVerticalPositionCheckEnabled = true;\r\n\r\n params.myGroundCircumferenceAddCenter = true;\r\n params.myGroundCircumferenceSliceAmount = 6;\r\n params.myGroundCircumferenceStepAmount = 2;\r\n params.myGroundCircumferenceRotationPerStep = 30;\r\n params.myFeetRadius = params.myRadius;\r\n\r\n params.myHorizontalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlags);\r\n params.myHorizontalObjectsToIgnore.pp_copy(this._myParams.myHeadCollisionObjectsToIgnore);\r\n params.myVerticalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlags);\r\n params.myVerticalObjectsToIgnore.pp_copy(this._myParams.myHeadCollisionObjectsToIgnore);\r\n\r\n params.myDebugEnabled = false;\r\n\r\n params.myDebugHorizontalMovementEnabled = false;\r\n params.myDebugHorizontalPositionEnabled = false;\r\n params.myDebugVerticalMovementEnabled = false;\r\n params.myDebugVerticalPositionEnabled = false;\r\n params.myDebugSlidingEnabled = false;\r\n params.myDebugGroundInfoEnabled = false;\r\n params.myDebugCeilingInfoEnabled = false;\r\n params.myDebugRuntimeParamsEnabled = false;\r\n params.myDebugMovementEnabled = false;\r\n }\r\n\r\n _generateTeleportParamsFromMovementParams() {\r\n if (this._myParams.myTeleportCollisionCheckParams == null) {\r\n this._myParams.myTeleportCollisionCheckParams = new CollisionCheckParams();\r\n }\r\n\r\n if (this._myParams.myTeleportCollisionCheckParamsCheck360) {\r\n this._myParams.myTeleportCollisionCheckParams = CollisionCheckUtils.generate360TeleportParamsFromMovementParams(this._myParams.myMovementCollisionCheckParams, this._myParams.myTeleportCollisionCheckParams);\r\n } else {\r\n this._myParams.myTeleportCollisionCheckParams.copy(this._myParams.myMovementCollisionCheckParams);\r\n }\r\n }\r\n\r\n _generateRealMovementParamsFromMovementParams() {\r\n if (this._myRealMovementCollisionCheckParams == null) {\r\n this._myRealMovementCollisionCheckParams = new CollisionCheckParams();\r\n }\r\n\r\n let params = this._myRealMovementCollisionCheckParams;\r\n params.copy(this._myParams.myMovementCollisionCheckParams);\r\n\r\n params.mySplitMovementEnabled = true;\r\n params.mySplitMovementMaxLengthEnabled = true;\r\n params.mySplitMovementMaxLength = params.myRadius * 0.75;\r\n params.mySplitMovementMinLengthEnabled = true;\r\n params.mySplitMovementMinLength = params.mySplitMovementMaxLength;\r\n params.mySplitMovementMaxStepsEnabled = true;\r\n params.mySplitMovementMaxSteps = 3;\r\n params.mySplitMovementStopWhenHorizontalMovementCanceled = true;\r\n params.mySplitMovementStopWhenVerticalMovementCanceled = true;\r\n\r\n params.mySlidingEnabled = false;\r\n\r\n if (!this._myParams.myRealMovementAllowVerticalAdjustments) {\r\n params.mySnapOnGroundEnabled = false;\r\n params.mySnapOnCeilingEnabled = false;\r\n params.myGroundPopOutEnabled = false;\r\n params.myCeilingPopOutEnabled = false;\r\n params.myAdjustVerticalMovementWithGroundAngleDownhill = false;\r\n params.myAdjustVerticalMovementWithGroundAngleUphill = false;\r\n params.myAdjustVerticalMovementWithCeilingAngleDownhill = false;\r\n params.myAdjustVerticalMovementWithCeilingAngleUphill = false;\r\n params.myAdjustHorizontalMovementWithGroundAngleDownhill = false;\r\n params.myAdjustHorizontalMovementWithCeilingAngleDownhill = false;\r\n params.myVerticalMovementReduceEnabled = false;\r\n }\r\n\r\n //params.myHorizontalMovementGroundAngleIgnoreHeight = 0.1 * 3;\r\n //params.myHorizontalMovementCeilingAngleIgnoreHeight = 0.1 * 3;\r\n\r\n params.myIsOnGroundIfInsideHit = true;\r\n\r\n params.myDebugEnabled = false;\r\n\r\n params.myDebugHorizontalMovementEnabled = false;\r\n params.myDebugHorizontalPositionEnabled = false;\r\n params.myDebugVerticalMovementEnabled = false;\r\n params.myDebugVerticalPositionEnabled = false;\r\n params.myDebugSlidingEnabled = false;\r\n params.myDebugGroundInfoEnabled = false;\r\n params.myDebugCeilingInfoEnabled = false;\r\n params.myDebugRuntimeParamsEnabled = false;\r\n params.myDebugMovementEnabled = false;\r\n }\r\n\r\n _onXRSessionStart(manualCall, session) {\r\n if (!manualCall) {\r\n if (this._myActive) {\r\n if (this._myParams.myResetToValidOnEnterSession) {\r\n this._myResetRealOnHeadSynced = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _onXRSessionEnd() {\r\n if (this._myActive) {\r\n if (this._myParams.myResetToValidOnExitSession) {\r\n this._myResetRealOnHeadSynced = true;\r\n }\r\n }\r\n }\r\n\r\n _updatePositionsValid(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateValidToReal(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateValidHeadToRealHead() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _debugUpdate(dt) {\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawPoint(0, this._myValidPosition, vec4_create(1, 0, 0, 1), 0.05);\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawLineEnd(0, this._myValidPosition, this.getPositionReal(), vec4_create(1, 0, 0, 1), 0.05);\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawLine(0, this._myValidPosition, this._myValidRotationQuat.quat_getForward(), 0.15, vec4_create(0, 1, 0, 1), 0.025);\r\n\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawPoint(0, this._myValidPositionHead, vec4_create(1, 1, 0, 1), 0.05);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerTransformManager.prototype.getDistanceToReal = function () {\r\n let position = vec3_create();\r\n let realPosition = vec3_create();\r\n return function getDistanceToReal() {\r\n realPosition = this.getPositionReal(realPosition);\r\n return realPosition.vec3_distance(this.getPosition(position));\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.getDistanceToRealHead = function () {\r\n let position = vec3_create();\r\n let realPosition = vec3_create();\r\n return function getDistanceToRealHead() {\r\n realPosition = this.getPositionHeadReal(realPosition);\r\n return realPosition.vec3_distance(this.getPositionHead(position));\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.resetReal = function () {\r\n let realUp = vec3_create();\r\n let validUp = vec3_create();\r\n let position = vec3_create();\r\n let rotationQuat = quat_create();\r\n\r\n let positionHeadReal = vec3_create();\r\n let distanceToRealHead = vec3_create();\r\n let validPositionHeadBackupForResetToFeet = vec3_create();\r\n return function resetReal(resetPosition = true, resetRotation = false, resetHeight = false, resetHeadToReal = true, updateValidToReal = false, ignoreResetHeadMinDistance = false) {\r\n let playerHeadManager = this.getPlayerHeadManager();\r\n\r\n if (resetPosition) {\r\n playerHeadManager.teleportPositionFeet(this.getPosition(position));\r\n }\r\n\r\n realUp = this.getPlayerHeadManager().getRotationFeetQuat(rotationQuat).quat_getUp(realUp);\r\n validUp = this.getRotationQuat(rotationQuat).quat_getUp(validUp);\r\n\r\n if (resetRotation || (realUp.vec3_angle(validUp) > Math.PP_EPSILON_DEGREES && this._myParams.myResetRealResetRotationIfUpChanged)) {\r\n playerHeadManager.setRotationFeetQuat(this.getRotationQuat(rotationQuat), false);\r\n }\r\n\r\n if (resetHeight) {\r\n playerHeadManager.setHeightHead(this.getHeight(), true);\r\n }\r\n\r\n if (updateValidToReal) {\r\n this._updateValidToReal(0);\r\n }\r\n\r\n if (resetHeadToReal) {\r\n positionHeadReal = this.getPositionHeadReal(positionHeadReal);\r\n distanceToRealHead = this._myValidPositionHead.vec3_distance(positionHeadReal);\r\n if (ignoreResetHeadMinDistance || distanceToRealHead >= this._myParams.myResetHeadToRealMinDistance) {\r\n if (this._myParams.myResetHeadToFeetInsteadOfRealOnlyIfRealNotReachable) {\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = true;\r\n validPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n this.resetHeadToFeet();\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(validPositionHeadBackupForResetToFeet);\r\n } else if (this._myParams.myResetHeadToFeetInsteadOfReal) {\r\n this.resetHeadToFeet();\r\n } else {\r\n this.resetHeadToReal();\r\n }\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.update = function () {\r\n return function update(dt) {\r\n // #TODO This should update ground and ceiling info but not sliding info \r\n\r\n if (this._myResetRealOnHeadSynced) {\r\n if (this.getPlayerHeadManager().isSynced()) {\r\n this._myResetRealOnHeadSynced = false;\r\n if (XRUtils.isSessionActive(this._myParams.myEngine)) {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionVR,\r\n !this._myParams.myNeverResetRealRotationVR,\r\n !this._myParams.myNeverResetRealHeightVR,\r\n true,\r\n true);\r\n } else {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionNonVR,\r\n !this._myParams.myNeverResetRealRotationNonVR,\r\n !this._myParams.myNeverResetRealHeightNonVR && this._myParams.myResetRealHeightNonVROnExitSession,\r\n true,\r\n true);\r\n }\r\n }\r\n }\r\n\r\n this._updateValidToReal(dt);\r\n this._updatePositionsValid(dt);\r\n\r\n if (this._myParams.myDebugEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n this._debugUpdate(dt);\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype._updateValidToReal = function () {\r\n let movementToCheck = vec3_create();\r\n let position = vec3_create();\r\n let positionReal = vec3_create();\r\n let transformQuat = quat2_create();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n let newPosition = vec3_create();\r\n let movementStep = vec3_create();\r\n let currentMovementStep = vec3_create();\r\n let transformUp = vec3_create();\r\n let verticalMovement = vec3_create();\r\n let movementChecked = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let floatingTransformQuat = quat2_create();\r\n return function _updateValidToReal(dt) {\r\n // Check if new head is ok and update the data\r\n // If head is not synced (blurred or session changing) avoid this and keep last valid\r\n if (this.getPlayerHeadManager().isSynced()) {\r\n this._updateCollisionHeight();\r\n\r\n this._myIsBodyColliding = false;\r\n this._myIsHeadColliding = false;\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n this._myIsFar = false;\r\n\r\n movementToCheck = this.getPositionReal(positionReal).vec3_sub(this.getPosition(position), movementToCheck);\r\n if (movementToCheck.vec3_length() > 0.0001) {\r\n this._myLastValidMovementDirection = movementToCheck.vec3_normalize(this._myLastValidMovementDirection);\r\n }\r\n\r\n // Far\r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.FAR)) {\r\n if (this._myParams.myMaxDistanceFromRealToSyncEnabled && movementToCheck.vec3_length() > this._myParams.myMaxDistanceFromRealToSync) {\r\n this._myIsFar = true;\r\n } else if (this._myParams.myIsFarExtraCheckCallback != null && this._myParams.myIsFarExtraCheckCallback(this)) {\r\n this._myIsFar = true;\r\n }\r\n }\r\n\r\n // Body Colliding\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n collisionRuntimeParams.myIsOnGround = true; // #TODO Temp as long as surface infos are not actually updated\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n newPosition.vec3_copy(this._myValidPosition);\r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.BODY_COLLIDING)) {\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).move(movementToCheck, transformQuat, this._myRealMovementCollisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !collisionRuntimeParams.myVerticalMovementCanceled) {\r\n if (Math.pp_clamp(this._myRealMovementCollisionCheckParams.myHeight, this._myParams.myIsBodyCollidingWhenHeightBelowValue,\r\n this._myParams.myIsBodyCollidingWhenHeightAboveValue) != this._myRealMovementCollisionCheckParams.myHeight) {\r\n this._myIsBodyColliding = true;\r\n } else {\r\n if (this._myParams.myIsBodyCollidingExtraCheckCallback != null && this._myParams.myIsBodyCollidingExtraCheckCallback(this)) {\r\n this._myIsBodyColliding = true;\r\n } else {\r\n this._myIsBodyColliding = false;\r\n newPosition.vec3_copy(collisionRuntimeParams.myNewPosition);\r\n }\r\n }\r\n } else {\r\n this._myIsBodyColliding = true;\r\n }\r\n }\r\n\r\n if (this._myParams.myAlwaysSyncPositionWithReal) {\r\n newPosition.vec3_copy(positionReal);\r\n }\r\n\r\n // Floating \r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.FLOATING)) {\r\n\r\n if (!this._myIsBodyColliding) {\r\n movementToCheck = newPosition.vec3_sub(position, movementToCheck);\r\n } else {\r\n movementToCheck = positionReal.vec3_sub(position, movementToCheck);\r\n }\r\n\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n floatingTransformQuat.quat2_setPositionRotationQuat(this._myValidPosition, this._myValidRotationQuat);\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).updateSurfaceInfo(floatingTransformQuat, this._myRealMovementCollisionCheckParams, collisionRuntimeParams);\r\n // #TODO Utilizzare on ground del body gia calcolato, ma ora non c'è quindi va bene così\r\n\r\n if (collisionRuntimeParams.myIsOnGround) {\r\n transformUp = transformQuat.quat2_getUp(transformUp);\r\n verticalMovement = movementToCheck.vec3_componentAlongAxis(transformUp, verticalMovement);\r\n let isVertical = !verticalMovement.vec3_isZero(0.00001);\r\n if (!isVertical || !this._myParams.myIsFloatingValidIfVerticalMovement) {\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movementToCheck);\r\n if (!movementToCheck.vec3_isZero(0.00001) && this._myParams.myFloatingSplitCheckEnabled) {\r\n let minLength = this._myParams.myFloatingSplitCheckMinLength;\r\n let maxLength = this._myParams.myFloatingSplitCheckMaxLength;\r\n let maxSteps = this._myParams.myFloatingSplitCheckMaxSteps != null ? this._myParams.myFloatingSplitCheckMaxSteps : 1;\r\n\r\n let movementLength = movementToCheck.vec3_length();\r\n let equalStepLength = movementLength / maxSteps;\r\n\r\n let stepLength = Math.pp_clamp(equalStepLength, minLength, maxLength);\r\n if (stepLength != equalStepLength) {\r\n movementStepAmount = Math.ceil(movementLength / stepLength);\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(stepLength, movementStep);\r\n\r\n if (this._myParams.myFloatingSplitCheckMaxSteps != null) {\r\n movementStepAmount = Math.min(movementStepAmount, maxSteps);\r\n }\r\n } else {\r\n movementStepAmount = maxSteps;\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(equalStepLength, movementStep);\r\n }\r\n\r\n movementStepAmount = Math.max(1, movementStepAmount);\r\n\r\n if (movementStepAmount == 1) {\r\n movementStep.vec3_copy(movementToCheck);\r\n }\r\n }\r\n\r\n let isOnValidGroundAngle = collisionRuntimeParams.myGroundAngle <= this._myRealMovementCollisionCheckParams.myGroundAngleToIgnore + 0.0001;\r\n\r\n movementChecked.vec3_zero();\r\n newFeetPosition.vec3_copy(this._myValidPosition);\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n\r\n let atLeastOneNotOnGround = false;\r\n let isOneOnGroundBetweenNoGround = false;\r\n let isLastOnGround = false;\r\n let isOneOnSteepGround = false;\r\n\r\n for (let i = 0; i < movementStepAmount; i++) {\r\n if (movementStepAmount == 1 || i != movementStepAmount - 1) {\r\n currentMovementStep.vec3_copy(movementStep);\r\n } else {\r\n currentMovementStep = movementToCheck.vec3_sub(movementChecked, currentMovementStep);\r\n }\r\n\r\n newFeetPosition = newFeetPosition.vec3_add(currentMovementStep, newFeetPosition);\r\n floatingTransformQuat.quat2_setPositionRotationQuat(newFeetPosition, this._myValidRotationQuat);\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).updateSurfaceInfo(floatingTransformQuat, this._myRealMovementCollisionCheckParams, collisionRuntimeParams);\r\n movementChecked = movementChecked.vec3_add(currentMovementStep, movementChecked);\r\n\r\n if (!collisionRuntimeParams.myIsOnGround) {\r\n atLeastOneNotOnGround = true;\r\n } else {\r\n if (collisionRuntimeParams.myGroundAngle > this._myRealMovementCollisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n isOneOnSteepGround = true;\r\n }\r\n\r\n if (atLeastOneNotOnGround) {\r\n isOneOnGroundBetweenNoGround = true;\r\n }\r\n\r\n if (i == movementStepAmount - 1) {\r\n isLastOnGround = true;\r\n }\r\n }\r\n }\r\n\r\n let isFloatingOnSteepGroundFail = isOneOnSteepGround && isOnValidGroundAngle &&\r\n !this._myParams.myIsFloatingValidIfSteepGround && (!isVertical || !this._myParams.myIsFloatingValidIfVerticalMovementAndSteepGround);\r\n if (atLeastOneNotOnGround || isFloatingOnSteepGroundFail) {\r\n if (isOneOnGroundBetweenNoGround) {\r\n this._myIsHopping = true;\r\n } else {\r\n this._myIsLeaning = true;\r\n }\r\n } else {\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n\r\n if (this._myParams.myIsLeaningExtraCheckCallback != null && this._myParams.myIsLeaningExtraCheckCallback(this)) {\r\n this._myIsLeaning = true;\r\n } else if (this._myParams.myIsHoppingExtraCheckCallback != null && this._myParams.myIsHoppingExtraCheckCallback(this)) {\r\n this._myIsHopping = true;\r\n }\r\n }\r\n\r\n if (this._myIsLeaning) {\r\n let distance = movementToCheck.vec3_length();\r\n if (this._myParams.myIsLeaningValidAboveDistance && distance > this._myParams.myLeaningValidDistance) {\r\n this._myIsLeaning = false;\r\n }\r\n }\r\n\r\n if (this._myIsLeaning || this._myIsHopping) {\r\n if (isLastOnGround && this._myParams.myIsFloatingValidIfRealOnGround) {\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n } else if (isLastOnGround && isVertical && this._myParams.myIsFloatingValidIfVerticalMovementAndRealOnGround) {\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ((this.isSynced(this._myParams.mySyncPositionFlagMap) || this._myParams.myAlwaysSyncPositionWithReal) && !this._myParams.mySyncPositionDisabled) {\r\n this._myValidPosition.vec3_copy(newPosition);\r\n // Reset real position since the new position might be influenced by the snap?\r\n }\r\n\r\n if (this.isSynced(this._myParams.mySyncRotationFlagMap)) {\r\n this._myValidRotationQuat = this.getRotationRealQuat(this._myValidRotationQuat);\r\n }\r\n\r\n if (this.isSynced(this._myParams.mySyncHeightFlagMap)) {\r\n this._myValidHeight = this._myRealMovementCollisionCheckParams.myHeight;\r\n this._updateCollisionHeight();\r\n }\r\n\r\n this._updateValidHeadToRealHead(dt);\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype._updateValidHeadToRealHead = function () {\r\n let movementToCheck = vec3_create();\r\n let position = vec3_create();\r\n let positionReal = vec3_create();\r\n let transformQuat = quat2_create();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n let newPositionHead = vec3_create();\r\n\r\n let backupHorizontalBlockLayerFlags = new PhysicsLayerFlags();\r\n let backupVerticalBlockLayerFlags = new PhysicsLayerFlags();\r\n return function _updateValidHeadToRealHead(dt) {\r\n if (this.getPlayerHeadManager().isSynced()) {\r\n this._myIsHeadColliding = false;\r\n\r\n backupHorizontalBlockLayerFlags.copy(this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags);\r\n backupVerticalBlockLayerFlags.copy(this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags);\r\n\r\n let backupVerticalMovementReduceEnabled = this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled;\r\n\r\n let backupGroundAngleToIgnore = this._myHeadCollisionCheckParams.myGroundAngleToIgnore;\r\n let backupGroundAngleToIgnoreWithPerceivedAngle = this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle;\r\n let backupHorizontalMovementGroundAngleIgnoreHeight = this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight;\r\n let backupHorizontalPositionGroundAngleIgnoreHeight = this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight;\r\n let backupHorizontalMovementGroundAngleIgnoreMaxMovementLeft = this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n\r\n let headReducedVerticalMovementFeetAdjustment = false;\r\n\r\n // Head Colliding\r\n let firstHeadCollidingCheckDone = false;\r\n do {\r\n if (firstHeadCollidingCheckDone && this._myResetHeadToFeetOnNextUpdateValidToReal) {\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this.resetHeadToFeet();\r\n }\r\n\r\n if (this._myResetHeadToFeetOnNextUpdateValidToReal) {\r\n this._myValidPositionHead.vec3_copy(this._myValidPositionHeadBackupForResetToFeet);\r\n this._myResetHeadToFeetDirty = false;\r\n }\r\n\r\n if (this._myResetHeadToFeetDirty) {\r\n if (this._myParams.myHeadCollisionBlockLayerFlagsForResetToFeet != null) {\r\n this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlagsForResetToFeet);\r\n this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlagsForResetToFeet);\r\n }\r\n\r\n if (this._myParams.myResetHeadToFeetMoveTowardReal) {\r\n this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled = true;\r\n }\r\n\r\n if (this._myParams.myResetHeadToFeetGroudnAngleIgnoreEnabled) {\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnore = this._myParams.myMovementCollisionCheckParams.myGroundAngleToIgnore;\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = this._myParams.myMovementCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle;\r\n\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = this._myParams.myMovementCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = this._myParams.myMovementCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight;\r\n\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = this._myParams.myMovementCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n }\r\n\r\n this._myResetHeadToFeetDirty = false;\r\n } else {\r\n this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags.copy(backupHorizontalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags.copy(backupVerticalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled = backupVerticalMovementReduceEnabled;\r\n\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnore = backupGroundAngleToIgnore;\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = backupGroundAngleToIgnoreWithPerceivedAngle;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = backupHorizontalMovementGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = backupHorizontalPositionGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = backupHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n }\r\n\r\n movementToCheck = this.getPositionHeadReal(positionReal).vec3_sub(this.getPositionHead(position), movementToCheck);\r\n collisionRuntimeParams.reset();\r\n transformQuat = this.getTransformHeadQuat(transformQuat); // Get eyes transform\r\n newPositionHead.vec3_copy(this._myValidPositionHead);\r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.HEAD_COLLIDING)) {\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).move(movementToCheck, transformQuat, this._myHeadCollisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !collisionRuntimeParams.myVerticalMovementCanceled) {\r\n if (!backupVerticalMovementReduceEnabled && collisionRuntimeParams.myHasReducedVerticalMovement) {\r\n this._myIsHeadColliding = true;\r\n headReducedVerticalMovementFeetAdjustment = true;\r\n } else {\r\n this._myIsHeadColliding = false;\r\n }\r\n\r\n newPositionHead.vec3_copy(collisionRuntimeParams.myNewPosition);\r\n } else {\r\n this._myIsHeadColliding = true;\r\n }\r\n }\r\n\r\n firstHeadCollidingCheckDone = true;\r\n } while (this._myIsHeadColliding && this._myResetHeadToFeetOnNextUpdateValidToReal);\r\n\r\n {\r\n this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags.copy(backupHorizontalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags.copy(backupVerticalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled = backupVerticalMovementReduceEnabled;\r\n\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnore = backupGroundAngleToIgnore;\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = backupGroundAngleToIgnoreWithPerceivedAngle;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = backupHorizontalMovementGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = backupHorizontalPositionGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = backupHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n }\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this._myResetHeadToFeetDirty = false;\r\n\r\n if (this._myParams.myAlwaysSyncHeadPositionWithReal) {\r\n newPositionHead.vec3_copy(positionReal);\r\n }\r\n\r\n let backupIsHeadColliding = this._myIsHeadColliding;\r\n if (headReducedVerticalMovementFeetAdjustment) {\r\n // This is to allow the sync of the head if this is the only think preventing it\r\n this._myIsHeadColliding = false;\r\n }\r\n\r\n if (this.isSynced(this._myParams.mySyncPositionHeadFlagMap) || this._myParams.myAlwaysSyncHeadPositionWithReal\r\n || (this.isSynced(this._myParams.mySyncPositionFlagMap) && this._myParams.myAlwaysSyncPositionWithReal)) {\r\n this._myValidPositionHead.vec3_copy(newPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n }\r\n\r\n if (headReducedVerticalMovementFeetAdjustment) {\r\n // Restoring it to colliding after\r\n this._myIsHeadColliding = backupIsHeadColliding;\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype._updatePositionsValid = function () {\r\n let transformQuat = quat2_create();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n let headCollisionRuntimeParams = new CollisionRuntimeParams();\r\n let transformUp = vec3_create();\r\n let horizontalDirection = vec3_create();\r\n let rotationQuat = quat_create();\r\n return function _updatePositionsValid(dt) {\r\n if (this._myParams.myUpdatePositionValid) {\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n transformUp = transformQuat.quat2_getUp(transformUp);\r\n rotationQuat = transformQuat.quat2_getRotationQuat(rotationQuat);\r\n horizontalDirection = this._myLastValidMovementDirection.vec3_removeComponentAlongAxis(transformUp, horizontalDirection);\r\n if (!horizontalDirection.vec3_isZero(0.00001)) {\r\n horizontalDirection.vec3_normalize(horizontalDirection);\r\n rotationQuat.quat_setForward(horizontalDirection);\r\n transformQuat.quat2_setRotationQuat(rotationQuat);\r\n }\r\n let debugBackup = this._myParams.myMovementCollisionCheckParams.myDebugEnabled;\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myParams.myMovementCollisionCheckParams, collisionRuntimeParams);\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = debugBackup;\r\n this._myIsPositionValid = collisionRuntimeParams.myIsPositionOk;\r\n } else {\r\n this._myIsPositionValid = true;\r\n }\r\n\r\n if (this._myParams.myUpdatePositionHeadValid) {\r\n transformQuat = this.getTransformHeadQuat(transformQuat);\r\n let debugBackup = this._myHeadCollisionCheckParams.myDebugEnabled;\r\n this._myHeadCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myHeadCollisionCheckParams, headCollisionRuntimeParams);\r\n this._myHeadCollisionCheckParams.myDebugEnabled = debugBackup;\r\n this._myIsPositionHeadValid = headCollisionRuntimeParams.myIsPositionOk;\r\n } else {\r\n this._myIsPositionHeadValid = true;\r\n }\r\n\r\n if (this._myParams.myUpdateRealPositionValid) {\r\n transformQuat = this.getTransformRealQuat(transformQuat);\r\n transformUp = transformQuat.quat2_getUp(transformUp);\r\n rotationQuat = transformQuat.quat2_getRotationQuat(rotationQuat);\r\n horizontalDirection = this._myLastValidMovementDirection.vec3_removeComponentAlongAxis(transformUp, horizontalDirection);\r\n if (!horizontalDirection.vec3_isZero(0.00001)) {\r\n horizontalDirection.vec3_normalize(horizontalDirection);\r\n rotationQuat.quat_setForward(horizontalDirection);\r\n transformQuat.quat2_setRotationQuat(rotationQuat);\r\n }\r\n\r\n let debugBackup = this._myParams.myMovementCollisionCheckParams.myDebugEnabled;\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myParams.myMovementCollisionCheckParams, this._myRealCollisionRuntimeParams);\r\n this._myIsRealPositionValid = this._myRealCollisionRuntimeParams.myIsPositionOk;\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = debugBackup;\r\n } else {\r\n this._myIsRealPositionValid = true;\r\n }\r\n\r\n if (this._myParams.myUpdateRealPositionHeadValid) {\r\n transformQuat = this.getTransformHeadRealQuat(transformQuat);\r\n let debugBackup = this._myHeadCollisionCheckParams.myDebugEnabled;\r\n this._myHeadCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myHeadCollisionCheckParams, headCollisionRuntimeParams);\r\n this._myHeadCollisionCheckParams.myDebugEnabled = debugBackup;\r\n this._myIsRealPositionHeadValid = headCollisionRuntimeParams.myIsPositionOk;\r\n } else {\r\n this._myIsRealPositionHeadValid = true;\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.move = function () {\r\n let transformQuat = quat2_create();\r\n let fixedMovement = vec3_create();\r\n return function move(movement, outCollisionRuntimeParams = null, forceMove = false) {\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).move(movement, transformQuat, this._myParams.myMovementCollisionCheckParams, this._myCollisionRuntimeParams);\r\n if (outCollisionRuntimeParams != null) {\r\n outCollisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n }\r\n\r\n if (!forceMove) {\r\n fixedMovement.vec3_copy(this._myCollisionRuntimeParams.myFixedMovement);\r\n } else {\r\n fixedMovement.vec3_copy(movement);\r\n }\r\n\r\n if (!fixedMovement.vec3_isZero(0.00001)) {\r\n this._myValidPosition.vec3_add(fixedMovement, this._myValidPosition);\r\n this.getPlayerHeadManager().moveFeet(fixedMovement);\r\n }\r\n\r\n // This make reset happens even for gravity, maybe u should do it manually\r\n if (this._myParams.myResetRealOnMove) {\r\n if (!this.isSynced()) {\r\n if (XRUtils.isSessionActive(this._myParams.myEngine)) {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionVR,\r\n !this._myParams.myNeverResetRealRotationVR,\r\n !this._myParams.myNeverResetRealHeightVR,\r\n true);\r\n } else {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionNonVR,\r\n !this._myParams.myNeverResetRealRotationNonVR,\r\n !this._myParams.myNeverResetRealHeightNonVR,\r\n true);\r\n }\r\n }\r\n }\r\n\r\n // #TODO Add move callback\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.teleportPosition = function () {\r\n let teleportTransformQuat = quat2_create();\r\n return function teleportPosition(teleportPosition, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n teleportTransformQuat = this.getTransformQuat(teleportTransformQuat);\r\n teleportTransformQuat.quat2_setPosition(teleportPosition);\r\n this.teleportTransformQuat(teleportTransformQuat, outCollisionRuntimeParams, forceTeleport);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.teleportPositionRotationQuat = function () {\r\n let teleportTransformQuat = quat2_create();\r\n return function teleportPositionRotationQuat(teleportPosition, teleportRotationQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n teleportTransformQuat = this.getTransformQuat(teleportTransformQuat);\r\n teleportTransformQuat.quat2_setPositionRotationQuat(teleportPosition, teleportRotationQuat);\r\n this.teleportTransformQuat(teleportTransformQuat, outCollisionRuntimeParams, forceTeleport);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.teleportTransformQuat = function () {\r\n let currentPosition = vec3_create();\r\n let teleportPositionVec = vec3_create();\r\n let teleportRotation = quat_create();\r\n let rotatedTransformQuat = quat2_create();\r\n let fixedMovement = vec3_create();\r\n return function teleportTransformQuat(teleportTransformQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n currentPosition = this.getPosition(currentPosition);\r\n teleportPositionVec = teleportTransformQuat.quat2_getPosition(teleportPositionVec);\r\n teleportRotation = teleportTransformQuat.quat2_getRotationQuat(teleportRotation);\r\n\r\n rotatedTransformQuat.quat2_setPositionRotationQuat(currentPosition, teleportRotation);\r\n\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).teleport(teleportPositionVec, rotatedTransformQuat, this._myParams.myTeleportCollisionCheckParams, this._myCollisionRuntimeParams);\r\n if (outCollisionRuntimeParams != null) {\r\n outCollisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n }\r\n\r\n fixedMovement.vec3_zero();\r\n if (!forceTeleport) {\r\n if (!this._myCollisionRuntimeParams.myTeleportCanceled) {\r\n fixedMovement = this._myCollisionRuntimeParams.myFixedTeleportPosition.vec3_sub(currentPosition, fixedMovement);\r\n }\r\n } else {\r\n fixedMovement = teleportPositionVec.vec3_sub(currentPosition, fixedMovement);\r\n }\r\n\r\n if (!this._myCollisionRuntimeParams.myTeleportCanceled || forceTeleport) {\r\n this._myValidRotationQuat.quat_copy(teleportRotation);\r\n this.getPlayerHeadManager().setRotationFeetQuat(teleportRotation);\r\n }\r\n\r\n if (!fixedMovement.vec3_isZero(0.00001)) {\r\n this._myValidPosition.vec3_add(fixedMovement, this._myValidPosition);\r\n this.getPlayerHeadManager().moveFeet(fixedMovement);\r\n }\r\n\r\n if (this._myParams.myResetRealOnTeleport) {\r\n if (!this.isSynced()) {\r\n if (XRUtils.isSessionActive(this._myParams.myEngine)) {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionVR,\r\n !this._myParams.myNeverResetRealRotationVR,\r\n !this._myParams.myNeverResetRealHeightVR,\r\n true);\r\n } else {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionNonVR,\r\n !this._myParams.myNeverResetRealRotationNonVR,\r\n !this._myParams.myNeverResetRealHeightNonVR,\r\n true);\r\n }\r\n }\r\n }\r\n\r\n // #TODO Add teleport callback\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.rotateQuat = function () {\r\n return function rotateQuat(rotationQuat) {\r\n this._myValidRotationQuat.quat_rotateQuat(rotationQuat, this._myValidRotationQuat);\r\n this.getPlayerHeadManager().rotateFeetQuat(rotationQuat);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.setRotationQuat = function () {\r\n let rotationToPerform = quat_create();\r\n return function setRotationQuat(rotationQuat) {\r\n rotationToPerform = this._myValidRotationQuat.quat_rotationToQuat(rotationQuat, rotationToPerform);\r\n this.rotateQuat(rotationToPerform);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.setHeight = function () {\r\n let transformQuat = quat2_create();\r\n return function setHeight(height, forceSet = false) {\r\n let fixedHeight = Math.pp_clamp(height, this._myParams.myMinHeight, this._myParams.myMaxHeight);\r\n let previousHeight = this.getHeight();\r\n\r\n this._myValidHeight = fixedHeight;\r\n this._updateCollisionHeight();\r\n\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myParams.myMovementCollisionCheckParams, this._myCollisionRuntimeParams);\r\n\r\n if (this._myCollisionRuntimeParams.myIsPositionOk || forceSet) {\r\n this.getPlayerHeadManager().setHeightHead(this.getHeight(), true);\r\n } else {\r\n this._myValidHeight = previousHeight;\r\n }\r\n\r\n this._updateCollisionHeight();\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.resetHeadToFeet = function () {\r\n let transformQuat = quat2_create();\r\n let headUp = vec3_create();\r\n return function resetHeadToFeet() {\r\n this._myValidPositionHead = this.getPosition(this._myValidPositionHead);\r\n\r\n transformQuat = this.getTransformHeadQuat(transformQuat);\r\n headUp = transformQuat.quat2_getUp(headUp);\r\n this._myValidPositionHead.vec3_add(headUp.vec3_scale(this._myHeadCollisionCheckParams.myHeight / 2 + 0.00001 + this._myParams.myResetHeadToFeetUpOffset, headUp), this._myValidPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n\r\n this._myResetHeadToFeetDirty = true;\r\n };\r\n}();\r\n\r\n// #TODO Sliding info, surface info, update", "import { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../input/cauldron/input_types.js\";\r\nimport { GamepadAxesID } from \"../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat_create, vec3_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\n\r\nexport class PlayerLocomotionRotateParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n\r\n this.myHorizontalRotationEnabled = true;\r\n this.myVerticalRotationEnabled = true;\r\n\r\n this.myMaxRotationSpeed = 0;\r\n this.myIsSnapTurn = false;\r\n this.mySnapTurnOnlyVR = false;\r\n\r\n this.mySmoothSnapEnabled = true;\r\n this.mySmoothSnapSpeedDegrees = 240;\r\n\r\n this.myRotationMinStickIntensityThreshold = 0;\r\n this.mySnapTurnActivateThreshold = 0;\r\n this.mySnapTurnResetThreshold = 0;\r\n\r\n this.myClampVerticalAngle = true;\r\n this.myMaxVerticalAngle = 89;\r\n\r\n this.myHandedness = Handedness.RIGHT;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionRotate {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._mySnapCharge = false;\r\n\r\n this._mySmoothSnapHorizontalRunning = false;\r\n this._mySmoothSnapHorizontalAngleToPerform = 0;\r\n\r\n this._mySmoothSnapVerticalRunning = false;\r\n this._mySmoothSnapVerticalAngleToPerform = 0;\r\n\r\n //Globals.getEasyTuneVariables(this._myParams.myEngine).add(new EasyTuneNumber(\"Teleport Smooth Speed\", this._myParams.mySmoothSnapSpeedDegrees, 10, 3, 0, undefined, undefined, this._myParams.myEngine));\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n stop() {\r\n this._mySmoothSnapHorizontalRunning = false;\r\n this._mySmoothSnapHorizontalAngleToPerform = 0;\r\n\r\n this._mySmoothSnapVerticalRunning = false;\r\n this._mySmoothSnapVerticalAngleToPerform = 0;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n update(dt) {\r\n //this._myParams.mySmoothSnapSpeedDegrees = Globals.getEasyTuneVariables(this._myParams.myEngine).get(\"Teleport Smooth Speed\");\r\n\r\n if (this._myParams.myHorizontalRotationEnabled) {\r\n this._rotateHeadHorizontally(dt);\r\n }\r\n\r\n if (this._myParams.myVerticalRotationEnabled && this._myParams.myPlayerHeadManager.canRotateHead()) {\r\n this._rotateHeadVertically(dt);\r\n }\r\n }\r\n\r\n _rotateHeadHorizontally(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _rotateHeadVertically(dt) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionRotate.prototype._rotateHeadHorizontally = function () {\r\n let playerUp = vec3_create();\r\n let headRotation = quat_create();\r\n return function _rotateHeadHorizontally(dt) {\r\n playerUp = this._myParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n headRotation.quat_identity();\r\n\r\n let axes = Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n\r\n if (!this._myParams.myIsSnapTurn || (this._myParams.mySnapTurnOnlyVR && !XRUtils.isSessionActive(this._myParams.myEngine))) {\r\n if (Math.abs(axes[0]) > this._myParams.myRotationMinStickIntensityThreshold) {\r\n let rotationIntensity = -axes[0];\r\n let speed = Math.pp_lerp(0, this._myParams.myMaxRotationSpeed, Math.abs(rotationIntensity)) * Math.pp_sign(rotationIntensity);\r\n\r\n headRotation.quat_fromAxis(speed * dt, playerUp);\r\n }\r\n } else {\r\n if (!this._mySnapCharge) {\r\n if (Math.abs(axes.vec2_length()) < this._myParams.mySnapTurnResetThreshold) {\r\n this._mySnapCharge = true;\r\n }\r\n } else if (!this._mySmoothSnapHorizontalRunning) {\r\n if (Math.abs(axes[0]) > this._myParams.mySnapTurnActivateThreshold) {\r\n let angleToRotate = -Math.pp_sign(axes[0]) * this._myParams.mySnapTurnAngle;\r\n\r\n if (!this._myParams.mySmoothSnapEnabled) {\r\n headRotation.quat_fromAxis(angleToRotate, playerUp);\r\n } else {\r\n this._mySmoothSnapHorizontalRunning = true;\r\n this._mySmoothSnapHorizontalAngleToPerform = angleToRotate;\r\n }\r\n\r\n this._mySnapCharge = false;\r\n }\r\n }\r\n }\r\n\r\n if (this._mySmoothSnapHorizontalRunning) {\r\n let angleToRotate = Math.pp_sign(this._mySmoothSnapHorizontalAngleToPerform) * (this._myParams.mySmoothSnapSpeedDegrees * dt);\r\n if (Math.abs(angleToRotate) > Math.abs(this._mySmoothSnapHorizontalAngleToPerform) - Math.PP_EPSILON) {\r\n angleToRotate = this._mySmoothSnapHorizontalAngleToPerform;\r\n }\r\n\r\n headRotation.quat_fromAxis(angleToRotate, playerUp);\r\n this._mySmoothSnapHorizontalAngleToPerform -= angleToRotate;\r\n\r\n if (Math.abs(this._mySmoothSnapHorizontalAngleToPerform) < Math.PP_EPSILON) {\r\n this._mySmoothSnapHorizontalRunning = false;\r\n this._mySmoothSnapHorizontalAngleToPerform = 0;\r\n }\r\n }\r\n\r\n if (headRotation.quat_getAngle() > Math.PP_EPSILON_DEGREES) {\r\n this._myParams.myPlayerTransformManager.rotateQuat(headRotation);\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionRotate.prototype._rotateHeadVertically = function () {\r\n let headForward = vec3_create();\r\n let headUp = vec3_create();\r\n let referenceUp = vec3_create();\r\n let referenceUpNegate = vec3_create();\r\n let referenceRight = vec3_create();\r\n let newUp = vec3_create();\r\n let headRotation = quat_create();\r\n return function _rotateHeadVertically(dt) {\r\n let head = this._myParams.myPlayerHeadManager.getHead();\r\n\r\n headForward = head.pp_getForward(headForward);\r\n headUp = head.pp_getUp(headUp);\r\n\r\n referenceUp = this._myParams.myPlayerHeadManager.getPlayer().pp_getUp(referenceUp);\r\n referenceUpNegate = referenceUp.vec3_negate(referenceUpNegate);\r\n referenceRight = headForward.vec3_cross(referenceUp, referenceRight);\r\n\r\n let minAngle = 1;\r\n if (headForward.vec3_angle(referenceUp) < minAngle) {\r\n referenceRight = headUp.vec3_negate(referenceRight).vec3_cross(referenceUp, referenceRight);\r\n } else if (headForward.vec3_angle(referenceUpNegate) < minAngle) {\r\n referenceRight = headUp.vec3_cross(referenceUp, referenceRight);\r\n } else if (!headUp.vec3_isConcordant(referenceUp)) {\r\n referenceRight.vec3_negate(referenceRight);\r\n }\r\n\r\n referenceRight.vec3_normalize(referenceRight);\r\n\r\n let axes = Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n let angleToRotate = 0;\r\n\r\n if (!this._myParams.myIsSnapTurn || (this._myParams.mySnapTurnOnlyVR && !XRUtils.isSessionActive(this._myParams.myEngine))) {\r\n if (Math.abs(axes[1]) > this._myParams.myRotationMinStickIntensityThreshold) {\r\n let rotationIntensity = axes[1];\r\n angleToRotate = Math.pp_lerp(0, this._myParams.myMaxRotationSpeed, Math.abs(rotationIntensity)) * Math.pp_sign(rotationIntensity) * dt;\r\n }\r\n } else {\r\n if (!this._mySnapCharge) {\r\n if (Math.abs(axes.vec2_length()) < this._myParams.mySnapTurnResetThreshold) {\r\n this._mySnapCharge = true;\r\n }\r\n } else if (!this._mySmoothSnapVerticalRunning) {\r\n if (Math.abs(axes[1]) > this._myParams.mySnapTurnActivateThreshold) {\r\n angleToRotate = Math.pp_sign(axes[1]) * this._myParams.mySnapTurnAngle;\r\n\r\n // Adjust rotation to closest snap step\r\n\r\n let angleWithUp = Math.pp_angleClamp(headUp.vec3_angleSigned(referenceUp, referenceRight));\r\n let snapStep = Math.round(angleWithUp / this._myParams.mySnapTurnAngle);\r\n\r\n let snapAngle = Math.pp_angleClamp(snapStep * this._myParams.mySnapTurnAngle);\r\n let angleToAlign = -Math.pp_angleDistanceSigned(angleWithUp, snapAngle);\r\n\r\n if (Math.abs(angleToAlign) > 1) {\r\n if (Math.pp_sign(angleToRotate) == Math.pp_sign(angleToAlign)) {\r\n angleToRotate = angleToAlign;\r\n } else {\r\n angleToRotate = (-Math.pp_sign(angleToAlign) * this._myParams.mySnapTurnAngle) + angleToAlign;\r\n }\r\n } else if (Math.abs(angleToAlign) > Math.PP_EPSILON_DEGREES) {\r\n angleToRotate += angleToAlign;\r\n }\r\n\r\n if (this._myParams.mySmoothSnapEnabled) {\r\n this._mySmoothSnapVerticalRunning = true;\r\n this._mySmoothSnapVerticalAngleToPerform = angleToRotate;\r\n }\r\n\r\n this._mySnapCharge = false;\r\n }\r\n }\r\n }\r\n\r\n if (this._mySmoothSnapVerticalRunning) {\r\n angleToRotate = Math.pp_sign(this._mySmoothSnapVerticalAngleToPerform) * (this._myParams.mySmoothSnapSpeedDegrees * dt);\r\n if (Math.abs(angleToRotate) > Math.abs(this._mySmoothSnapVerticalAngleToPerform) - Math.PP_EPSILON) {\r\n angleToRotate = this._mySmoothSnapVerticalAngleToPerform;\r\n }\r\n\r\n this._mySmoothSnapVerticalAngleToPerform -= angleToRotate;\r\n\r\n if (Math.abs(this._mySmoothSnapVerticalAngleToPerform) < Math.PP_EPSILON) {\r\n this._mySmoothSnapVerticalRunning = false;\r\n this._mySmoothSnapVerticalAngleToPerform = 0;\r\n }\r\n }\r\n\r\n if (angleToRotate != 0) {\r\n headRotation.quat_fromAxis(angleToRotate, referenceRight);\r\n this._myParams.myPlayerHeadManager.rotateHeadQuat(headRotation);\r\n\r\n if (this._myParams.myClampVerticalAngle) {\r\n let maxVerticalAngle = Math.max(0, this._myParams.myMaxVerticalAngle - 0.0001);\r\n newUp = head.pp_getUp(newUp);\r\n let angleWithUp = Math.pp_angleClamp(newUp.vec3_angleSigned(referenceUp, referenceRight));\r\n if (Math.abs(angleWithUp) > maxVerticalAngle) {\r\n let fixAngle = (Math.abs(angleWithUp) - maxVerticalAngle) * Math.pp_sign(angleWithUp);\r\n headRotation.quat_fromAxis(fixAngle, referenceRight);\r\n this._myParams.myPlayerHeadManager.rotateHeadQuat(headRotation);\r\n }\r\n }\r\n }\r\n };\r\n}();", "export class PlayerLocomotionMovementRuntimeParams {\r\n\r\n constructor() {\r\n this.myIsFlying = false;\r\n this.myGravitySpeed = 0;\r\n this.myCollisionRuntimeParams = null;\r\n\r\n this.myIsTeleportDetecting = false;\r\n this.myIsTeleporting = false;\r\n this.myTeleportJustPerformed = false;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionMovement {\r\n\r\n constructor(locomotionRuntimeParams) {\r\n this._myLocomotionRuntimeParams = locomotionRuntimeParams;\r\n }\r\n\r\n getRuntimeParams() {\r\n return this._myLocomotionRuntimeParams;\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n stop() {\r\n\r\n }\r\n\r\n canStop() {\r\n return true;\r\n }\r\n}", "import { Emitter, PhysXComponent } from \"@wonderlandengine/api\";\r\nimport { FSM } from \"../../../../../cauldron/fsm/fsm.js\";\r\nimport { PhysicsLayerFlags } from \"../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { EasingFunction } from \"../../../../../cauldron/utils/math_utils.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../../../../input/cauldron/input_utils.js\";\r\nimport { GamepadUtils } from \"../../../../../input/gamepad/cauldron/gamepad_utils.js\";\r\nimport { GamepadButtonID } from \"../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec3_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { CharacterColliderSetupSimplifiedCreationParams, CharacterColliderSetupUtils } from \"../../../character_controller/collision/character_collider_setup_utils.js\";\r\nimport { CollisionCheckBridge } from \"../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { CollisionCheckUtils } from \"../../../character_controller/collision/legacy/collision_check/collision_check_utils.js\";\r\nimport { CollisionCheckParams, CollisionRuntimeParams } from \"../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\nimport { NonVRReferenceSpaceMode, PlayerHeadManager, PlayerHeadManagerParams } from \"./player_head_manager.js\";\r\nimport { PlayerLocomotionMovementRuntimeParams } from \"./player_locomotion_movement.js\";\r\nimport { PlayerLocomotionRotate, PlayerLocomotionRotateParams } from \"./player_locomotion_rotate.js\";\r\nimport { PlayerLocomotionSmooth, PlayerLocomotionSmoothParams } from \"./player_locomotion_smooth.js\";\r\nimport { PlayerObscureManager, PlayerObscureManagerParams } from \"./player_obscure_manager.js\";\r\nimport { PlayerTransformManager, PlayerTransformManagerParams, PlayerTransformManagerSyncFlag } from \"./player_transform_manager.js\";\r\nimport { PlayerLocomotionTeleport, PlayerLocomotionTeleportParams } from \"./teleport/player_locomotion_teleport.js\";\r\nimport { PlayerLocomotionTeleportTeleportType } from \"./teleport/player_locomotion_teleport_teleport_state.js\";\r\n\r\nexport let PlayerLocomotionDirectionReferenceType = {\r\n HEAD: 0,\r\n HAND: 1,\r\n CUSTOM_OBJECT: 2,\r\n};\r\n\r\nexport let PlayerLocomotionType = {\r\n SMOOTH: 0,\r\n TELEPORT: 1\r\n};\r\n\r\nexport class PlayerLocomotionParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myDefaultLocomotionType = PlayerLocomotionType.SMOOTH;\r\n this.myAlwaysSmoothForNonVR = true;\r\n this.mySwitchLocomotionTypeShortcutEnabled = true; // Double press main hand (default left) thumbstick to switch\r\n\r\n this.myDefaultHeight = 0;\r\n\r\n this.myMaxSpeed = 0;\r\n this.myMaxRotationSpeed = 0;\r\n\r\n this.myGravityAcceleration = 0;\r\n this.myMaxGravitySpeed = 0;\r\n\r\n this.myCharacterRadius = 0;\r\n\r\n this.mySpeedSlowDownPercentageOnWallSlid = 1;\r\n\r\n this.myIsSnapTurn = false;\r\n this.mySnapTurnOnlyVR = false;\r\n this.mySnapTurnAngle = 0;\r\n this.mySnapTurnSpeedDegrees = 0;\r\n\r\n this.myFlyEnabled = false;\r\n this.myStartFlying = false;\r\n this.myFlyWithButtonsEnabled = false;\r\n this.myFlyWithViewAngleEnabled = false;\r\n this.myMinAngleToFlyUpNonVR = 0;\r\n this.myMinAngleToFlyDownNonVR = 0;\r\n this.myMinAngleToFlyUpVR = 0;\r\n this.myMinAngleToFlyDownVR = 0;\r\n this.myMinAngleToFlyRight = 0;\r\n\r\n this.myMainHand = Handedness.LEFT;\r\n\r\n this.myDirectionInvertForwardWhenUpsideDown = true;\r\n this.myVRDirectionReferenceType = PlayerLocomotionDirectionReferenceType.HEAD;\r\n this.myVRDirectionReferenceObject = null;\r\n\r\n this.myForeheadExtraHeight = 0;\r\n\r\n this.myTeleportType = PlayerLocomotionTeleportTeleportType.INSTANT;\r\n this.myTeleportMaxDistance = 0;\r\n this.myTeleportMaxHeightDifference = 0;\r\n this.myTeleportRotationOnUpEnabled = null;\r\n this.myTeleportValidMaterial = null;\r\n this.myTeleportInvalidMaterial = null;\r\n this.myTeleportPositionObject = null;\r\n this.myTeleportPositionObjectRotateWithHead = null;\r\n this.myTeleportParableStartReferenceObject = null;\r\n\r\n this.myResetRealOnStart = true;\r\n\r\n // #WARN With @myResetRealOnStartFramesAmount at 1 it can happen that you enter the session like 1 frame before the game load\r\n // and the head pose might have not been properly initialized yet in the WebXR API, so the reset real will not happen has expected\r\n // Since this is a sort of edge case (either u enter after the load, or you were already in for more than 2-3 frames), and that\r\n // setting this to more than 1 can cause a visible (even if very short) stutter after the load (due to resetting the head multiple times),\r\n // it's better to keep this value at 1\r\n // A possible effect of the edge case is the view being obscured on start because it thinks you are colliding\r\n //\r\n // A value of 3 will make u sure that the head pose will be initialized and the reset real will happen as expected in any case\r\n // For example, if u have a total fade at start and nothing can be seen aside the clear color for at least, let's say, 10 frames, \r\n // you can set this to 3 safely, since there will be no visible stutter to be seen (beside the clear color)\r\n this.myResetRealOnStartFramesAmount = 1;\r\n\r\n // Can fix some head through floor issues, when you can move your head completely to the other side of the floor\r\n // If the floors are thick enough that this can't happen, you can leave this to false\r\n this.myResetHeadToFeetInsteadOfReal = false;\r\n this.myResetHeadToRealMinDistance = 0;\r\n\r\n // these 2 flags works 100% properly only if both true or false\r\n this.mySyncWithRealWorldPositionOnlyIfValid = true; // valid means the real player has not moved inside walls\r\n this.myViewOcclusionInsideWallsEnabled = true;\r\n\r\n this.mySyncNonVRHeightWithVROnExitSession = false;\r\n this.mySyncNonVRVerticalAngleWithVROnExitSession = false;\r\n\r\n this.mySyncHeadWithRealAfterLocomotionUpdateIfNeeded = false;\r\n\r\n this.myColliderAccuracy = null;\r\n this.myColliderCheckOnlyFeet = false;\r\n this.myColliderSlideAlongWall = false;\r\n this.myColliderMaxWalkableGroundAngle = 0;\r\n this.myColliderSnapOnGround = false;\r\n this.myColliderMaxDistanceToSnapOnGround = 0;\r\n this.myColliderMaxWalkableGroundStepHeight = 0;\r\n this.myColliderPreventFallingFromEdges = false;\r\n\r\n this.myDebugFlyShortcutEnabled = false; // main hand (default left) select + thumbstick press, auto switch to smooth\r\n this.myDebugFlyMaxSpeedMultiplier = 5;\r\n this.myMoveThroughCollisionShortcutEnabled = false; // main hand (default left) thumbstick pressed while moving\r\n this.myMoveHeadShortcutEnabled = false; // non main hand (default right) thumbstick pressed while moving\r\n this.myTripleSpeedShortcutEnabled = false; // main hand (default left) select pressed while moving\r\n\r\n this.myDebugHorizontalEnabled = false;\r\n this.myDebugVerticalEnabled = false;\r\n\r\n this.myCollisionCheckDisabled = false;\r\n\r\n this.myPhysicsBlockLayerFlags = new PhysicsLayerFlags();\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\n// #TODO Add lerped snap on vertical over like half a second to avoid the \"snap effect\"\r\n// This could be done by detatching the actual vertical position of the player from the collision real one when a snap is detected above a certain threshold\r\n// with a timer, after which the vertical position is just copied, while during the detatching is lerped toward the collision vertical one\r\nexport class PlayerLocomotion {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myCollisionCheckParamsMovement = new CollisionCheckParams();\r\n this._setupCollisionCheckParamsMovement();\r\n this._myCollisionCheckParamsTeleport = null;\r\n this._setupCollisionCheckParamsTeleport();\r\n\r\n this._myCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myMovementRuntimeParams = new PlayerLocomotionMovementRuntimeParams();\r\n this._myMovementRuntimeParams.myIsFlying = this._myParams.myStartFlying;\r\n this._myMovementRuntimeParams.myCollisionRuntimeParams = this._myCollisionRuntimeParams;\r\n\r\n {\r\n let params = new PlayerHeadManagerParams(this._myParams.myEngine);\r\n\r\n params.mySessionChangeResyncEnabled = true;\r\n\r\n params.myBlurEndResyncEnabled = true;\r\n params.myBlurEndResyncRotation = true;\r\n\r\n params.myEnterSessionResyncHeight = false;\r\n params.myExitSessionResyncHeight = this._myParams.mySyncNonVRHeightWithVROnExitSession;\r\n params.myExitSessionResyncVerticalAngle = this._myParams.mySyncNonVRVerticalAngleWithVROnExitSession;\r\n params.myExitSessionRemoveRightTilt = true;\r\n params.myExitSessionAdjustMaxVerticalAngle = true;\r\n params.myExitSessionMaxVerticalAngle = 90;\r\n\r\n params.myNonVRFloorBasedMode = NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR;\r\n\r\n params.myDefaultHeightNonVR = this._myParams.myDefaultHeight;\r\n params.myDefaultHeightVRWithoutFloor = this._myParams.myDefaultHeight;\r\n params.myForeheadExtraHeight = this._myParams.myForeheadExtraHeight;\r\n\r\n params.myFeetRotationKeepUp = true;\r\n\r\n params.myDebugEnabled = false;\r\n\r\n this._myPlayerHeadManager = new PlayerHeadManager(params);\r\n }\r\n\r\n {\r\n let params = new PlayerTransformManagerParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n\r\n params.myMovementCollisionCheckParams = this._myCollisionCheckParamsMovement;\r\n params.myTeleportCollisionCheckParams = null;\r\n params.myTeleportCollisionCheckParamsCopyFromMovement = true;\r\n params.myTeleportCollisionCheckParamsCheck360 = true;\r\n\r\n params.myHeadCollisionBlockLayerFlags.copy(params.myMovementCollisionCheckParams.myHorizontalBlockLayerFlags);\r\n params.myHeadCollisionBlockLayerFlags.add(params.myMovementCollisionCheckParams.myVerticalBlockLayerFlags);\r\n params.myHeadCollisionObjectsToIgnore.pp_copy(params.myMovementCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n for (let objectToIgnore of params.myMovementCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n params.myHeadCollisionObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n params.myCollisionRuntimeParams = this._myCollisionRuntimeParams;\r\n\r\n params.myHeadRadius = 0.2;\r\n\r\n params.myAlwaysSyncPositionWithReal = !this._myParams.mySyncWithRealWorldPositionOnlyIfValid;\r\n params.myAlwaysSyncHeadPositionWithReal = false;\r\n\r\n if (!this._myParams.myViewOcclusionInsideWallsEnabled && !this._myParams.mySyncWithRealWorldPositionOnlyIfValid) {\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n params.myAlwaysSyncHeadPositionWithReal = !this._myParams.mySyncWithRealWorldPositionOnlyIfValid;\r\n }\r\n\r\n params.myMaxDistanceFromRealToSyncEnabled = true;\r\n params.myMaxDistanceFromRealToSync = 0.5;\r\n\r\n params.myIsFloatingValidIfVerticalMovement = false;\r\n params.myIsFloatingValidIfVerticalMovementAndRealOnGround = false;\r\n params.myIsFloatingValidIfSteepGround = false;\r\n params.myIsFloatingValidIfVerticalMovementAndSteepGround = false;\r\n params.myIsFloatingValidIfRealOnGround = false;\r\n params.myFloatingSplitCheckEnabled = true;\r\n params.myFloatingSplitCheckMinLength = this._myCollisionCheckParamsMovement.myFeetRadius * 1.5;\r\n params.myFloatingSplitCheckMaxLength = this._myCollisionCheckParamsMovement.myFeetRadius * 1.5;\r\n params.myFloatingSplitCheckMaxSteps = 3;\r\n params.myRealMovementAllowVerticalAdjustments = false;\r\n\r\n params.myUpdateRealPositionValid = false;\r\n params.myUpdatePositionValid = false;\r\n\r\n params.myIsBodyCollidingWhenHeightBelowValue = null;\r\n params.myIsBodyCollidingWhenHeightAboveValue = null;\r\n\r\n params.myResetToValidOnEnterSession = true;\r\n params.myResetToValidOnExitSession = true;\r\n\r\n params.myAlwaysResetRealPositionNonVR = true;\r\n params.myAlwaysResetRealRotationNonVR = true;\r\n params.myAlwaysResetRealHeightNonVR = true;\r\n\r\n params.myAlwaysResetRealPositionVR = false;\r\n params.myAlwaysResetRealRotationVR = false;\r\n params.myAlwaysResetRealHeightVR = false;\r\n\r\n params.myNeverResetRealPositionNonVR = false;\r\n params.myNeverResetRealRotationNonVR = true;\r\n params.myNeverResetRealHeightNonVR = false;\r\n\r\n params.myResetRealHeightNonVROnExitSession = this._myParams.mySyncNonVRHeightWithVROnExitSession;\r\n\r\n params.myResetHeadToFeetInsteadOfRealOnlyIfRealNotReachable = this._myParams.myResetHeadToFeetInsteadOfReal;\r\n params.myResetHeadToRealMinDistance = this._myParams.myResetHeadToRealMinDistance;\r\n\r\n params.myNeverResetRealPositionVR = false;\r\n params.myNeverResetRealRotationVR = false;\r\n params.myNeverResetRealHeightVR = true;\r\n\r\n params.myDebugEnabled = false;\r\n\r\n this._myPlayerTransformManager = new PlayerTransformManager(params);\r\n }\r\n\r\n {\r\n let params = new PlayerLocomotionRotateParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n\r\n params.myMaxRotationSpeed = this._myParams.myMaxRotationSpeed;\r\n params.myIsSnapTurn = this._myParams.myIsSnapTurn;\r\n params.mySnapTurnOnlyVR = this._myParams.mySnapTurnOnlyVR;\r\n params.mySnapTurnAngle = this._myParams.mySnapTurnAngle;\r\n\r\n if (this._myParams.mySnapTurnSpeedDegrees > Math.PP_EPSILON) {\r\n params.mySmoothSnapEnabled = true;\r\n params.mySmoothSnapSpeedDegrees = this._myParams.mySnapTurnSpeedDegrees;\r\n } else {\r\n params.mySmoothSnapEnabled = false;\r\n }\r\n\r\n params.myRotationMinStickIntensityThreshold = 0.1;\r\n params.mySnapTurnActivateThreshold = 0.5;\r\n params.mySnapTurnResetThreshold = 0.4;\r\n\r\n params.myClampVerticalAngle = true;\r\n params.myMaxVerticalAngle = 89;\r\n\r\n this._myPlayerLocomotionRotate = new PlayerLocomotionRotate(params);\r\n\r\n params.myHandedness = InputUtils.getOppositeHandedness(this._myParams.myMainHand);\r\n }\r\n\r\n {\r\n {\r\n let params = new PlayerLocomotionSmoothParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n\r\n params.myCollisionCheckParams = this._myCollisionCheckParamsMovement;\r\n\r\n params.myHandedness = this._myParams.myMainHand;\r\n\r\n params.myMaxSpeed = this._myParams.myMaxSpeed;\r\n params.mySpeedSlowDownPercentageOnWallSlid = this._myParams.mySpeedSlowDownPercentageOnWallSlid;\r\n\r\n params.myMovementMinStickIntensityThreshold = 0.1;\r\n\r\n params.myFlyEnabled = this._myParams.myFlyEnabled;\r\n params.myFlyWithButtonsEnabled = this._myParams.myFlyWithButtonsEnabled;\r\n params.myFlyWithViewAngleEnabled = this._myParams.myFlyWithViewAngleEnabled;\r\n params.myMinAngleToFlyUpNonVR = this._myParams.myMinAngleToFlyUpNonVR;\r\n params.myMinAngleToFlyDownNonVR = this._myParams.myMinAngleToFlyDownNonVR;\r\n params.myMinAngleToFlyUpVR = this._myParams.myMinAngleToFlyUpVR;\r\n params.myMinAngleToFlyDownVR = this._myParams.myMinAngleToFlyDownVR;\r\n params.myMinAngleToFlyRight = this._myParams.myMinAngleToFlyRight;\r\n\r\n params.myGravityAcceleration = this._myParams.myGravityAcceleration;\r\n params.myMaxGravitySpeed = this._myParams.myMaxGravitySpeed;\r\n\r\n params.myDirectionInvertForwardWhenUpsideDown = this._myParams.myDirectionInvertForwardWhenUpsideDown;\r\n params.myVRDirectionReferenceType = this._myParams.myVRDirectionReferenceType;\r\n params.myVRDirectionReferenceObject = this._myParams.myVRDirectionReferenceObject;\r\n\r\n params.myDebugFlyMaxSpeedMultiplier = this._myParams.myDebugFlyMaxSpeedMultiplier;\r\n params.myMoveThroughCollisionShortcutEnabled = this._myParams.myMoveThroughCollisionShortcutEnabled;\r\n params.myMoveHeadShortcutEnabled = this._myParams.myMoveHeadShortcutEnabled;\r\n params.myTripleSpeedShortcutEnabled = this._myParams.myTripleSpeedShortcutEnabled;\r\n\r\n this._myPlayerLocomotionSmooth = new PlayerLocomotionSmooth(params, this._myMovementRuntimeParams);\r\n }\r\n\r\n {\r\n let params = new PlayerLocomotionTeleportParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n\r\n params.myCollisionCheckParams = this._myCollisionCheckParamsTeleport;\r\n\r\n params.myHandedness = this._myParams.myMainHand;\r\n\r\n params.myDetectionParams.myMaxDistance = this._myParams.myTeleportMaxDistance;\r\n params.myDetectionParams.myMaxHeightDifference = this._myParams.myTeleportMaxHeightDifference;\r\n params.myDetectionParams.myGroundAngleToIgnoreUpward = this._myCollisionCheckParamsMovement.myGroundAngleToIgnore;\r\n params.myDetectionParams.myRotationOnUpEnabled = this._myParams.myTeleportRotationOnUpEnabled;\r\n params.myDetectionParams.myMustBeOnGround = true;\r\n\r\n params.myDetectionParams.myTeleportBlockLayerFlags.copy(this._myParams.myPhysicsBlockLayerFlags);\r\n params.myDetectionParams.myTeleportFloorLayerFlags.copy(this._myParams.myPhysicsBlockLayerFlags);\r\n\r\n params.myDetectionParams.myTeleportFeetPositionMustBeVisible = false;\r\n params.myDetectionParams.myTeleportHeadPositionMustBeVisible = false;\r\n params.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible = true;\r\n\r\n params.myDetectionParams.myTeleportParableStartReferenceObject = this._myParams.myTeleportParableStartReferenceObject;\r\n\r\n params.myDetectionParams.myVisibilityBlockLayerFlags.copy(params.myDetectionParams.myTeleportBlockLayerFlags);\r\n\r\n params.myTeleportParams.myTeleportType = this._myParams.myTeleportType;\r\n\r\n params.myVisualizerParams.myTeleportPositionObject = this._myParams.myTeleportPositionObject;\r\n params.myVisualizerParams.myTeleportValidMaterial = this._myParams.myTeleportValidMaterial;\r\n params.myVisualizerParams.myTeleportInvalidMaterial = this._myParams.myTeleportInvalidMaterial;\r\n params.myVisualizerParams.myTeleportPositionObjectRotateWithHead = this._myParams.myTeleportPositionObjectRotateWithHead;\r\n\r\n params.myPerformTeleportAsMovement = false;\r\n params.myTeleportAsMovementRemoveVerticalMovement = true;\r\n params.myTeleportAsMovementExtraVerticalMovementPerMeter = -2;\r\n\r\n params.myGravityAcceleration = this._myParams.myGravityAcceleration;\r\n params.myMaxGravitySpeed = this._myParams.myMaxGravitySpeed;\r\n\r\n params.myDebugEnabled = false;\r\n params.myDebugDetectEnabled = true;\r\n params.myDebugShowEnabled = true;\r\n params.myDebugVisibilityEnabled = false;\r\n\r\n this._myPlayerLocomotionTeleport = new PlayerLocomotionTeleport(params, this._myMovementRuntimeParams);\r\n }\r\n\r\n {\r\n let params = new PlayerObscureManagerParams(this._myParams.myEngine);\r\n\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n params.myPlayerLocomotionTeleport = this._myPlayerLocomotionTeleport;\r\n\r\n params.myEnabled = this._myParams.myViewOcclusionInsideWallsEnabled;\r\n\r\n params.myObscureObject = null;\r\n params.myObscureMaterial = null;\r\n params.myObscureRadius = 0.5;\r\n\r\n params.myObscureFadeOutSeconds = 0;\r\n params.myObscureFadeInSeconds = 0.25;\r\n\r\n params.myObscureFadeEasingFunction = EasingFunction.linear;\r\n params.myObscureLevelRelativeDistanceEasingFunction = EasingFunction.linear;\r\n\r\n params.myDistanceToStartObscureWhenBodyColliding = 0.75;\r\n params.myDistanceToStartObscureWhenHeadColliding = 0;\r\n params.myDistanceToStartObscureWhenFloating = 0.75;\r\n params.myDistanceToStartObscureWhenFar = 0.75;\r\n\r\n params.myRelativeDistanceToMaxObscureWhenBodyColliding = 0.5;\r\n params.myRelativeDistanceToMaxObscureWhenHeadColliding = 0.05;\r\n params.myRelativeDistanceToMaxObscureWhenFloating = 0.5;\r\n params.myRelativeDistanceToMaxObscureWhenFar = 0.5;\r\n\r\n this._myPlayerObscureManager = new PlayerObscureManager(params);\r\n }\r\n\r\n }\r\n\r\n this._setupLocomotionMovementFSM();\r\n\r\n this._mySwitchToTeleportOnEnterSession = false;\r\n\r\n this._myIdle = false;\r\n\r\n this._myActive = true;\r\n this._myStarted = false;\r\n\r\n this._myResetRealOnStartCounter = this._myParams.myResetRealOnStartFramesAmount;\r\n\r\n this._myPreUpdateEmitter = new Emitter(); // Signature: callback(dt, playerLocomotion)\r\n this._myPostUpdateEmitter = new Emitter(); // Signature: callback(dt, playerLocomotion)\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._fixAlmostUp();\r\n\r\n this._myPlayerHeadManager.start();\r\n this._myPlayerTransformManager.start();\r\n\r\n this._myPlayerObscureManager.start();\r\n\r\n this._myPlayerLocomotionRotate.start();\r\n\r\n if (this._myParams.myDefaultLocomotionType == PlayerLocomotionType.SMOOTH) {\r\n this._myLocomotionMovementFSM.perform(\"startSmooth\");\r\n } else {\r\n this._myLocomotionMovementFSM.perform(\"startTeleport\");\r\n }\r\n\r\n this._myStarted = true;\r\n\r\n let currentActive = this._myActive;\r\n this._myActive = !this._myActive;\r\n this.setActive(currentActive);\r\n }\r\n\r\n // #WARN Only a few params are actually used by this class after the setup phase, like @myCollisionCheckDisabled\r\n // Params like @myMaxSpeed must be edited directly on the PlayerLocomotionSmooth object\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this._myActive = active;\r\n\r\n if (this._myStarted) {\r\n if (this._myActive) {\r\n this._myPlayerObscureManager.start();\r\n if (!this._myIdle) {\r\n this._myLocomotionMovementFSM.perform(\"resume\");\r\n }\r\n } else {\r\n this._myLocomotionMovementFSM.perform(\"idle\");\r\n this._myPlayerObscureManager.stop();\r\n }\r\n }\r\n\r\n this._myPlayerHeadManager.setActive(this._myActive);\r\n this._myPlayerTransformManager.setActive(this._myActive);\r\n }\r\n }\r\n\r\n isStarted() {\r\n return this._myStarted;\r\n }\r\n\r\n canStop() {\r\n let canStop = false;\r\n\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\") && this._myPlayerLocomotionSmooth.canStop()) {\r\n canStop = true;\r\n } else if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n canStop = true;\r\n }\r\n\r\n return canStop;\r\n }\r\n\r\n update(dt) {\r\n this._myPreUpdateEmitter.notify(dt, this);\r\n\r\n let collisionCheckEnabledBackup = false;\r\n let maxGravitySpeedBackup = 0;\r\n if (this._myParams.myCollisionCheckDisabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n collisionCheckEnabledBackup = CollisionCheckBridge.isCollisionCheckDisabled();\r\n maxGravitySpeedBackup = this.getPlayerLocomotionSmooth().getParams().myMaxGravitySpeed;\r\n CollisionCheckBridge.setCollisionCheckDisabled(true);\r\n this.getPlayerLocomotionSmooth().getParams().myMaxGravitySpeed = 0;\r\n }\r\n\r\n this._myPlayerHeadManager.update(dt);\r\n\r\n if (this._myParams.myResetRealOnStart && this._myResetRealOnStartCounter > 0) {\r\n this._myResetRealOnStartCounter--;\r\n\r\n this._myPlayerTransformManager.resetReal(true, true, undefined, undefined, undefined, true);\r\n this._myPlayerTransformManager.update(dt);\r\n\r\n if (this._myPlayerHeadManager.isSynced()) {\r\n this._updateCollisionHeight();\r\n }\r\n } else {\r\n this._myPlayerTransformManager.update(dt);\r\n\r\n if (!this._myPlayerLocomotionSmooth.isDebugFlyEnabled() || !Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n if (!this._myParams.myAlwaysSmoothForNonVR || XRUtils.isSessionActive()) {\r\n if (this._myParams.mySwitchLocomotionTypeShortcutEnabled &&\r\n this._getMainHandGamepad().getButtonInfo(GamepadButtonID.THUMBSTICK).isPressEnd(2)) {\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\") && this._myPlayerLocomotionSmooth.canStop()) {\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n } else if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myAlwaysSmoothForNonVR && !XRUtils.isSessionActive()) {\r\n if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n this._mySwitchToTeleportOnEnterSession = true;\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n } else if (this._mySwitchToTeleportOnEnterSession && XRUtils.isSessionActive()) {\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\") && this._myPlayerLocomotionSmooth.canStop()) {\r\n this._mySwitchToTeleportOnEnterSession = false;\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myDebugFlyShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n if (GamepadUtils.areButtonsPressEnd([this._getMainHandGamepad(), GamepadButtonID.SELECT, GamepadButtonID.THUMBSTICK])) {\r\n if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\")) {\r\n this._myPlayerLocomotionSmooth.setDebugFlyEnabled(!this._myPlayerLocomotionSmooth.isDebugFlyEnabled());\r\n this._mySwitchToTeleportOnEnterSession = false;\r\n }\r\n }\r\n }\r\n\r\n if (this._myPlayerHeadManager.isSynced()) {\r\n this._updateCollisionHeight();\r\n\r\n if (!this._myIdle) {\r\n this._myPlayerLocomotionRotate.update(dt);\r\n this._myLocomotionMovementFSM.update(dt);\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.mySyncHeadWithRealAfterLocomotionUpdateIfNeeded) {\r\n this._myPlayerTransformManager.updateValidHeadToRealHeadIfNeeded();\r\n }\r\n\r\n this._myPlayerObscureManager.update(dt);\r\n\r\n if (this._myParams.myCollisionCheckDisabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n CollisionCheckBridge.setCollisionCheckDisabled(collisionCheckEnabledBackup);\r\n this.getPlayerLocomotionSmooth().getParams().myMaxGravitySpeed = maxGravitySpeedBackup;\r\n }\r\n\r\n this._myPostUpdateEmitter.notify(dt, this);\r\n }\r\n\r\n setIdle(idle) {\r\n this._myIdle = idle;\r\n\r\n if (idle) {\r\n this._myLocomotionMovementFSM.perform(\"idle\");\r\n } else {\r\n this._myLocomotionMovementFSM.perform(\"resume\");\r\n }\r\n }\r\n\r\n getPlayerLocomotionSmooth() {\r\n return this._myPlayerLocomotionSmooth;\r\n }\r\n\r\n getPlayerLocomotionTeleport() {\r\n return this._myPlayerLocomotionTeleport;\r\n }\r\n\r\n getPlayerTransformManager() {\r\n return this._myPlayerTransformManager;\r\n }\r\n\r\n getPlayerLocomotionRotate() {\r\n return this._myPlayerLocomotionRotate;\r\n }\r\n\r\n getPlayerHeadManager() {\r\n return this._myPlayerHeadManager;\r\n }\r\n\r\n getPlayerObscureManager() {\r\n return this._myPlayerObscureManager;\r\n }\r\n\r\n registerPreUpdateCallback(id, callback) {\r\n this._myPreUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPreUpdateCallback(id) {\r\n this._myPreUpdateEmitter.remove(id);\r\n }\r\n\r\n registerPostUpdateCallback(id, callback) {\r\n this._myPostUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPostUpdateCallback(id) {\r\n this._myPostUpdateEmitter.remove(id);\r\n }\r\n\r\n _updateCollisionHeight() {\r\n this._myCollisionCheckParamsMovement.myHeight = this._myPlayerHeadManager.getHeightHead();\r\n if (this._myCollisionCheckParamsMovement.myHeight <= 0.000001) {\r\n this._myCollisionCheckParamsMovement.myHeight = 0;\r\n }\r\n this._myCollisionCheckParamsTeleport.myHeight = this._myCollisionCheckParamsMovement.myHeight;\r\n }\r\n\r\n _setupCollisionCheckParamsMovement() {\r\n let simplifiedParams = new CharacterColliderSetupSimplifiedCreationParams();\r\n\r\n simplifiedParams.myHeight = this._myParams.myDefaultHeight;\r\n simplifiedParams.myRadius = this._myParams.myCharacterRadius;\r\n\r\n simplifiedParams.myAccuracyLevel = this._myParams.myColliderAccuracy;\r\n\r\n simplifiedParams.myIsPlayer = true;\r\n\r\n simplifiedParams.myCheckOnlyFeet = this._myParams.myColliderCheckOnlyFeet;\r\n\r\n simplifiedParams.myMaxSpeed = this._myParams.myMaxSpeed;\r\n\r\n simplifiedParams.myCanFly = this._myParams.myFlyEnabled;\r\n\r\n simplifiedParams.myShouldSlideAlongWall = this._myParams.myColliderSlideAlongWall;\r\n\r\n simplifiedParams.myCollectGroundInfo = true;\r\n simplifiedParams.myMaxWalkableGroundAngle = this._myParams.myColliderMaxWalkableGroundAngle;\r\n simplifiedParams.myShouldSnapOnGround = this._myParams.myColliderSnapOnGround;\r\n simplifiedParams.myMaxDistanceToSnapOnGround = this._myParams.myColliderMaxDistanceToSnapOnGround;\r\n simplifiedParams.myMaxWalkableGroundStepHeight = this._myParams.myColliderMaxWalkableGroundStepHeight;\r\n simplifiedParams.myShouldNotFallFromEdges = this._myParams.myColliderPreventFallingFromEdges;\r\n\r\n simplifiedParams.myHorizontalCheckBlockLayerFlags.copy(this._myParams.myPhysicsBlockLayerFlags);\r\n let physXComponents = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getComponents(PhysXComponent);\r\n for (let physXComponent of physXComponents) {\r\n simplifiedParams.myHorizontalCheckObjectsToIgnore.pp_pushUnique(physXComponent.object, (first, second) => first.pp_equals(second));\r\n }\r\n simplifiedParams.myVerticalCheckBlockLayerFlags.copy(simplifiedParams.myHorizontalCheckBlockLayerFlags);\r\n simplifiedParams.myVerticalCheckObjectsToIgnore.pp_copy(simplifiedParams.myHorizontalCheckObjectsToIgnore);\r\n\r\n simplifiedParams.myHorizontalCheckDebugEnabled = this._myParams.myDebugHorizontalEnabled && Globals.isDebugEnabled(this._myParams.myEngine);\r\n simplifiedParams.myVerticalCheckDebugEnabled = this._myParams.myDebugVerticalEnabled && Globals.isDebugEnabled(this._myParams.myEngine);\r\n\r\n let colliderSetup = CharacterColliderSetupUtils.createSimplified(simplifiedParams);\r\n\r\n this._myCollisionCheckParamsMovement = CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(colliderSetup, this._myCollisionCheckParamsMovement, this._myParams.myEngine);\r\n }\r\n\r\n _setupCollisionCheckParamsTeleport() {\r\n this._myCollisionCheckParamsTeleport = CollisionCheckUtils.generate360TeleportParamsFromMovementParams(this._myCollisionCheckParamsMovement);\r\n\r\n // Increased so to let teleport on steep slopes from above (from below is fixed through detection myGroundAngleToIgnoreUpward)\r\n this._myCollisionCheckParamsTeleport.myGroundAngleToIgnore = 61;\r\n this._myCollisionCheckParamsTeleport.myTeleportMustBeOnIgnorableGroundAngle = true;\r\n this._myCollisionCheckParamsTeleport.myTeleportMustBeOnGround = true;\r\n\r\n /*\r\n this._myCollisionCheckParamsTeleport.myExtraTeleportCheckCallback = function (\r\n offsetTeleportPosition, endPosition, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, prevCollisionRuntimeParams, collisionRuntimeParams, newFeetPosition\r\n \r\n ) {\r\n let isTeleportingUpward = endPosition.vec3_isFartherAlongAxis(feetPosition, transformUp);\r\n if (isTeleportingUpward) {\r\n collisionRuntimeParams.myTeleportCanceled = collisionRuntimeParams.myGroundAngle > 30 + 0.0001;\r\n console.error(collisionRuntimeParams.myTeleportCanceled);\r\n }\r\n \r\n return newFeetPosition;\r\n }*/\r\n\r\n // This is needed for when u want to perform the teleport as a movement\r\n // Maybe this should be another set of collsion check params copied from the smooth ones?\r\n // When you teleport as move, u check with the teleport for the position, and this other params for the move, so that u can use a smaller\r\n // cone, and sliding if desired\r\n // If nothing is specified it's copied from the teleport and if greater than 90 cone is tuned down, and also the below settings are applied\r\n\r\n // You could also do this if u want to perform the teleport as movement, instead of using the smooth\r\n // but this will make even the final teleport check be halved\r\n //this._myCollisionCheckParamsTeleport.myHalfConeAngle = 90;\r\n //this._myCollisionCheckParamsTeleport.myHalfConeSliceAmount = 3;\r\n //this._myCollisionCheckParamsTeleport.myCheckHorizontalFixedForwardEnabled = false;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementEnabled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMaxLengthEnabled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMaxLength = this._myCollisionCheckParamsTeleport.myRadius * 0.75;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMinLengthEnabled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMinLength = params.mySplitMovementMaxLength;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementStopWhenHorizontalMovementCanceled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementStopWhenVerticalMovementCanceled = true;\r\n\r\n //this._myCollisionCheckParamsTeleport.myDebugEnabled = true;\r\n }\r\n\r\n _fixAlmostUp() {\r\n // Get rotation on y and adjust if it's slightly tilted when it's almsot 0,1,0\r\n\r\n let defaultUp = vec3_create(0, 1, 0);\r\n let angleWithDefaultUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp().vec3_angle(defaultUp);\r\n if (angleWithDefaultUp < 1) {\r\n let forward = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getForward();\r\n let flatForward = forward.vec3_clone();\r\n flatForward[1] = 0;\r\n\r\n let defaultForward = vec3_create(0, 0, 1);\r\n let angleWithDefaultForward = defaultForward.vec3_angleSigned(flatForward, defaultUp);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_resetRotation();\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateAxis(angleWithDefaultForward, defaultUp);\r\n }\r\n }\r\n\r\n _setupLocomotionMovementFSM() {\r\n this._myLocomotionMovementFSM = new FSM();\r\n //this._myLocomotionMovementFSM.setLogEnabled(true, \"Locomotion Movement\");\r\n\r\n this._myLocomotionMovementFSM.addState(\"init\");\r\n this._myLocomotionMovementFSM.addState(\"smooth\", (dt) => this._myPlayerLocomotionSmooth.update(dt));\r\n this._myLocomotionMovementFSM.addState(\"teleport\", (dt) => this._myPlayerLocomotionTeleport.update(dt));\r\n this._myLocomotionMovementFSM.addState(\"idleSmooth\");\r\n this._myLocomotionMovementFSM.addState(\"idleTeleport\");\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"init\", \"smooth\", \"startSmooth\", function () {\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"init\", \"teleport\", \"startTeleport\", function () {\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"smooth\", \"teleport\", \"next\", function () {\r\n this._myPlayerLocomotionSmooth.stop();\r\n this._myPlayerLocomotionTeleport.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"teleport\", \"smooth\", \"next\", function () {\r\n this._myPlayerLocomotionTeleport.stop();\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"smooth\", \"idleSmooth\", \"idle\", function () {\r\n this._myPlayerLocomotionSmooth.stop();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"teleport\", \"idleTeleport\", \"idle\", function () {\r\n this._myPlayerLocomotionTeleport.stop();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"idleSmooth\", \"smooth\", \"resume\", function () {\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"idleTeleport\", \"teleport\", \"resume\", function () {\r\n this._myPlayerLocomotionTeleport.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.init(\"init\");\r\n }\r\n\r\n _getMainHandGamepad() {\r\n return Globals.getGamepads(this._myParams.myEngine)[this._myParams.myMainHand];\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myPlayerHeadManager.destroy();\r\n this._myPlayerLocomotionSmooth.destroy();\r\n this._myPlayerTransformManager.destroy();\r\n this._myPlayerObscureManager.destroy();\r\n this._myPlayerLocomotionTeleport.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { GamepadButtonID } from \"../gamepad_buttons.js\";\r\n\r\nlet _mySimultaneousPressMaxDelay = 0.15;\r\nlet _mySimultaneousTouchMaxDelay = 0.15;\r\n\r\nexport function setSimultaneousPressMaxDelay(simultaneousPressMaxDelay) {\r\n _mySimultaneousPressMaxDelay = simultaneousPressMaxDelay;\r\n}\r\n\r\nexport function setSimultaneousTouchMaxDelay(simultaneousTouchMaxDelay) {\r\n _mySimultaneousTouchMaxDelay = simultaneousTouchMaxDelay;\r\n}\r\n\r\nexport function getSimultaneousPressMaxDelay() {\r\n return _mySimultaneousPressMaxDelay;\r\n}\r\n\r\nexport function getSimultaneousTouchMaxDelay() {\r\n return _mySimultaneousTouchMaxDelay;\r\n}\r\n\r\n\r\n// gamepadButtonIDsList is a sequence of a gamepads and a list of buttonIDs like this ([gamepad1, squeeze, top, select], [gamepad2, bottom, squeeze, select], ...)\r\n// If the first parameter is a number it's used as multiplePressCount\r\n// If the buttonIDs list is empty for a given gamepad, it means that every button will be included\r\nexport function isAnyButtonPressStart(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonPressStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isPressStart(multiplePressCount)) {\r\n atLeastOneButtonPressStart = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonPressStart) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonPressStart;\r\n}\r\n\r\n// gamepadButtonIDsList is a sequence of a gamepads and a list of buttonIDs like this ([gamepad1, squeeze, top, select], [gamepad2, bottom, squeeze, select], ...)\r\n// If the first parameter is a number it's used as multiplePressCount\r\n// If the buttonIDs list is empty for a given gamepad, it means that every button will be included\r\nexport function areButtonsPressStart(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonPressedRecently = true;\r\n let atLeastOneButtonPressStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(button.myPressed && (multiplePressCount == null || button.myMultiplePressStartCount == multiplePressCount) && button.myTimePressed < _mySimultaneousPressMaxDelay)) {\r\n areButtonPressedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isPressStart(multiplePressCount)) {\r\n atLeastOneButtonPressStart = true;\r\n }\r\n }\r\n\r\n if (!areButtonPressedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonPressedRecently && atLeastOneButtonPressStart;\r\n}\r\n\r\nexport function isAnyButtonPressEnd(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonPressEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isPressEnd(multiplePressCount)) {\r\n atLeastOneButtonPressEnd = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonPressEnd) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonPressEnd;\r\n}\r\n\r\nexport function areButtonsPressEnd(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonNotPressedRecently = true;\r\n let atLeastOneButtonPressEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(!button.myPressed && (multiplePressCount == null || button.myMultiplePressEndCount == multiplePressCount) && button.myTimeNotPressed < _mySimultaneousPressMaxDelay)) {\r\n areButtonNotPressedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isPressEnd(multiplePressCount)) {\r\n atLeastOneButtonPressEnd = true;\r\n }\r\n }\r\n\r\n if (!areButtonNotPressedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonNotPressedRecently && atLeastOneButtonPressEnd;\r\n}\r\n\r\nexport function isAnyButtonTouchStart(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonTouchStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isTouchStart(multiplePressCount)) {\r\n atLeastOneButtonTouchStart = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonTouchStart) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonTouchStart;\r\n}\r\n\r\nexport function areButtonsTouchStart(...gamepadButtonIDsList) {\r\n let multipleTouchCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multipleTouchCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonTouchedRecently = true;\r\n let atLeastOneButtonTouchStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(button.myTouched && (multipleTouchCount == null || button.myMultipleTouchStartCount == multipleTouchCount) && button.myTimeTouched < _mySimultaneousTouchMaxDelay)) {\r\n areButtonTouchedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isTouchStart(multipleTouchCount)) {\r\n atLeastOneButtonTouchStart = true;\r\n }\r\n }\r\n\r\n if (!areButtonTouchedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonTouchedRecently && atLeastOneButtonTouchStart;\r\n}\r\n\r\nexport function isAnyButtonTouchEnd(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonTouchEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isTouchEnd(multiplePressCount)) {\r\n atLeastOneButtonTouchEnd = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonTouchEnd) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonTouchEnd;\r\n}\r\n\r\nexport function areButtonsTouchEnd(...gamepadButtonIDsList) {\r\n let multipleTouchCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multipleTouchCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonNotTouchedRecently = true;\r\n let atLeastOneButtonTouchEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(!button.myTouched && (multipleTouchCount == null || button.myMultipleTouchEndCount == multipleTouchCount) && button.myTimeNotTouched < _mySimultaneousTouchMaxDelay)) {\r\n areButtonNotTouchedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isTouchEnd(multipleTouchCount)) {\r\n atLeastOneButtonTouchEnd = true;\r\n }\r\n }\r\n\r\n if (!areButtonNotTouchedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonNotTouchedRecently && atLeastOneButtonTouchEnd;\r\n}\r\n\r\nexport let GamepadUtils = {\r\n setSimultaneousPressMaxDelay,\r\n setSimultaneousTouchMaxDelay,\r\n getSimultaneousPressMaxDelay,\r\n getSimultaneousTouchMaxDelay,\r\n isAnyButtonPressStart,\r\n areButtonsPressStart,\r\n isAnyButtonPressEnd,\r\n areButtonsPressEnd,\r\n isAnyButtonTouchStart,\r\n areButtonsTouchStart,\r\n isAnyButtonTouchEnd,\r\n areButtonsTouchEnd\r\n};", "// Even if this can be sued to generally fade, it should be called collision obscure to hint that is meant for collision obscuring\r\n\r\nimport { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { FSM } from \"../../../../../cauldron/fsm/fsm.js\";\r\nimport { EasingFunction } from \"../../../../../cauldron/utils/math_utils.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { VisualMesh, VisualMeshParams } from \"../../../../../cauldron/visual/elements/visual_mesh.js\";\r\nimport { MaterialUtils } from \"../../../../../cauldron/wl/utils/material_utils.js\";\r\nimport { vec3_create, vec4_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\n\r\n// Occlude\r\nexport class PlayerObscureManagerParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerTransformManager = null;\r\n this.myPlayerLocomotionTeleport = null;\r\n\r\n this.myEnabled = true;\r\n\r\n this.myObscureObject = null;\r\n this.myObscureMaterial = null;\r\n this.myObscureRadius = 0;\r\n\r\n this.myObscureFadeOutSeconds = 0.1;\r\n this.myObscureFadeInSeconds = 0.1;\r\n\r\n this.myObscureFadeEasingFunction = EasingFunction.linear;\r\n\r\n this.myDistanceToStartObscureWhenHeadColliding = 0;\r\n this.myDistanceToStartObscureWhenBodyColliding = 0;\r\n this.myDistanceToStartObscureWhenFloating = 0;\r\n this.myDistanceToStartObscureWhenFar = 0;\r\n\r\n this.myRelativeDistanceToMaxObscureWhenHeadColliding = 0; // Relative to the start distance, 1 means that in 1 meters after it started it will be completely obscured\r\n this.myRelativeDistanceToMaxObscureWhenBodyColliding = 0;\r\n this.myRelativeDistanceToMaxObscureWhenFloating = 0;\r\n this.myRelativeDistanceToMaxObscureWhenFar = 0;\r\n\r\n this.myObscureLevelRelativeDistanceEasingFunction = EasingFunction.linear;\r\n\r\n this.myDisableObscureWhileTeleporting = true;\r\n this.myDisableObscureWhileTeleportingDuration = 0.5;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class PlayerObscureManager {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myObscureMaterial = null;\r\n this._myObscureParentObject = null;\r\n\r\n this._myCurrentObscureLevel = 0;\r\n this._myTargetObscureLevel = 0;\r\n this._myLastTargetObscureLevel = null;\r\n this._myLastIsFadingIn = null;\r\n\r\n this._myInstantObscureFramesCount = 0;\r\n\r\n this._myFadeTimer = new Timer(0, false);\r\n\r\n this._myDisableObscureWhileTeleportingTimer = null;\r\n if (this._myParams.myDisableObscureWhileTeleportingDuration != null) {\r\n this._myDisableObscureWhileTeleportingTimer = new Timer(this._myParams.myDisableObscureWhileTeleportingDuration);\r\n } else {\r\n this._myDisableObscureWhileTeleportingTimer = new Timer(0, false);\r\n }\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \" Obscure\");\r\n\r\n this._myFSM.addState(\"init\");\r\n\r\n this._myFSM.addState(\"inactive\");\r\n this._myFSM.addState(\"idle\", this._idleUpdate.bind(this));\r\n this._myFSM.addState(\"fading\", this._fadingUpdate.bind(this));\r\n\r\n this._myFSM.addTransition(\"init\", \"inactive\", \"end\", this._setObscureLevel.bind(this, 0));\r\n\r\n this._myFSM.addTransition(\"inactive\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"fading\", \"fade\", this._startFading.bind(this));\r\n this._myFSM.addTransition(\"fading\", \"idle\", \"done\", this._fadingDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"inactive\", \"inactive\", \"stop\", this._setObscureLevel.bind(this, 0));\r\n this._myFSM.addTransition(\"idle\", \"inactive\", \"stop\", this._setObscureLevel.bind(this, 0));\r\n this._myFSM.addTransition(\"fading\", \"inactive\", \"stop\", this._setObscureLevel.bind(this, 0));\r\n\r\n this._myFSM.init(\"init\");\r\n\r\n this._setupVisuals();\r\n\r\n this._myFSM.perform(\"end\");\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), false, false, this._myParams.myEngine);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._myFSM.perform(\"start\");\r\n }\r\n\r\n stop() {\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n update(dt) {\r\n if (!this._myParams.myPlayerLocomotionTeleport.isTeleporting()) {\r\n if (this._myParams.myDisableObscureWhileTeleportingDuration != null) {\r\n this._myDisableObscureWhileTeleportingTimer.start();\r\n } else {\r\n this._myDisableObscureWhileTeleportingTimer.reset();\r\n }\r\n } else {\r\n this._myDisableObscureWhileTeleportingTimer.update(dt);\r\n }\r\n\r\n this._myObscureParentObject.pp_resetTransformLocal();\r\n\r\n this._updateObscured();\r\n\r\n this._myFSM.update(dt);\r\n\r\n this._setObscureVisible(this.isObscured());\r\n\r\n if (this._myInstantObscureFramesCount > 0) {\r\n this._myInstantObscureFramesCount--;\r\n }\r\n }\r\n\r\n isStarted() {\r\n return !this._myFSM.isInState(\"inactive\");\r\n }\r\n\r\n isObscured() {\r\n return this._myCurrentObscureLevel > 0;\r\n }\r\n\r\n isFading() {\r\n return this._myFSM.isInState(\"fading\");\r\n }\r\n\r\n isFadingIn() {\r\n return this.isFading() && this._myCurrentObscureLevel > this._myTargetObscureLevel;\r\n }\r\n\r\n isFadingOut() {\r\n return this.isFading() && this._myCurrentObscureLevel <= this._myTargetObscureLevel;\r\n }\r\n\r\n getObscureLevel() {\r\n return this._myCurrentObscureLevel;\r\n }\r\n\r\n getTargetObscureLevel() {\r\n return this._myTargetObscureLevel;\r\n }\r\n\r\n getCurrentObscureLevel() {\r\n this._myCurrentObscureLevel;\r\n }\r\n\r\n overrideObscureLevel(obscureLevel, instantFade = false) {\r\n this._myObscureLevelOverride = obscureLevel;\r\n\r\n if (instantFade && this.isStarted()) {\r\n this._setObscureLevel(obscureLevel);\r\n }\r\n }\r\n\r\n resetObscureLevelOverride() {\r\n this._myObscureLevelOverride = null;\r\n }\r\n\r\n _idleUpdate(dt) {\r\n if (Math.abs(this._myTargetObscureLevel - this._myCurrentObscureLevel) > Math.PP_EPSILON) {\r\n if (this._myInstantObscureFramesCount > 0) {\r\n this._setObscureAlpha(this._myTargetObscureLevel);\r\n this._myCurrentObscureLevel = this._myTargetObscureLevel;\r\n } else {\r\n this._myFSM.perform(\"fade\");\r\n }\r\n }\r\n }\r\n\r\n _fadingUpdate(dt) {\r\n if (Math.abs(this._myTargetObscureLevel - this._myCurrentObscureLevel) <= Math.PP_EPSILON) {\r\n this._myFSM.perform(\"done\");\r\n return;\r\n }\r\n\r\n if (this._myLastTargetObscureLevel != this._myTargetObscureLevel) {\r\n this._refreshFadeTimer();\r\n this._myLastTargetObscureLevel = this._myTargetObscureLevel;\r\n }\r\n\r\n this._myFadeTimer.update(dt);\r\n\r\n if (this._myInstantObscureFramesCount > 0) {\r\n this._myFadeTimer.end();\r\n }\r\n\r\n let newObscureLevel = this._myParams.myObscureFadeEasingFunction(this._myFadeTimer.getPercentage());\r\n\r\n let isFadingIn = this._myCurrentObscureLevel > this._myTargetObscureLevel;\r\n if (!isFadingIn) {\r\n newObscureLevel = Math.min(newObscureLevel, this._myTargetObscureLevel);\r\n } else {\r\n newObscureLevel = Math.pp_clamp(1 - newObscureLevel, 0, 1);\r\n newObscureLevel = Math.max(newObscureLevel, this._myTargetObscureLevel);\r\n }\r\n\r\n this._setObscureAlpha(newObscureLevel);\r\n this._myCurrentObscureLevel = newObscureLevel;\r\n\r\n if (Math.abs(this._myTargetObscureLevel - this._myCurrentObscureLevel) <= Math.PP_EPSILON || this._myFadeTimer.isDone()) {\r\n this._myFSM.perform(\"done\");\r\n }\r\n }\r\n\r\n _startFading() {\r\n this._myLastTargetObscureLevel = null;\r\n this._myLastIsFadingIn = null;\r\n }\r\n\r\n _fadingDone() {\r\n this._setObscureLevel(this._myTargetObscureLevel);\r\n }\r\n\r\n _refreshFadeTimer() {\r\n let isFadingIn = this._myCurrentObscureLevel > this._myTargetObscureLevel;\r\n\r\n if (this._myLastIsFadingIn != isFadingIn) {\r\n this._setFadeTimerToObscureLevel(isFadingIn);\r\n }\r\n\r\n this._myLastIsFadingIn = isFadingIn;\r\n }\r\n\r\n _setFadeTimerToObscureLevel(isFadingIn) {\r\n let percentage = 0;\r\n let closestPercentage = 0;\r\n let steps = 1000;\r\n let increment = 1 / steps;\r\n\r\n while (percentage < 1) {\r\n if (Math.abs(this._myParams.myObscureFadeEasingFunction(percentage) - this._myCurrentObscureLevel) <\r\n Math.abs(this._myParams.myObscureFadeEasingFunction(closestPercentage) - this._myCurrentObscureLevel)) {\r\n closestPercentage = percentage;\r\n }\r\n\r\n percentage += increment;\r\n }\r\n\r\n if (Math.abs(this._myParams.myObscureFadeEasingFunction(1) - this._myCurrentObscureLevel) <\r\n Math.abs(this._myParams.myObscureFadeEasingFunction(closestPercentage) - this._myCurrentObscureLevel)) {\r\n closestPercentage = 1;\r\n }\r\n\r\n if (isFadingIn) {\r\n this._myFadeTimer.start(this._myParams.myObscureFadeInSeconds);\r\n this._myFadeTimer.setPercentage(Math.pp_clamp(1 - closestPercentage, 0, 1));\r\n } else {\r\n this._myFadeTimer.start(this._myParams.myObscureFadeOutSeconds);\r\n this._myFadeTimer.setPercentage(Math.pp_clamp(closestPercentage, 0, 1));\r\n }\r\n }\r\n\r\n _setObscureLevel(obscureLevel) {\r\n this._myTargetObscureLevel = obscureLevel;\r\n this._myCurrentObscureLevel = obscureLevel;\r\n this._setObscureAlpha(obscureLevel);\r\n this._setObscureVisible(this.isObscured());\r\n }\r\n\r\n _setObscureAlpha(alpha) {\r\n if (this._myParams.myObscureObject == null) {\r\n MaterialUtils.setAlpha(this._myObscureMaterial, alpha);\r\n } else {\r\n MaterialUtils.setObjectAlpha(this._myParams.myObscureObject, alpha);\r\n }\r\n }\r\n\r\n _updateObscured() {\r\n this._myTargetObscureLevel = 0;\r\n\r\n if (this._myParams.myEnabled) {\r\n if (this._myObscureLevelOverride != null) {\r\n this._myTargetObscureLevel = this._myObscureLevelOverride;\r\n } else if (!this._myParams.myPlayerLocomotionTeleport.isTeleporting() || !this._myParams.myDisableObscureWhileTeleporting || this._myDisableObscureWhileTeleportingTimer.isDone()) {\r\n // #TODO Check if VALID head is colliding, in that case use max obscure level\r\n // This prevent being able to see when resetting head to real even though real is colliding\r\n // For example if u stand up and go with the head in the ceiling and reset by moving\r\n // Add a setting for this though, since someone could prefer being able to see in this case,\r\n // so to be able to know where to move (since it might be resetting to this invalid position)\r\n if (this._myParams.myPlayerTransformManager.isHeadColliding() || !this._myParams.myPlayerTransformManager.isPositionHeadValid()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToRealHead();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenHeadColliding;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenHeadColliding, 0, 1);\r\n if (isNaN(relativeDistancePercentage) || !this._myParams.myPlayerTransformManager.isPositionHeadValid()) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n\r\n if (this._myParams.myPlayerTransformManager.isBodyColliding()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToReal();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenBodyColliding;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenBodyColliding, 0, 1);\r\n if (isNaN(relativeDistancePercentage)) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n\r\n if (this._myParams.myPlayerTransformManager.isFloating()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToReal();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenFloating;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenFloating, 0, 1);\r\n if (isNaN(relativeDistancePercentage)) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n\r\n if (this._myParams.myPlayerTransformManager.isFar()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToReal();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenFar;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenFar, 0, 1);\r\n if (isNaN(relativeDistancePercentage)) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _setupVisuals() {\r\n this._myObscureMaterial = null;\r\n if (this._myParams.myObscureMaterial != null) {\r\n this._myObscureMaterial = this._myParams.myObscureMaterial;\r\n } else {\r\n this._myObscureMaterial = Globals.getDefaultMaterials(this._myParams.myEngine).myFlatTransparentNoDepth.clone();\r\n this._myObscureMaterial.color = vec4_create(0, 0, 0, 1);\r\n }\r\n\r\n this._myObscureParentObject = Globals.getPlayerObjects(this._myParams.myEngine).myCauldron.pp_addObject();\r\n\r\n let obscureVisualParams = new VisualMeshParams(this._myParams.myEngine);\r\n obscureVisualParams.myMesh = Globals.getDefaultMeshes(this._myParams.myEngine).myInvertedSphere;\r\n obscureVisualParams.myMaterial = (this._myParams.myObscureMaterial != null) ? this._myParams.myObscureMaterial : this._myObscureMaterial;\r\n obscureVisualParams.myParent = this._myObscureParentObject;\r\n obscureVisualParams.myLocal = true;\r\n obscureVisualParams.myTransform.mat4_setScale(vec3_create(this._myParams.myObscureRadius, this._myParams.myObscureRadius, this._myParams.myObscureRadius));\r\n this._myObscureVisual = new VisualMesh(obscureVisualParams);\r\n\r\n if (this._myParams.myObscureObject != null) {\r\n this._myParams.myObscureObject.pp_setParent(this._myObscureParentObject, false);\r\n this._myParams.myObscureObject.pp_resetTransformLocal();\r\n }\r\n\r\n this._setObscureVisible(false);\r\n }\r\n\r\n _setObscureVisible(visible) {\r\n if (this._myParams.myObscureObject == null) {\r\n this._myObscureVisual.setVisible(visible);\r\n } else {\r\n this._myObscureVisual.setVisible(false);\r\n this._myParams.myObscureObject.pp_setActive(visible);\r\n }\r\n\r\n if (visible) {\r\n this._myObscureParentObject.pp_setParent(this._myParams.myPlayerTransformManager.getHead(), false);\r\n } else {\r\n this._myObscureParentObject.pp_setParent(Globals.getPlayerObjects(this._myParams.myEngine)?.myCauldron, false);\r\n }\r\n }\r\n\r\n _onXRSessionStart() {\r\n this._myInstantObscureFramesCount = 5;\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._myInstantObscureFramesCount = 5;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myObscureVisual.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { VisualArrow, VisualArrowParams } from \"../../../../../../cauldron/visual/elements/visual_arrow.js\";\r\nimport { VisualLine, VisualLineParams } from \"../../../../../../cauldron/visual/elements/visual_line.js\";\r\nimport { VisualPoint, VisualPointParams } from \"../../../../../../cauldron/visual/elements/visual_point.js\";\r\nimport { VisualTorus, VisualTorusParams } from \"../../../../../../cauldron/visual/elements/visual_torus.js\";\r\nimport { quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\n\r\nexport class PlayerLocomotionTeleportDetectionVisualizerParams {\r\n\r\n constructor() {\r\n this.myTeleportValidMaterial = null;\r\n this.myTeleportInvalidMaterial = null;\r\n\r\n this.myTeleportPositionObject = null;\r\n this.myTeleportPositionObjectRotateWithHead = true;\r\n\r\n this.myTeleportParableLineEndOffset = 0.05;\r\n this.myTeleportParableMinVerticalDistanceToShowVerticalLine = 0.80;\r\n this.myTeleportParableShowVerticalLineMaxLength = 0.30;\r\n\r\n this.myTeleportParablePositionUpOffset = 0.05;\r\n\r\n this.myTeleportParablePositionVisualAlignOnSurface = true;\r\n\r\n this.myVisualTeleportPositionLerpEnabled = true;\r\n this.myVisualTeleportPositionLerpFactor = 10;\r\n this.myVisualTeleportPositionMinDistanceToResetLerp = 0.005;\r\n this.myVisualTeleportPositionMinDistanceToLerp = 0.15;\r\n this.myVisualTeleportPositionMaxDistanceToLerp = 5;\r\n\r\n this.myVisualTeleportPositionMinDistanceToCloseLerpFactor = 0.02;\r\n this.myVisualTeleportPositionCloseLerpFactor = 30;\r\n\r\n this.myVisualTeleportPositionMinAngleDistanceToResetLerp = 0.1;\r\n this.myVisualTeleportPositionMinAngleDistanceToLerp = 1;\r\n this.myVisualTeleportPositionMaxAngleDistanceToLerp = 180;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportDetectionVisualizer {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, detectionRuntimeParams) {\r\n this._myDetectionRuntimeParams = detectionRuntimeParams;\r\n\r\n this._myTeleportParams = teleportParams;\r\n this._myTeleportRuntimeParams = teleportRuntimeParams;\r\n\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformQuat = quat2_create();\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Min Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToLerp, 1, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Max Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxDistanceToLerp, 1, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Min Angle Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToLerp, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Max Angle Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxAngleDistanceToLerp, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n this._setupVisuals();\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n end() {\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n\r\n this._hideTeleportPosition();\r\n }\r\n\r\n update(dt) {\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Min Distance Lerp\");\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Max Distance Lerp\");\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Min Angle Distance Lerp\");\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxAngleDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Max Angle Distance Lerp\");\r\n\r\n if (this._myDetectionRuntimeParams.myTeleportDetectionValid) {\r\n this._showTeleportPosition(dt);\r\n } else {\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n this._hideTeleportPosition();\r\n }\r\n }\r\n\r\n _showTeleportPosition(dt) {\r\n this._showTeleportParable(dt);\r\n }\r\n\r\n _hideTeleportPosition() {\r\n for (let visualLine of this._myValidVisualLines) {\r\n visualLine.setVisible(false);\r\n }\r\n\r\n for (let visualLine of this._myInvalidVisualLines) {\r\n visualLine.setVisible(false);\r\n }\r\n\r\n this._myValidVisualPoint.setVisible(false);\r\n this._myInvalidVisualPoint.setVisible(false);\r\n\r\n this._myValidVisualVerticalArrow.setVisible(false);\r\n\r\n this._myValidVisualTeleportPositionTorus.setVisible(false);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(false);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject != null) {\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(false);\r\n }\r\n }\r\n\r\n _addVisualLines(amount) {\r\n for (let i = 0; i < amount; i++) {\r\n {\r\n let visualParams = new VisualLineParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n this._myValidVisualLines.push(new VisualLine(visualParams));\r\n }\r\n\r\n {\r\n let visualParams = new VisualLineParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportInvalidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportInvalidMaterial;\r\n }\r\n\r\n this._myInvalidVisualLines.push(new VisualLine(visualParams));\r\n }\r\n }\r\n }\r\n\r\n _showTeleportParablePosition(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _showTeleportParable(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setupVisuals() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let visual of this._myValidVisualLines) {\r\n visual.destroy();\r\n }\r\n\r\n for (let visual of this._myInvalidVisualLines) {\r\n visual.destroy();\r\n }\r\n\r\n this._myValidVisualPoint.destroy();\r\n this._myInvalidVisualPoint.destroy();\r\n\r\n this._myValidVisualVerticalArrow.destroy();\r\n this._myValidVisualTeleportPositionTorus.destroy();\r\n this._myValidVisualTeleportPositionTorusInner.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportDetectionVisualizer.prototype._setupVisuals = function () {\r\n let innerTorusPosition = vec3_create();\r\n return function _setupVisuals() {\r\n this._myTeleportValidMaterial = Globals.getDefaultMaterials(this._myTeleportParams.myEngine).myFlatOpaque.clone();\r\n this._myTeleportValidMaterial.color = vec4_create(0, 0.5, 1, 1);\r\n this._myTeleportInvalidMaterial = Globals.getDefaultMaterials(this._myTeleportParams.myEngine).myFlatOpaque.clone();\r\n this._myTeleportInvalidMaterial.color = vec4_create(0.75, 0.05, 0, 1);\r\n\r\n this._myValidVisualLines = [];\r\n this._myInvalidVisualLines = [];\r\n this._addVisualLines(30);\r\n\r\n {\r\n let visualParams = new VisualPointParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n this._myValidVisualPoint = new VisualPoint(visualParams);\r\n }\r\n\r\n {\r\n let visualParams = new VisualPointParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportInvalidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportInvalidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportInvalidMaterial;\r\n }\r\n\r\n this._myInvalidVisualPoint = new VisualPoint(visualParams);\r\n }\r\n\r\n {\r\n let visualParams = new VisualArrowParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n this._myValidVisualVerticalArrow = new VisualArrow(visualParams);\r\n }\r\n\r\n this._myVisualTeleportPositionObject = Globals.getPlayerObjects(this._myTeleportParams.myEngine).myCauldron.pp_addObject();\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Torus Radius\", 0.175, 0.1, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneInt(\"Teleport Torus Segments\", 24, 1, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Torus Thickness\", 0.02, 0.1, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Torus Inner Radius\", 0.04, 0.1, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n {\r\n let visualParams = new VisualTorusParams(this._myTeleportParams.myEngine);\r\n visualParams.myRadius = 0.175;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n visualParams.myParent = this._myVisualTeleportPositionObject;\r\n visualParams.myLocal = true;\r\n\r\n this._myValidVisualTeleportPositionTorus = new VisualTorus(visualParams);\r\n }\r\n\r\n {\r\n let visualParams = new VisualTorusParams(this._myTeleportParams.myEngine);\r\n visualParams.myRadius = 0.04;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Inner Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n visualParams.myParent = this._myVisualTeleportPositionObject;\r\n visualParams.myLocal = true;\r\n\r\n let visualTorusParams = this._myValidVisualTeleportPositionTorus.getParams();\r\n\r\n let innerTorusCenter = (visualTorusParams.myRadius - (visualTorusParams.mySegmentThickness / 2)) / 2;\r\n innerTorusPosition.vec3_set(0, 0, innerTorusCenter);\r\n\r\n visualParams.myTransform.mat4_setPosition(innerTorusPosition);\r\n\r\n this._myValidVisualTeleportPositionTorusInner = new VisualTorus(visualParams);\r\n }\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject != null) {\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setParent(this._myVisualTeleportPositionObject);\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_resetTransformLocal();\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(false);\r\n }\r\n\r\n this._hideTeleportPosition();\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionVisualizer.prototype._showTeleportParable = function () {\r\n let currentPosition = vec3_create();\r\n let nextPosition = vec3_create();\r\n\r\n let playerUp = vec3_create();\r\n let upDifference = vec3_create();\r\n return function _showTeleportParable(dt) {\r\n let showParableDistance = Math.max(this._myDetectionRuntimeParams.myParableDistance - this._myTeleportParams.myVisualizerParams.myTeleportParableLineEndOffset);\r\n let lastParableIndex = this._myDetectionRuntimeParams.myParable.getPositionIndexByDistance(showParableDistance);\r\n let lastParableIndexDistance = this._myDetectionRuntimeParams.myParable.getDistance(lastParableIndex);\r\n\r\n if (lastParableIndex + 1 > this._myValidVisualLines.length) {\r\n this._addVisualLines(lastParableIndex + 1, this._myValidVisualLines.length);\r\n }\r\n\r\n const usedVisualLines = [];\r\n for (let i = 0; i <= lastParableIndex; i++) {\r\n currentPosition = this._myDetectionRuntimeParams.myParable.getPosition(i, currentPosition);\r\n nextPosition = this._myDetectionRuntimeParams.myParable.getPosition(i + 1, nextPosition);\r\n\r\n let visuaLine = (this._myDetectionRuntimeParams.myTeleportPositionValid) ? this._myValidVisualLines[i] : this._myInvalidVisualLines[i];\r\n usedVisualLines.push(visuaLine);\r\n\r\n let currentVisualLineParams = visuaLine.getParams();\r\n\r\n if (i == lastParableIndex) {\r\n let stepLength = Math.max(0, showParableDistance - lastParableIndexDistance);\r\n nextPosition = nextPosition.vec3_sub(currentPosition, nextPosition).vec3_normalize(nextPosition);\r\n nextPosition = currentPosition.vec3_add(nextPosition.vec3_scale(stepLength, nextPosition), nextPosition);\r\n }\r\n\r\n currentVisualLineParams.setStartEnd(currentPosition, nextPosition);\r\n currentVisualLineParams.myThickness = 0.005;\r\n\r\n visuaLine.paramsUpdated();\r\n visuaLine.setVisible(true);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugShowEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, currentPosition, vec4_create(1, 0, 0, 1), 0.01);\r\n }\r\n }\r\n\r\n for (let visualLine of this._myValidVisualLines) {\r\n if (usedVisualLines.indexOf(visualLine) == -1) {\r\n visualLine.setVisible(false);\r\n }\r\n }\r\n\r\n for (let visualLine of this._myInvalidVisualLines) {\r\n if (usedVisualLines.indexOf(visualLine) == -1) {\r\n visualLine.setVisible(false);\r\n }\r\n }\r\n\r\n let visualPoint = (this._myDetectionRuntimeParams.myTeleportPositionValid) ? this._myValidVisualPoint : this._myInvalidVisualPoint;\r\n let visualPointParams = visualPoint.getParams();\r\n visualPointParams.myPosition.vec3_copy(nextPosition);\r\n visualPointParams.myRadius = 0.01;\r\n visualPoint.paramsUpdated();\r\n visualPoint.setVisible(true);\r\n\r\n let unusedVisualPoint = (this._myDetectionRuntimeParams.myTeleportPositionValid) ? this._myInvalidVisualPoint : this._myValidVisualPoint;\r\n unusedVisualPoint.setVisible(false);\r\n\r\n if (this._myDetectionRuntimeParams.myTeleportPositionValid) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n upDifference = nextPosition.vec3_sub(this._myTeleportRuntimeParams.myTeleportPosition, upDifference).vec3_componentAlongAxis(playerUp, upDifference);\r\n let upDistance = upDifference.vec3_length();\r\n if (upDistance >= this._myTeleportParams.myVisualizerParams.myTeleportParableMinVerticalDistanceToShowVerticalLine) {\r\n let lineLength = Math.min(upDistance - this._myTeleportParams.myVisualizerParams.myTeleportParableMinVerticalDistanceToShowVerticalLine, this._myTeleportParams.myVisualizerParams.myTeleportParableShowVerticalLineMaxLength);\r\n\r\n let visualArrowParams = this._myValidVisualVerticalArrow.getParams();\r\n\r\n visualArrowParams.myStart.vec3_copy(nextPosition);\r\n visualArrowParams.myDirection = playerUp.vec3_negate(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = lineLength;\r\n visualArrowParams.myThickness = 0.005;\r\n\r\n visualArrowParams.myArrowThickness = visualPointParams.myRadius;\r\n visualArrowParams.myArrowLength = visualArrowParams.myArrowThickness * 3.5 / 1.5;\r\n\r\n this._myValidVisualVerticalArrow.paramsUpdated();\r\n this._myValidVisualVerticalArrow.setVisible(true);\r\n } else {\r\n this._myValidVisualVerticalArrow.setVisible(false);\r\n }\r\n\r\n this._showTeleportParablePosition(dt);\r\n } else {\r\n this._myValidVisualTeleportPositionTorus.setVisible(false);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(false);\r\n\r\n this._myValidVisualVerticalArrow.setVisible(false);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject != null) {\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(false);\r\n }\r\n\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionVisualizer.prototype._showTeleportParablePosition = function () {\r\n let playerUp = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n let feetRotationQuat = quat_create();\r\n\r\n let parableFirstPosition = vec3_create();\r\n let parableSecondPosition = vec3_create();\r\n let parableDirection = vec3_create();\r\n\r\n let visualPosition = vec3_create();\r\n let visualForward = vec3_create();\r\n let visualRotationQuat = quat_create();\r\n\r\n let currentVisualTeleportTransformQuat = quat2_create();\r\n let currentVisualTeleportPosition = vec3_create();\r\n let currentVisualTeleportRotationQuat = quat_create();\r\n let differenceRotationQuat = quat_create();\r\n\r\n return function _showTeleportParablePosition(dt) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n feetRotationQuat = feetTransformQuat.quat2_getRotationQuat(feetRotationQuat);\r\n feetRotationQuat = feetRotationQuat.quat_rotateAxis(this._myTeleportRuntimeParams.myTeleportRotationOnUp, playerUp, feetRotationQuat);\r\n\r\n visualPosition = this._myTeleportRuntimeParams.myTeleportPosition.vec3_add(playerUp.vec3_scale(this._myTeleportParams.myVisualizerParams.myTeleportParablePositionUpOffset, visualPosition), visualPosition);\r\n\r\n visualForward = feetRotationQuat.quat_getForward(visualForward);\r\n\r\n if (!this._myTeleportParams.myVisualizerParams.myTeleportPositionObjectRotateWithHead) {\r\n parableFirstPosition = this._myDetectionRuntimeParams.myParable.getPosition(0, parableFirstPosition);\r\n parableSecondPosition = this._myDetectionRuntimeParams.myParable.getPosition(1, parableSecondPosition);\r\n parableDirection = parableSecondPosition.vec3_sub(parableFirstPosition, parableDirection).vec3_removeComponentAlongAxis(playerUp, parableDirection);\r\n if (parableDirection.vec3_length() > Math.PP_EPSILON) {\r\n visualForward = parableDirection.vec3_normalize(visualForward);\r\n }\r\n }\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportParablePositionVisualAlignOnSurface) {\r\n visualRotationQuat.quat_setUp(this._myDetectionRuntimeParams.myTeleportSurfaceNormal, visualForward);\r\n } else {\r\n visualRotationQuat.quat_setUp(playerUp, visualForward);\r\n }\r\n\r\n this._myVisualTeleportTransformQuat.quat2_setPositionRotationQuat(visualPosition, visualRotationQuat);\r\n\r\n if (this._myVisualTeleportTransformQuatReset || !this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionLerpEnabled) {\r\n this._myVisualTeleportPositionObject.pp_setTransformQuat(this._myVisualTeleportTransformQuat);\r\n this._myVisualTeleportTransformQuatReset = false;\r\n } else {\r\n currentVisualTeleportTransformQuat = this._myVisualTeleportPositionObject.pp_getTransformQuat(currentVisualTeleportTransformQuat);\r\n currentVisualTeleportPosition = currentVisualTeleportTransformQuat.quat2_getPosition(currentVisualTeleportPosition);\r\n currentVisualTeleportRotationQuat = currentVisualTeleportTransformQuat.quat2_getRotationQuat(currentVisualTeleportRotationQuat);\r\n currentVisualTeleportRotationQuat.quat_rotationToQuat(visualRotationQuat, differenceRotationQuat);\r\n\r\n let positionDistance = currentVisualTeleportPosition.vec3_distance(visualPosition);\r\n let rotationAngleDistance = differenceRotationQuat.quat_getAngle();\r\n\r\n if ((!this._myVisualTeleportTransformPositionLerping || positionDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToResetLerp) &&\r\n (positionDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToLerp ||\r\n positionDistance > this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxDistanceToLerp)) {\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n currentVisualTeleportPosition.vec3_copy(visualPosition);\r\n } else {\r\n this._myVisualTeleportTransformPositionLerping = true;\r\n\r\n let interpolationFactor = this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionLerpFactor * dt;\r\n if (positionDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToCloseLerpFactor) {\r\n interpolationFactor = this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionCloseLerpFactor * dt;\r\n }\r\n currentVisualTeleportPosition.vec3_lerp(visualPosition, interpolationFactor, currentVisualTeleportPosition);\r\n }\r\n\r\n if ((!this._myVisualTeleportTransformRotationLerping || rotationAngleDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToResetLerp) &&\r\n (rotationAngleDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToLerp ||\r\n positionDistance > this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxAngleDistanceToLerp)) {\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n currentVisualTeleportRotationQuat.quat_copy(visualRotationQuat);\r\n } else {\r\n let interpolationFactor = this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionLerpFactor * dt;\r\n\r\n this._myVisualTeleportTransformRotationLerping = true;\r\n currentVisualTeleportRotationQuat.quat_slerp(visualRotationQuat, interpolationFactor, currentVisualTeleportRotationQuat);\r\n }\r\n\r\n currentVisualTeleportTransformQuat.quat2_setPositionRotationQuat(currentVisualTeleportPosition, currentVisualTeleportRotationQuat);\r\n this._myVisualTeleportPositionObject.pp_setTransformQuat(currentVisualTeleportTransformQuat);\r\n }\r\n\r\n {\r\n let visualParams = this._myValidVisualTeleportPositionTorus.getParams();\r\n visualParams.myRadius = 0.175;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n this._myValidVisualTeleportPositionTorus.paramsUpdated();\r\n }\r\n\r\n {\r\n let visualParams = this._myValidVisualTeleportPositionTorusInner.getParams();\r\n visualParams.myRadius = 0.04;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Inner Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n this._myValidVisualTeleportPositionTorusInner.paramsUpdated();\r\n }\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject == null) {\r\n this._myValidVisualTeleportPositionTorus.setVisible(true);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(true);\r\n } else {\r\n this._myValidVisualTeleportPositionTorus.setVisible(false);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(false);\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(true);\r\n }\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugShowEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, this._myTeleportRuntimeParams.myTeleportPosition, vec4_create(0, 0, 1, 1), 0.02);\r\n }\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class PlayerLocomotionTeleportParable {\r\n\r\n constructor() {\r\n this._myStartPosition = vec3_create();\r\n\r\n this._myForward = vec3_create();\r\n this._myUp = vec3_create();\r\n\r\n this._mySpeed = 0;\r\n this._myGravity = 0;\r\n this._myStepLength = 0;\r\n }\r\n\r\n setStartPosition(startPosition) {\r\n this._myStartPosition.vec3_copy(startPosition);\r\n }\r\n\r\n setForward(forward) {\r\n this._myForward.vec3_copy(forward);\r\n }\r\n\r\n setUp(up) {\r\n this._myUp.vec3_copy(up);\r\n }\r\n\r\n setSpeed(speed) {\r\n this._mySpeed = speed;\r\n }\r\n\r\n setGravity(gravity) {\r\n this._myGravity = gravity;\r\n }\r\n\r\n setStepLength(stepLength) {\r\n this._myStepLength = stepLength;\r\n }\r\n\r\n getPosition(positionIndex, outPosition = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getDistance(positionIndex) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPositionIndexByDistance(distance) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPositionByDistance(distance, outPosition = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getDistanceOverFlatDistance(flatDistance, maxParableDistance) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getFlatDistanceOverDistance(distance) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportParable.prototype.getPosition = function () {\r\n let forwardPosition = vec3_create();\r\n let upPosition = vec3_create();\r\n return function getPosition(positionIndex, outPosition = vec3_create()) {\r\n let deltaTimePerStep = this._myStepLength / this._mySpeed;\r\n\r\n let elapsedTime = deltaTimePerStep * positionIndex;\r\n\r\n forwardPosition = this._myForward.vec3_scale(this._mySpeed * elapsedTime, forwardPosition);\r\n forwardPosition = forwardPosition.vec3_add(this._myStartPosition, forwardPosition);\r\n\r\n upPosition = this._myUp.vec3_scale(this._myGravity * elapsedTime * elapsedTime / 2, upPosition);\r\n\r\n outPosition = forwardPosition.vec3_add(upPosition, outPosition);\r\n\r\n return outPosition;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getDistance = function () {\r\n let currentPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n return function getDistance(positionIndex) {\r\n let distance = 0;\r\n prevPosition.vec3_copy(this._myStartPosition);\r\n\r\n for (let i = 1; i <= positionIndex; i++) {\r\n currentPosition = this.getPosition(i, currentPosition);\r\n distance += currentPosition.vec3_distance(prevPosition);\r\n\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return distance;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getPositionIndexByDistance = function () {\r\n let currentPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n return function getPositionIndexByDistance(distance) {\r\n let currentDistance = 0;\r\n let currentIndex = 0;\r\n prevPosition = this.getPosition(currentIndex, prevPosition);\r\n\r\n while (currentDistance < distance) {\r\n currentPosition = this.getPosition(currentIndex + 1, currentPosition);\r\n currentDistance += currentPosition.vec3_distance(prevPosition);\r\n currentIndex++;\r\n\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return Math.max(0, currentIndex - 1);\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getPositionByDistance = function () {\r\n let currentPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n let prevToCurrent = vec3_create();\r\n return function getPositionByDistance(distance, outPosition = vec3_create()) {\r\n let currentDistance = 0;\r\n let currentIndex = 0;\r\n let found = false;\r\n\r\n prevPosition = this.getPosition(currentIndex, prevPosition);\r\n while (!found) {\r\n currentPosition = this.getPosition(currentIndex + 1, currentPosition);\r\n currentDistance += currentPosition.vec3_distance(prevPosition);\r\n currentIndex++;\r\n\r\n if (currentDistance > distance) {\r\n let lengthToRemove = currentDistance - distance;\r\n prevToCurrent = currentPosition.vec3_sub(prevPosition, prevToCurrent);\r\n let lengthToAdd = prevToCurrent.vec3_length() - lengthToRemove;\r\n prevToCurrent.vec3_normalize(prevToCurrent);\r\n\r\n outPosition = prevPosition.vec3_add(prevToCurrent.vec3_scale(lengthToAdd, outPosition), outPosition);\r\n found = true;\r\n }\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return outPosition;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getDistanceOverFlatDistance = function () {\r\n let currentPosition = vec3_create();\r\n let flatCurrentPosition = vec3_create();\r\n let flatStartPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n let prevToCurrent = vec3_create();\r\n let startToCurrentFlat = vec3_create();\r\n return function getDistanceOverFlatDistance(flatDistance, maxParableDistance) {\r\n if (flatDistance < 0.00001) {\r\n return 0;\r\n }\r\n\r\n let currentDistance = 0;\r\n let currentIndex = 0;\r\n flatStartPosition = this._myStartPosition.vec3_removeComponentAlongAxis(this._myUp, flatStartPosition);\r\n prevPosition = this.getPosition(currentIndex, prevPosition);\r\n\r\n let distanceOverFlatDistance = 0;\r\n\r\n while (currentDistance <= maxParableDistance) {\r\n currentPosition = this.getPosition(currentIndex + 1, currentPosition);\r\n currentDistance += currentPosition.vec3_distance(prevPosition);\r\n currentIndex++;\r\n\r\n flatCurrentPosition = currentPosition.vec3_removeComponentAlongAxis(this._myUp, flatCurrentPosition);\r\n startToCurrentFlat = flatCurrentPosition.vec3_sub(flatStartPosition, startToCurrentFlat);\r\n let currentFlatDistance = startToCurrentFlat.vec3_length();\r\n if (currentFlatDistance >= flatDistance) {\r\n let flatDifference = currentFlatDistance - flatDistance;\r\n prevToCurrent = currentPosition.vec3_sub(prevPosition, prevToCurrent);\r\n let angleWithFlat = prevToCurrent.vec3_angleRadians(startToCurrentFlat);\r\n let cos = Math.cos(angleWithFlat);\r\n let lengthToRemove = prevToCurrent.vec3_length();\r\n if (cos != 0) {\r\n lengthToRemove = flatDifference / Math.cos(angleWithFlat);\r\n }\r\n\r\n distanceOverFlatDistance = currentDistance - lengthToRemove;\r\n break;\r\n\r\n } else {\r\n distanceOverFlatDistance = currentDistance;\r\n }\r\n\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return Math.min(maxParableDistance, distanceOverFlatDistance);\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getFlatDistanceOverDistance = function () {\r\n let positionByDistance = vec3_create();\r\n let flatPositionByDistance = vec3_create();\r\n let flatStartPosition = vec3_create();\r\n return function getFlatDistanceOverDistance(distance) {\r\n positionByDistance = this.getPositionByDistance(distance, positionByDistance);\r\n\r\n flatPositionByDistance = positionByDistance.vec3_removeComponentAlongAxis(this._myUp, flatPositionByDistance);\r\n flatStartPosition = this._myStartPosition.vec3_removeComponentAlongAxis(this._myUp, flatStartPosition);\r\n\r\n return flatStartPosition.vec3_distance(flatPositionByDistance);\r\n };\r\n}();", "import { State } from \"../../../../../../cauldron/fsm/state.js\";\r\nimport { InputUtils } from \"../../../../../../input/cauldron/input_utils.js\";\r\nimport { GamepadButtonID } from \"../../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, quat_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckBridge } from \"../../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { CollisionRuntimeParams } from \"../../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\n\r\nexport class PlayerLocomotionTeleportState extends State {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super();\r\n\r\n this._myLocomotionRuntimeParams = locomotionRuntimeParams;\r\n\r\n this._myTeleportParams = teleportParams;\r\n this._myTeleportRuntimeParams = teleportRuntimeParams;\r\n\r\n this._myTeleportAsMovementFailed = false;\r\n }\r\n\r\n _checkTeleport(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams = null) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _checkTeleportAsMovement(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _teleportToPosition(teleportPosition, rotationOnUp, collisionRuntimeParams, forceTeleport = false) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportState.prototype._checkTeleport = function () {\r\n return function _checkTeleport(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams = null) {\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).teleport(teleportPosition, feetTransformQuat, this._myTeleportParams.myCollisionCheckParams, collisionRuntimeParams);\r\n if (checkTeleportCollisionRuntimeParams != null) {\r\n checkTeleportCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportState.prototype._checkTeleportAsMovement = function () {\r\n let checkTeleportMovementCollisionRuntimeParams = new CollisionRuntimeParams();\r\n let feetRotationQuat = quat_create();\r\n let feetPosition = vec3_create();\r\n let feetUp = vec3_create();\r\n let teleportFeetForward = vec3_create();\r\n let teleportFeetRotationQuat = quat_create();\r\n let teleportFeetTransformQuat = quat2_create();\r\n\r\n let currentFeetPosition = vec3_create();\r\n let fixedTeleportPosition = vec3_create();\r\n\r\n let teleportMovement = vec3_create();\r\n let extraVerticalMovement = vec3_create();\r\n let movementToTeleportPosition = vec3_create();\r\n let movementFeetTransformQuat = quat2_create();\r\n return function _checkTeleportAsMovement(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams) {\r\n feetPosition = feetTransformQuat.quat2_getPosition(feetPosition);\r\n feetRotationQuat = feetTransformQuat.quat2_getRotationQuat(feetRotationQuat);\r\n\r\n // First try a normal teleport\r\n feetUp = feetRotationQuat.quat_getUp(feetUp);\r\n teleportFeetForward = teleportPosition.vec3_sub(feetPosition, teleportFeetForward).vec3_removeComponentAlongAxis(feetUp, teleportFeetForward);\r\n teleportFeetForward.vec3_normalize(teleportFeetForward);\r\n if (teleportFeetForward.vec3_isZero(0.00001)) {\r\n teleportFeetForward = feetRotationQuat.quat_getForward(teleportFeetForward);\r\n }\r\n\r\n teleportFeetRotationQuat.quat_setUp(feetUp, teleportFeetForward);\r\n teleportFeetTransformQuat.quat2_setPositionRotationQuat(feetPosition, teleportFeetRotationQuat);\r\n\r\n this._checkTeleport(teleportPosition, teleportFeetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams);\r\n\r\n // If teleport is ok then we can check movement knowing we have to move toward the teleported position (which has also snapped/fixed the position)\r\n if (!collisionRuntimeParams.myTeleportCanceled) {\r\n let teleportMovementValid = false;\r\n\r\n checkTeleportMovementCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n fixedTeleportPosition.vec3_copy(collisionRuntimeParams.myNewPosition);\r\n currentFeetPosition.vec3_copy(feetPosition);\r\n for (let i = 0; i < this._myTeleportParams.myTeleportAsMovementMaxSteps; i++) {\r\n teleportMovement = fixedTeleportPosition.vec3_sub(currentFeetPosition, teleportMovement);\r\n\r\n if (this._myTeleportParams.myTeleportAsMovementRemoveVerticalMovement) {\r\n teleportMovement = teleportMovement.vec3_removeComponentAlongAxis(feetUp, teleportMovement);\r\n }\r\n\r\n if (this._myTeleportParams.myTeleportAsMovementExtraVerticalMovementPerMeter != 0) {\r\n let meters = teleportMovement.vec3_length();\r\n let extraVerticalMovementValue = meters * this._myTeleportParams.myTeleportAsMovementExtraVerticalMovementPerMeter;\r\n extraVerticalMovement = feetUp.vec3_scale(extraVerticalMovementValue, extraVerticalMovement);\r\n teleportMovement = teleportMovement.vec3_add(extraVerticalMovement, teleportMovement);\r\n }\r\n\r\n movementFeetTransformQuat.quat2_setPositionRotationQuat(currentFeetPosition, feetRotationQuat);\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).move(teleportMovement, movementFeetTransformQuat, this._myTeleportParams.myCollisionCheckParams, checkTeleportMovementCollisionRuntimeParams);\r\n\r\n if (!checkTeleportMovementCollisionRuntimeParams.myHorizontalMovementCanceled && !checkTeleportMovementCollisionRuntimeParams.myVerticalMovementCanceled) {\r\n movementToTeleportPosition = fixedTeleportPosition.vec3_sub(checkTeleportMovementCollisionRuntimeParams.myNewPosition, movementToTeleportPosition);\r\n //console.error(movementToTeleportPosition.vec3_length());\r\n if (movementToTeleportPosition.vec3_length() < this._myTeleportParams.myTeleportAsMovementMaxDistanceFromTeleportPosition + 0.00001) {\r\n teleportMovementValid = true;\r\n break;\r\n } else {\r\n teleportMovement.vec3_copy(movementToTeleportPosition);\r\n currentFeetPosition.vec3_copy(checkTeleportMovementCollisionRuntimeParams.myNewPosition);\r\n }\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (!teleportMovementValid) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n\r\n this._myTeleportAsMovementFailed = !teleportMovementValid;\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportState.prototype._teleportToPosition = function () {\r\n let playerUp = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n let newFeetTransformQuat = quat2_create();\r\n let newFeetRotationQuat = quat_create();\r\n let teleportRotation = quat_create();\r\n return function _teleportToPosition(teleportPosition, rotationOnUp, collisionRuntimeParams, forceTeleport = false) {\r\n this._myTeleportAsMovementFailed = false;\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n newFeetRotationQuat = feetTransformQuat.quat2_getRotationQuat(newFeetRotationQuat);\r\n if (rotationOnUp != 0) {\r\n newFeetRotationQuat = newFeetRotationQuat.quat_rotateAxis(rotationOnUp, playerUp, newFeetRotationQuat);\r\n }\r\n\r\n newFeetTransformQuat.quat2_setPositionRotationQuat(teleportPosition, newFeetRotationQuat);\r\n\r\n if (Globals.getGamepads(this._myTeleportParams.myEngine)[InputUtils.getOppositeHandedness(this._myTeleportParams.myHandedness)].getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressed()) {\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).positionCheck(true, newFeetTransformQuat, this._myTeleportParams.myCollisionCheckParams, collisionRuntimeParams);\r\n\r\n this._myTeleportParams.myPlayerHeadManager.teleportPositionFeet(teleportPosition);\r\n if (rotationOnUp != 0) {\r\n teleportRotation.quat_fromAxis(rotationOnUp, playerUp);\r\n this._myTeleportParams.myPlayerHeadManager.rotateFeetQuat(teleportRotation);\r\n }\r\n } else {\r\n // Should teleport then rotate\r\n this._myTeleportParams.myPlayerTransformManager.teleportTransformQuat(newFeetTransformQuat, collisionRuntimeParams, forceTeleport);\r\n }\r\n };\r\n}();", "import { PhysicsLayerFlags } from \"../../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { RaycastParams, RaycastResults } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../../../../../../cauldron/physics/physics_utils.js\";\r\nimport { XRUtils } from \"../../../../../../cauldron/utils/xr_utils.js\";\r\nimport { MouseButtonID } from \"../../../../../../input/cauldron/mouse.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionRuntimeParams } from \"../../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\nimport { PlayerLocomotionTeleportDetectionVisualizer } from \"./player_locomotion_teleport_detection_visualizer.js\";\r\nimport { PlayerLocomotionTeleportParable } from \"./player_locomotion_teleport_parable.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportDetectionParams {\r\n\r\n constructor() {\r\n this.myMaxDistance = 0;\r\n this.myMaxHeightDifference = 0;\r\n this.myGroundAngleToIgnoreUpward = 0;\r\n // This can be used to make it so the teleport position is valid on a steeper angle when going downward by setting the higher value on the collision params\r\n // and then use this to specify that when going upward u want it to be less, basically to be able to teleprot down a cliff even on a steep ground\r\n // that would not let you go up\r\n this.myMustBeOnGround = false;\r\n\r\n this.myTeleportBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myTeleportFloorLayerFlags = new PhysicsLayerFlags();\r\n\r\n this.myParableForwardMinAngleToBeValidUp = 30;\r\n this.myParableForwardMinAngleToBeValidDown = 0;\r\n\r\n this.myTeleportParableStartReferenceObject = null;\r\n\r\n // Used if reference is null\r\n this.myTeleportParableStartPositionOffset = vec3_create(0, -0.04, 0.08);\r\n this.myTeleportParableStartRotationOffset = vec3_create(30, 0, 0);\r\n\r\n this.myTeleportParableSpeed = 15;\r\n this.myTeleportParableGravity = -30;\r\n this.myTeleportParableStepLength = 0.25;\r\n\r\n this.myRotationOnUpMinStickIntensity = 0.5;\r\n this.myRotationOnUpEnabled = false;\r\n\r\n this.myTeleportFeetPositionMustBeVisible = false;\r\n this.myTeleportHeadPositionMustBeVisible = false;\r\n this.myTeleportHeadOrFeetPositionMustBeVisible = false; // Wins over previous parameters\r\n\r\n this.myVisibilityCheckRadius = 0.05;\r\n this.myVisibilityCheckFeetPositionVerticalOffset = 0.1;\r\n this.myVisibilityCheckDistanceFromHitThreshold = 0.1;\r\n this.myVisibilityCheckCircumferenceSliceAmount = 6;\r\n this.myVisibilityCheckCircumferenceStepAmount = 1;\r\n this.myVisibilityCheckCircumferenceRotationPerStep = 30;\r\n this.myVisibilityBlockLayerFlags = new PhysicsLayerFlags();\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportDetectionRuntimeParams {\r\n\r\n constructor() {\r\n this.myTeleportDetectionValid = false;\r\n this.myTeleportPositionValid = false;\r\n this.myTeleportSurfaceNormal = vec3_create();\r\n\r\n this.myParable = new PlayerLocomotionTeleportParable();\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportDetectionState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myDetectionRuntimeParams = new PlayerLocomotionTeleportDetectionRuntimeParams();\r\n\r\n this._myVisualizer = new PlayerLocomotionTeleportDetectionVisualizer(this._myTeleportParams, this._myTeleportRuntimeParams, this._myDetectionRuntimeParams);\r\n\r\n this._myTeleportRotationOnUpNext = 0;\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Parable Steps\", this._myTeleportParams.myDetectionParams.myTeleportParableStepLength, 1, 3, 0.01, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Parable Gravity\", this._myTeleportParams.myDetectionParams.myTeleportParableGravity, 10, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Parable Speed\", this._myTeleportParams.myDetectionParams.myTeleportParableSpeed, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Max Distance\", this._myTeleportParams.myDetectionParams.myMaxDistance, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._myLocomotionRuntimeParams.myIsTeleportDetecting = true;\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = 0;\r\n this._myTeleportRotationOnUpNext = 0;\r\n\r\n this._myDetectionRuntimeParams.myParable.setSpeed(this._myTeleportParams.myDetectionParams.myTeleportParableSpeed);\r\n this._myDetectionRuntimeParams.myParable.setGravity(this._myTeleportParams.myDetectionParams.myTeleportParableGravity);\r\n this._myDetectionRuntimeParams.myParable.setStepLength(this._myTeleportParams.myDetectionParams.myTeleportParableStepLength);\r\n\r\n this._myTeleportParams.myPlayerTransformManager.resetReal();\r\n\r\n this._myVisualizer.start();\r\n }\r\n\r\n end() {\r\n this._myLocomotionRuntimeParams.myIsTeleportDetecting = false;\r\n this._myVisualizer.end();\r\n }\r\n\r\n update(dt, fsm) {\r\n this._detectTeleportPosition();\r\n\r\n this._myVisualizer.update(dt);\r\n\r\n if (this._confirmTeleport()) {\r\n if (this._myDetectionRuntimeParams.myTeleportPositionValid) {\r\n fsm.perform(\"teleport\");\r\n } else {\r\n fsm.perform(\"cancel\");\r\n }\r\n } else if (this._cancelTeleport()) {\r\n fsm.perform(\"cancel\");\r\n }\r\n }\r\n\r\n _confirmTeleport() {\r\n let confirmTeleport = false;\r\n\r\n if (!XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n if (Globals.getMouse(this._myTeleportParams.myEngine).isInsideView()) {\r\n confirmTeleport = Globals.getMouse(this._myTeleportParams.myEngine).isButtonPressEnd(MouseButtonID.MIDDLE);\r\n }\r\n } else {\r\n let axes = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n if (axes.vec2_length() <= this._myTeleportParams.myStickIdleThreshold) {\r\n confirmTeleport = true;\r\n }\r\n }\r\n\r\n return confirmTeleport;\r\n }\r\n\r\n _cancelTeleport() {\r\n let cancelTeleport = false;\r\n\r\n if (!XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n cancelTeleport = Globals.getMouse(this._myTeleportParams.myEngine).isButtonPressEnd(MouseButtonID.RIGHT) || !Globals.getMouse(this._myTeleportParams.myEngine).isInsideView();\r\n } else {\r\n cancelTeleport = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed();\r\n }\r\n\r\n return cancelTeleport;\r\n }\r\n\r\n _detectTeleportPosition() {\r\n //this._myDetectionRuntimeParams.myParable.setSpeed(Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Parable Speed\"));\r\n //this._myDetectionRuntimeParams.myParable.setGravity(Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Parable Gravity\"));\r\n //this._myDetectionRuntimeParams.myParable.setStepLength(Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Parable Steps\"));\r\n //this._myTeleportParams.myDetectionParams.myMaxDistance = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Max Distance\");\r\n\r\n if (XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n this._detectTeleportRotationVR();\r\n this._detectTeleportPositionVR();\r\n } else {\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = 0;\r\n this._myTeleportRotationOnUpNext = 0;\r\n this._detectTeleportPositionNonVR();\r\n }\r\n }\r\n\r\n _isTeleportPositionValid(teleportPosition, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isTeleportHitValid(hit, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _detectTeleportRotationVR(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualizer.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportPositionNonVR = function () {\r\n let mousePosition = vec3_create();\r\n let mouseDirection = vec3_create();\r\n\r\n let playerUp = vec3_create();\r\n return function _detectTeleportPositionNonVR(dt) {\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = false;\r\n this._myDetectionRuntimeParams.myTeleportDetectionValid = true;\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n Globals.getMouse(this._myTeleportParams.myEngine).getOriginWorld(mousePosition);\r\n Globals.getMouse(this._myTeleportParams.myEngine).getDirectionWorld(mouseDirection);\r\n\r\n this._detectTeleportPositionParable(mousePosition, mouseDirection, playerUp);\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportPositionVR = function () {\r\n let teleportStartTransformLocal = quat2_create();\r\n let teleportStartTransformWorld = quat2_create();\r\n\r\n let teleportStartPosition = vec3_create();\r\n let teleportDirection = vec3_create();\r\n\r\n let playerUp = vec3_create();\r\n let playerUpNegate = vec3_create();\r\n return function _detectTeleportPositionVR(dt) {\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = false;\r\n this._myDetectionRuntimeParams.myTeleportDetectionValid = false;\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportParableStartReferenceObject == null) {\r\n let referenceObject = Globals.getPlayerObjects(this._myTeleportParams.myEngine).myHands[this._myTeleportParams.myHandedness];\r\n\r\n teleportStartTransformLocal.quat2_setPositionRotationDegrees(this._myTeleportParams.myDetectionParams.myTeleportParableStartPositionOffset, this._myTeleportParams.myDetectionParams.myTeleportParableStartRotationOffset);\r\n teleportStartTransformWorld = referenceObject.pp_convertTransformObjectToWorldQuat(teleportStartTransformLocal, teleportStartTransformWorld);\r\n } else {\r\n let referenceObject = this._myTeleportParams.myDetectionParams.myTeleportParableStartReferenceObject;\r\n\r\n referenceObject.pp_getTransformQuat(teleportStartTransformWorld);\r\n }\r\n\r\n teleportStartPosition = teleportStartTransformWorld.quat2_getPosition(teleportStartPosition);\r\n teleportDirection = teleportStartTransformWorld.quat2_getForward(teleportDirection);\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n playerUpNegate = playerUp.vec3_negate(playerUpNegate);\r\n\r\n if (teleportDirection.vec3_angle(playerUp) >= this._myTeleportParams.myDetectionParams.myParableForwardMinAngleToBeValidUp &&\r\n teleportDirection.vec3_angle(playerUpNegate) >= this._myTeleportParams.myDetectionParams.myParableForwardMinAngleToBeValidDown\r\n ) {\r\n this._myDetectionRuntimeParams.myTeleportDetectionValid = true;\r\n }\r\n\r\n if (this._myDetectionRuntimeParams.myTeleportDetectionValid) {\r\n this._detectTeleportPositionParable(teleportStartPosition, teleportDirection, playerUp);\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportPositionParable = function () {\r\n let parablePosition = vec3_create();\r\n let prevParablePosition = vec3_create();\r\n let parableFinalPosition = vec3_create();\r\n\r\n let raycastParams = new RaycastParams();\r\n let raycastResult = new RaycastResults();\r\n\r\n let parableHitPosition = vec3_create();\r\n let parableHitNormal = vec3_create();\r\n\r\n let verticalHitOrigin = vec3_create();\r\n let verticalHitDirection = vec3_create();\r\n\r\n let flatTeleportHorizontalHitNormal = vec3_create();\r\n let flatParableHitNormal = vec3_create();\r\n let flatParableDirectionNegate = vec3_create();\r\n\r\n let teleportCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function _detectTeleportPositionParable(startPosition, direction, up) {\r\n this._myDetectionRuntimeParams.myParable.setStartPosition(startPosition);\r\n this._myDetectionRuntimeParams.myParable.setForward(direction);\r\n this._myDetectionRuntimeParams.myParable.setUp(up);\r\n\r\n let currentPositionIndex = 1;\r\n let positionFlatDistance = 0;\r\n let positionParableDistance = 0;\r\n prevParablePosition = this._myDetectionRuntimeParams.myParable.getPosition(currentPositionIndex - 1, prevParablePosition);\r\n\r\n raycastParams.myIgnoreHitsInsideCollision = true;\r\n raycastParams.myBlockLayerFlags.setMask(this._myTeleportParams.myDetectionParams.myTeleportBlockLayerFlags.getMask());\r\n raycastParams.myPhysics = Globals.getPhysics(this._myTeleportParams.myEngine);\r\n\r\n raycastParams.myObjectsToIgnore.pp_copy(this._myTeleportParams.myCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n for (let objectToIgnore of this._myTeleportParams.myCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n raycastParams.myObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n let maxParableDistance = this._myTeleportParams.myDetectionParams.myMaxDistance * 2;\r\n\r\n do {\r\n parablePosition = this._myDetectionRuntimeParams.myParable.getPosition(currentPositionIndex, parablePosition);\r\n\r\n raycastParams.myOrigin.vec3_copy(prevParablePosition);\r\n raycastParams.myDirection = parablePosition.vec3_sub(prevParablePosition, raycastParams.myDirection);\r\n raycastParams.myDistance = raycastParams.myDirection.vec3_length();\r\n raycastParams.myDirection.vec3_normalize(raycastParams.myDirection);\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n prevParablePosition.vec3_copy(parablePosition);\r\n positionFlatDistance = parablePosition.vec3_sub(startPosition, parablePosition).vec3_removeComponentAlongAxis(up, parablePosition).vec3_length();\r\n positionParableDistance = this._myDetectionRuntimeParams.myParable.getDistance(currentPositionIndex);\r\n\r\n currentPositionIndex++;\r\n } while (\r\n positionFlatDistance <= this._myTeleportParams.myDetectionParams.myMaxDistance &&\r\n positionParableDistance <= maxParableDistance &&\r\n !raycastResult.isColliding());\r\n\r\n let maxParableDistanceOverFlatDistance = this._myDetectionRuntimeParams.myParable.getDistanceOverFlatDistance(this._myTeleportParams.myDetectionParams.myMaxDistance, maxParableDistance);\r\n\r\n let fixedPositionParableDistance = positionParableDistance;\r\n if (positionParableDistance > maxParableDistanceOverFlatDistance || positionParableDistance > maxParableDistance) {\r\n fixedPositionParableDistance = Math.min(maxParableDistanceOverFlatDistance, maxParableDistance);\r\n }\r\n\r\n this._myDetectionRuntimeParams.myParableDistance = fixedPositionParableDistance;\r\n\r\n let hitCollisionValid = false;\r\n\r\n let bottomCheckMaxLength = 100;\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n let hitParableDistance = positionParableDistance - (raycastParams.myDistance - hit.myDistance);\r\n\r\n if (hitParableDistance <= fixedPositionParableDistance) {\r\n hitCollisionValid = true;\r\n\r\n this._myDetectionRuntimeParams.myParableDistance = hitParableDistance;\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n\r\n parableHitPosition.vec3_copy(hit.myPosition);\r\n parableHitNormal.vec3_copy(hit.myNormal);\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n verticalHitOrigin = hit.myPosition.vec3_add(hit.myNormal.vec3_scale(0.01, verticalHitOrigin), verticalHitOrigin);\r\n verticalHitDirection = up.vec3_negate(verticalHitDirection);\r\n\r\n raycastParams.myOrigin.vec3_copy(verticalHitOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid &&\r\n !this._myTeleportAsMovementFailed &&\r\n teleportCollisionRuntimeParams.myTeleportCanceled &&\r\n teleportCollisionRuntimeParams.myIsCollidingHorizontally) {\r\n flatTeleportHorizontalHitNormal = teleportCollisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, flatTeleportHorizontalHitNormal);\r\n\r\n if (!flatTeleportHorizontalHitNormal.vec3_isZero(0.00001)) {\r\n flatTeleportHorizontalHitNormal.vec3_normalize(flatTeleportHorizontalHitNormal);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatTeleportHorizontalHitNormal.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n } else {\r\n //console.error(\"2\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n flatParableHitNormal = parableHitNormal.vec3_removeComponentAlongAxis(up, flatParableHitNormal);\r\n if (!flatParableHitNormal.vec3_isZero(0.00001)) {\r\n flatParableHitNormal.vec3_normalize(flatParableHitNormal);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatParableHitNormal.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n } else {\r\n //console.error(\"3\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n flatParableDirectionNegate = direction.vec3_negate(flatParableDirectionNegate).vec3_removeComponentAlongAxis(up, flatParableDirectionNegate).vec3_normalize(flatParableDirectionNegate);\r\n\r\n if (!flatParableDirectionNegate.vec3_isZero(0.00001)) {\r\n flatParableDirectionNegate.vec3_normalize(flatParableDirectionNegate);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatParableDirectionNegate.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n } else {\r\n //console.error(\"4\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n }\r\n } else {\r\n //console.error(\"1\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n }\r\n }\r\n\r\n //console.error(\"-\");\r\n\r\n if (!hitCollisionValid) {\r\n parableFinalPosition = this._myDetectionRuntimeParams.myParable.getPositionByDistance(this._myDetectionRuntimeParams.myParableDistance, parableFinalPosition);\r\n\r\n verticalHitOrigin.vec3_copy(parableFinalPosition);\r\n verticalHitDirection = up.vec3_negate(verticalHitDirection);\r\n\r\n raycastParams.myOrigin.vec3_copy(verticalHitOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid &&\r\n !this._myTeleportAsMovementFailed &&\r\n teleportCollisionRuntimeParams.myTeleportCanceled &&\r\n teleportCollisionRuntimeParams.myIsCollidingHorizontally) {\r\n flatTeleportHorizontalHitNormal = teleportCollisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, flatTeleportHorizontalHitNormal);\r\n\r\n if (!flatTeleportHorizontalHitNormal.vec3_isZero(0.00001)) {\r\n flatTeleportHorizontalHitNormal.vec3_normalize(flatTeleportHorizontalHitNormal);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatTeleportHorizontalHitNormal.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n }\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n flatParableDirectionNegate = direction.vec3_negate(flatParableDirectionNegate).vec3_removeComponentAlongAxis(up, flatParableDirectionNegate).vec3_normalize(flatParableDirectionNegate);\r\n\r\n if (!flatParableDirectionNegate.vec3_isZero(0.00001)) {\r\n flatParableDirectionNegate.vec3_normalize(flatParableDirectionNegate);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatParableDirectionNegate.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportRotationVR = function () {\r\n let axesVec3 = vec3_create();\r\n let axesForward = vec3_create(0, 0, 1);\r\n let axesUp = vec3_create(0, 1, 0);\r\n return function _detectTeleportRotationVR(dt) {\r\n let axes = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n\r\n if (axes.vec2_length() > this._myTeleportParams.myDetectionParams.myRotationOnUpMinStickIntensity) {\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = this._myTeleportRotationOnUpNext;\r\n\r\n axesVec3.vec3_set(axes[0], 0, axes[1]);\r\n this._myTeleportRotationOnUpNext = axesVec3.vec3_angleSigned(axesForward, axesUp);\r\n }\r\n\r\n if (!this._myTeleportParams.myDetectionParams.myRotationOnUpEnabled) {\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = 0;\r\n this._myTeleportRotationOnUpNext = 0;\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isTeleportHitValid = function () {\r\n let raycastParams = new RaycastParams();\r\n let raycastResult = new RaycastResults();\r\n\r\n let playerUp = vec3_create();\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function _isTeleportHitValid(hit, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n let isValid = false;\r\n\r\n this._myTeleportAsMovementFailed = false;\r\n\r\n if (hit.isValid() && !hit.myInsideCollision) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n // #TODO is hitValidEvenWhenNotConcordant needed or was it a debug that should be removed?\r\n let hitValidEvenWhenNotConcordant = true;\r\n if (hit.myNormal.vec3_isConcordant(playerUp) || hitValidEvenWhenNotConcordant) {\r\n // #TODO When the flags on the physx will be available just check that the hit object physx has the floor flag\r\n\r\n raycastParams.myIgnoreHitsInsideCollision = true;\r\n raycastParams.myBlockLayerFlags.setMask(this._myTeleportParams.myDetectionParams.myTeleportFloorLayerFlags.getMask());\r\n raycastParams.myPhysics = Globals.getPhysics(this._myTeleportParams.myEngine);\r\n\r\n raycastParams.myObjectsToIgnore.pp_copy(this._myTeleportParams.myCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n for (let objectToIgnore of this._myTeleportParams.myCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n raycastParams.myObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n let distanceToCheck = 0.01;\r\n raycastParams.myOrigin = hit.myPosition.vec3_add(hit.myNormal.vec3_scale(distanceToCheck, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection = hit.myNormal.vec3_negate(raycastParams.myDirection);\r\n raycastParams.myDistance = distanceToCheck * 1.25;\r\n raycastParams.myDirection.vec3_normalize(raycastParams.myDirection);\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (raycastResult.isColliding()) {\r\n let floorHit = raycastResult.myHits.pp_first();\r\n if (floorHit.myObject.pp_equals(hit.myObject)) {\r\n isValid = this._isTeleportPositionValid(hit.myPosition, rotationOnUp, checkTeleportCollisionRuntimeParams);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return isValid;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isTeleportPositionValid = function () {\r\n let playerUp = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n let feetRotationQuat = quat_create();\r\n let feetPosition = vec3_create();\r\n let differenceOnUpVector = vec3_create();\r\n let teleportCheckCollisionRuntimeParams = new CollisionRuntimeParams();\r\n return function _isTeleportPositionValid(teleportPosition, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n let isValid = false;\r\n\r\n let positionVisible = this._isTeleportPositionVisible(teleportPosition);\r\n\r\n if (positionVisible) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n feetPosition = feetTransformQuat.quat2_getPosition(feetPosition);\r\n if (rotationOnUp != 0) {\r\n feetRotationQuat = feetTransformQuat.quat2_getRotationQuat(feetRotationQuat);\r\n feetRotationQuat = feetRotationQuat.quat_rotateAxis(rotationOnUp, playerUp, feetRotationQuat);\r\n feetTransformQuat.quat2_setPositionRotationQuat(feetPosition, feetRotationQuat);\r\n }\r\n\r\n let differenceOnUp = teleportPosition.vec3_sub(feetPosition, differenceOnUpVector).vec3_componentAlongAxis(playerUp, differenceOnUpVector).vec3_length();\r\n\r\n if (differenceOnUp < this._myTeleportParams.myDetectionParams.myMaxHeightDifference + 0.00001) {\r\n let teleportCheckValid = false;\r\n teleportCheckCollisionRuntimeParams.copy(this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n\r\n if (!this._myTeleportParams.myPerformTeleportAsMovement) {\r\n this._checkTeleport(teleportPosition, feetTransformQuat, teleportCheckCollisionRuntimeParams, checkTeleportCollisionRuntimeParams);\r\n } else {\r\n this._checkTeleportAsMovement(teleportPosition, feetTransformQuat, teleportCheckCollisionRuntimeParams, checkTeleportCollisionRuntimeParams);\r\n }\r\n\r\n if (!teleportCheckCollisionRuntimeParams.myTeleportCanceled) {\r\n teleportCheckValid = true;\r\n }\r\n\r\n if (teleportCheckValid && (!this._myTeleportParams.myDetectionParams.myMustBeOnGround || teleportCheckCollisionRuntimeParams.myIsOnGround)) {\r\n\r\n let groundAngleValid = true;\r\n let isTeleportingUpward = teleportCheckCollisionRuntimeParams.myNewPosition.vec3_isFartherAlongAxis(feetPosition, playerUp);\r\n if (isTeleportingUpward) {\r\n groundAngleValid = teleportCheckCollisionRuntimeParams.myGroundAngle < this._myTeleportParams.myDetectionParams.myGroundAngleToIgnoreUpward + 0.0001;\r\n }\r\n\r\n if (groundAngleValid) {\r\n isValid = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return isValid;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isTeleportPositionVisible = function () {\r\n let playerUp = vec3_create();\r\n\r\n let offsetFeetTeleportPosition = vec3_create();\r\n let headTeleportPosition = vec3_create();\r\n return function _isTeleportPositionVisible(teleportPosition) {\r\n let isVisible = true;\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportFeetPositionMustBeVisible ||\r\n this._myTeleportParams.myDetectionParams.myTeleportHeadPositionMustBeVisible ||\r\n this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible) {\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n let isHeadVisible = false;\r\n let isFeetVisible = false;\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible ||\r\n this._myTeleportParams.myDetectionParams.myTeleportHeadPositionMustBeVisible) {\r\n let headheight = this._myTeleportParams.myPlayerHeadManager.getHeightHead();\r\n headTeleportPosition = teleportPosition.vec3_add(playerUp.vec3_scale(headheight, headTeleportPosition), headTeleportPosition);\r\n isHeadVisible = this._isPositionVisible(headTeleportPosition);\r\n } else {\r\n isHeadVisible = true;\r\n }\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible && isHeadVisible) {\r\n isFeetVisible = true;\r\n } else {\r\n if (this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible ||\r\n (this._myTeleportParams.myDetectionParams.myTeleportFeetPositionMustBeVisible && isHeadVisible)) {\r\n offsetFeetTeleportPosition = teleportPosition.vec3_add(playerUp.vec3_scale(this._myTeleportParams.myDetectionParams.myVisibilityCheckFeetPositionVerticalOffset, offsetFeetTeleportPosition), offsetFeetTeleportPosition);\r\n isFeetVisible = this._isPositionVisible(offsetFeetTeleportPosition);\r\n } else {\r\n isFeetVisible = true;\r\n }\r\n }\r\n\r\n isVisible = isHeadVisible && isFeetVisible;\r\n }\r\n\r\n return isVisible;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isPositionVisible = function () {\r\n let playerUp = vec3_create();\r\n let standardUp = vec3_create(0, 1, 0);\r\n let standardUpNegated = vec3_create(0, -1, 0);\r\n let standardForward = vec3_create(0, 0, 1);\r\n let referenceUp = vec3_create();\r\n let headPosition = vec3_create();\r\n let direction = vec3_create();\r\n let fixedRight = vec3_create();\r\n let fixedForward = vec3_create();\r\n let fixedUp = vec3_create();\r\n let raycastEndPosition = vec3_create();\r\n\r\n let raycastParams = new RaycastParams();\r\n let raycastResult = new RaycastResults();\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function _isPositionVisible(position) {\r\n let isVisible = true;\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n let currentHead = this._myTeleportParams.myPlayerHeadManager.getHead();\r\n headPosition = currentHead.pp_getPosition(headPosition);\r\n direction = position.vec3_sub(headPosition, direction).vec3_normalize(direction);\r\n\r\n referenceUp.vec3_copy(standardUp);\r\n if (direction.vec3_angle(standardUp) < 0.0001 || direction.vec3_angle(standardUpNegated) < 0.0001) {\r\n referenceUp.vec3_copy(standardForward);\r\n }\r\n\r\n fixedRight = direction.vec3_cross(referenceUp, fixedRight);\r\n fixedUp = fixedRight.vec3_cross(direction, fixedUp);\r\n fixedForward.vec3_copy(direction);\r\n\r\n fixedUp.vec3_normalize(fixedUp);\r\n fixedForward.vec3_normalize(fixedForward);\r\n\r\n let checkPositions = this._getVisibilityCheckPositions(headPosition, fixedUp, fixedForward);\r\n\r\n let distance = headPosition.vec3_distance(position);\r\n\r\n for (let checkPosition of checkPositions) {\r\n raycastParams.myOrigin.vec3_copy(checkPosition);\r\n raycastParams.myDirection.vec3_copy(fixedForward);\r\n raycastParams.myDistance = distance;\r\n raycastParams.myPhysics = Globals.getPhysics(this._myTeleportParams.myEngine);\r\n\r\n raycastParams.myBlockLayerFlags.setMask(this._myTeleportParams.myDetectionParams.myVisibilityBlockLayerFlags.getMask());\r\n\r\n raycastParams.myObjectsToIgnore.pp_copy(this._myTeleportParams.myCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n for (let objectToIgnore of this._myTeleportParams.myCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n raycastParams.myObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n raycastParams.myIgnoreHitsInsideCollision = true;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugVisibilityEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n raycastEndPosition = checkPosition.vec3_add(fixedForward.vec3_scale(distance, raycastEndPosition), raycastEndPosition);\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n if (this._myTeleportParams.myDetectionParams.myVisibilityCheckDistanceFromHitThreshold == 0 || hit.myPosition.vec3_distance(raycastEndPosition) > this._myTeleportParams.myDetectionParams.myVisibilityCheckDistanceFromHitThreshold + 0.00001) {\r\n isVisible = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return isVisible;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._getVisibilityCheckPositions = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let currentDirection = vec3_create();\r\n return function _getVisibilityCheckPositions(position, up, forward) {\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n tempCheckPosition.vec3_copy(position);\r\n checkPositions.push(tempCheckPosition);\r\n }\r\n\r\n let radiusStep = this._myTeleportParams.myDetectionParams.myVisibilityCheckRadius / this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceStepAmount;\r\n let sliceAngle = 360 / this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceSliceAmount;\r\n let currentStepRotation = 0;\r\n for (let i = 0; i < this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceStepAmount; i++) {\r\n let currentRadius = radiusStep * (i + 1);\r\n\r\n currentDirection = up.vec3_rotateAxis(currentStepRotation, forward, currentDirection);\r\n for (let j = 0; j < this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceSliceAmount; j++) {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let sliceDirection = currentDirection.vec3_rotateAxis(sliceAngle * j, forward, tempCheckPosition);\r\n checkPositions.push(position.vec3_add(sliceDirection.vec3_scale(currentRadius, sliceDirection), sliceDirection));\r\n }\r\n\r\n currentStepRotation += this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceRotationPerStep;\r\n }\r\n\r\n return checkPositions;\r\n };\r\n}();", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../../../cauldron/cauldron/timer.js\";\r\nimport { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { TimerState } from \"../../../../../../cauldron/fsm/states/timer_state.js\";\r\nimport { vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { NumberOverFactor } from \"../../../../../cauldron/cauldron/number_over_factor.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportTeleportBlinkState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myBlinkSphere = Globals.getPlayerObjects(this._myTeleportParams.myEngine).myCauldron.pp_addObject();\r\n this._myBlinkSphereMeshComponent = this._myBlinkSphere.pp_addComponent(MeshComponent);\r\n this._myBlinkSphereMeshComponent.mesh = Globals.getDefaultMeshes(this._myTeleportParams.myEngine).myInvertedSphere;\r\n this._myBlinkSphereMeshComponent.material = Globals.getDefaultMaterials(this._myTeleportParams.myEngine).myFlatTransparentNoDepth.clone();\r\n this._myBlinkSphereMaterialColor = vec4_create(\r\n this._myTeleportParams.myTeleportParams.myBlinkSphereColor[0] / 255,\r\n this._myTeleportParams.myTeleportParams.myBlinkSphereColor[1] / 255,\r\n this._myTeleportParams.myTeleportParams.myBlinkSphereColor[2] / 255,\r\n 0);\r\n\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n\r\n this._myBlinkSphere.pp_resetTransformLocal();\r\n this._myBlinkSphere.pp_setScaleLocal(this._myTeleportParams.myTeleportParams.myBlinkSphereScale);\r\n this._myBlinkSphere.pp_setActive(false);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport Teleport Blink\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\");\r\n\r\n this._myFSM.addState(\"fade_out\", this._fadeOutUpdate.bind(this));\r\n this._myFSM.addState(\"wait\", new TimerState(this._myTeleportParams.myTeleportParams.myBlinkWaitSeconds, \"done\"));\r\n this._myFSM.addState(\"fade_in\", this._fadeInUpdate.bind(this));\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"fade_out\", \"teleport\", this._startFadeOut.bind(this));\r\n this._myFSM.addTransition(\"fade_out\", \"wait\", \"done\", this._teleport.bind(this));\r\n this._myFSM.addTransition(\"wait\", \"fade_in\", \"done\", this._startFadeIn.bind(this));\r\n this._myFSM.addTransition(\"fade_in\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"fade_out\", \"idle\", \"stop\", this._stop.bind(this, true));\r\n this._myFSM.addTransition(\"wait\", \"idle\", \"stop\", this._stop.bind(this, false));\r\n this._myFSM.addTransition(\"fade_in\", \"idle\", \"stop\", this._stop.bind(this, false));\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n\r\n this._myFadeInTimer = new Timer(this._myTeleportParams.myTeleportParams.myBlinkFadeInSeconds);\r\n this._myFadeOutTimer = new Timer(this._myTeleportParams.myTeleportParams.myBlinkFadeOutSeconds);\r\n this._myFadeOutAlphaOverTime = new NumberOverFactor(0, 1, 0, 1);\r\n this._myFadeInAlphaOverTime = new NumberOverFactor(1, 0, 0, 1);\r\n }\r\n\r\n start(fsm) {\r\n this._myParentFSM = fsm;\r\n\r\n this._myFSM.perform(\"teleport\");\r\n }\r\n\r\n end() {\r\n this._myBlinkSphere.pp_setActive(false);\r\n this._myBlinkSphere.pp_setParent(Globals.getPlayerObjects(this._myTeleportParams.myEngine).myCauldron, false);\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n update(dt, fsm) {\r\n this._myBlinkSphere.pp_setParent(this._myTeleportParams.myPlayerHeadManager.getHead(), false);\r\n this._myBlinkSphere.pp_resetTransformLocal();\r\n\r\n this._myFSM.update(dt);\r\n }\r\n\r\n _startFadeOut() {\r\n this._myFadeOutTimer.start();\r\n this._myBlinkSphereMaterialColor[3] = 0;\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n this._myBlinkSphere.pp_setActive(true);\r\n\r\n this._myLocomotionRuntimeParams.myIsTeleporting = true;\r\n }\r\n\r\n _startFadeIn() {\r\n this._myFadeInTimer.start();\r\n }\r\n\r\n _fadeOutUpdate(dt, fsm) {\r\n this._myFadeOutTimer.update(dt);\r\n\r\n let alpha = this._myFadeOutAlphaOverTime.get(this._myFadeOutTimer.getPercentage());\r\n this._myBlinkSphereMaterialColor[3] = alpha;\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n\r\n if (this._myFadeOutTimer.isDone()) {\r\n fsm.perform(\"done\");\r\n }\r\n }\r\n\r\n _fadeInUpdate(dt, fsm) {\r\n this._myFadeInTimer.update(dt);\r\n\r\n let alpha = this._myFadeInAlphaOverTime.get(this._myFadeInTimer.getPercentage());\r\n this._myBlinkSphereMaterialColor[3] = alpha;\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n\r\n if (this._myFadeInTimer.isDone()) {\r\n fsm.perform(\"done\");\r\n }\r\n }\r\n\r\n _teleportDone() {\r\n this._myBlinkSphere.pp_setActive(false);\r\n\r\n this._myParentFSM.performDelayed(\"done\");\r\n }\r\n\r\n _stop(teleport) {\r\n this._myBlinkSphere.pp_setActive(false);\r\n\r\n if (teleport) {\r\n this._teleport();\r\n }\r\n }\r\n\r\n _teleport() {\r\n this._myLocomotionRuntimeParams.myIsTeleporting = false;\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = true;\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myTeleportRuntimeParams.myTeleportRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n }\r\n}", "import { Timer } from \"../../../../../../cauldron/cauldron/timer.js\";\r\nimport { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportTeleportShiftState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport Teleport Shift\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\");\r\n\r\n this._myFSM.addState(\"shifting\", this._shiftingUpdate.bind(this));\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"shifting\", \"teleport\", this._startShifting.bind(this));\r\n this._myFSM.addTransition(\"shifting\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"shifting\", \"idle\", \"stop\", this._stop.bind(this));\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n\r\n this._myShiftMovementTimer = new Timer(this._myTeleportParams.myTeleportParams.myShiftMovementSeconds);\r\n this._myShiftRotateTimer = new Timer(this._myTeleportParams.myTeleportParams.myShiftRotateSeconds, false);\r\n\r\n this._myFeetStartPosition = vec3_create();\r\n\r\n this._myCurrentRotationOnUp = 0;\r\n this._myStartRotationOnUp = 0;\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Shift Movement Seconds\", this._myTeleportParams.myTeleportParams.myShiftMovementSeconds, 0.5, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Shift Rotate Seconds\", this._myTeleportParams.myTeleportParams.myShiftRotateSeconds, 0.5, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Shift Rotate Start Percentage\", this._myTeleportParams.myTeleportParams.myShiftRotateStartAfterMovementPercentage, 0.5, 3, 0, 1, undefined, this._myTeleportParams.myEngine));\r\n }\r\n\r\n start(fsm) {\r\n this._myParentFSM = fsm;\r\n\r\n this._myFSM.perform(\"teleport\");\r\n }\r\n\r\n end() {\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n update(dt, fsm) {\r\n //this._myTeleportParams.myTeleportParams.myShiftMovementSeconds = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Shift Movement Seconds\");\r\n //this._myTeleportParams.myTeleportParams.myShiftRotateSeconds = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Shift Rotate Seconds\");\r\n //this._myTeleportParams.myTeleportParams.myShiftRotateStartAfterMovementPercentage = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Shift Rotate Start Percentage\");\r\n\r\n this._myFSM.update(dt);\r\n }\r\n\r\n _startShifting() {\r\n this._myTeleportParams.myPlayerTransformManager.getParams().mySyncPositionDisabled = true;\r\n\r\n this._myLocomotionRuntimeParams.myIsTeleporting = true;\r\n this._myFeetStartPosition = this._myTeleportParams.myPlayerHeadManager.getPositionFeet(this._myFeetStartPosition);\r\n\r\n this._myShiftMovementTimer.start(this._myTeleportParams.myTeleportParams.myShiftMovementSeconds);\r\n\r\n if (this._myTeleportParams.myTeleportParams.myShiftMovementSecondsMultiplierOverDistanceFunction) {\r\n let distance = this._myTeleportRuntimeParams.myTeleportPosition.vec3_distance(this._myFeetStartPosition);\r\n let multiplier = this._myTeleportParams.myTeleportParams.myShiftMovementSecondsMultiplierOverDistanceFunction(distance);\r\n this._myShiftMovementTimer.start(this._myTeleportParams.myTeleportParams.myShiftMovementSeconds * multiplier);\r\n }\r\n\r\n this._myShiftRotateTimer.reset(this._myTeleportParams.myTeleportParams.myShiftRotateSeconds);\r\n if (this._myTeleportParams.myTeleportParams.myShiftRotateSecondsMultiplierOverAngleFunction) {\r\n let multiplier = this._myTeleportParams.myTeleportParams.myShiftRotateSecondsMultiplierOverAngleFunction(Math.abs(this._myTeleportRuntimeParams.myTeleportRotationOnUp));\r\n this._myShiftRotateTimer.reset(this._myTeleportParams.myTeleportParams.myShiftRotateSeconds * multiplier);\r\n }\r\n\r\n this._myStartRotationOnUp = this._myTeleportRuntimeParams.myTeleportRotationOnUp;\r\n this._myCurrentRotationOnUp = 0;\r\n }\r\n\r\n _stop() {\r\n this._teleport();\r\n }\r\n\r\n _teleportDone() {\r\n this._teleport();\r\n this._myParentFSM.performDelayed(\"done\");\r\n }\r\n\r\n _teleport() {\r\n this._myTeleportParams.myPlayerTransformManager.getParams().mySyncPositionDisabled = false;\r\n this._myLocomotionRuntimeParams.myIsTeleporting = false;\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = true;\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myStartRotationOnUp - this._myCurrentRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n }\r\n\r\n _shiftingUpdate(dt, fsm) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportTeleportShiftState.prototype._shiftingUpdate = function () {\r\n let movementToTeleportFeet = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n return function _shiftingUpdate(dt, fsm) {\r\n this._myShiftMovementTimer.update(dt);\r\n this._myShiftRotateTimer.update(dt);\r\n\r\n if (this._myShiftRotateTimer.isDone() && this._myShiftMovementTimer.isDone()) {\r\n fsm.perform(\"done\");\r\n } else {\r\n newFeetPosition.vec3_copy(this._myTeleportRuntimeParams.myTeleportPosition);\r\n\r\n if (this._myShiftMovementTimer.isStarted() || this._myShiftMovementTimer.isJustDone()) {\r\n\r\n let interpolationFactor = this._myTeleportParams.myTeleportParams.myShiftMovementEasingFunction(this._myShiftMovementTimer.getPercentage());\r\n\r\n if (interpolationFactor >= this._myTeleportParams.myTeleportParams.myShiftRotateStartAfterMovementPercentage && !this._myShiftRotateTimer.isStarted()) {\r\n this._myShiftRotateTimer.start();\r\n this._myShiftRotateTimer.update(dt);\r\n }\r\n\r\n movementToTeleportFeet = this._myTeleportRuntimeParams.myTeleportPosition.vec3_sub(this._myFeetStartPosition, movementToTeleportFeet);\r\n movementToTeleportFeet.vec3_scale(interpolationFactor, movementToTeleportFeet);\r\n newFeetPosition = this._myFeetStartPosition.vec3_add(movementToTeleportFeet, newFeetPosition);\r\n }\r\n\r\n let rotationOnUp = 0;\r\n if (this._myShiftRotateTimer.isRunning() || this._myShiftRotateTimer.isJustDone()) {\r\n let interpolationFactor = this._myTeleportParams.myTeleportParams.myShiftRotateEasingFunction(this._myShiftRotateTimer.getPercentage());\r\n\r\n let newCurrentRotationOnUp = this._myStartRotationOnUp * interpolationFactor;\r\n rotationOnUp = newCurrentRotationOnUp - this._myCurrentRotationOnUp;\r\n\r\n this._myCurrentRotationOnUp = newCurrentRotationOnUp;\r\n }\r\n\r\n this._teleportToPosition(newFeetPosition, rotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams, true);\r\n }\r\n };\r\n}();", "import { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { EasingFunction } from \"../../../../../../cauldron/utils/math_utils.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\nimport { PlayerLocomotionTeleportTeleportBlinkState } from \"./player_locomotion_teleport_teleport_blink_state.js\";\r\nimport { PlayerLocomotionTeleportTeleportShiftState } from \"./player_locomotion_teleport_teleport_shift_state.js\";\r\n\r\nexport let PlayerLocomotionTeleportTeleportType = {\r\n INSTANT: 0,\r\n BLINK: 1,\r\n SHIFT: 2\r\n};\r\n\r\nexport class PlayerLocomotionTeleportTeleportParams {\r\n\r\n constructor() {\r\n this.myTeleportType = PlayerLocomotionTeleportTeleportType.SHIFT;\r\n\r\n this.myBlinkFadeOutSeconds = 0.1;\r\n this.myBlinkFadeInSeconds = 0.1;\r\n this.myBlinkWaitSeconds = 0.1;\r\n this.myBlinkSphereColor = vec3_create();\r\n this.myBlinkSphereScale = 0.1;\r\n\r\n this.myShiftMovementSeconds = 0.15;\r\n this.myShiftMovementSecondsMultiplierOverDistanceFunction = null;\r\n this.myShiftMovementEasingFunction = EasingFunction.easeInOut;\r\n\r\n this.myShiftRotateSeconds = 1;\r\n this.myShiftRotateSecondsMultiplierOverAngleFunction = null;\r\n this.myShiftRotateEasingFunction = EasingFunction.easeOut;\r\n this.myShiftRotateStartAfterMovementPercentage = 0.7;\r\n\r\n this.myShiftRotateSecondsMultiplierOverAngleFunction = function (angle) {\r\n return EasingFunction.easeOut(angle / 180);\r\n };\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportTeleportState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport Teleport\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\");\r\n\r\n this._myBlinkState = new PlayerLocomotionTeleportTeleportBlinkState(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n this._myShiftState = new PlayerLocomotionTeleportTeleportShiftState(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myFSM.addState(\"instant_teleport\", this._instantUpdate.bind(this));\r\n this._myFSM.addState(\"blink_teleport\", this._myBlinkState);\r\n this._myFSM.addState(\"shift_teleport\", this._myShiftState);\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"instant_teleport\", \"start_instant\");\r\n this._myFSM.addTransition(\"idle\", \"blink_teleport\", \"start_blink\");\r\n this._myFSM.addTransition(\"idle\", \"shift_teleport\", \"start_shift\");\r\n\r\n this._myFSM.addTransition(\"instant_teleport\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n this._myFSM.addTransition(\"blink_teleport\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n this._myFSM.addTransition(\"shift_teleport\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"instant_teleport\", \"idle\", \"stop\", this._instantStop.bind(this));\r\n this._myFSM.addTransition(\"blink_teleport\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"shift_teleport\", \"idle\", \"stop\");\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n }\r\n\r\n start(fsm) {\r\n this._myParentFSM = fsm;\r\n\r\n switch (this._myTeleportParams.myTeleportParams.myTeleportType) {\r\n case PlayerLocomotionTeleportTeleportType.INSTANT:\r\n this._myFSM.perform(\"start_instant\");\r\n break;\r\n case PlayerLocomotionTeleportTeleportType.BLINK:\r\n this._myFSM.perform(\"start_blink\");\r\n break;\r\n case PlayerLocomotionTeleportTeleportType.SHIFT:\r\n this._myFSM.perform(\"start_shift\");\r\n break;\r\n default:\r\n this._myFSM.perform(\"start_instant\");\r\n }\r\n }\r\n\r\n end() {\r\n }\r\n\r\n update(dt, fsm) {\r\n this._myFSM.update(dt);\r\n }\r\n\r\n completeTeleport() {\r\n this._myFSM.perform(\"stop\");\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myTeleportRuntimeParams.myTeleportRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n }\r\n\r\n _instantUpdate(dt, fsm) {\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myTeleportRuntimeParams.myTeleportRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = true;\r\n fsm.perform(\"done\");\r\n }\r\n\r\n _instantStop(fsm) {\r\n this._instantUpdate(0, fsm);\r\n }\r\n\r\n _teleportDone() {\r\n this._myTeleportParams.myPlayerTransformManager.resetReal();\r\n\r\n this._myParentFSM.performDelayed(\"done\");\r\n }\r\n}", "import { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { XRUtils } from \"../../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../../input/cauldron/input_types.js\";\r\nimport { MouseButtonID } from \"../../../../../../input/cauldron/mouse.js\";\r\nimport { GamepadAxesID } from \"../../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckBridge } from \"../../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { PlayerLocomotionMovement } from \"../player_locomotion_movement.js\";\r\nimport { PlayerLocomotionTeleportDetectionParams, PlayerLocomotionTeleportDetectionState } from \"./player_locomotion_teleport_detection_state.js\";\r\nimport { PlayerLocomotionTeleportDetectionVisualizerParams } from \"./player_locomotion_teleport_detection_visualizer.js\";\r\nimport { PlayerLocomotionTeleportTeleportParams, PlayerLocomotionTeleportTeleportState } from \"./player_locomotion_teleport_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n\r\n this.myCollisionCheckParams = null;\r\n\r\n this.myDetectionParams = new PlayerLocomotionTeleportDetectionParams();\r\n this.myVisualizerParams = new PlayerLocomotionTeleportDetectionVisualizerParams();\r\n this.myTeleportParams = new PlayerLocomotionTeleportTeleportParams();\r\n\r\n this.myHandedness = Handedness.LEFT;\r\n\r\n this.myPerformTeleportAsMovement = false;\r\n this.myTeleportAsMovementMaxDistanceFromTeleportPosition = 0.001;\r\n this.myTeleportAsMovementMaxSteps = 2;\r\n // When checking teleport as movement u may need to move more times to get to the position due to snap and gravity\r\n // This specifies how many movement u can try to get to the teleport position\r\n\r\n this.myTeleportAsMovementRemoveVerticalMovement = true;\r\n // This can be used to remove the vertical movement from the difference from the current and teleport position so that u can apply just\r\n // the gravity as vertical movement\r\n this.myTeleportAsMovementExtraVerticalMovementPerMeter = 1; // This simulate the gravity for the teleport movement\r\n\r\n this.myStickIdleThreshold = 0.1;\r\n\r\n this.myAdjustPositionEveryFrame = false;\r\n this.myGravityAcceleration = 0;\r\n this.myMaxGravitySpeed = 0;\r\n\r\n this.myEngine = engine;\r\n\r\n this.myDebugEnabled = false;\r\n this.myDebugDetectEnabled = false;\r\n this.myDebugShowEnabled = false;\r\n this.myDebugVisibilityEnabled = false;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportRuntimeParams {\r\n\r\n constructor() {\r\n this.myTeleportPosition = vec3_create();\r\n this.myTeleportRotationOnUp = 0;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleport extends PlayerLocomotionMovement {\r\n\r\n constructor(teleportParams, locomotionRuntimeParams) {\r\n super(locomotionRuntimeParams);\r\n\r\n this._myTeleportParams = teleportParams;\r\n this._myTeleportRuntimeParams = new PlayerLocomotionTeleportRuntimeParams();\r\n\r\n this._myStickIdleCharge = true;\r\n\r\n this._myDetectionState = new PlayerLocomotionTeleportDetectionState(this._myTeleportParams, this._myTeleportRuntimeParams, this._myLocomotionRuntimeParams);\r\n this._myTeleportState = new PlayerLocomotionTeleportTeleportState(this._myTeleportParams, this._myTeleportRuntimeParams, this._myLocomotionRuntimeParams);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\", this._idleUpdate.bind(this));\r\n this._myFSM.addState(\"detect\", this._myDetectionState);\r\n this._myFSM.addState(\"teleport\", this._myTeleportState);\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"detect\", \"detect\");\r\n this._myFSM.addTransition(\"detect\", \"teleport\", \"teleport\");\r\n this._myFSM.addTransition(\"detect\", \"idle\", \"cancel\");\r\n this._myFSM.addTransition(\"teleport\", \"idle\", \"done\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"detect\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"teleport\", \"idle\", \"stop\", this._completeTeleport.bind(this));\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n }\r\n\r\n stop() {\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n canStop() {\r\n return this._myFSM.isInState(\"idle\");\r\n }\r\n\r\n isTeleporting() {\r\n return this._myFSM.isInState(\"teleport\");\r\n }\r\n\r\n getParams() {\r\n return this._myTeleportParams;\r\n }\r\n\r\n getTeleportRuntimeParams() {\r\n return this._myTeleportRuntimeParams;\r\n }\r\n\r\n update(dt) {\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = false;\r\n\r\n this._myFSM.update(dt);\r\n\r\n if (!this._myLocomotionRuntimeParams.myIsTeleporting && (this._myTeleportParams.myAdjustPositionEveryFrame || this._myTeleportParams.myGravityAcceleration != 0)) {\r\n this._applyGravity(dt);\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n }\r\n }\r\n\r\n _idleUpdate(dt) {\r\n if (this._startDetecting()) {\r\n this._myFSM.perform(\"detect\");\r\n }\r\n }\r\n\r\n _startDetecting() {\r\n let startDetecting = false;\r\n\r\n if (!XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n startDetecting = Globals.getMouse(this._myTeleportParams.myEngine).isButtonPressStart(MouseButtonID.MIDDLE) &&\r\n Globals.getMouse(this._myTeleportParams.myEngine).isTargetingRenderCanvas();\r\n } else {\r\n let axes = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n\r\n if (axes.vec2_length() <= this._myTeleportParams.myStickIdleThreshold) {\r\n this._myStickIdleCharge = true;\r\n }\r\n\r\n if (this._myStickIdleCharge && axes[1] >= 0.75) {\r\n this._myStickIdleCharge = false;\r\n startDetecting = true;\r\n }\r\n }\r\n\r\n return startDetecting;\r\n }\r\n\r\n _completeTeleport() {\r\n this._myTeleportState.completeTeleport();\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myDetectionState.destroy();\r\n\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleport.prototype._applyGravity = function () {\r\n let playerUp = vec3_create();\r\n let gravityMovement = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n return function _applyGravity(dt) {\r\n // If gravity is zero it's still important to move to remain snapped and gather proper surface data even when not teleporting\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n gravityMovement.vec3_zero();\r\n if (!this._myLocomotionRuntimeParams.myIsFlying && !this._myLocomotionRuntimeParams.myIsTeleporting) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed += this._myTeleportParams.myGravityAcceleration * dt;\r\n\r\n if (Math.abs(this._myLocomotionRuntimeParams.myGravitySpeed) > Math.abs(this._myTeleportParams.myMaxGravitySpeed)) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = Math.pp_sign(this._myTeleportParams.myGravityAcceleration) * Math.abs(this._myTeleportParams.myMaxGravitySpeed);\r\n }\r\n\r\n gravityMovement = playerUp.vec3_scale(this._myLocomotionRuntimeParams.myGravitySpeed * dt, gravityMovement);\r\n } else {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).move(gravityMovement, feetTransformQuat, this._myTeleportParams.myCollisionCheckParams, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n if (!this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myVerticalMovementCanceled) {\r\n this._myTeleportParams.myPlayerHeadManager.teleportPositionFeet(this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myNewPosition);\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myGravitySpeed > 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnCeiling ||\r\n this._myLocomotionRuntimeParams.myGravitySpeed < 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n };\r\n}();", "import { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../../../../input/cauldron/input_utils.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { Direction2DTo3DConverter, Direction2DTo3DConverterParams } from \"../../../../cauldron/cauldron/direction_2D_to_3D_converter.js\";\r\nimport { PlayerLocomotionDirectionReferenceType } from \"./player_locomotion.js\";\r\nimport { PlayerLocomotionMovement } from \"./player_locomotion_movement.js\";\r\n\r\nexport class PlayerLocomotionSmoothParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n this.myPlayerTransformManager = null;\r\n\r\n this.myCollisionCheckParams = null;\r\n\r\n this.myMaxSpeed = 0;\r\n this.mySpeedSlowDownPercentageOnWallSlid = 1; // this is the target value for a 90 degrees slid, the more u move toward the wall the slower u go \r\n\r\n this.myMovementMinStickIntensityThreshold = 0;\r\n\r\n this.myFlyEnabled = false;\r\n this.myFlyWithButtonsEnabled = false;\r\n this.myFlyWithViewAngleEnabled = false;\r\n this.myMinAngleToFlyUpNonVR = 0;\r\n this.myMinAngleToFlyDownNonVR = 0;\r\n this.myMinAngleToFlyUpVR = 0;\r\n this.myMinAngleToFlyDownVR = 0;\r\n this.myMinAngleToFlyRight = 0;\r\n\r\n this.myGravityAcceleration = 0;\r\n this.myMaxGravitySpeed = 0;\r\n\r\n this.myVRDirectionReferenceType = PlayerLocomotionDirectionReferenceType.HEAD;\r\n this.myVRDirectionReferenceObject = null;\r\n\r\n this.myHandedness = Handedness.LEFT;\r\n\r\n this.myDebugFlyMaxSpeedMultiplier = 5;\r\n this.myMoveThroughCollisionShortcutEnabled = false;\r\n this.myMoveHeadShortcutEnabled = false;\r\n this.myTripleSpeedShortcutEnabled = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionSmooth extends PlayerLocomotionMovement {\r\n\r\n constructor(params, locomotionRuntimeParams) {\r\n super(locomotionRuntimeParams);\r\n\r\n this._myParams = params;\r\n\r\n this._myCurrentSpeed = 0;\r\n this._myLastHorizontalMovement = vec3_create();\r\n\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n\r\n this._myStickIdleTimer = new Timer(0.25, false);\r\n\r\n let directionConverterNonVRParams = new Direction2DTo3DConverterParams(this._myParams.myEngine);\r\n directionConverterNonVRParams.myAutoUpdateFlyForward = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterNonVRParams.myAutoUpdateFlyRight = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterNonVRParams.myMinAngleToFlyForwardUp = this._myParams.myMinAngleToFlyUpNonVR;\r\n directionConverterNonVRParams.myMinAngleToFlyForwardDown = this._myParams.myMinAngleToFlyDownNonVR;\r\n directionConverterNonVRParams.myMinAngleToFlyRightUp = this._myParams.myMinAngleToFlyRight;\r\n directionConverterNonVRParams.myMinAngleToFlyRightDown = this._myParams.myMinAngleToFlyRight;\r\n directionConverterNonVRParams.myInvertForwardWhenUpsideDown = this._myParams.myDirectionInvertForwardWhenUpsideDown;\r\n\r\n let directionConverterVRParams = new Direction2DTo3DConverterParams(this._myParams.myEngine);\r\n directionConverterVRParams.myAutoUpdateFlyForward = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterVRParams.myAutoUpdateFlyRight = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterVRParams.myMinAngleToFlyForwardUp = this._myParams.myMinAngleToFlyUpVR;\r\n directionConverterVRParams.myMinAngleToFlyForwardDown = this._myParams.myMinAngleToFlyDownVR;\r\n directionConverterVRParams.myMinAngleToFlyRightUp = this._myParams.myMinAngleToFlyRight;\r\n directionConverterVRParams.myMinAngleToFlyRightDown = this._myParams.myMinAngleToFlyRight;\r\n directionConverterVRParams.myInvertForwardWhenUpsideDown = this._myParams.myDirectionInvertForwardWhenUpsideDown;\r\n\r\n this._myDirectionConverterNonVR = new Direction2DTo3DConverter(directionConverterNonVRParams);\r\n this._myDirectionConverterVR = new Direction2DTo3DConverter(directionConverterVRParams);\r\n this._myCurrentDirectionConverter = this._myDirectionConverterNonVR;\r\n\r\n this._myDebugFlyEnabled = false;\r\n\r\n this._myDestroyed = false;\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myParams.myEngine);\r\n }\r\n\r\n start() {\r\n this._myCurrentSpeed = 0;\r\n this._myLastHorizontalMovement.vec3_zero();\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n getCurrentSpeed() {\r\n return this._myCurrentSpeed;\r\n }\r\n\r\n getLastHorizontalSpeed() {\r\n return this._myLastHorizontalMovement;\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n setDebugFlyEnabled(enabled) {\r\n if (this._myDebugFlyEnabled != enabled) {\r\n if (!enabled) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n this._myCurrentDirectionConverter.resetFly();\r\n }\r\n }\r\n\r\n this._myDebugFlyEnabled = enabled;\r\n }\r\n\r\n isDebugFlyEnabled() {\r\n return this._myDebugFlyEnabled;\r\n }\r\n\r\n _onXRSessionStart(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionEnd(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionSmooth.prototype.update = function () {\r\n let playerUp = vec3_create();\r\n let headMovement = vec3_create();\r\n let direction = vec3_create();\r\n let directionOnUp = vec3_create();\r\n let verticalMovement = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n\r\n let directionReferenceTransformQuat = quat2_create();\r\n return function update(dt) {\r\n let debugFlyEnabled = this._myDebugFlyEnabled && Globals.isDebugEnabled(this._myParams.myEngine);\r\n\r\n this._myCurrentSpeed = 0;\r\n this._myLastHorizontalMovement.vec3_zero();\r\n\r\n playerUp = this._myParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n headMovement.vec3_zero();\r\n\r\n let axes = Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n axes[0] = Math.abs(axes[0]) > this._myParams.myMovementMinStickIntensityThreshold ? axes[0] : 0;\r\n axes[1] = Math.abs(axes[1]) > this._myParams.myMovementMinStickIntensityThreshold ? axes[1] : 0;\r\n\r\n let isManuallyMoving = false;\r\n let maxSpeed = this._myParams.myMaxSpeed;\r\n if (debugFlyEnabled) {\r\n maxSpeed = maxSpeed * this._myParams.myDebugFlyMaxSpeedMultiplier;\r\n }\r\n\r\n if ((this._myParams.myTripleSpeedShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) || debugFlyEnabled) {\r\n if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.SELECT).isPressed()) {\r\n maxSpeed *= 3;\r\n }\r\n }\r\n\r\n if (debugFlyEnabled && Globals.getGamepads(this._myParams.myEngine)[InputUtils.getOppositeHandedness(this._myParams.myHandedness)].getButtonInfo(GamepadButtonID.SELECT).isPressed()) {\r\n maxSpeed = this._myParams.myMaxSpeed;\r\n }\r\n\r\n if (!axes.vec2_isZero()) {\r\n this._myStickIdleTimer.start();\r\n\r\n direction = this._myCurrentDirectionConverter.convertTransformQuat(axes, this._myDirectionReference.pp_getTransformQuat(directionReferenceTransformQuat), playerUp, direction);\r\n\r\n if (!direction.vec3_isZero()) {\r\n this._myLocomotionRuntimeParams.myIsFlying = this._myLocomotionRuntimeParams.myIsFlying || direction.vec3_componentAlongAxis(playerUp, directionOnUp).vec3_length() > 0.000001;\r\n if (!this._myLocomotionRuntimeParams.myIsFlying) {\r\n direction = direction.vec3_removeComponentAlongAxis(playerUp, direction);\r\n }\r\n\r\n let movementIntensity = axes.vec2_length();\r\n this._myCurrentSpeed = Math.pp_lerp(0, maxSpeed, movementIntensity);\r\n\r\n if (this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsSliding && this._myParams.mySpeedSlowDownPercentageOnWallSlid != 1) {\r\n let slowPercentage = this._myParams.mySpeedSlowDownPercentageOnWallSlid;\r\n\r\n let slidStrength = Math.pp_mapToRange(Math.abs(this._myLocomotionRuntimeParams.myCollisionRuntimeParams.mySlidingMovementAngle), 0, 90, 0, 1);\r\n slowPercentage = Math.pp_lerp(1, slowPercentage, slidStrength);\r\n\r\n this._myCurrentSpeed = this._myCurrentSpeed * slowPercentage;\r\n }\r\n\r\n headMovement = direction.vec3_scale(this._myCurrentSpeed * dt, headMovement);\r\n\r\n isManuallyMoving = true;\r\n }\r\n } else {\r\n if (this._myStickIdleTimer.isRunning()) {\r\n this._myStickIdleTimer.update(dt);\r\n if (this._myStickIdleTimer.isDone()) {\r\n this._myCurrentDirectionConverter.resetFly();\r\n }\r\n }\r\n }\r\n\r\n if ((this._myParams.myFlyEnabled && this._myParams.myFlyWithButtonsEnabled) || debugFlyEnabled) {\r\n if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) {\r\n verticalMovement = playerUp.vec3_scale(maxSpeed * dt, verticalMovement);\r\n headMovement = headMovement.vec3_add(verticalMovement, headMovement);\r\n this._myLocomotionRuntimeParams.myIsFlying = true;\r\n\r\n isManuallyMoving = true;\r\n } else if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressed()) {\r\n verticalMovement = playerUp.vec3_scale(-maxSpeed * dt, verticalMovement);\r\n headMovement = headMovement.vec3_add(verticalMovement, headMovement);\r\n this._myLocomotionRuntimeParams.myIsFlying = true;\r\n\r\n isManuallyMoving = true;\r\n }\r\n\r\n if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressEnd(2)) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n }\r\n }\r\n\r\n if (this._myParams.myMoveHeadShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine) &&\r\n Globals.getGamepads(this._myParams.myEngine)[InputUtils.getOppositeHandedness(this._myParams.myHandedness)].getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed()) {\r\n this._myParams.myPlayerTransformManager.getPlayerHeadManager().moveFeet(headMovement);\r\n } else if ((this._myParams.myMoveThroughCollisionShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine) &&\r\n Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed())\r\n || debugFlyEnabled) {\r\n this._myParams.myPlayerTransformManager.move(headMovement, this._myLocomotionRuntimeParams.myCollisionRuntimeParams, true);\r\n if (isManuallyMoving) {\r\n this._myParams.myPlayerTransformManager.resetReal();\r\n }\r\n } else {\r\n if (!this._myLocomotionRuntimeParams.myIsFlying) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed += this._myParams.myGravityAcceleration * dt;\r\n\r\n if (Math.abs(this._myLocomotionRuntimeParams.myGravitySpeed) > Math.abs(this._myParams.myMaxGravitySpeed)) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = Math.pp_sign(this._myParams.myGravityAcceleration) * Math.abs(this._myParams.myMaxGravitySpeed);\r\n }\r\n\r\n verticalMovement = playerUp.vec3_scale(this._myLocomotionRuntimeParams.myGravitySpeed * dt, verticalMovement);\r\n headMovement = headMovement.vec3_add(verticalMovement, headMovement);\r\n } else {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n\r\n feetTransformQuat = this._myParams.myPlayerTransformManager.getTransformQuat(feetTransformQuat);\r\n\r\n this._myParams.myPlayerTransformManager.move(headMovement, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n if (isManuallyMoving) {\r\n this._myParams.myPlayerTransformManager.resetReal();\r\n\r\n this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(\r\n this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myOriginalUp,\r\n this._myLastHorizontalMovement\r\n );\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myGravitySpeed > 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnCeiling ||\r\n this._myLocomotionRuntimeParams.myGravitySpeed < 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n this._myCurrentDirectionConverter.resetFly();\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionSmooth.prototype._onXRSessionStart = function () {\r\n return function _onXRSessionStart(session) {\r\n switch (this._myParams.myVRDirectionReferenceType) {\r\n case 0:\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n break;\r\n case 1:\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHands[this._myParams.myHandedness];\r\n break;\r\n case 2:\r\n this._myDirectionReference = this._myParams.myVRDirectionReferenceObject;\r\n break;\r\n }\r\n\r\n this._myCurrentDirectionConverter = this._myDirectionConverterVR;\r\n this._myCurrentDirectionConverter.resetFly();\r\n };\r\n}();\r\n\r\nPlayerLocomotionSmooth.prototype._onXRSessionEnd = function () {\r\n return function _onXRSessionEnd(session) {\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n this._myCurrentDirectionConverter = this._myDirectionConverterNonVR;\r\n\r\n this._myCurrentDirectionConverter.resetFly();\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { PhysicsLayerFlags } from \"../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { PhysicsUtils } from \"../../../../../cauldron/physics/physics_utils.js\";\r\nimport { InputUtils } from \"../../../../../input/cauldron/input_utils.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { PlayerLocomotion, PlayerLocomotionParams } from \"./player_locomotion.js\";\r\n\r\nexport class PlayerLocomotionComponent extends Component {\r\n static TypeName = \"pp-player-locomotion\";\r\n static Properties = {\r\n _myDefaultLocomotionType: Property.enum([\"Smooth\", \"Teleport\"], \"Smooth\"),\r\n _myAlwaysSmoothForNonVR: Property.bool(true),\r\n _mySwitchLocomotionTypeShortcutEnabled: Property.bool(true), // Double press main hand (default left) thumbstick to switch\r\n _myPhysicsBlockLayerFlags: Property.string(\"0, 0, 0, 0, 0, 0, 0, 0\"),\r\n _myDefaultHeight: Property.float(1.70),\r\n _myCharacterRadius: Property.float(0.3),\r\n _myMaxSpeed: Property.float(2),\r\n _myMaxRotationSpeed: Property.float(100),\r\n _myGravityAcceleration: Property.float(-20),\r\n _myMaxGravitySpeed: Property.float(-15),\r\n _mySpeedSlowDownPercentageOnWallSlid: Property.float(1),\r\n _myIsSnapTurn: Property.bool(true),\r\n _mySnapTurnOnlyVR: Property.bool(true),\r\n _mySnapTurnAngle: Property.float(30),\r\n _mySnapTurnSpeedDegrees: Property.float(0),\r\n\r\n _myFlyEnabled: Property.bool(false),\r\n _myStartFlying: Property.bool(false),\r\n _myFlyWithButtonsEnabled: Property.bool(true),\r\n _myFlyWithViewAngleEnabled: Property.bool(true),\r\n _myMinAngleToFlyUpNonVR: Property.float(30),\r\n _myMinAngleToFlyDownNonVR: Property.float(50),\r\n _myMinAngleToFlyUpVR: Property.float(60),\r\n _myMinAngleToFlyDownVR: Property.float(1),\r\n _myMinAngleToFlyRight: Property.float(60),\r\n\r\n _myMainHand: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myDirectionInvertForwardWhenUpsideDown: Property.bool(true),\r\n _myVRDirectionReferenceType: Property.enum([\"Head\", \"Hand\", \"Custom Object\"], \"Head\"),\r\n _myVRDirectionReferenceObject: Property.object(),\r\n\r\n _myTeleportType: Property.enum([\"Instant\", \"Blink\", \"Shift\"], \"Shift\"),\r\n _myTeleportMaxDistance: Property.float(3),\r\n _myTeleportMaxHeightDifference: Property.float(1.25),\r\n _myTeleportRotationOnUpEnabled: Property.bool(false),\r\n _myTeleportValidMaterial: Property.material(),\r\n _myTeleportInvalidMaterial: Property.material(),\r\n _myTeleportPositionObject: Property.object(),\r\n _myTeleportPositionObjectRotateWithHead: Property.bool(true),\r\n _myTeleportParableStartReferenceObject: Property.object(),\r\n\r\n _myResetRealOnStart: Property.bool(true),\r\n\r\n // #WARN With @myResetRealOnStartFramesAmount at 1 it can happen that you enter the session like 1 frame before the game load\r\n // and the head pose might have not been properly initialized yet in the WebXR API, so the reset real will not happen has expected\r\n // Since this is a sort of edge case (either u enter after the load, or you were already in for more than 2-3 frames), and that\r\n // setting this to more than 1 can cause a visible (even if very short) stutter after the load (due to resetting the head multiple times),\r\n // it's better to keep this value at 1\r\n // A possible effect of the edge case is the view being obscured on start because it thinks you are colliding\r\n //\r\n // A value of 3 will make u sure that the head pose will be initialized and the reset real will happen as expected in any case\r\n // For example, if u have a total fade at start and nothing can be seen aside the clear color for at least, let's say, 10 frames, \r\n // you can set this to 3 safely, since there will be no visible stutter to be seen (beside the clear color)\r\n _myResetRealOnStartFramesAmount: Property.int(1),\r\n\r\n // Can fix some head through floor issues, when you can move your head completely to the other side of the floor\r\n // If the floors are thick enough that this can't happen, you can leave this to false\r\n _myResetHeadToFeetInsteadOfReal: Property.bool(true),\r\n _myResetHeadToRealMinDistance: Property.float(0.25),\r\n\r\n // these 2 flags works 100% properly only if both true or false\r\n _mySyncWithRealWorldPositionOnlyIfValid: Property.bool(true), // valid means the real player has not moved inside walls\r\n _myViewOcclusionInsideWallsEnabled: Property.bool(true),\r\n\r\n _mySyncNonVRHeightWithVROnExitSession: Property.bool(false),\r\n _mySyncNonVRVerticalAngleWithVROnExitSession: Property.bool(false),\r\n\r\n _mySyncHeadWithRealAfterLocomotionUpdateIfNeeded: Property.bool(true),\r\n\r\n _myColliderAccuracy: Property.enum([\"Very Low\", \"Low\", \"Medium\", \"High\", \"Very High\"], \"High\"),\r\n _myColliderCheckOnlyFeet: Property.bool(false),\r\n _myColliderSlideAlongWall: Property.bool(true),\r\n _myColliderMaxWalkableGroundAngle: Property.float(30),\r\n _myColliderSnapOnGround: Property.bool(true),\r\n _myColliderMaxDistanceToSnapOnGround: Property.float(0.1),\r\n _myColliderMaxWalkableGroundStepHeight: Property.float(0.1),\r\n _myColliderPreventFallingFromEdges: Property.bool(false),\r\n\r\n _myDebugFlyShortcutEnabled: Property.bool(false), // main hand (default left) select + thumbstick press, auto switch to smooth\r\n _myDebugFlyMaxSpeedMultiplier: Property.float(5),\r\n _myMoveThroughCollisionShortcutEnabled: Property.bool(false), // main hand (default left) thumbstick pressed while moving\r\n _myMoveHeadShortcutEnabled: Property.bool(false), // non main hand (default right) thumbstick pressed while moving\r\n _myTripleSpeedShortcutEnabled: Property.bool(false), // main hand (default left) select pressed while moving\r\n\r\n _myDebugHorizontalEnabled: Property.bool(false),\r\n _myDebugVerticalEnabled: Property.bool(false),\r\n\r\n _myCollisionCheckDisabled: Property.bool(false),\r\n\r\n _myRaycastCountLogEnabled: Property.bool(false),\r\n _myRaycastVisualDebugEnabled: Property.bool(false),\r\n _myPerformanceLogEnabled: Property.bool(false)\r\n };\r\n\r\n start() {\r\n let params = new PlayerLocomotionParams(this.engine);\r\n\r\n params.myDefaultLocomotionType = this._myDefaultLocomotionType;\r\n params.myAlwaysSmoothForNonVR = this._myAlwaysSmoothForNonVR;\r\n params.mySwitchLocomotionTypeShortcutEnabled = this._mySwitchLocomotionTypeShortcutEnabled;\r\n\r\n params.myDefaultHeight = this._myDefaultHeight;\r\n\r\n params.myMaxSpeed = this._myMaxSpeed;\r\n params.myMaxRotationSpeed = this._myMaxRotationSpeed;\r\n params.myGravityAcceleration = this._myGravityAcceleration;\r\n params.myMaxGravitySpeed = this._myMaxGravitySpeed;\r\n\r\n params.myCharacterRadius = this._myCharacterRadius;\r\n\r\n params.mySpeedSlowDownPercentageOnWallSlid = this._mySpeedSlowDownPercentageOnWallSlid;\r\n\r\n params.myIsSnapTurn = this._myIsSnapTurn;\r\n params.mySnapTurnOnlyVR = this._mySnapTurnOnlyVR;\r\n params.mySnapTurnAngle = this._mySnapTurnAngle;\r\n params.mySnapTurnSpeedDegrees = this._mySnapTurnSpeedDegrees;\r\n\r\n params.myFlyEnabled = this._myFlyEnabled;\r\n params.myStartFlying = this._myStartFlying;\r\n params.myFlyWithButtonsEnabled = this._myFlyWithButtonsEnabled;\r\n params.myFlyWithViewAngleEnabled = this._myFlyWithViewAngleEnabled;\r\n params.myMinAngleToFlyUpNonVR = this._myMinAngleToFlyUpNonVR;\r\n params.myMinAngleToFlyDownNonVR = this._myMinAngleToFlyDownNonVR;\r\n params.myMinAngleToFlyUpVR = this._myMinAngleToFlyUpVR;\r\n params.myMinAngleToFlyDownVR = this._myMinAngleToFlyDownVR;\r\n params.myMinAngleToFlyRight = this._myMinAngleToFlyRight;\r\n\r\n params.myMainHand = InputUtils.getHandednessByIndex(this._myMainHand);\r\n\r\n params.myDirectionInvertForwardWhenUpsideDown = this._myDirectionInvertForwardWhenUpsideDown;\r\n params.myVRDirectionReferenceType = this._myVRDirectionReferenceType;\r\n params.myVRDirectionReferenceObject = this._myVRDirectionReferenceObject;\r\n\r\n params.myForeheadExtraHeight = 0.1;\r\n\r\n params.myTeleportType = this._myTeleportType;\r\n params.myTeleportMaxDistance = this._myTeleportMaxDistance;\r\n params.myTeleportMaxHeightDifference = this._myTeleportMaxHeightDifference;\r\n params.myTeleportRotationOnUpEnabled = this._myTeleportRotationOnUpEnabled;\r\n params.myTeleportValidMaterial = this._myTeleportValidMaterial;\r\n params.myTeleportInvalidMaterial = this._myTeleportInvalidMaterial;\r\n params.myTeleportPositionObject = this._myTeleportPositionObject;\r\n params.myTeleportPositionObjectRotateWithHead = this._myTeleportPositionObjectRotateWithHead;\r\n params.myTeleportParableStartReferenceObject = this._myTeleportParableStartReferenceObject;\r\n\r\n params.myResetRealOnStart = this._myResetRealOnStart;\r\n params.myResetRealOnStartFramesAmount = this._myResetRealOnStartFramesAmount;\r\n params.myResetHeadToFeetInsteadOfReal = this._myResetHeadToFeetInsteadOfReal;\r\n params.myResetHeadToRealMinDistance = this._myResetHeadToRealMinDistance;\r\n\r\n params.mySyncWithRealWorldPositionOnlyIfValid = this._mySyncWithRealWorldPositionOnlyIfValid;\r\n params.myViewOcclusionInsideWallsEnabled = this._myViewOcclusionInsideWallsEnabled;\r\n\r\n params.mySyncNonVRHeightWithVROnExitSession = this._mySyncNonVRHeightWithVROnExitSession;\r\n params.mySyncNonVRVerticalAngleWithVROnExitSession = this._mySyncNonVRVerticalAngleWithVROnExitSession;\r\n\r\n params.mySyncHeadWithRealAfterLocomotionUpdateIfNeeded = this._mySyncHeadWithRealAfterLocomotionUpdateIfNeeded;\r\n\r\n params.myColliderAccuracy = this._myColliderAccuracy;\r\n params.myColliderCheckOnlyFeet = this._myColliderCheckOnlyFeet;\r\n params.myColliderSlideAlongWall = this._myColliderSlideAlongWall;\r\n params.myColliderMaxWalkableGroundAngle = this._myColliderMaxWalkableGroundAngle;\r\n params.myColliderSnapOnGround = this._myColliderSnapOnGround;\r\n params.myColliderMaxDistanceToSnapOnGround = this._myColliderMaxDistanceToSnapOnGround;\r\n params.myColliderMaxWalkableGroundStepHeight = this._myColliderMaxWalkableGroundStepHeight;\r\n params.myColliderPreventFallingFromEdges = this._myColliderPreventFallingFromEdges;\r\n\r\n params.myDebugFlyShortcutEnabled = this._myDebugFlyShortcutEnabled;\r\n params.myDebugFlyMaxSpeedMultiplier = this._myDebugFlyMaxSpeedMultiplier;\r\n params.myMoveThroughCollisionShortcutEnabled = this._myMoveThroughCollisionShortcutEnabled;\r\n params.myMoveHeadShortcutEnabled = this._myMoveHeadShortcutEnabled;\r\n params.myTripleSpeedShortcutEnabled = this._myTripleSpeedShortcutEnabled;\r\n\r\n params.myDebugHorizontalEnabled = this._myDebugHorizontalEnabled;\r\n params.myDebugVerticalEnabled = this._myDebugVerticalEnabled;\r\n\r\n params.myCollisionCheckDisabled = this._myCollisionCheckDisabled;\r\n\r\n params.myPhysicsBlockLayerFlags.copy(this._getPhysicsBlockLayersFlags());\r\n\r\n this._myPlayerLocomotion = new PlayerLocomotion(params);\r\n\r\n this._myLocomotionStarted = false;\r\n this._myResetReal = true;\r\n\r\n this._myDebugPerformanceLogTimer = new Timer(0.5);\r\n this._myDebugPerformanceLogTotalTime = 0;\r\n this._myDebugPerformanceLogFrameCount = 0;\r\n\r\n Globals.getHeadPose(this.engine).registerPostPoseUpdatedEventEventListener(this, this.onPostPoseUpdatedEvent.bind(this));\r\n }\r\n\r\n onPostPoseUpdatedEvent(dt, pose, manualUpdate) {\r\n if (manualUpdate) return;\r\n\r\n let startTime = 0;\r\n if (this._myPerformanceLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n startTime = window.performance.now();\r\n }\r\n\r\n let raycastVisualDebugEnabledBackup = false;\r\n if (this._myRaycastVisualDebugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n raycastVisualDebugEnabledBackup = PhysicsUtils.isRaycastVisualDebugEnabled(this.engine.physics);\r\n PhysicsUtils.setRaycastVisualDebugEnabled(true, this.engine.physics);\r\n }\r\n\r\n if (this._myRaycastCountLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n PhysicsUtils.resetRaycastCount(this.engine.physics);\r\n }\r\n\r\n if (!this._myLocomotionStarted) {\r\n this._myLocomotionStarted = true;\r\n this._myPlayerLocomotion.start();\r\n }\r\n\r\n this._myPlayerLocomotion.update(dt);\r\n\r\n if (this._myPerformanceLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n let endTime = window.performance.now();\r\n this._myDebugPerformanceLogTotalTime += endTime - startTime;\r\n this._myDebugPerformanceLogFrameCount++;\r\n\r\n this._myDebugPerformanceLogTimer.update(dt);\r\n if (this._myDebugPerformanceLogTimer.isDone()) {\r\n this._myDebugPerformanceLogTimer.start();\r\n\r\n let averageTime = this._myDebugPerformanceLogTotalTime / this._myDebugPerformanceLogFrameCount;\r\n\r\n console.log(\"Locomotion ms: \" + averageTime.toFixed(3));\r\n\r\n this._myDebugPerformanceLogTotalTime = 0;\r\n this._myDebugPerformanceLogFrameCount = 0;\r\n }\r\n }\r\n\r\n if (this._myRaycastVisualDebugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n PhysicsUtils.setRaycastVisualDebugEnabled(raycastVisualDebugEnabledBackup, this.engine.physics);\r\n }\r\n\r\n if (this._myRaycastCountLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n console.log(\"Raycast count: \" + PhysicsUtils.getRaycastCount(this.engine.physics));\r\n PhysicsUtils.resetRaycastCount(this.engine.physics);\r\n }\r\n }\r\n\r\n getPlayerLocomotion() {\r\n return this._myPlayerLocomotion;\r\n }\r\n\r\n onActivate() {\r\n if (this._myPlayerLocomotion != null) {\r\n this._myPlayerLocomotion.setActive(true);\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myPlayerLocomotion != null) {\r\n this._myPlayerLocomotion.setActive(false);\r\n }\r\n }\r\n\r\n _getPhysicsBlockLayersFlags() {\r\n let physicsFlags = new PhysicsLayerFlags();\r\n\r\n let flags = [...this._myPhysicsBlockLayerFlags.split(\",\")];\r\n for (let i = 0; i < flags.length; i++) {\r\n physicsFlags.setFlagActive(i, flags[i].trim() == \"1\");\r\n }\r\n\r\n return physicsFlags;\r\n }\r\n\r\n onDestroy() {\r\n this._myPlayerLocomotion?.destroy();\r\n }\r\n}", "import { Collider, CollisionComponent, Component, Property } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputSourceType, TrackedHandJointID } from \"../input_types.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class FingerCursorComponent extends Component {\r\n static TypeName = \"pp-finger-cursor\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myMultipleClicksEnabled: Property.bool(true),\r\n _myCollisionGroup: Property.int(1),\r\n _myCollisionSize: Property.float(0.0125),\r\n _myCursorObject: Property.object(null)\r\n };\r\n\r\n init() {\r\n this._myLastTarget = null;\r\n this._myHandInputSource = null;\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n this._myDoubleClickTimer = 0;\r\n this._myTripleClickTimer = 0;\r\n this._myMultipleClickObject = null;\r\n this._myMultipleClickDelay = 0.3;\r\n }\r\n\r\n start() {\r\n this._myCursorParentObject = this.object.pp_addObject();\r\n\r\n if (this._myCursorObject == null) {\r\n this._myCursorObject = this._myCursorParentObject.pp_addObject();\r\n } else {\r\n this._myCursorObject.pp_setParent(this._myCursorParentObject);\r\n }\r\n\r\n this._myCollisionComponent = this._myCursorObject.pp_addComponent(CollisionComponent);\r\n this._myCollisionComponent.collider = Collider.Sphere;\r\n this._myCollisionComponent.group = 1 << this._myCollisionGroup;\r\n this._myCollisionComponent.extents = vec3_create(this._myCollisionSize, this._myCollisionSize, this._myCollisionSize);\r\n }\r\n\r\n update(dt) {\r\n if (this._myDoubleClickTimer > 0) {\r\n this._myDoubleClickTimer -= dt;\r\n }\r\n\r\n if (this._myTripleClickTimer > 0) {\r\n this._myTripleClickTimer -= dt;\r\n }\r\n\r\n this._myCursorParentObject.pp_setTransformQuat(Globals.getPlayerObjects(this.engine).myReferenceSpace.pp_getTransformQuat());\r\n this._updateHand();\r\n\r\n if (this._myHandInputSource) {\r\n let overlaps = this._myCollisionComponent.queryOverlaps();\r\n let overlapTarget = null;\r\n for (let i = 0; i < overlaps.length; ++i) {\r\n let collision = overlaps[i];\r\n if (collision.group & this._myCollisionComponent.group) {\r\n let object = collision.object;\r\n let target = object.pp_getComponent(CursorTarget);\r\n if (target && (overlapTarget == null || !target.isSurface)) {\r\n overlapTarget = target;\r\n if (!target.isSurface) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!overlapTarget) {\r\n this._targetTouchEnd();\r\n } else if (!overlapTarget.equals(this._myLastTarget)) {\r\n this._targetTouchEnd();\r\n\r\n this._myLastTarget = overlapTarget;\r\n\r\n this._targetTouchStart();\r\n }\r\n } else {\r\n this._targetTouchEnd();\r\n }\r\n }\r\n\r\n _targetTouchStart() {\r\n this._myLastTarget.onHover.notify(this._myLastTarget.object, this);\r\n this._myLastTarget.onDown.notify(this._myLastTarget.object, this);\r\n }\r\n\r\n _targetTouchEnd() {\r\n if (this._myLastTarget) {\r\n this._myLastTarget.onClick.notify(this._myLastTarget.object, this);\r\n\r\n if (this._myMultipleClicksEnabled && this._myTripleClickTimer > 0 && this._myMultipleClickObject && this._myMultipleClickObject.pp_equals(this._myLastTarget.object)) {\r\n this._myLastTarget.onTripleClick.notify(this._myLastTarget.object, this);\r\n\r\n this._myTripleClickTimer = 0;\r\n } else if (this._myMultipleClicksEnabled && this._myDoubleClickTimer > 0 && this._myMultipleClickObject && this._myMultipleClickObject.pp_equals(this._myLastTarget.object)) {\r\n this._myLastTarget.onDoubleClick.notify(this._myLastTarget.object, this);\r\n\r\n this._myTripleClickTimer = this._myMultipleClickDelay;\r\n this._myDoubleClickTimer = 0;\r\n } else {\r\n this._myLastTarget.onSingleClick.notify(this._myLastTarget.object, this);\r\n\r\n this._myTripleClickTimer = 0;\r\n this._myDoubleClickTimer = this._myMultipleClickDelay;\r\n this._myMultipleClickObject = this._myLastTarget.object;\r\n }\r\n\r\n this._myLastTarget.onUp.notify(this._myLastTarget.object, this);\r\n this._myLastTarget.onUpWithDown.notify(this._myLastTarget.object, this);\r\n\r\n this._myLastTarget.onUnhover.notify(this._myLastTarget.object, this);\r\n\r\n this._myLastTarget = null;\r\n }\r\n }\r\n\r\n onActivate() {\r\n this._myCursorParentObject.pp_setActive(true);\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myCursorParentObject != null) {\r\n this._myCursorParentObject.pp_setActive(false);\r\n }\r\n }\r\n\r\n _updateHand() {\r\n this._myHandInputSource = InputUtils.getInputSource(this._myHandednessType, InputSourceType.TRACKED_HAND, this.engine);\r\n\r\n if (this._myHandInputSource) {\r\n let tip = null;\r\n\r\n try {\r\n tip = XRUtils.getFrame(this.engine).getJointPose(this._myHandInputSource.hand.get(TrackedHandJointID.INDEX_FINGER_TIP), XRUtils.getReferenceSpace(this.engine));\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n\r\n if (tip) {\r\n this._myCursorObject.pp_setRotationLocalQuat([\r\n tip.transform.orientation.x,\r\n tip.transform.orientation.y,\r\n tip.transform.orientation.z,\r\n tip.transform.orientation.w]);\r\n\r\n this._myCursorObject.pp_setPositionLocal([\r\n tip.transform.position.x,\r\n tip.transform.position.y,\r\n tip.transform.position.z]);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { InputSourceType } from \"../input_types.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class SwitchHandObjectComponent extends Component {\r\n static TypeName = \"pp-switch-hand-object\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myGamepad: Property.object(),\r\n _myTrackedHand: Property.object(),\r\n _myDisableHandsWhenNonXR: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myFirstUpdate = true;\r\n\r\n this._myCurrentInputSourceType = null;\r\n }\r\n\r\n onActivate() {\r\n this._myFirstUpdate = true;\r\n }\r\n\r\n update(dt) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n this._start();\r\n }\r\n\r\n if (this._myDisableHandsWhenNonXR && !XRUtils.isSessionActive()) {\r\n if (this._myCurrentInputSourceType != null) {\r\n this._myCurrentInputSourceType = null;\r\n\r\n this._myGamepad.pp_setActive(false);\r\n this._myTrackedHand.pp_setActive(false);\r\n }\r\n } else {\r\n let inputSourceType = InputUtils.getInputSourceTypeByHandedness(this._myHandednessType, this.engine);\r\n if (inputSourceType != null && this._myCurrentInputSourceType != inputSourceType) {\r\n this._myCurrentInputSourceType = inputSourceType;\r\n\r\n if (inputSourceType == InputSourceType.TRACKED_HAND) {\r\n if (this._myGamepad != null) {\r\n this._myGamepad.pp_setActive(false);\r\n }\r\n if (this._myTrackedHand != null) {\r\n this._myTrackedHand.pp_setActive(true);\r\n }\r\n } else if (inputSourceType == InputSourceType.GAMEPAD) {\r\n if (this._myTrackedHand != null) {\r\n this._myTrackedHand.pp_setActive(false);\r\n }\r\n if (this._myGamepad != null) {\r\n this._myGamepad.pp_setActive(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _start() {\r\n if (this._myGamepad != null) {\r\n this._myGamepad.pp_setActive(false);\r\n }\r\n\r\n if (this._myTrackedHand != null) {\r\n this._myTrackedHand.pp_setActive(false);\r\n }\r\n\r\n this._myCurrentInputSourceType = null;\r\n }\r\n}", "import { Component, MeshComponent, Property } from \"@wonderlandengine/api\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class TrackedHandDrawJointComponent extends Component {\r\n static TypeName = \"pp-tracked-hand-draw-joint\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myJointID: Property.enum(\r\n [\r\n \"Wrist\",\r\n \"Thumb Metacarpal\", \"Thumb Phalanx Proximal\", \"Thumb Phalanx Distal\", \"Thumb Tip\",\r\n \"Index Metacarpal\", \"Index Phalanx Proximal\", \"Index Phalanx Intermediate\", \"Index Phalanx Distal\", \"Index Tip\",\r\n \"Middle Metacarpal\", \"Middle Phalanx Proximal\", \"Middle Phalanx Intermediate\", \"Middle Phalanx Distal\", \"Middle Tip\",\r\n \"Ring Metacarpal\", \"Ring Phalanx Proximal\", \"Ring Phalanx Intermediate\", \"Ring Phalanx Distal\", \"Ring Tip\",\r\n \"Pinky Metacarpal\", \"Pinky Phalanx Proximal\", \"Pinky Phalanx Intermediate\", \"Pinky Phalanx Distal\", \"Pinky Tip\"\r\n ],\r\n \"Wrist\"),\r\n _myJointMesh: Property.mesh(),\r\n _myJointMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myJointIDType = InputUtils.getJointIDByIndex(this._myJointID);\r\n\r\n this._buildTrackedHandHierarchy();\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _buildTrackedHandHierarchy() {\r\n this._myJointMeshObject = this.object.pp_addObject();\r\n\r\n let mesh = this._myJointMeshObject.pp_addComponent(MeshComponent);\r\n mesh.mesh = this._myJointMesh;\r\n mesh.material = this._myJointMaterial;\r\n\r\n this._myJointMeshObject.pp_setScaleLocal(0);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nTrackedHandDrawJointComponent.prototype.update = function () {\r\n let transformQuat = quat2_create();\r\n return function update(dt) {\r\n let jointPose = Globals.getTrackedHandPose(this._myHandednessType, this.engine).getJointPose(this._myJointIDType);\r\n\r\n this._myJointMeshObject.pp_setTransformLocalQuat(jointPose.getTransformQuat(transformQuat, null));\r\n this._myJointMeshObject.pp_setScaleLocal(jointPose.getJointRadius());\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { TrackedHandJointID, TrackedHandJointIDIndex } from \"../input_types.js\";\r\nimport { TrackedHandDrawJointComponent } from \"./tracked_hand_draw_joint_component.js\";\r\n\r\nexport class TrackedHandDrawAllJointsComponent extends Component {\r\n static TypeName = \"pp-tracked-hand-draw-all-joints\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myHideMetacarpals: Property.bool(true),\r\n _myJointMesh: Property.mesh(),\r\n _myJointMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._buildTrackedHandHierarchy();\r\n }\r\n\r\n _buildTrackedHandHierarchy() {\r\n this._myTrackedHandMeshObject = this.object.pp_addObject();\r\n\r\n this._myJointMeshObjectList = [];\r\n\r\n for (let jointIDKey in TrackedHandJointID) {\r\n let jointID = TrackedHandJointID[jointIDKey];\r\n if (!this._myHideMetacarpals ||\r\n (jointID != TrackedHandJointID.THUMB_METACARPAL &&\r\n jointID != TrackedHandJointID.INDEX_FINGER_METACARPAL && jointID != TrackedHandJointID.MIDDLE_FINGER_METACARPAL &&\r\n jointID != TrackedHandJointID.RING_FINGER_METACARPAL && jointID != TrackedHandJointID.PINKY_FINGER_METACARPAL)\r\n ) {\r\n let jointObject = this._myTrackedHandMeshObject.pp_addObject();\r\n this._myJointMeshObjectList[jointID] = jointObject;\r\n\r\n jointObject.pp_addComponent(TrackedHandDrawJointComponent,\r\n {\r\n \"_myHandedness\": this._myHandedness,\r\n \"_myJointID\": TrackedHandJointIDIndex[jointIDKey],\r\n \"_myJointMesh\": this._myJointMesh,\r\n \"_myJointMaterial\": this._myJointMaterial,\r\n });\r\n\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ObjectUtils } from \"../../../cauldron/wl/utils/object_utils.js\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class TrackedHandDrawSkinComponent extends Component {\r\n static TypeName = \"pp-tracked-hand-draw-skin\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myHandSkin: Property.skin(null)\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n this._prepareJoints();\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _prepareJoints() {\r\n this._myJoints = [];\r\n\r\n let skinJointIDs = this._myHandSkin.jointIds;\r\n\r\n for (let i = 0; i < skinJointIDs.length; i++) {\r\n this._myJoints[i] = ObjectUtils.wrapObject(skinJointIDs[i]);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nTrackedHandDrawSkinComponent.prototype.update = function () {\r\n let transformQuat = quat2_create();\r\n return function update(dt) {\r\n for (let i = 0; i < this._myJoints.length; i++) {\r\n let jointObject = this._myJoints[i];\r\n\r\n let jointID = jointObject.pp_getName(); // Joint name must match the TrackedHandJointID enum value\r\n let jointPose = Globals.getTrackedHandPose(this._myHandednessType, this.engine).getJointPose(jointID);\r\n\r\n jointObject.pp_setTransformLocalQuat(jointPose.getTransformQuat(transformQuat, null));\r\n }\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { HandednessIndex } from \"../../cauldron/input_types.js\";\r\nimport { GamepadAxesEvent, GamepadAxesID, GamepadButtonEvent, GamepadButtonID } from \"../gamepad_buttons.js\";\r\n\r\nexport class GamepadMeshAnimatorComponent extends Component {\r\n static TypeName = \"pp-gamepad-mesh-animator\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _mySelect: Property.object(null),\r\n _mySqueeze: Property.object(null),\r\n _myThumbstick: Property.object(null),\r\n _myTopButton: Property.object(null),\r\n _myBottomButton: Property.object(null),\r\n _mySelectRotateAngle: Property.float(15),\r\n _mySqueezeRotateAngle: Property.float(11),\r\n _myThumbstickRotateAngle: Property.float(15),\r\n _myThumbstickPressOffset: Property.float(0.000625),\r\n _myTopButtonPressOffset: Property.float(0.0015),\r\n _myBottomButtonPressOffset: Property.float(0.0015),\r\n _myUsePressForSqueeze: Property.bool(false),\r\n _mySqueezePressOffset: Property.float(0.0015)\r\n };\r\n\r\n start() {\r\n let gamepad = null;\r\n if (this._myHandedness == HandednessIndex.LEFT) {\r\n gamepad = Globals.getLeftGamepad(this.engine);\r\n } else {\r\n gamepad = Globals.getRightGamepad(this.engine);\r\n }\r\n\r\n if (this._mySelect != null) {\r\n this._mySelectOriginalRotation = this._mySelect.pp_getRotationLocalQuat();\r\n this._mySelectOriginalLeft = this._mySelect.pp_getLeftLocal();\r\n }\r\n\r\n if (this._mySqueeze != null) {\r\n this._mySqueezeOriginalPosition = this._mySqueeze.pp_getPositionLocal();\r\n this._mySqueezeOriginalRotation = this._mySqueeze.pp_getRotationLocalQuat();\r\n this._mySqueezeOriginalLeft = this._mySqueeze.pp_getLeftLocal();\r\n this._mySqueezeOriginalForward = this._mySqueeze.pp_getForwardLocal();\r\n }\r\n\r\n if (this._myThumbstick != null) {\r\n this._myThumbstickOriginalPosition = this._myThumbstick.pp_getPositionLocal();\r\n this._myThumbstickOriginalRotation = this._myThumbstick.pp_getRotationLocalQuat();\r\n this._myThumbstickOriginalLeft = this._myThumbstick.pp_getLeftLocal();\r\n this._myThumbstickOriginalUp = this._myThumbstick.pp_getUpLocal();\r\n this._myThumbstickOriginalForward = this._myThumbstick.pp_getForwardLocal();\r\n }\r\n\r\n if (this._myTopButton != null) {\r\n this._myTopButtonOriginalPosition = this._myTopButton.pp_getPositionLocal();\r\n this._myTopButtonOriginalUp = this._myTopButton.pp_getUpLocal();\r\n }\r\n\r\n if (this._myBottomButton != null) {\r\n this._myBottomButtonOriginalPosition = this._myBottomButton.pp_getPositionLocal();\r\n this._myBottomButtonOriginalUp = this._myBottomButton.pp_getUpLocal();\r\n }\r\n\r\n // PRESSED\r\n if (this._myThumbstick != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.THUMBSTICK, GamepadButtonEvent.PRESS_START, this, this._thumbstickPressedStart.bind(this));\r\n gamepad.registerButtonEventListener(GamepadButtonID.THUMBSTICK, GamepadButtonEvent.PRESS_END, this, this._thumbstickPressedEnd.bind(this));\r\n }\r\n\r\n if (this._myTopButton != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.TOP_BUTTON, GamepadButtonEvent.PRESS_START, this, this._topButtonPressedStart.bind(this));\r\n gamepad.registerButtonEventListener(GamepadButtonID.TOP_BUTTON, GamepadButtonEvent.PRESS_END, this, this._topButtonPressedEnd.bind(this));\r\n }\r\n\r\n if (this._myBottomButton != null) {\r\n\r\n gamepad.registerButtonEventListener(GamepadButtonID.BOTTOM_BUTTON, GamepadButtonEvent.PRESS_START, this, this._bottomButtonPressedStart.bind(this));\r\n gamepad.registerButtonEventListener(GamepadButtonID.BOTTOM_BUTTON, GamepadButtonEvent.PRESS_END, this, this._bottomButtonPressedEnd.bind(this));\r\n }\r\n\r\n // VALUE CHANGED\r\n if (this._mySelect != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.VALUE_CHANGED, this, this._selectValueChanged.bind(this));\r\n }\r\n\r\n if (this._mySqueeze != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.VALUE_CHANGED, this, this._squeezeValueChanged.bind(this));\r\n }\r\n\r\n // AXES CHANGED\r\n if (this._myThumbstick != null) {\r\n gamepad.registerAxesEventListener(GamepadAxesID.THUMBSTICK, GamepadAxesEvent.AXES_CHANGED, this, this._thumbstickValueChanged.bind(this));\r\n }\r\n }\r\n\r\n _thumbstickPressedStart() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _thumbstickPressedEnd(buttonInfo, gamepad) {\r\n this._myThumbstick.pp_setPositionLocal(this._myThumbstickOriginalPosition);\r\n }\r\n\r\n _topButtonPressedStart(buttonInfo, gamepad) {\r\n this._myTopButton.pp_translateAxisLocal(-this._myTopButtonPressOffset, this._myTopButtonOriginalUp);\r\n }\r\n\r\n _topButtonPressedEnd(buttonInfo, gamepad) {\r\n this._myTopButton.pp_setPositionLocal(this._myTopButtonOriginalPosition);\r\n }\r\n\r\n _bottomButtonPressedStart(buttonInfo, gamepad) {\r\n this._myBottomButton.pp_translateAxisLocal(-this._myBottomButtonPressOffset, this._myBottomButtonOriginalUp);\r\n }\r\n\r\n _bottomButtonPressedEnd(buttonInfo, gamepad) {\r\n this._myBottomButton.pp_setPositionLocal(this._myBottomButtonOriginalPosition);\r\n }\r\n\r\n _selectValueChanged(buttonInfo, gamepad) {\r\n this._mySelect.pp_setRotationLocalQuat(this._mySelectOriginalRotation);\r\n\r\n if (buttonInfo.getValue() > 0.00001) {\r\n this._mySelect.pp_rotateAxisLocal(this._mySelectRotateAngle * buttonInfo.getValue(), this._mySelectOriginalLeft);\r\n }\r\n }\r\n\r\n _squeezeValueChanged(buttonInfo, gamepad) {\r\n this._mySqueeze.pp_setPositionLocal(this._mySqueezeOriginalPosition);\r\n this._mySqueeze.pp_setRotationLocalQuat(this._mySqueezeOriginalRotation);\r\n\r\n if (buttonInfo.getValue() > 0.00001) {\r\n if (this._myUsePressForSqueeze) {\r\n let translation = this._mySqueezePressOffset;\r\n if (this._myHandedness == 1) {\r\n translation *= -1;\r\n }\r\n\r\n this._mySqueeze.pp_translateAxisLocal(translation * buttonInfo.getValue(), this._mySqueezeOriginalLeft);\r\n } else {\r\n let rotation = -this._mySqueezeRotateAngle;\r\n if (this._myHandedness == 1) {\r\n rotation *= -1;\r\n }\r\n\r\n this._mySqueeze.pp_rotateAxisLocal(rotation * buttonInfo.getValue(), this._mySqueezeOriginalForward);\r\n }\r\n }\r\n }\r\n\r\n _thumbstickValueChanged(axesInfo, gamepad) {\r\n this._myThumbstick.pp_setRotationLocalQuat(this._myThumbstickOriginalRotation);\r\n\r\n let leftRotation = this._myThumbstickRotateAngle * axesInfo.myAxes[1];\r\n let forwardRotation = this._myThumbstickRotateAngle * axesInfo.myAxes[0];\r\n\r\n if (Math.abs(leftRotation) > 0.0001) {\r\n this._myThumbstick.pp_rotateAxisLocal(leftRotation, this._myThumbstickOriginalLeft);\r\n }\r\n\r\n if (Math.abs(forwardRotation) > 0.0001) {\r\n this._myThumbstick.pp_rotateAxisLocal(forwardRotation, this._myThumbstickOriginalForward);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nGamepadMeshAnimatorComponent.prototype._thumbstickPressedStart = function () {\r\n let upTranslation = vec3_create();\r\n return function _thumbstickPressedStart(buttonInfo, gamepad) {\r\n // Since thumbstick object rotate you need to specifically use its original up to translate it\r\n this._myThumbstickOriginalUp.vec3_scale(-this._myThumbstickPressOffset, upTranslation);\r\n this._myThumbstick.pp_translateLocal(upTranslation);\r\n };\r\n}();", "import { Alignment, Component, Justification, MeshComponent, Property, TextComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class GamepadControlSchemeComponent extends Component {\r\n static TypeName = \"pp-gamepad-control-scheme\";\r\n static Properties = {\r\n _myShowOnStart: Property.bool(true),\r\n\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n\r\n _mySelectText: Property.string(\"\"),\r\n _mySqueezeText: Property.string(\"\"),\r\n _myThumbstickText: Property.string(\"\"),\r\n _myBottomButtonText: Property.string(\"\"),\r\n _myTopButtonText: Property.string(\"\"),\r\n\r\n _mySelect: Property.object(null),\r\n _mySqueeze: Property.object(null),\r\n _myThumbstick: Property.object(null),\r\n _myBottomButton: Property.object(null),\r\n _myTopButton: Property.object(null),\r\n\r\n _myTextScaleMultiplier: Property.float(1),\r\n _myTextOffsetMultiplier: Property.float(1),\r\n _myLineLengthMultiplier: Property.float(1),\r\n _myLineThicknessMultiplier: Property.float(1),\r\n _myDistanceFromButtonsMultiplier: Property.float(1),\r\n\r\n _myTextMaterial: Property.material(),\r\n _myLineMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._myTextMaterialFinal = (this._myTextMaterial != null) ? this._myTextMaterial : Globals.getDefaultMaterials(this.engine).myText.clone();\r\n this._myLineMaterialFinal = (this._myLineMaterial != null) ? this._myLineMaterial : Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myControlSchemeDirection = (this._myHandednessType == Handedness.LEFT) ? 1 : -1;\r\n\r\n this._myVisible = false;\r\n this._mySetVisibleNextUpdate = false;\r\n\r\n this._createControlScheme();\r\n this.setVisible(this._myShowOnStart);\r\n\r\n this._myVisibleBackup = this._myVisible;\r\n }\r\n\r\n update(dt) {\r\n if (this._mySetVisibleNextUpdate) {\r\n this._mySetVisibleNextUpdate = false;\r\n this.setVisible(false);\r\n this.setVisible(this._myVisibleBackup);\r\n }\r\n }\r\n\r\n onActivate() {\r\n this._mySetVisibleNextUpdate = true;\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myVisible != null) {\r\n this._myVisibleBackup = this._myVisible;\r\n this.setVisible(false);\r\n }\r\n }\r\n\r\n isVisible() {\r\n return this._myVisible;\r\n }\r\n\r\n setVisible(visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myParentObject != null) {\r\n this._myParentObject.pp_setActive(this._myVisible);\r\n\r\n if (this._myVisible) {\r\n this._hideEmptySchemes();\r\n }\r\n }\r\n }\r\n\r\n setSelectText(text) {\r\n this._mySelectText = text;\r\n this._mySelectTextComponent.text = this._mySelectText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setSqueezeText(text) {\r\n this._mySqueezeText = text;\r\n this._mySqueezeTextComponent.text = this._mySqueezeText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setThumbstickText(text) {\r\n this._myThumbstickText = text;\r\n this._myThumbstickTextComponent.text = this._myThumbstickText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setBottomButtonText(text) {\r\n this._myBottomButtonText = text;\r\n this._myBottomButtonTextComponent.text = this._myBottomButtonText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setTopButtonText(text) {\r\n this._myTopButtonText = text;\r\n this._myTopButtonTextComponent.text = this._myTopButtonText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n _createControlScheme() {\r\n this._myParentObject = this.object.pp_addObject();\r\n\r\n let distanceFromButton = 0.02 * this._myDistanceFromButtonsMultiplier;\r\n let lineLength = 0.0935 * this._myLineLengthMultiplier;\r\n\r\n let referenceObject = this._myThumbstick;\r\n\r\n this._mySelectObject = this._myParentObject.pp_addObject();\r\n this._mySelectTextComponent = this._addScheme(this._mySelect, referenceObject,\r\n vec3_create(0, 0, distanceFromButton),\r\n vec3_create(lineLength * this._myControlSchemeDirection, 0, 0),\r\n this._mySelectObject);\r\n this._mySelectTextComponent.text = this._mySelectText;\r\n\r\n this._mySqueezeObject = this._myParentObject.pp_addObject();\r\n this._mySqueezeTextComponent = this._addScheme(this._mySqueeze, referenceObject,\r\n vec3_create(distanceFromButton * this._myControlSchemeDirection, 0, 0),\r\n vec3_create(lineLength * this._myControlSchemeDirection, 0, 0),\r\n this._mySqueezeObject);\r\n this._mySqueezeTextComponent.text = this._mySqueezeText;\r\n\r\n this._myThumbstickObject = this._myParentObject.pp_addObject();\r\n this._myThumbstickTextComponent = this._addScheme(this._myThumbstick, referenceObject,\r\n vec3_create(0, distanceFromButton, 0),\r\n vec3_create(-lineLength * this._myControlSchemeDirection, 0, 0),\r\n this._myThumbstickObject);\r\n this._myThumbstickTextComponent.text = this._myThumbstickText;\r\n\r\n let thumbstickPositionLocal = this._myThumbstick.pp_getPositionLocal();\r\n let thumbstickUpLocal = this._myThumbstick.pp_getUpLocal();\r\n\r\n {\r\n let bottomButtonPositionLocal = this._myBottomButton.pp_getPositionLocal();\r\n let difference = bottomButtonPositionLocal.vec3_sub(thumbstickPositionLocal);\r\n let differenceOnUp = difference.vec3_valueAlongAxis(thumbstickUpLocal);\r\n\r\n this._myBottomButtonObject = this._myParentObject.pp_addObject();\r\n this._myBottomButtonTextComponent = this._addScheme(this._myBottomButton, referenceObject,\r\n vec3_create(0, distanceFromButton - differenceOnUp, 0),\r\n vec3_create(0, 0, -lineLength),\r\n this._myBottomButtonObject);\r\n this._myBottomButtonTextComponent.text = this._myBottomButtonText;\r\n }\r\n\r\n {\r\n let topButtonPositionLocal = this._myTopButton.pp_getPositionLocal();\r\n let difference = topButtonPositionLocal.vec3_sub(thumbstickPositionLocal);\r\n let differenceOnUp = difference.vec3_valueAlongAxis(thumbstickUpLocal);\r\n\r\n this._myTopButtonObject = this._myParentObject.pp_addObject();\r\n this._myTopButtonTextComponent = this._addScheme(this._myTopButton, referenceObject,\r\n vec3_create(0, distanceFromButton - differenceOnUp, 0),\r\n vec3_create(-lineLength * this._myControlSchemeDirection, 0, 0).vec3_rotateAxis(-45 * this._myControlSchemeDirection, vec3_create(0, 1, 0)),\r\n this._myTopButtonObject);\r\n this._myTopButtonTextComponent.text = this._myTopButtonText;\r\n }\r\n }\r\n\r\n _addScheme(buttonObject, referenceObject, startOffset, endOffset, parentObject) {\r\n let buttonPosition = buttonObject.pp_getPositionLocal();\r\n let referenceForward = referenceObject.pp_getForwardLocal();\r\n let referenceRight = referenceObject.pp_getRightLocal();\r\n let referenceUp = referenceObject.pp_getUpLocal();\r\n\r\n let lineStart = buttonPosition.vec3_add(referenceRight.vec3_scale(startOffset[0]));\r\n lineStart.vec3_add(referenceUp.vec3_scale(startOffset[1]), lineStart);\r\n lineStart.vec3_add(referenceForward.vec3_scale(startOffset[2]), lineStart);\r\n\r\n let lineEnd = lineStart.vec3_add(referenceRight.vec3_scale(endOffset[0]));\r\n lineEnd.vec3_add(referenceUp.vec3_scale(endOffset[1]), lineEnd);\r\n lineEnd.vec3_add(referenceForward.vec3_scale(endOffset[2]), lineEnd);\r\n\r\n let textOffset = 0.01 * this._myTextOffsetMultiplier;\r\n let textPosition = lineEnd.vec3_add(referenceForward.vec3_scale(-textOffset));\r\n\r\n this._addLine(lineStart, lineEnd, parentObject);\r\n let textComponent = this._addText(textPosition, referenceForward, referenceUp, parentObject);\r\n\r\n return textComponent;\r\n }\r\n\r\n _addLine(start, end, parentObject) {\r\n let lineDirection = end.vec3_sub(start);\r\n let length = lineDirection.vec3_length();\r\n lineDirection.vec3_normalize(lineDirection);\r\n\r\n let lineParentObject = parentObject.pp_addObject();\r\n let lineObject = lineParentObject.pp_addObject();\r\n\r\n let lineMesh = lineObject.pp_addComponent(MeshComponent);\r\n lineMesh.mesh = Globals.getDefaultMeshes(this.engine).myCylinder;\r\n lineMesh.material = this._myLineMaterialFinal;\r\n\r\n lineParentObject.pp_setPositionLocal(start);\r\n\r\n let thickness = 0.001 * this._myLineThicknessMultiplier;\r\n lineObject.pp_scaleObject(vec3_create(thickness / 2, length / 2, thickness / 2));\r\n\r\n lineObject.pp_setUpLocal(lineDirection);\r\n lineObject.pp_translateObject(vec3_create(0, length / 2, 0));\r\n }\r\n\r\n _addText(position, forward, up, parentObject) {\r\n let textObject = parentObject.pp_addObject();\r\n textObject.pp_setPositionLocal(position);\r\n textObject.pp_lookToLocal(up, forward);\r\n textObject.pp_scaleObject(0.0935 * this._myTextScaleMultiplier);\r\n\r\n let textComponent = textObject.pp_addComponent(TextComponent);\r\n textComponent.alignment = Alignment.Center;\r\n textComponent.justification = Justification.Top;\r\n textComponent.material = this._myTextMaterialFinal;\r\n\r\n return textComponent;\r\n }\r\n\r\n _hideEmptySchemes() {\r\n if (this._mySelectText.length == 0) {\r\n this._mySelectObject.pp_setActive(false);\r\n }\r\n if (this._mySqueezeText.length == 0) {\r\n this._mySqueezeObject.pp_setActive(false);\r\n }\r\n if (this._myThumbstickText.length == 0) {\r\n this._myThumbstickObject.pp_setActive(false);\r\n }\r\n if (this._myBottomButtonText.length == 0) {\r\n this._myBottomButtonObject.pp_setActive(false);\r\n }\r\n if (this._myTopButtonText.length == 0) {\r\n this._myTopButtonObject.pp_setActive(false);\r\n }\r\n }\r\n}", "import { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class VirtualGamepadGamepadCore extends GamepadCore {\r\n\r\n constructor(virtualGamepad, handPose) {\r\n super(handPose);\r\n\r\n this._myVirtualGamepad = virtualGamepad;\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n isGamepadCoreActive() {\r\n return this._myVirtualGamepad.isVisible();\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this._myVirtualGamepad.isButtonPressed(this.getHandedness(), buttonID)) {\r\n this._myButtonData.myPressed = true;\r\n this._myButtonData.myTouched = true;\r\n this._myButtonData.myValue = 1;\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n if (this.isGamepadCoreActive()) {\r\n this._myVirtualGamepad.getAxes(this.getHandedness(), axesID, this._myAxesData);\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n return this._myHapticActuators;\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport let VirtualGamepadIconType = {\r\n NONE: 0,\r\n LABEL: 1,\r\n IMAGE: 2,\r\n DOT: 3,\r\n CIRCLE: 4,\r\n SQUARE: 5,\r\n RING: 6,\r\n FRAME: 7\r\n};\r\n\r\nexport class VirtualGamepadIconParams {\r\n\r\n constructor() {\r\n this.myBackgroundColor = \"\";\r\n this.myBackgroundPressedColor = \"\";\r\n this.myIconColor = \"\";\r\n this.myIconPressedColor = \"\";\r\n\r\n this.myIconType = VirtualGamepadIconType.NONE;\r\n\r\n this.myOverallHoveredBrightness = 1;\r\n\r\n // If icon type is label\r\n\r\n this.myLabel = \"\";\r\n this.myLabelFontSize = 0;\r\n this.myLabelFontFamily = \"\";\r\n this.myLabelFontWeight = \"\";\r\n\r\n // If icon type is image\r\n\r\n this.myImageURL = \"\";\r\n this.myImagePressedBrightness = 1;\r\n }\r\n}\r\n\r\nexport class VirtualGamepadIcon {\r\n\r\n constructor(iconElementParent, iconParams, minSizeMultiplier, scale, engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myParams = iconParams;\r\n\r\n this._myIconContainerElement = null;\r\n this._myBackgroundElement = null;\r\n this._myIconElement = null;\r\n\r\n this._myPressed = false;\r\n\r\n this._myMouseHover = false;\r\n this._myMouseHoverEnabled = true;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build(iconElementParent, minSizeMultiplier, scale);\r\n }\r\n\r\n update(dt) {\r\n if (this._myPressed || !this._myMouseHover || !this._myMouseHoverEnabled) {\r\n this._myIconContainerElement.style.filter = \"none\";\r\n } else {\r\n this._myIconContainerElement.style.filter = \"brightness(\" + this._myParams.myOverallHoveredBrightness + \")\";\r\n }\r\n }\r\n\r\n reset() {\r\n this.setPressed(false);\r\n this._myMouseHover = false;\r\n this._myIconContainerElement.style.filter = \"none\";\r\n }\r\n\r\n setPressed(pressed) {\r\n if (this._myPressed != pressed) {\r\n this._myPressed = pressed;\r\n\r\n if (this._myPressed) {\r\n this._myBackgroundElement.style.fill = this._myParams.myBackgroundPressedColor;\r\n if (this._myIconElement != null) {\r\n if (this._myIconElement.style.strokeWidth.length > 0) {\r\n this._myIconElement.style.stroke = this._myParams.myIconPressedColor;\r\n } else {\r\n this._myIconElement.style.fill = this._myParams.myIconPressedColor;\r\n }\r\n\r\n if (this._myParams.myIconType == VirtualGamepadIconType.IMAGE) {\r\n this._myIconElement.style.filter = \"brightness(\" + this._myParams.myImagePressedBrightness + \")\";\r\n }\r\n }\r\n } else {\r\n this._myBackgroundElement.style.fill = this._myParams.myBackgroundColor;\r\n if (this._myIconElement != null) {\r\n if (this._myIconElement.style.strokeWidth.length > 0) {\r\n this._myIconElement.style.stroke = this._myParams.myIconColor;\r\n } else {\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n }\r\n\r\n if (this._myParams.myIconType == VirtualGamepadIconType.IMAGE) {\r\n this._myIconElement.style.filter = \"none\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n onMouseEnter() {\r\n this._myMouseHover = true;\r\n }\r\n\r\n onMouseLeave() {\r\n this._myMouseHover = false;\r\n }\r\n\r\n setMouseHoverEnabled(enabled) {\r\n this._myMouseHoverEnabled = enabled;\r\n }\r\n\r\n _build(iconElementParent, minSizeMultiplier, scale) {\r\n this._myIconContainerElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n this._myIconContainerElement.style.position = \"absolute\";\r\n this._myIconContainerElement.style.width = \"100%\";\r\n this._myIconContainerElement.style.height = \"100%\";\r\n iconElementParent.appendChild(this._myIconContainerElement);\r\n\r\n this._myBackgroundElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myBackgroundElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myBackgroundElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myBackgroundElement.setAttributeNS(null, \"r\", \"50%\");\r\n this._myBackgroundElement.style.fill = this._myParams.myBackgroundColor;\r\n this._myIconContainerElement.appendChild(this._myBackgroundElement);\r\n\r\n switch (this._myParams.myIconType) {\r\n case VirtualGamepadIconType.NONE:\r\n break;\r\n case VirtualGamepadIconType.LABEL:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"50%\");\r\n this._myIconElement.style.textAlign = \"center\";\r\n this._myIconElement.style.textAnchor = \"middle\";\r\n this._myIconElement.style.dominantBaseline = \"central\";\r\n this._myIconElement.style.alignmentBaseline = \"central\";\r\n this._myIconElement.style.fontFamily = this._myParams.myLabelFontFamily;\r\n this._myIconElement.style.fontWeight = this._myParams.myLabelFontWeight;\r\n this._myIconElement.style.fontSize = this._createSizeValue(this._myParams.myLabelFontSize * scale, minSizeMultiplier);\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.textContent = this._myParams.myLabel;\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.IMAGE:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"0%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"0%\");\r\n this._myIconElement.setAttribute(\"href\", this._myParams.myImageURL);\r\n this._myIconElement.style.width = \"100%\";\r\n this._myIconElement.style.height = \"100%\";\r\n this._myIconElement.style.filter = \"none\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.DOT:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myIconElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"r\", \"17.5%\");\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.CIRCLE:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myIconElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"r\", \"24%\");\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.SQUARE:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"28%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"28%\");\r\n this._myIconElement.setAttributeNS(null, \"rx\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"ry\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"width\", \"44%\");\r\n this._myIconElement.setAttributeNS(null, \"height\", \"44%\");\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.transformOrigin = \"center\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.RING:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myIconElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"r\", \"20%\");\r\n this._myIconElement.style.fill = \"#00000000\";\r\n this._myIconElement.style.stroke = this._myParams.myIconColor;\r\n this._myIconElement.style.strokeWidth = \"10%\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.FRAME:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"31.5%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"31.5%\");\r\n this._myIconElement.setAttributeNS(null, \"rx\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"ry\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"width\", \"37%\");\r\n this._myIconElement.setAttributeNS(null, \"height\", \"37%\");\r\n this._myIconElement.style.fill = \"#00000000\";\r\n this._myIconElement.style.stroke = this._myParams.myIconColor;\r\n this._myIconElement.style.strokeWidth = \"10%\";\r\n this._myIconElement.style.transformOrigin = \"center\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n }\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n _invertColors() {\r\n if (this._myIconElement.style.strokeWidth.length > 0) {\r\n this._myBackgroundElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.stroke = this._myParams.myBackgroundColor;\r\n } else {\r\n this._myBackgroundElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.fill = this._myParams.myBackgroundColor;\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myIconContainerElement.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { VirtualGamepadIconParams, VirtualGamepadIconType } from \"./virtual_gamepad_icon.js\";\r\n\r\nexport class VirtualGamepadButtonParams {\r\n\r\n constructor() {\r\n this.myIconParams = new VirtualGamepadIconParams();\r\n }\r\n}\r\n\r\nexport class VirtualGamepadThumbstickParams {\r\n\r\n constructor() {\r\n this.myBackgroundColor = \"\";\r\n\r\n this.myMaxDistanceFromCenterMultiplier = 1;\r\n\r\n this.myReleaseTransitionSeconds = 0.2;\r\n this.myMoveTransitionSeconds = 0;\r\n\r\n this.myIncludeBackgroundToDetection = false; // You can press the background of the icon to move the thumbstick, makes it harder to miss it\r\n\r\n this.myIconParams = new VirtualGamepadIconParams();\r\n }\r\n}\r\n\r\nexport class VirtualGamepadParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myShowOnDesktop = false;\r\n this.myShowOnMobile = false;\r\n this.myShowOnHeadset = false; // Not 100% reliable, this is true if the device supports XR and it is Desktop\r\n\r\n this.myAutoUpdateVisibility = false;\r\n\r\n this.myOpacity = 1;\r\n\r\n this.myInterfaceScale = 1;\r\n this.myMarginScale = 1;\r\n\r\n this.myReleaseOnPointerLeave = true; // If mouse leaves the canvas it will be like it was released\r\n this.myStopPropagatingMouseDownEvents = true; // This can be used to make it so the rest of the game will ignore clicks on the virtual gamepad\r\n\r\n // Advanced Params\r\n\r\n this.myButtonParams = [];\r\n this.myButtonParams[Handedness.LEFT] = [];\r\n this.myButtonParams[Handedness.RIGHT] = [];\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SELECT] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SQUEEZE] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.THUMBSTICK] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.TOP_BUTTON] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON] = new VirtualGamepadButtonParams();\r\n\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SELECT] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SQUEEZE] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.THUMBSTICK] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON] = new VirtualGamepadButtonParams();\r\n\r\n this.myThumbstickParams = [];\r\n this.myThumbstickParams[Handedness.LEFT] = [];\r\n this.myThumbstickParams[Handedness.RIGHT] = [];\r\n this.myThumbstickParams[Handedness.LEFT][GamepadAxesID.THUMBSTICK] = new VirtualGamepadThumbstickParams();\r\n this.myThumbstickParams[Handedness.RIGHT][GamepadAxesID.THUMBSTICK] = new VirtualGamepadThumbstickParams();\r\n\r\n this.myButtonsOrder = [];\r\n this.myButtonsOrder[Handedness.LEFT] = [null, null, null, null, null];\r\n this.myButtonsOrder[Handedness.RIGHT] = [null, null, null, null, null];\r\n\r\n this.myThumbsticksOrder = [];\r\n this.myThumbsticksOrder[Handedness.LEFT] = [null];\r\n this.myThumbsticksOrder[Handedness.RIGHT] = [null];\r\n\r\n // Even More Advanced Params\r\n\r\n this.myValidPointerButtons = [];\r\n\r\n this.myMarginLeft = 0;\r\n this.myMarginRight = 0;\r\n this.myMarginBottom = 0;\r\n\r\n this.myThumbstickSize = 0;\r\n\r\n this.myButtonSize = 0;\r\n this.myButtonsRingRadius = 0;\r\n this.myButtonsRingStartAngle = 0;\r\n this.myButtonsRingEndAngle = 0;\r\n\r\n this.myFontSize = 0;\r\n\r\n this.myMinSizeMultiplier = 0; // Can be used to specify a min size based on the view width for when the view is in portrait mode\r\n\r\n this.myDisableMouseHoverWhenPressed = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n\r\n defaultConfig() {\r\n this.myShowOnMobile = true;\r\n this.myAutoUpdateVisibility = true;\r\n\r\n this.myOpacity = 0.5;\r\n\r\n // Params\r\n\r\n let backgroundColor = \"#616161\";\r\n let iconColor = \"#e0e0e0\";\r\n\r\n let buttonHoveredBrightness = 0.75;\r\n let thumbstickHoveredBrightness = 0.75;\r\n\r\n let thumbstickIncludeBackgroundToDetection = true;\r\n\r\n for (let handedness in this.myButtonParams) {\r\n for (let gamepadButtonID in this.myButtonParams[handedness]) {\r\n let buttonParams = this.myButtonParams[handedness][gamepadButtonID];\r\n buttonParams.myIconParams.myBackgroundColor = backgroundColor;\r\n buttonParams.myIconParams.myBackgroundPressedColor = iconColor;\r\n buttonParams.myIconParams.myIconColor = iconColor;\r\n buttonParams.myIconParams.myIconPressedColor = backgroundColor;\r\n buttonParams.myIconParams.myOverallHoveredBrightness = buttonHoveredBrightness;\r\n }\r\n }\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SQUEEZE].myIconParams.myIconType = VirtualGamepadIconType.SQUARE;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SQUEEZE].myIconParams.myIconType = VirtualGamepadIconType.SQUARE;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SELECT].myIconParams.myIconType = VirtualGamepadIconType.FRAME;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SELECT].myIconParams.myIconType = VirtualGamepadIconType.FRAME;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.TOP_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.CIRCLE;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.CIRCLE;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.RING;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.RING;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.THUMBSTICK].myIconParams.myIconType = VirtualGamepadIconType.DOT;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.THUMBSTICK].myIconParams.myIconType = VirtualGamepadIconType.DOT;\r\n\r\n for (let handedness in this.myThumbstickParams) {\r\n for (let gamepadAxesID in this.myThumbstickParams[handedness]) {\r\n let thumbstickParams = this.myThumbstickParams[handedness][gamepadAxesID];\r\n thumbstickParams.myBackgroundColor = backgroundColor;\r\n thumbstickParams.myIconParams.myBackgroundColor = iconColor;\r\n thumbstickParams.myIconParams.myBackgroundPressedColor = iconColor;\r\n thumbstickParams.myIconParams.myIconColor = backgroundColor;\r\n thumbstickParams.myIconParams.myIconPressedColor = backgroundColor;\r\n thumbstickParams.myIconParams.myOverallHoveredBrightness = thumbstickHoveredBrightness;\r\n\r\n thumbstickParams.myIncludeBackgroundToDetection = thumbstickIncludeBackgroundToDetection;\r\n }\r\n }\r\n\r\n // Orders\r\n\r\n this.myButtonsOrder[Handedness.LEFT][0] = [Handedness.LEFT, GamepadButtonID.SQUEEZE];\r\n this.myButtonsOrder[Handedness.LEFT][1] = [Handedness.LEFT, GamepadButtonID.SELECT];\r\n this.myButtonsOrder[Handedness.LEFT][2] = [Handedness.LEFT, GamepadButtonID.TOP_BUTTON];\r\n this.myButtonsOrder[Handedness.LEFT][3] = [Handedness.LEFT, GamepadButtonID.BOTTOM_BUTTON];\r\n this.myButtonsOrder[Handedness.LEFT][4] = [Handedness.LEFT, GamepadButtonID.THUMBSTICK];\r\n\r\n this.myButtonsOrder[Handedness.RIGHT][0] = [Handedness.RIGHT, GamepadButtonID.SQUEEZE];\r\n this.myButtonsOrder[Handedness.RIGHT][1] = [Handedness.RIGHT, GamepadButtonID.SELECT];\r\n this.myButtonsOrder[Handedness.RIGHT][2] = [Handedness.RIGHT, GamepadButtonID.TOP_BUTTON];\r\n this.myButtonsOrder[Handedness.RIGHT][3] = [Handedness.RIGHT, GamepadButtonID.BOTTOM_BUTTON];\r\n this.myButtonsOrder[Handedness.RIGHT][4] = [Handedness.RIGHT, GamepadButtonID.THUMBSTICK];\r\n\r\n this.myThumbsticksOrder[Handedness.LEFT][0] = [Handedness.LEFT, GamepadAxesID.THUMBSTICK];\r\n this.myThumbsticksOrder[Handedness.RIGHT][0] = [Handedness.RIGHT, GamepadAxesID.THUMBSTICK];\r\n\r\n // Sizes\r\n\r\n this.myMarginLeft = 3;\r\n this.myMarginRight = 3;\r\n this.myMarginBottom = 3;\r\n\r\n this.myThumbstickSize = 15;\r\n\r\n this.myButtonSize = 5;\r\n this.myButtonsRingRadius = 12;\r\n this.myButtonsRingStartAngle = 385;\r\n this.myButtonsRingEndAngle = 245;\r\n\r\n this.myMinSizeMultiplier = 5 / 3;\r\n\r\n // Cauldron\r\n\r\n this.myDisableMouseHoverWhenPressed = true;\r\n this.myValidPointerButtons = [0];\r\n }\r\n}", "import { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { VirtualGamepadIcon } from \"./virtual_gamepad_icon.js\";\r\n\r\nexport class VirtualGamepadVirtualButton {\r\n\r\n constructor(buttonElementParent, virtualGamepadParams, virtualButtonHandedness, virtualButtonIndex, gamepadButtonHandedness, gamepadButtonID) {\r\n this._myButtonElement = null;\r\n this._myButtonIcon = null;\r\n this._myButtonDetectionElement = null;\r\n\r\n this._myActive = true;\r\n\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n\r\n this._myPressed = false;\r\n\r\n this._myVirtualGamepadParams = virtualGamepadParams;\r\n this._myParams = this._myVirtualGamepadParams.myButtonParams[gamepadButtonHandedness][gamepadButtonID];\r\n\r\n this._build(buttonElementParent, virtualButtonHandedness, virtualButtonIndex);\r\n\r\n this._myPointerDownEventListener = this._onPointerDown.bind(this, this._myVirtualGamepadParams.myStopPropagatingPointerDownEvents);\r\n this._myPointerUpEventListener = this._onPointerUp.bind(this);\r\n this._myPointerLeaveEventListener = this._onPointerLeave.bind(this);\r\n this._myMouseEnterEventListener = this._onButtonEnter.bind(this);\r\n this._myMouseLeaveEventListener = this._onButtonLeave.bind(this);\r\n\r\n this._myButtonDetectionElement.addEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n document.body.addEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n\r\n if (this._myVirtualGamepadParams.myReleaseOnPointerLeave) {\r\n document.body.addEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n }\r\n\r\n this._myButtonDetectionElement.addEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myButtonDetectionElement.addEventListener(\"mouseleave\", this._myMouseLeaveEventListener);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isPressed() {\r\n return this._myActive && this._myPressed;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this.reset();\r\n this._myButtonIcon.reset();\r\n }\r\n\r\n this._myActive = active;\r\n }\r\n\r\n setMouseHoverEnabled(hoverActive) {\r\n this._myButtonIcon.setMouseHoverEnabled(hoverActive);\r\n }\r\n\r\n reset() {\r\n this._myButtonIcon.setPressed(false);\r\n\r\n this._myPressed = false;\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n }\r\n\r\n update(dt) {\r\n this._myButtonIcon.update(dt);\r\n }\r\n\r\n _onPointerDown(stopPropagatingPointerDownEvents, event) {\r\n if (!this._myActive) return;\r\n if (this._myPressed) return;\r\n if (!this._myVirtualGamepadParams.myValidPointerButtons.pp_hasEqual(event.button)) return;\r\n\r\n if (stopPropagatingPointerDownEvents) {\r\n event.stopPropagation();\r\n }\r\n event.preventDefault();\r\n\r\n this._myButtonIcon.setPressed(true);\r\n\r\n this._myPointerID = event.pointerId;\r\n this._myPointerButton = event.button;\r\n\r\n this._myPressed = true;\r\n }\r\n\r\n _onPointerUp(event) {\r\n if (!this._myActive) return;\r\n if (!this._myPressed) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n if (this._myPointerButton != null && this._myPointerButton != event.button) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onPointerLeave(event) {\r\n if (!this._myActive) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onButtonEnter(event) {\r\n if (!this._myActive) return;\r\n\r\n this._myButtonIcon.onMouseEnter(event);\r\n }\r\n\r\n _onButtonLeave(event) {\r\n if (!this._myActive) return;\r\n\r\n this._myButtonIcon.onMouseLeave(event);\r\n }\r\n\r\n _build(buttonElementParent, virtualButtonHandedness, virtualButtonIndex) {\r\n // Config variables used for the sizes and the like\r\n\r\n let buttonSize = this._myVirtualGamepadParams.myButtonSize * this._myVirtualGamepadParams.myInterfaceScale;\r\n let buttonsRingRadius = this._myVirtualGamepadParams.myButtonsRingRadius * this._myVirtualGamepadParams.myInterfaceScale;\r\n\r\n let thumbstickSize = this._myVirtualGamepadParams.myThumbstickSize * this._myVirtualGamepadParams.myInterfaceScale;\r\n\r\n let marginBottom = this._myVirtualGamepadParams.myMarginBottom * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginLeft = this._myVirtualGamepadParams.myMarginLeft * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginRight = this._myVirtualGamepadParams.myMarginRight * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n\r\n let buttonRingStartAngle = this._myVirtualGamepadParams.myButtonsRingStartAngle;\r\n let buttonRingEndAngle = this._myVirtualGamepadParams.myButtonsRingEndAngle;\r\n\r\n let minSizeMultiplier = Math.max(1, this._myVirtualGamepadParams.myMinSizeMultiplier / this._myVirtualGamepadParams.myInterfaceScale);\r\n\r\n let buttonsAmount = this._myVirtualGamepadParams.myButtonsOrder[Handedness.LEFT].length;\r\n\r\n let angleStep = (buttonRingEndAngle - buttonRingStartAngle) / (buttonsAmount - 1);\r\n\r\n let currentAngle = Math.pp_angleClamp(buttonRingStartAngle + angleStep * virtualButtonIndex);\r\n\r\n if (virtualButtonHandedness == Handedness.RIGHT) {\r\n currentAngle = 270 + (270 - currentAngle);\r\n currentAngle = Math.pp_angleClamp(currentAngle, true);\r\n }\r\n\r\n let counterAngle = 360 - currentAngle;\r\n\r\n // Actual button creation\r\n\r\n this._myButtonContainer = document.createElement(\"div\");\r\n this._myButtonContainer.style.position = \"absolute\";\r\n this._myButtonContainer.style.width = this._createSizeValue(buttonSize, minSizeMultiplier);\r\n this._myButtonContainer.style.height = this._createSizeValue(buttonSize, minSizeMultiplier);\r\n\r\n let centerOnThumbstickBottom = marginBottom + thumbstickSize / 2 - buttonSize / 2;\r\n\r\n this._myButtonContainer.style.bottom = this._createSizeValue(centerOnThumbstickBottom, minSizeMultiplier);\r\n\r\n if (virtualButtonHandedness == Handedness.LEFT) {\r\n let centerOnThumbstickLeft = marginLeft + thumbstickSize / 2 - buttonSize / 2;\r\n this._myButtonContainer.style.left = this._createSizeValue(centerOnThumbstickLeft, minSizeMultiplier);\r\n } else {\r\n let centerOnThumbstickRight = marginRight + thumbstickSize / 2 - buttonSize / 2;\r\n this._myButtonContainer.style.right = this._createSizeValue(centerOnThumbstickRight, minSizeMultiplier);\r\n }\r\n\r\n this._myButtonContainer.style.transform = \"rotate(\" + currentAngle + \"deg) translateX(\" + this._createSizeValue(buttonsRingRadius, minSizeMultiplier) + \")\";\r\n buttonElementParent.appendChild(this._myButtonContainer);\r\n\r\n this._myButtonElement = document.createElement(\"div\");\r\n this._myButtonElement.style.position = \"absolute\";\r\n this._myButtonElement.style.width = \"100%\";\r\n this._myButtonElement.style.height = \"100%\";\r\n this._myButtonElement.style.transform = \"rotate(\" + counterAngle + \"deg)\";\r\n this._myButtonContainer.appendChild(this._myButtonElement);\r\n\r\n this._myButtonIcon = new VirtualGamepadIcon(this._myButtonElement, this._myParams.myIconParams, minSizeMultiplier, this._myVirtualGamepadParams.myInterfaceScale, this._myVirtualGamepadParams.myEngine);\r\n\r\n let buttonElementStill = document.createElement(\"div\");\r\n buttonElementStill.style.position = \"absolute\";\r\n buttonElementStill.style.width = \"100%\";\r\n buttonElementStill.style.height = \"100%\";\r\n buttonElementStill.style.transform = \"rotate(\" + counterAngle + \"deg)\";\r\n this._myButtonContainer.appendChild(buttonElementStill);\r\n\r\n let buttonDetectionElementSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n buttonDetectionElementSVG.style.position = \"absolute\";\r\n buttonDetectionElementSVG.style.width = \"100%\";\r\n buttonDetectionElementSVG.style.height = \"100%\";\r\n buttonElementStill.appendChild(buttonDetectionElementSVG);\r\n\r\n let buttonDetectionElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n buttonDetectionElement.setAttributeNS(null, \"cx\", \"50%\");\r\n buttonDetectionElement.setAttributeNS(null, \"cy\", \"50%\");\r\n buttonDetectionElement.setAttributeNS(null, \"r\", \"50%\");\r\n buttonDetectionElement.style.fill = \"#00000000\";\r\n buttonDetectionElementSVG.appendChild(buttonDetectionElement);\r\n\r\n this._myButtonDetectionElement = buttonDetectionElement;\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myButtonDetectionElement.removeEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n\r\n document.body.removeEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.removeEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n\r\n this._myButtonDetectionElement.removeEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myButtonDetectionElement.removeEventListener(\"mouseleave\", this._myPointerUpEventLis_myMouseLeaveEventListenertener);\r\n\r\n this._myButtonIcon.destroy();\r\n\r\n this._myButtonContainer.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { vec2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { VirtualGamepadIcon } from \"./virtual_gamepad_icon.js\";\r\n\r\nexport class VirtualGamepadVirtualThumbstick {\r\n\r\n constructor(thumbstickElementParent, virtualGamepadParams, virtualThumbstickHandedness, gamepadThumbstickHandedness, gamepadAxesID) {\r\n this._myThumbstickElement = null;\r\n this._myThumbstickIcon = null;\r\n this._myThumbstickBackground = null;\r\n this._myThumbstickDetectionElement = null;\r\n\r\n this._myActive = true;\r\n\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n\r\n this._myThumbstickDragStartPosition = vec2_create();\r\n\r\n this._myAxes = vec2_create();\r\n this._myPressed = false;\r\n\r\n this._myVirtualGamepadParams = virtualGamepadParams;\r\n this._myParams = this._myVirtualGamepadParams.myThumbstickParams[gamepadThumbstickHandedness][gamepadAxesID];\r\n\r\n this._build(thumbstickElementParent, virtualThumbstickHandedness);\r\n\r\n this._myPointerDownEventListener = this._onPointerDown.bind(this, this._myVirtualGamepadParams.myStopPropagatingPointerDownEvents);\r\n this._myPointerUpEventListener = this._onPointerUp.bind(this);\r\n this._myPointerMoveEventListener = this._onPointerMove.bind(this);\r\n this._myPointerLeaveEventListener = this._onPointerLeave.bind(this);\r\n this._myMouseEnterEventListener = this._onThumbstickEnter.bind(this);\r\n this._myMouseLeaveEventListener = this._onThumbstickLeave.bind(this);\r\n\r\n this._myThumbstickDetectionElement.addEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n document.body.addEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.addEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n\r\n if (this._myVirtualGamepadParams.myReleaseOnPointerLeave) {\r\n document.body.addEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n }\r\n\r\n this._myThumbstickDetectionElement.addEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myThumbstickDetectionElement.addEventListener(\"mouseleave\", this._myMouseLeaveEventListener);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isPressed() {\r\n return this._myActive && this._myPressed;\r\n }\r\n\r\n getAxes() {\r\n return this._myAxes;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this.reset();\r\n this._myThumbstickIcon.reset();\r\n }\r\n\r\n this._myActive = active;\r\n }\r\n\r\n setMouseHoverEnabled(hoverActive) {\r\n this._myThumbstickIcon.setMouseHoverEnabled(hoverActive);\r\n }\r\n\r\n reset() {\r\n this._myThumbstickIcon.setPressed(false);\r\n\r\n this._myAxes[0] = 0;\r\n this._myAxes[1] = 0;\r\n this._myPressed = false;\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n\r\n this._myThumbstickElement.style.transition = \"all \" + this._myParams.myReleaseTransitionSeconds + \"s ease 0s\";\r\n this._myThumbstickElement.style.transform = \"translate(0px, 0px)\";\r\n }\r\n\r\n update(dt) {\r\n this._myThumbstickIcon.update(dt);\r\n }\r\n\r\n _onPointerDown(stopPropagatingPointerDownEvents, event) {\r\n if (!this._myActive) return;\r\n if (this._myPressed) return;\r\n if (!this._myVirtualGamepadParams.myValidPointerButtons.pp_hasEqual(event.button)) return;\r\n\r\n if (stopPropagatingPointerDownEvents) {\r\n event.stopPropagation();\r\n }\r\n event.preventDefault();\r\n\r\n this._myThumbstickIcon.setPressed(true);\r\n\r\n this._myPointerID = event.pointerId;\r\n this._myPointerButton = event.button;\r\n\r\n this._myThumbstickDragStartPosition[0] = event.clientX;\r\n this._myThumbstickDragStartPosition[1] = event.clientY;\r\n\r\n this._myPressed = true;\r\n }\r\n\r\n _onPointerUp(event) {\r\n if (!this._myActive) return;\r\n if (!this._myPressed) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n if (this._myPointerButton != null && this._myPointerButton != event.button) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onPointerLeave(event) {\r\n if (!this._myActive) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onThumbstickEnter(event) {\r\n this._myThumbstickIcon.onMouseEnter(event);\r\n }\r\n\r\n _onThumbstickLeave(event) {\r\n this._myThumbstickIcon.onMouseLeave(event);\r\n }\r\n\r\n _onPointerMove(event) {\r\n if (!this._myActive) return;\r\n if (!this._myPressed) return;\r\n\r\n if (event.pointerId != this._myPointerID) return;\r\n\r\n let mouseX = event.clientX;\r\n let mouseY = event.clientY;\r\n\r\n let backgroundRect = this._myThumbstickBackground.getBoundingClientRect();\r\n let maxDistanceFromCenter = (backgroundRect.width / 2) * this._myParams.myMaxDistanceFromCenterMultiplier;\r\n\r\n let xDiff = mouseX - this._myThumbstickDragStartPosition[0];\r\n let yDiff = mouseY - this._myThumbstickDragStartPosition[1];\r\n\r\n let angle = Math.atan2(yDiff, xDiff);\r\n let distanceFromDragStart = Math.min(maxDistanceFromCenter, Math.hypot(xDiff, yDiff));\r\n\r\n let translateThumbstickX = distanceFromDragStart * Math.cos(angle);\r\n let translateThumbstickY = distanceFromDragStart * Math.sin(angle);\r\n\r\n this._myThumbstickElement.style.transition = \"all \" + this._myParams.myMoveTransitionSeconds + \"s ease-out 0s\";\r\n this._myThumbstickElement.style.transform = \"translate(\" + translateThumbstickX + \"px, \" + translateThumbstickY + \"px)\";\r\n\r\n this._myAxes[0] = translateThumbstickX / maxDistanceFromCenter;\r\n this._myAxes[1] = -(translateThumbstickY / maxDistanceFromCenter);\r\n }\r\n\r\n _build(thumbstickElementParent, virtualThumbstickHandedness) {\r\n // Config variables used for the sizes and the like\r\n\r\n let thumbstickSize = this._myVirtualGamepadParams.myThumbstickSize * this._myVirtualGamepadParams.myInterfaceScale;\r\n\r\n let marginBottom = this._myVirtualGamepadParams.myMarginBottom * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginLeft = this._myVirtualGamepadParams.myMarginLeft * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginRight = this._myVirtualGamepadParams.myMarginRight * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n\r\n let minSizeMultiplier = Math.max(1, this._myVirtualGamepadParams.myMinSizeMultiplier / this._myVirtualGamepadParams.myInterfaceScale);\r\n\r\n // Actual thumbstick creation\r\n\r\n this._myThumbstickContainer = document.createElement(\"div\");\r\n this._myThumbstickContainer.style.position = \"absolute\";\r\n this._myThumbstickContainer.style.width = this._createSizeValue(thumbstickSize, minSizeMultiplier);\r\n this._myThumbstickContainer.style.height = this._createSizeValue(thumbstickSize, minSizeMultiplier);\r\n this._myThumbstickContainer.style.bottom = this._createSizeValue(marginBottom, minSizeMultiplier);\r\n\r\n if (virtualThumbstickHandedness == Handedness.LEFT) {\r\n this._myThumbstickContainer.style.left = this._createSizeValue(marginLeft, minSizeMultiplier);\r\n } else {\r\n this._myThumbstickContainer.style.right = this._createSizeValue(marginRight, minSizeMultiplier);\r\n }\r\n\r\n thumbstickElementParent.appendChild(this._myThumbstickContainer);\r\n\r\n let thumbstickContainerSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n thumbstickContainerSVG.style.position = \"absolute\";\r\n thumbstickContainerSVG.style.width = \"100%\";\r\n thumbstickContainerSVG.style.height = \"100%\";\r\n this._myThumbstickContainer.appendChild(thumbstickContainerSVG);\r\n\r\n this._myThumbstickBackground = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myThumbstickBackground.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myThumbstickBackground.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myThumbstickBackground.setAttributeNS(null, \"r\", \"48%\");\r\n this._myThumbstickBackground.style.fill = this._myParams.myBackgroundColor;\r\n thumbstickContainerSVG.appendChild(this._myThumbstickBackground);\r\n\r\n this._myThumbstickElement = document.createElement(\"div\");\r\n this._myThumbstickElement.style.position = \"absolute\";\r\n this._myThumbstickElement.style.width = \"34%\";\r\n this._myThumbstickElement.style.height = \"34%\";\r\n this._myThumbstickElement.style.top = \"33%\";\r\n this._myThumbstickElement.style.left = \"33%\";\r\n this._myThumbstickContainer.appendChild(this._myThumbstickElement);\r\n\r\n this._myThumbstickIcon = new VirtualGamepadIcon(this._myThumbstickElement, this._myParams.myIconParams, minSizeMultiplier, this._myVirtualGamepadParams.myScale, this._myVirtualGamepadParams.myEngine);\r\n\r\n if (this._myParams.myIncludeBackgroundToDetection) {\r\n let thumbstickBackgroundDetectionElementSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n thumbstickBackgroundDetectionElementSVG.style.position = \"absolute\";\r\n thumbstickBackgroundDetectionElementSVG.style.width = \"100%\";\r\n thumbstickBackgroundDetectionElementSVG.style.height = \"100%\";\r\n this._myThumbstickContainer.appendChild(thumbstickBackgroundDetectionElementSVG);\r\n\r\n let thumbstickBackgroundDetectionElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n thumbstickBackgroundDetectionElement.setAttributeNS(null, \"cx\", \"50%\");\r\n thumbstickBackgroundDetectionElement.setAttributeNS(null, \"cy\", \"50%\");\r\n thumbstickBackgroundDetectionElement.setAttributeNS(null, \"r\", \"48%\");\r\n thumbstickBackgroundDetectionElement.style.fill = \"#00000000\";\r\n thumbstickBackgroundDetectionElementSVG.appendChild(thumbstickBackgroundDetectionElement);\r\n\r\n this._myThumbstickDetectionElement = thumbstickBackgroundDetectionElement;\r\n } else {\r\n let thumbstickElementStill = document.createElement(\"div\");\r\n thumbstickElementStill.style.position = \"absolute\";\r\n thumbstickElementStill.style.width = \"34%\";\r\n thumbstickElementStill.style.height = \"34%\";\r\n thumbstickElementStill.style.top = \"33%\";\r\n thumbstickElementStill.style.left = \"33%\";\r\n this._myThumbstickContainer.appendChild(thumbstickElementStill);\r\n\r\n let thumbstickDetectionElementSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n thumbstickDetectionElementSVG.style.position = \"absolute\";\r\n thumbstickDetectionElementSVG.style.width = \"100%\";\r\n thumbstickDetectionElementSVG.style.height = \"100%\";\r\n thumbstickElementStill.appendChild(thumbstickDetectionElementSVG);\r\n\r\n let thumbstickDetectionElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n thumbstickDetectionElement.setAttributeNS(null, \"cx\", \"50%\");\r\n thumbstickDetectionElement.setAttributeNS(null, \"cy\", \"50%\");\r\n thumbstickDetectionElement.setAttributeNS(null, \"r\", \"50%\");\r\n thumbstickDetectionElement.style.fill = \"#00000000\";\r\n thumbstickDetectionElementSVG.appendChild(thumbstickDetectionElement);\r\n\r\n this._myThumbstickDetectionElement = thumbstickDetectionElement;\r\n }\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myThumbstickDetectionElement.removeEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n\r\n document.body.removeEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.removeEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n document.body.removeEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n\r\n this._myThumbstickDetectionElement.removeEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myThumbstickDetectionElement.removeEventListener(\"mouseleave\", this._myPointerUpEventLis_myMouseLeaveEventListenertener);\r\n\r\n this._myThumbstickIcon.destroy();\r\n\r\n this._myThumbstickContainer.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { BrowserUtils } from \"../../../cauldron/utils/browser_utils.js\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { vec2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { VirtualGamepadParams } from \"./virtual_gamepad_params.js\";\r\nimport { VirtualGamepadVirtualButton } from \"./virtual_gamepad_virtual_button.js\";\r\nimport { VirtualGamepadVirtualThumbstick } from \"./virtual_gamepad_virtual_thumbstick.js\";\r\n\r\nexport class VirtualGamepad {\r\n\r\n constructor(params = new VirtualGamepadParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = true;\r\n this._myVirtualGamepadContainer = null;\r\n\r\n this._myVirtualGamepadVirtualButtons = [];\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT] = [];\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT] = [];\r\n\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.SELECT] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.SQUEEZE] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.THUMBSTICK] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.TOP_BUTTON] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON] = null;\r\n\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.SELECT] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.SQUEEZE] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.THUMBSTICK] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON] = null;\r\n\r\n this._myButtonsAmount = this._myVirtualGamepadVirtualButtons[Handedness.LEFT].length;\r\n\r\n this._myVirtualGamepadVirtualThumbsticks = [];\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.LEFT] = [];\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.RIGHT] = [];\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.LEFT][GamepadAxesID.THUMBSTICK] = null;\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.RIGHT][GamepadAxesID.THUMBSTICK] = null;\r\n\r\n this._myGestureStartEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isVisible() {\r\n return this._myVisible;\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myVirtualGamepadContainer != null) {\r\n if (this._myVisible) {\r\n this._myVirtualGamepadContainer.style.display = \"block\";\r\n } else {\r\n this._myVirtualGamepadContainer.style.display = \"none\";\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.setActive(this._myVisible);\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.setActive(this._myVisible);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n isButtonPressed(handedness, gamepadButtonID) {\r\n if (!this._myVisible) return false;\r\n\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n return button.isPressed();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getAxes(handedness, gamepadAxesID, outAxes = vec2_create(0, 0)) {\r\n if (!this._myVisible) return outAxes;\r\n\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n outAxes.vec2_copy(thumbstick.getAxes());\r\n }\r\n\r\n return outAxes;\r\n }\r\n\r\n start() {\r\n this._buildVirtualGamepad();\r\n\r\n let currentVisible = this._myVisible;\r\n this._myVisible = !this._myVisible;\r\n this.setVisible(currentVisible);\r\n }\r\n\r\n update(dt) {\r\n if (this._myParams.myAutoUpdateVisibility) {\r\n if (XRUtils.isSessionActive(this._myParams.myEngine) && XRUtils.isVRSupported(this._myParams.myEngine)) {\r\n this.setVisible(false);\r\n } else if (this._myParams.myShowOnDesktop && BrowserUtils.isDesktop() && !XRUtils.isVRSupported(this._myParams.myEngine)) {\r\n this.setVisible(true);\r\n } else if (this._myParams.myShowOnHeadset && BrowserUtils.isDesktop() && XRUtils.isVRSupported(this._myParams.myEngine)) {\r\n this.setVisible(true);\r\n } else if (this._myParams.myShowOnMobile && BrowserUtils.isMobile()) {\r\n this.setVisible(true);\r\n } else {\r\n this.setVisible(false);\r\n }\r\n }\r\n\r\n if (this._myVisible) {\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.update(dt);\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.update(dt);\r\n }\r\n }\r\n }\r\n\r\n this._setMouseHoverEnabled(!(this._myParams.myDisableMouseHoverWhenPressed && this._isAnyElementPressed()));\r\n }\r\n }\r\n\r\n _buildVirtualGamepad() {\r\n this._setupDocumentBody();\r\n\r\n this._myVirtualGamepadContainer = document.createElement(\"div\");\r\n this._myVirtualGamepadContainer.style.display = \"block\";\r\n this._myVirtualGamepadContainer.style.opacity = this._myParams.myOpacity.toString();\r\n document.body.appendChild(this._myVirtualGamepadContainer);\r\n\r\n let leftDiv = document.createElement(\"div\");\r\n this._myVirtualGamepadContainer.appendChild(leftDiv);\r\n\r\n let rightDiv = document.createElement(\"div\");\r\n this._myVirtualGamepadContainer.appendChild(rightDiv);\r\n\r\n let buttonsAmount = this._myParams.myButtonsOrder[Handedness.LEFT].length;\r\n for (let i = 0; i < buttonsAmount; i++) {\r\n if (this._myParams.myButtonsOrder[Handedness.LEFT][i] != null) {\r\n let gamepadButtonHandedness = this._myParams.myButtonsOrder[Handedness.LEFT][i][0];\r\n let gamepadButtonID = this._myParams.myButtonsOrder[Handedness.LEFT][i][1];\r\n this._buildButton(leftDiv, Handedness.LEFT, i, gamepadButtonHandedness, gamepadButtonID);\r\n }\r\n\r\n if (this._myParams.myButtonsOrder[Handedness.RIGHT][i] != null) {\r\n let gamepadButtonHandedness = this._myParams.myButtonsOrder[Handedness.RIGHT][i][0];\r\n let gamepadButtonID = this._myParams.myButtonsOrder[Handedness.RIGHT][i][1];\r\n this._buildButton(rightDiv, Handedness.RIGHT, i, gamepadButtonHandedness, gamepadButtonID);\r\n }\r\n }\r\n\r\n let thumbsticksAmount = this._myParams.myThumbsticksOrder[Handedness.LEFT].length;\r\n for (let i = 0; i < thumbsticksAmount; i++) {\r\n if (this._myParams.myThumbsticksOrder[Handedness.LEFT][i] != null) {\r\n let gamepadThumbstickHandedness = this._myParams.myThumbsticksOrder[Handedness.LEFT][i][0];\r\n let gamepadAxesID = this._myParams.myThumbsticksOrder[Handedness.LEFT][i][1];\r\n this._buildThumbstick(leftDiv, Handedness.LEFT, gamepadThumbstickHandedness, gamepadAxesID);\r\n }\r\n\r\n if (this._myParams.myThumbsticksOrder[Handedness.RIGHT][i] != null) {\r\n let gamepadThumbstickHandedness = this._myParams.myThumbsticksOrder[Handedness.RIGHT][i][0];\r\n let gamepadAxesID = this._myParams.myThumbsticksOrder[Handedness.RIGHT][i][1];\r\n this._buildThumbstick(rightDiv, Handedness.RIGHT, gamepadThumbstickHandedness, gamepadAxesID);\r\n }\r\n }\r\n }\r\n\r\n _setupDocumentBody() {\r\n document.body.style.overflow = \"hidden\";\r\n document.body.style.userSelect = \"none\";\r\n document.body.style.webkitUserSelect = \"none\";\r\n document.body.style.webkitTapHighlightColor = \"transparent\";\r\n document.body.style.touchAction = \"none\";\r\n\r\n this._myGestureStartEventListener = function (e) {\r\n e.preventDefault();\r\n };\r\n document.addEventListener(\"gesturestart\", this._myGestureStartEventListener);\r\n }\r\n\r\n _buildButton(buttonElementParent, virtualButtonHandedness, virtualButtonIndex, gamepadButtonHandedness, gamepadButtonID) {\r\n let virtualGamepadVirtualButton = new VirtualGamepadVirtualButton(buttonElementParent, this._myParams, virtualButtonHandedness, virtualButtonIndex, gamepadButtonHandedness, gamepadButtonID);\r\n this._myVirtualGamepadVirtualButtons[gamepadButtonHandedness][gamepadButtonID] = virtualGamepadVirtualButton;\r\n }\r\n\r\n _buildThumbstick(thumbstickElementParent, virtualThumbstickHandedness, gamepadThumbstickHandedness, gamepadAxesID) {\r\n let virtualGamepadVirtualThumbstick = new VirtualGamepadVirtualThumbstick(thumbstickElementParent, this._myParams, virtualThumbstickHandedness, gamepadThumbstickHandedness, gamepadAxesID);\r\n this._myVirtualGamepadVirtualThumbsticks[gamepadThumbstickHandedness][gamepadAxesID] = virtualGamepadVirtualThumbstick;\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n _isAnyElementPressed() {\r\n let anyElementPressed = false;\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null && button.isPressed()) {\r\n anyElementPressed = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!anyElementPressed) {\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null && thumbstick.isPressed()) {\r\n anyElementPressed = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return anyElementPressed;\r\n }\r\n\r\n _setMouseHoverEnabled(hoverActive) {\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.setMouseHoverEnabled(hoverActive);\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.setMouseHoverEnabled(hoverActive);\r\n }\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n document.removeEventListener(\"gesturestart\", this._myGestureStartEventListener);\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.destroy();\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.destroy();\r\n }\r\n }\r\n }\r\n\r\n this._myVirtualGamepadContainer.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { VirtualGamepadGamepadCore } from \"../gamepad_cores/virtual_gamepad_gamepad_core.js\";\r\nimport { VirtualGamepad } from \"./virtual_gamepad.js\";\r\nimport { VirtualGamepadParams } from \"./virtual_gamepad_params.js\";\r\n\r\nexport class VirtualGamepadComponent extends Component {\r\n static TypeName = \"pp-virtual-gamepad\";\r\n static Properties = {\r\n _myShowOnDesktop: Property.bool(false), // You may have to enable headset too\r\n _myShowOnMobile: Property.bool(true),\r\n _myShowOnHeadset: Property.bool(false), // Not 100% reliable, this is true if the device supports XR and it is Desktop\r\n _myAddToUniversalGamepad: Property.bool(true),\r\n _myOpacity: Property.float(0.5),\r\n _myIconColor: Property.string(\"#e0e0e0\"),\r\n _myBackgroundColor: Property.string(\"#616161\"),\r\n _myInterfaceScale: Property.float(1),\r\n _myMarginScale: Property.float(1),\r\n\r\n ADVANCED_PARAMS_BELOW: Property.string(\"\"),\r\n\r\n _myLabelFontSize: Property.float(2),\r\n _myLabelFontFamily: Property.string(\"sans-serif\"),\r\n _myLabelFontWeight: Property.string(\"bold\"),\r\n _myImagePressedBrightness: Property.float(0.5),\r\n\r\n _myLeftSelectButtonVisible: Property.bool(true),\r\n _myLeftSelectButtonOrderIndex: Property.int(1),\r\n _myLeftSelectButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Frame\"),\r\n _myLeftSelectButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftSqueezeButtonVisible: Property.bool(true),\r\n _myLeftSqueezeButtonOrderIndex: Property.int(0),\r\n _myLeftSqueezeButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Square\"),\r\n _myLeftSqueezeButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftThumbstickButtonVisible: Property.bool(true),\r\n _myLeftThumbstickButtonOrderIndex: Property.int(4),\r\n _myLeftThumbstickButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Dot\"),\r\n _myLeftThumbstickButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftTopButtonVisible: Property.bool(true),\r\n _myLeftTopButtonOrderIndex: Property.int(2),\r\n _myLeftTopButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Circle\"),\r\n _myLeftTopButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftBottomButtonVisible: Property.bool(true),\r\n _myLeftBottomButtonOrderIndex: Property.int(3),\r\n _myLeftBottomButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Ring\"),\r\n _myLeftBottomButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightSelectButtonVisible: Property.bool(true),\r\n _myRightSelectButtonOrderIndex: Property.int(1),\r\n _myRightSelectButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Frame\"),\r\n _myRightSelectButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightSqueezeButtonVisible: Property.bool(true),\r\n _myRightSqueezeButtonOrderIndex: Property.int(0),\r\n _myRightSqueezeButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Square\"),\r\n _myRightSqueezeButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightThumbstickButtonVisible: Property.bool(true),\r\n _myRightThumbstickButtonOrderIndex: Property.int(4),\r\n _myRightThumbstickButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Dot\"),\r\n _myRightThumbstickButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightTopButtonVisible: Property.bool(true),\r\n _myRightTopButtonOrderIndex: Property.int(2),\r\n _myRightTopButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Circle\"),\r\n _myRightTopButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightBottomButtonVisible: Property.bool(true),\r\n _myRightBottomButtonOrderIndex: Property.int(3),\r\n _myRightBottomButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Ring\"),\r\n _myRightBottomButtonIconLabelOrImageUrl: Property.string(\"\")\r\n };\r\n\r\n start() {\r\n let params = new VirtualGamepadParams(this.engine);\r\n params.defaultConfig();\r\n\r\n for (let handedness in params.myButtonParams) {\r\n for (let gamepadButtonID in params.myButtonParams[handedness]) {\r\n let buttonParams = params.myButtonParams[handedness][gamepadButtonID];\r\n buttonParams.myIconParams.myBackgroundColor = this._myBackgroundColor;\r\n buttonParams.myIconParams.myBackgroundPressedColor = this._myIconColor;\r\n buttonParams.myIconParams.myIconColor = this._myIconColor;\r\n buttonParams.myIconParams.myIconPressedColor = this._myBackgroundColor;\r\n }\r\n }\r\n\r\n for (let handedness in params.myThumbstickParams) {\r\n for (let gamepadAxesID in params.myThumbstickParams[handedness]) {\r\n let thumbstickParams = params.myThumbstickParams[handedness][gamepadAxesID];\r\n thumbstickParams.myBackgroundColor = this._myBackgroundColor;\r\n thumbstickParams.myIconParams.myBackgroundColor = this._myIconColor;\r\n thumbstickParams.myIconParams.myBackgroundPressedColor = this._myIconColor;\r\n thumbstickParams.myIconParams.myIconColor = this._myBackgroundColor;\r\n thumbstickParams.myIconParams.myIconPressedColor = this._myBackgroundColor;\r\n }\r\n }\r\n\r\n params.myOpacity = this._myOpacity;\r\n\r\n params.myInterfaceScale = this._myInterfaceScale;\r\n params.myMarginScale = this._myMarginScale;\r\n\r\n params.myShowOnDesktop = this._myShowOnDesktop;\r\n params.myShowOnMobile = this._myShowOnMobile;\r\n params.myShowOnHeadset = this._myShowOnHeadset;\r\n\r\n if (params.myShowOnDesktop || params.myShowOnMobile || params.myShowOnHeadset) {\r\n params.myAutoUpdateVisibility = true;\r\n } else {\r\n params.myAutoUpdateVisibility = false;\r\n }\r\n\r\n this._advancedConfig(params);\r\n\r\n this._myVirtualGamepad = new VirtualGamepad(params);\r\n this._myVirtualGamepad.setVisible(false);\r\n\r\n this._myVirtualGamepad.start();\r\n\r\n this._myFirstUpdate = true;\r\n\r\n this._myLeftVirtualGamepadGamepadCore = null;\r\n this._myRightVirtualGamepadGamepadCore = null;\r\n }\r\n\r\n update(dt) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n\r\n if (this._myAddToUniversalGamepad) {\r\n this._myLeftVirtualGamepadGamepadCore = new VirtualGamepadGamepadCore(this._myVirtualGamepad, Globals.getLeftGamepad(this.engine).getGamepadCore(\"pp_left_xr_gamepad\").getHandPose());\r\n this._myRightVirtualGamepadGamepadCore = new VirtualGamepadGamepadCore(this._myVirtualGamepad, Globals.getRightGamepad(this.engine).getGamepadCore(\"pp_right_xr_gamepad\").getHandPose());\r\n\r\n Globals.getLeftGamepad(this.engine).addGamepadCore(\"pp_left_virtual_gamepad\", this._myLeftVirtualGamepadGamepadCore);\r\n Globals.getRightGamepad(this.engine).addGamepadCore(\"pp_right_virtual_gamepad\", this._myRightVirtualGamepadGamepadCore);\r\n }\r\n }\r\n\r\n this._myVirtualGamepad.update(dt);\r\n }\r\n\r\n _advancedConfig(params) {\r\n params.myButtonsOrder[Handedness.LEFT] = [null, null, null, null, null];\r\n params.myButtonsOrder[Handedness.RIGHT] = [null, null, null, null, null];\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.SELECT];\r\n buttonParams.myIconParams.myIconType = this._myLeftSelectButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftSelectButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftSelectButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.SELECT];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.SQUEEZE];\r\n buttonParams.myIconParams.myIconType = this._myLeftSqueezeButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftSqueezeButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftSqueezeButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.SQUEEZE];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.THUMBSTICK];\r\n buttonParams.myIconParams.myIconType = this._myLeftThumbstickButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftThumbstickButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftThumbstickButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.THUMBSTICK];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.TOP_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myLeftTopButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftTopButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftTopButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.TOP_BUTTON];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myLeftBottomButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftBottomButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftBottomButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.BOTTOM_BUTTON];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.SELECT];\r\n buttonParams.myIconParams.myIconType = this._myRightSelectButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightSelectButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightSelectButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.SELECT];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.SQUEEZE];\r\n buttonParams.myIconParams.myIconType = this._myRightSqueezeButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightSqueezeButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightSqueezeButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.SQUEEZE];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.THUMBSTICK];\r\n buttonParams.myIconParams.myIconType = this._myRightThumbstickButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightThumbstickButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightThumbstickButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.THUMBSTICK];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myRightTopButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightTopButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightTopButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.TOP_BUTTON];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myRightBottomButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightBottomButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightBottomButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.BOTTOM_BUTTON];\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n Globals.getLeftGamepad(this.engine)?.removeGamepadCore(\"pp_left_virtual_gamepad\");\r\n Globals.getRightGamepad(this.engine)?.removeGamepadCore(\"pp_right_virtual_gamepad\");\r\n\r\n this._myLeftVirtualGamepadGamepadCore.destroy();\r\n this._myRightVirtualGamepadGamepadCore.destroy();\r\n\r\n this._myVirtualGamepad.destroy();\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class SetPlayerHeightComponent extends Component {\r\n static TypeName = \"pp-set-player-height\";\r\n static Properties = {\r\n _myEyesHeight: Property.float(1.65),\r\n _mySetOnlyOnStart: Property.bool(false)\r\n };\r\n\r\n start() {\r\n let localPosition = this.object.pp_getPositionLocal();\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], this._myEyesHeight, localPosition[2]));\r\n\r\n this._myHeightSetOnce = false;\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this.engine);\r\n }\r\n\r\n _onXRSessionStart() {\r\n if (this.active && (!this._mySetOnlyOnStart || !this._myHeightSetOnce)) {\r\n let localPosition = this.object.pp_getPositionLocal();\r\n if (XRUtils.isReferenceSpaceFloorBased(this.engine)) {\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], 0, localPosition[2]));\r\n } else {\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], this._myEyesHeight, localPosition[2]));\r\n }\r\n\r\n this._myHeightSetOnce = true;\r\n }\r\n }\r\n\r\n _onXRSessionEnd() {\r\n if (this.active && !this._mySetOnlyOnStart) {\r\n let localPosition = this.object.pp_getPositionLocal();\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], this._myEyesHeight, localPosition[2]));\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class SetHandLocalTransformComponent extends Component {\r\n static TypeName = \"pp-set-hand-local-transform\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\")\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n Globals.getHandPose(this._myHandednessType, this.engine).registerPoseUpdatedEventListener(this, this.onPoseUpdated.bind(this));\r\n }\r\n\r\n onPoseUpdated(dt, pose) {\r\n // Implemented outside class definition\r\n }\r\n\r\n onDestroy() {\r\n Globals.getHandPose(this._myHandednessType, this.engine)?.unregisterPoseUpdatedEventListener(this);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nSetHandLocalTransformComponent.prototype.onPoseUpdated = function () {\r\n let handPoseTransform = quat2_create();\r\n return function onPoseUpdated(dt, pose) {\r\n if (this.active) {\r\n if (XRUtils.isSessionActive(this.engine)) {\r\n if (pose.isValid()) {\r\n this.object.pp_setTransformLocalQuat(pose.getTransformQuat(handPoseTransform, null));\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Component } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create, quat_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { BasePose } from \"../base_pose.js\";\r\n\r\nexport class SetHeadLocalTransformComponent extends Component {\r\n public static override TypeName = \"pp-set-head-local-transform\";\r\n\r\n public override start(): void {\r\n Globals.getHeadPose(this.engine)!.registerPoseUpdatedEventListener(this, this.onPoseUpdated.bind(this));\r\n }\r\n\r\n private static readonly _onPoseUpdatedSV =\r\n {\r\n cameraNonXRRotation: quat_create(),\r\n cameraNonXRUp: vec3_create(),\r\n cameraNonXRPosition: vec3_create(),\r\n headPoseTransform: quat2_create()\r\n };\r\n public onPoseUpdated(dt: number, pose: Readonly): void {\r\n if (this.active) {\r\n if (!XRUtils.isSessionActive(this.engine)) {\r\n const cameraNonXR = Globals.getPlayerObjects(this.engine)!.myCameraNonXR!;\r\n\r\n const cameraNonXRRotation = SetHeadLocalTransformComponent._onPoseUpdatedSV.cameraNonXRRotation;\r\n cameraNonXR.pp_getRotationLocalQuat(cameraNonXRRotation);\r\n\r\n if (Globals.isPoseForwardFixed(this.engine)) {\r\n const cameraNonXRUp = SetHeadLocalTransformComponent._onPoseUpdatedSV.cameraNonXRUp;\r\n (cameraNonXRRotation as any).quat_rotateAxisRadians(Math.PI, (cameraNonXRRotation as any).quat_getUp(cameraNonXRUp), cameraNonXRRotation);\r\n }\r\n\r\n const cameraNonXRPosition = SetHeadLocalTransformComponent._onPoseUpdatedSV.cameraNonXRPosition;\r\n this.object.pp_setPositionLocal(cameraNonXR.pp_getPositionLocal(cameraNonXRPosition));\r\n this.object.pp_setRotationLocalQuat(cameraNonXRRotation);\r\n } else {\r\n if (pose.isValid()) {\r\n const headPoseTransform = SetHeadLocalTransformComponent._onPoseUpdatedSV.headPoseTransform;\r\n this.object.pp_setTransformLocalQuat(pose.getTransformQuat(headPoseTransform, null));\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override onDestroy(): void {\r\n Globals.getHeadPose(this.engine)?.unregisterPoseUpdatedEventListener(this);\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class SetTrackedHandJointLocalTransformComponent extends Component {\r\n static TypeName = \"pp-set-tracked-hand-joint-local-transform\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _mySetLocalScaleAsJointRadius: Property.bool(false),\r\n _myJointID: Property.enum(\r\n [\r\n \"Wrist\",\r\n \"Thumb Metacarpal\", \"Thumb Phalanx Proximal\", \"Thumb Phalanx Distal\", \"Thumb Tip\",\r\n \"Index Metacarpal\", \"Index Phalanx Proximal\", \"Index Phalanx Intermediate\", \"Index Phalanx Distal\", \"Index Tip\",\r\n \"Middle Metacarpal\", \"Middle Phalanx Proximal\", \"Middle Phalanx Intermediate\", \"Middle Phalanx Distal\", \"Middle Tip\",\r\n \"Ring Metacarpal\", \"Ring Phalanx Proximal\", \"Ring Phalanx Intermediate\", \"Ring Phalanx Distal\", \"Ring Tip\",\r\n \"Pinky Metacarpal\", \"Pinky Phalanx Proximal\", \"Pinky Phalanx Intermediate\", \"Pinky Phalanx Distal\", \"Pinky Tip\"\r\n ],\r\n \"Wrist\")\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myJointIDType = InputUtils.getJointIDByIndex(this._myJointID);\r\n\r\n Globals.getTrackedHandPose(this._myHandednessType, this.engine).getJointPose(this._myJointIDType).registerPoseUpdatedEventListener(this, this.onPoseUpdated.bind(this));\r\n }\r\n\r\n onPoseUpdated(dt, pose) {\r\n // Implemented outside class definition\r\n }\r\n\r\n onDestroy() {\r\n Globals.getTrackedHandPose(this._myHandednessType, this.engine)?.getJointPose(this._myJointIDType)?.unregisterPoseUpdatedEventListener(this);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nSetTrackedHandJointLocalTransformComponent.prototype.onPoseUpdated = function () {\r\n let jointPoseTransform = quat2_create();\r\n return function onPoseUpdated(dt, pose) {\r\n if (this.active) {\r\n if (XRUtils.isSessionActive(this.engine)) {\r\n if (pose.isValid()) {\r\n this.object.pp_setTransformLocalQuat(pose.getTransformQuat(jointPoseTransform, null));\r\n\r\n if (this._mySetLocalScaleAsJointRadius) {\r\n this.object.pp_setScaleLocal(pose.getJointRadius());\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class CopyHandTransformComponent extends Component {\r\n static TypeName = \"pp-copy-hand-transform\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\")\r\n };\r\n\r\n init() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n }\r\n\r\n update(dt) {\r\n let hand = Globals.getPlayerObjects(this.engine).myHands[this._myHandednessType];\r\n this.object.pp_setTransformQuat(hand.pp_getTransformQuat());\r\n this.object.pp_setScale(hand.pp_getScale());\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class CopyHeadTransformComponent extends Component {\r\n static TypeName = \"pp-copy-head-transform\";\r\n static Properties = {};\r\n\r\n update(dt) {\r\n let head = Globals.getPlayerObjects(this.engine).myHead;\r\n this.object.pp_setTransformQuat(head.pp_getTransformQuat());\r\n this.object.pp_setScale(head.pp_getScale());\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class CopyPlayerTransformComponent extends Component {\r\n static TypeName = \"pp-copy-player-transform\";\r\n static Properties = {};\r\n\r\n update(dt) {\r\n let player = Globals.getPlayerObjects(this.engine).myPlayer;\r\n this.object.pp_setTransformQuat(player.pp_getTransformQuat());\r\n this.object.pp_setScale(player.pp_getScale());\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class CopyReferenceSpaceTransformComponent extends Component {\r\n static TypeName = \"pp-copy-reference-space-transform\";\r\n static Properties = {};\r\n\r\n update(dt) {\r\n let referenceSpace = Globals.getPlayerObjects(this.engine).myReferenceSpace;\r\n this.object.pp_setTransformQuat(referenceSpace.pp_getTransformQuat());\r\n this.object.pp_setScale(referenceSpace.pp_getScale());\r\n }\r\n}", "export let ToolHandedness = {\r\n NONE: null,\r\n LEFT: \"left\",\r\n RIGHT: \"right\"\r\n};\r\n\r\nexport let ToolInputSourceType = {\r\n NONE: null,\r\n GAMEPAD: 0,\r\n TRACKED_HAND: 1\r\n};", "import { Component, MeshComponent, Property, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Cursor, CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { FingerCursorComponent } from \"../../../input/cauldron/components/finger_cursor_component.js\";\r\nimport { InputUtils } from \"../../../input/cauldron/input_utils.js\";\r\nimport { quat2_create, vec3_create, vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class ToolCursorComponent extends Component {\r\n static TypeName = \"pp-tool-cursor\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myApplyDefaultCursorOffset: Property.bool(true),\r\n _myPulseOnHover: Property.bool(false),\r\n _myShowFingerCursor: Property.bool(false),\r\n _myUpdatePointerCursorStyle: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n this._myCursorPositionDefaultOffset = vec3_create(0, -0.035, 0.05);\r\n this._myCursorRotationDefaultOffset = vec3_create(30, 0, 0);\r\n\r\n this._myCursorMeshScale = vec3_create(0.0025, 0.0025, 0.0025);\r\n this._myCursorColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this._myCursorTargetCollisionGroup = 7; // Keep this in sync with Widgets \r\n\r\n this._myStarted = false;\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myToolCursorObject = this.object.pp_addObject();\r\n\r\n this._myCursorObjectXR = this._myToolCursorObject.pp_addObject();\r\n\r\n if (this._myApplyDefaultCursorOffset) {\r\n this._myCursorObjectXR.pp_setPositionLocal(this._myCursorPositionDefaultOffset);\r\n this._myCursorObjectXR.pp_rotateObject(this._myCursorRotationDefaultOffset);\r\n }\r\n\r\n {\r\n this._myCursorMeshobject = this._myCursorObjectXR.pp_addObject();\r\n this._myCursorMeshobject.pp_setScale(this._myCursorMeshScale);\r\n\r\n let cursorMeshComponent = this._myCursorMeshobject.pp_addComponent(MeshComponent);\r\n cursorMeshComponent.mesh = Globals.getDefaultMeshes(this.engine).mySphere;\r\n cursorMeshComponent.material = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n cursorMeshComponent.material.color = this._myCursorColor;\r\n\r\n this._myCursorComponentXR = this._myCursorObjectXR.pp_addComponent(Cursor, {\r\n \"collisionGroup\": this._myCursorTargetCollisionGroup,\r\n \"handedness\": this._myHandedness + 1,\r\n \"cursorObject\": this._myCursorMeshobject,\r\n \"styleCursor\": false\r\n });\r\n\r\n this._myCursorComponentXR.rayCastMode = 0; // Collision\r\n if (this._myPulseOnHover) {\r\n this._myCursorComponentXR.globalTarget.onHover.add(this._pulseOnHover.bind(this), { id: this });\r\n }\r\n }\r\n\r\n this._myCursorObjectNonXR = this._myToolCursorObject.pp_addObject();\r\n\r\n {\r\n this._myCursorComponentNonXR = this._myCursorObjectNonXR.pp_addComponent(Cursor, {\r\n \"collisionGroup\": this._myCursorTargetCollisionGroup,\r\n \"handedness\": this._myHandedness + 1,\r\n \"styleCursor\": this._myUpdatePointerCursorStyle\r\n });\r\n\r\n this._myCursorComponentNonXR.rayCastMode = 0; // Collision\r\n if (this._myPulseOnHover) {\r\n this._myCursorComponentNonXR.globalTarget.onHover.add(this._pulseOnHover.bind(this), { id: this });\r\n }\r\n this._myCursorComponentNonXR.pp_setViewComponent(Globals.getPlayerObjects(this.engine).myCameraNonXR.pp_getComponent(ViewComponent));\r\n }\r\n\r\n let fingerCursorMeshObject = null;\r\n let fingerCollisionSize = 0.0125;\r\n\r\n if (this._myShowFingerCursor) {\r\n fingerCursorMeshObject = this._myToolCursorObject.pp_addObject();\r\n\r\n let meshComponent = fingerCursorMeshObject.pp_addComponent(MeshComponent);\r\n meshComponent.mesh = Globals.getDefaultMeshes(this.engine).mySphere;\r\n meshComponent.material = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n meshComponent.material.color = this._myCursorColor;\r\n\r\n fingerCursorMeshObject.pp_setScale(fingerCollisionSize);\r\n }\r\n\r\n this._myFingerCursorObject = this._myToolCursorObject.pp_addObject();\r\n this._myFingerCursorComponent = this._myFingerCursorObject.pp_addComponent(FingerCursorComponent, {\r\n \"_myHandedness\": this._myHandedness,\r\n \"_myMultipleClicksEnabled\": true,\r\n \"_myCollisionGroup\": this._myCursorTargetCollisionGroup,\r\n \"_myCollisionSize\": fingerCollisionSize,\r\n \"_myCursorObject\": fingerCursorMeshObject\r\n });\r\n\r\n this._myCursorComponentXR.active = false;\r\n this._myCursorComponentNonXR.active = false;\r\n this._myFingerCursorComponent.active = false;\r\n\r\n this._myStarted = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isUsingHand() {\r\n let usingHand = false;\r\n\r\n if (XRUtils.getSession(this.engine) && XRUtils.getSession(this.engine).inputSources != null) {\r\n for (let i = 0; i < XRUtils.getSession(this.engine).inputSources.length; i++) {\r\n let input = XRUtils.getSession(this.engine).inputSources[i];\r\n if (input.hand && input.handedness == this._myHandednessType) {\r\n usingHand = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return usingHand;\r\n }\r\n\r\n _pulseOnHover(object) {\r\n let targetComponent = object.pp_getComponent(CursorTarget);\r\n\r\n if (targetComponent && !targetComponent.isSurface) {\r\n if (this._myHandedness == 0) {\r\n if (Globals.getLeftGamepad(this.engine) != null) {\r\n Globals.getLeftGamepad(this.engine).pulse(0.4, 0);\r\n }\r\n } else {\r\n if (Globals.getRightGamepad(this.engine) != null) {\r\n Globals.getRightGamepad(this.engine).pulse(0.4, 0);\r\n }\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myStarted) {\r\n this._myCursorComponentXR.globalTarget.onHover.remove(this);\r\n this._myCursorComponentNonXR.globalTarget.onHover.remove(this);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nToolCursorComponent.prototype.update = function () {\r\n let transformQuat = quat2_create();\r\n return function update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n let usingHand = this._isUsingHand();\r\n\r\n this._myFingerCursorComponent.active = usingHand;\r\n\r\n if (usingHand) {\r\n this._myCursorComponentXR.active = false;\r\n this._myCursorComponentNonXR.active = false;\r\n } else {\r\n if (XRUtils.isSessionActive(this.engine)) {\r\n this._myCursorComponentXR.active = !usingHand;\r\n this._myCursorComponentNonXR.active = false;\r\n } else {\r\n this._myCursorComponentNonXR.active = !usingHand;\r\n this._myCursorComponentXR.active = false;\r\n\r\n this._myCursorObjectNonXR.pp_setTransformQuat(Globals.getPlayerObjects(this.engine).myCameraNonXR.pp_getTransformQuat(transformQuat));\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Alignment, Collider, Justification } from \"@wonderlandengine/api\";\r\nimport { vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { ConsoleVRWidgetMessageType } from \"./console_vr_types.js\";\r\n\r\nexport class ConsoleVRWidgetConfig {\r\n\r\n constructor() {\r\n this._setupBuildConfig();\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n _setupBuildConfig() {\r\n // General\r\n this.myBackgroundColor = vec4_create(46 / 255, 46 / 255, 46 / 255, 1);\r\n\r\n this.myCursorTargetCollisionCollider = Collider.Box;\r\n this.myCursorTargetCollisionGroup = 7; // Keep this in sync with Tool Cursor\r\n this.myCursorTargetCollisionThickness = 0.001;\r\n\r\n this.myDefaultTextColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this.myTextAlignment = Alignment.Center;\r\n this.myTextJustification = Justification.Middle;\r\n this.myTextColor = this.myDefaultTextColor;\r\n\r\n this.myMessageTypeColors = [];\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.LOG] = this.myDefaultTextColor;\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.ERROR] = vec4_create(255 / 255, 40 / 255, 40 / 255, 1);\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.WARN] = vec4_create(250 / 255, 220 / 255, 40 / 255, 1);\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.DEBUG] = vec4_create(60 / 255, 200 / 255, 255 / 255, 1);\r\n\r\n // Messages\r\n this.myMessagesPanelPosition = vec3_create(0, 0.075, 0);\r\n\r\n this.myMessagesBackgroundScale = vec3_create(0.34, 0.15, 1);\r\n\r\n {\r\n let xPaddingPercentage = 0.03;\r\n let yPaddingPercentage = xPaddingPercentage * this.myMessagesBackgroundScale[0] / this.myMessagesBackgroundScale[1] * 0.8; // A bit less padding\r\n let xPosition = -this.myMessagesBackgroundScale[0] + this.myMessagesBackgroundScale[0] * xPaddingPercentage;\r\n let yPosition = this.myMessagesBackgroundScale[1] - this.myMessagesBackgroundScale[1] * yPaddingPercentage;\r\n this.myMessagesTextsPanelPosition = vec3_create(xPosition, yPosition, 0.007);\r\n }\r\n this.myMessagesTextsPanelScale = vec3_create(0.1, 0.1, 0.1);\r\n\r\n this.myMessagesTextStartString = \".\\n\"; // To avoid issue with text component padding\r\n this.myMessagesTextAlignment = Alignment.Left;\r\n this.myMessagesTextJustification = Justification.Top;\r\n\r\n this.myMessagesTextPositions = [];\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.LOG] = vec3_create(0, 0, 0.0002);\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.ERROR] = vec3_create(0, 0, 0);\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.WARN] = vec3_create(0, 0, 0);\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.DEBUG] = vec3_create(0, 0, 0);\r\n\r\n this.myMessagesTextColors = [];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.LOG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.LOG];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.ERROR] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.ERROR];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.WARN] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.WARN];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.DEBUG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.DEBUG];\r\n\r\n // Buttons \r\n this.myButtonsPanelPosition = vec3_create(0, -0.11, 0.015);\r\n\r\n this.myButtonBackgroundScale = vec3_create(0.04, 0.02, 1);\r\n\r\n this.myButtonTextPosition = vec3_create(0, 0, 0.007);\r\n this.myButtonTextScale = vec3_create(0.18, 0.18, 0.18);\r\n\r\n this.myButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myButtonCursorTargetPosition[2] = this.myButtonTextPosition[2];\r\n\r\n this.myButtonsCollisionCollider = this.myCursorTargetCollisionCollider;\r\n this.myButtonsCollisionGroup = this.myCursorTargetCollisionGroup;\r\n this.myButtonsCollisionExtents = this.myButtonBackgroundScale.pp_clone();\r\n this.myButtonsCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myClearButtonTextLabel = \"clear\";\r\n this.myUpButtonTextLabel = \"up\";\r\n this.myDownButtonTextLabel = \"down\";\r\n\r\n this.myFilterButtonsTextColors = [];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.LOG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.LOG];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.ERROR] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.ERROR];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.WARN] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.WARN];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.DEBUG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.DEBUG];\r\n\r\n this.myFilterButtonsTextLabel = [];\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.LOG] = \"log\";\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.ERROR] = \"error\";\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.WARN] = \"warn\";\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.DEBUG] = \"debug\";\r\n\r\n // Buttons positioning\r\n {\r\n let numberOfButtons = 7;\r\n let buttonsHorizontalSpace = Math.max(0.68, this.myButtonBackgroundScale[0] * numberOfButtons);\r\n // 2 at start, 3 between filters, 4 spaces between filter and clear and 4 spaces between clear and up/down, 1 space between up and down, 1 at end\r\n let numberOfSpacesBetweenButtons = 2 + 3 + 4 + 4 + 1 + 2;\r\n let spaceWidth = Math.max((buttonsHorizontalSpace - numberOfButtons * this.myButtonBackgroundScale[0] * 2) / numberOfSpacesBetweenButtons, 0);\r\n let halfButtonWidth = this.myButtonBackgroundScale[0];\r\n let initialPosition = - buttonsHorizontalSpace / 2;\r\n\r\n this.myFilterButtonsPositions = [];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.LOG] = [initialPosition + spaceWidth * 2 + halfButtonWidth, 0, 0];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.ERROR] = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.LOG][0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.WARN] = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.ERROR][0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.DEBUG] = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.WARN][0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n\r\n this.myClearButtonPosition = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.DEBUG][0] + halfButtonWidth + spaceWidth * 4 + halfButtonWidth, 0, 0];\r\n this.myUpButtonPosition = [this.myClearButtonPosition[0] + halfButtonWidth + spaceWidth * 4 + halfButtonWidth, 0, 0];\r\n this.myDownButtonPosition = [this.myUpButtonPosition[0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n }\r\n\r\n // Notify Icon\r\n this.myNotifyIconBackgroundScale = vec3_create(0.01, 0.01, 1);\r\n\r\n this.myNotifyIconPanelPositions = [];\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE] = vec3_create(0, 0, 0);\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE][0] = -this.myMessagesBackgroundScale[0] + this.myNotifyIconBackgroundScale[0] + 0.01;\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE][1] = -this.myMessagesBackgroundScale[1] + this.myNotifyIconBackgroundScale[1] + 0.01;\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE][2] = this.myMessagesTextsPanelPosition[2] - 0.00001; // Prevent glitches with text\r\n\r\n this.myNotifyIconPanelPositions[ToolHandedness.LEFT] = this.myNotifyIconPanelPositions[ToolHandedness.NONE];\r\n\r\n this.myNotifyIconPanelPositions[ToolHandedness.RIGHT] = this.myNotifyIconPanelPositions[ToolHandedness.NONE];\r\n\r\n this.myNotifyIconCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myNotifyIconCursorTargetPosition[2] = this.myButtonsPanelPosition[2] + this.myButtonTextPosition[2] - this.myMessagesTextsPanelPosition[2]; // A little behind the button target to avoid hiding it\r\n\r\n this.myNotifyIconCollisionExtents = this.myNotifyIconBackgroundScale.pp_clone();\r\n this.myNotifyIconCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myNotifyIconColor = vec4_create(210 / 255, 210 / 255, 210 / 255, 1);\r\n\r\n // Pointer\r\n this.myPointerCollisionCollider = this.myCursorTargetCollisionCollider;\r\n this.myPointerCollisionGroup = this.myCursorTargetCollisionGroup;\r\n\r\n {\r\n let spaceBetweenMessagesAndButtons = Math.abs((this.myMessagesPanelPosition[1] - this.myMessagesBackgroundScale[1]) - (this.myButtonsPanelPosition[1] + this.myButtonBackgroundScale[1]));\r\n let pointerCollisionHalfHeight = this.myMessagesBackgroundScale[1] + this.myButtonBackgroundScale[1] + spaceBetweenMessagesAndButtons / 2;\r\n this.myPointerCollisionExtents = vec3_create(this.myMessagesBackgroundScale[0], pointerCollisionHalfHeight, this.myCursorTargetCollisionThickness);\r\n }\r\n\r\n this.myPointerCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myPointerCursorTargetPosition[1] = (this.myMessagesPanelPosition[1] + this.myMessagesBackgroundScale[1]) - this.myPointerCollisionExtents[1];\r\n this.myPointerCursorTargetPosition[2] = this.myButtonsPanelPosition[2] + this.myButtonTextPosition[2] - 0.0001; // A little behind the button target to avoid hiding it\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this.myTabString = \" \";\r\n this.myAssertStartString = \"Assertion failed:\";\r\n\r\n this.myMaxCharactersPerLine = 100;\r\n this.myMaxLineSplits = 500; // Prevent infinite splitting\r\n this.myMaxLines = 22;\r\n this.myMaxMessages = 2000;\r\n this.myMaxMessagesDeletePad = 2000; // To prevent deleting at every message, delay the delete after the limit is exceed by this value\r\n\r\n this.myLinesBetweenMessages = 1;\r\n\r\n this.myButtonHoverColor = vec4_create(150 / 255, 150 / 255, 150 / 255, 1);\r\n this.myButtonDisabledTextColor = this.myBackgroundColor;\r\n this.myButtonDisabledBackgroundColor = vec4_create(110 / 255, 110 / 255, 110 / 255, 1);\r\n\r\n this.myFilterButtonDisabledTextColor = this.myButtonDisabledTextColor;\r\n this.myFilterButtonDisabledBackgroundColor = this.myButtonDisabledBackgroundColor;\r\n\r\n this.myScrollDelay = 0.1;\r\n this.myScrollAmount = 1;\r\n this.myScrollThumbstickHandedness = ToolHandedness.RIGHT;\r\n this.myScrollThumbstickDelay = 0.1;\r\n this.myScrollThumbstickMinThreshold = 0.2;\r\n this.myScrollThumbstickAmount = 3;\r\n\r\n this.myPulseDelay = 5;\r\n this.myPulseIntensity = 0.3;\r\n this.myPulseDuration = 0.085;\r\n\r\n this.myClearBrowserConsoleWhenClearPressed = false;\r\n\r\n this.myGamepadScrollOnlyOnHover = true;\r\n }\r\n}", "export let ConsoleVRWidgetConsoleFunction = {\r\n DEBUG: 0,\r\n WARN: 1,\r\n ERROR: 2,\r\n LOG: 3,\r\n INFO: 4,\r\n ASSERT: 5\r\n};\r\n\r\nexport let ConsoleVRWidgetSender = {\r\n BROWSER_CONSOLE: 0,\r\n CONSOLE_VR: 1,\r\n WINDOW: 2\r\n};\r\n\r\nexport let ConsoleVRWidgetPulseOnNewMessage = {\r\n NEVER: 0,\r\n ALWAYS: 1,\r\n WHEN_HIDDEN: 2\r\n};\r\n\r\nexport let ConsoleVRWidgetMessageType = {\r\n DEBUG: 0,\r\n WARN: 1,\r\n ERROR: 2,\r\n LOG: 3\r\n};\r\n\r\nexport let OverrideBrowserConsoleFunctions = {\r\n NONE: 0,\r\n ALL: 1,\r\n ERRORS_AND_WARNS: 2\r\n};", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { ConsoleVRWidgetMessageType } from \"./console_vr_types.js\";\r\n\r\nexport class ConsoleVRWidgetUI {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n build(parentObject, config, params) {\r\n this._myParentObject = parentObject;\r\n this._myConfig = config;\r\n this._myParams = params;\r\n\r\n this._myPlaneMesh = Globals.getDefaultMeshes(this._myEngine).myDoubleSidedPlane;\r\n\r\n this._createSkeleton();\r\n this._setTransforms();\r\n this._addComponents();\r\n\r\n this._setTransformForNonXR();\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n }\r\n\r\n setVisible(visible) {\r\n this.myPivotObject.pp_setActive(visible);\r\n }\r\n\r\n // Skeleton\r\n _createSkeleton() {\r\n this.myPivotObject = this._myParentObject.pp_addObject();\r\n\r\n this._createMessagesSkeleton();\r\n this._createButtonsSkeleton();\r\n this._createPointerSkeleton();\r\n }\r\n\r\n _createMessagesSkeleton() {\r\n this.myMessagesPanel = this.myPivotObject.pp_addObject();\r\n this.myMessagesBackground = this.myMessagesPanel.pp_addObject();\r\n this.myMessagesTextsPanel = this.myMessagesPanel.pp_addObject();\r\n\r\n this.myMessagesTexts = [];\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myMessagesTexts[ConsoleVRWidgetMessageType[key]] = this.myMessagesTextsPanel.pp_addObject();\r\n }\r\n\r\n this.myNotifyIconPanel = this.myMessagesPanel.pp_addObject();\r\n this.myNotifyIconBackground = this.myNotifyIconPanel.pp_addObject();\r\n this.myNotifyIconCursorTarget = this.myNotifyIconPanel.pp_addObject();\r\n }\r\n\r\n _createButtonsSkeleton() {\r\n this.myButtonsPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myFilterButtonsPanels = [];\r\n this.myFilterButtonsBackgrounds = [];\r\n this.myFilterButtonsTexts = [];\r\n this.myFilterButtonsCursorTargets = [];\r\n\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]] = this.myButtonsPanel.pp_addObject();\r\n this.myFilterButtonsBackgrounds[ConsoleVRWidgetMessageType[key]] = this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_addObject();\r\n this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]] = this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_addObject();\r\n this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]] = this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_addObject();\r\n }\r\n\r\n this.myClearButtonPanel = this.myButtonsPanel.pp_addObject();\r\n this.myClearButtonBackground = this.myClearButtonPanel.pp_addObject();\r\n this.myClearButtonText = this.myClearButtonPanel.pp_addObject();\r\n this.myClearButtonCursorTarget = this.myClearButtonPanel.pp_addObject();\r\n\r\n this.myUpButtonPanel = this.myButtonsPanel.pp_addObject();\r\n this.myUpButtonBackground = this.myUpButtonPanel.pp_addObject();\r\n this.myUpButtonText = this.myUpButtonPanel.pp_addObject();\r\n this.myUpButtonCursorTarget = this.myUpButtonPanel.pp_addObject();\r\n\r\n this.myDownButtonPanel = this.myButtonsPanel.pp_addObject();\r\n this.myDownButtonBackground = this.myDownButtonPanel.pp_addObject();\r\n this.myDownButtonText = this.myDownButtonPanel.pp_addObject();\r\n this.myDownButtonCursorTarget = this.myDownButtonPanel.pp_addObject();\r\n }\r\n\r\n _createPointerSkeleton() {\r\n this.myPointerCursorTarget = this.myPivotObject.pp_addObject();\r\n }\r\n\r\n // Transforms\r\n _setTransforms() {\r\n this.myPivotObject.pp_markDirty();\r\n\r\n this._setMessagesTransforms();\r\n this._setButtonsTransforms();\r\n this._setPointerTransform();\r\n }\r\n\r\n _setMessagesTransforms() {\r\n this.myMessagesPanel.pp_setPositionLocal(this._myConfig.myMessagesPanelPosition);\r\n this.myMessagesBackground.pp_scaleObject(this._myConfig.myMessagesBackgroundScale);\r\n\r\n this.myMessagesTextsPanel.pp_setPositionLocal(this._myConfig.myMessagesTextsPanelPosition);\r\n this.myMessagesTextsPanel.pp_scaleObject(this._myConfig.myMessagesTextsPanelScale);\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myMessagesTexts[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myMessagesTextPositions[ConsoleVRWidgetMessageType[key]]);\r\n }\r\n\r\n this.myNotifyIconPanel.pp_setPositionLocal(this._myConfig.myNotifyIconPanelPositions[this._myParams.myHandedness]);\r\n this.myNotifyIconBackground.pp_scaleObject(this._myConfig.myNotifyIconBackgroundScale);\r\n this.myNotifyIconCursorTarget.pp_setPositionLocal(this._myConfig.myNotifyIconCursorTargetPosition);\r\n }\r\n\r\n _setButtonsTransforms() {\r\n this.myButtonsPanel.pp_setPositionLocal(this._myConfig.myButtonsPanelPosition);\r\n\r\n // Filter Buttons\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myFilterButtonsPositions[ConsoleVRWidgetMessageType[key]]);\r\n\r\n this.myFilterButtonsBackgrounds[ConsoleVRWidgetMessageType[key]].pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]].pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n\r\n // Clear\r\n {\r\n this.myClearButtonPanel.pp_setPositionLocal(this._myConfig.myClearButtonPosition);\r\n\r\n this.myClearButtonBackground.pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myClearButtonText.pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myClearButtonText.pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myClearButtonCursorTarget.pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n\r\n // Up\r\n {\r\n this.myUpButtonPanel.pp_setPositionLocal(this._myConfig.myUpButtonPosition);\r\n\r\n this.myUpButtonBackground.pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myUpButtonText.pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myUpButtonText.pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myUpButtonCursorTarget.pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n\r\n // Down\r\n {\r\n this.myDownButtonPanel.pp_setPositionLocal(this._myConfig.myDownButtonPosition);\r\n\r\n this.myDownButtonBackground.pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myDownButtonText.pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myDownButtonText.pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myDownButtonCursorTarget.pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n }\r\n\r\n _setPointerTransform() {\r\n this.myPointerCursorTarget.pp_setPositionLocal(this._myConfig.myPointerCursorTargetPosition);\r\n }\r\n\r\n // Components\r\n _addComponents() {\r\n this._addMessagesComponents();\r\n this._addButtonsComponents();\r\n this._addPointerComponents();\r\n }\r\n\r\n _addMessagesComponents() {\r\n let messagesBackgroundMeshComp = this.myMessagesBackground.pp_addComponent(MeshComponent);\r\n messagesBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n messagesBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n messagesBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myMessagesTextComponents = [];\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let textComp = this.myMessagesTexts[ConsoleVRWidgetMessageType[key]].pp_addComponent(TextComponent);\r\n\r\n textComp.alignment = this._myConfig.myMessagesTextAlignment;\r\n textComp.justification = this._myConfig.myMessagesTextJustification;\r\n textComp.material = this._myParams.myTextMaterial.clone();\r\n textComp.material.color = this._myConfig.myMessagesTextColors[ConsoleVRWidgetMessageType[key]];\r\n textComp.lineSpacing = 1.2;\r\n textComp.text = this._myConfig.myMessagesTextStartString;\r\n\r\n this.myMessagesTextComponents[ConsoleVRWidgetMessageType[key]] = textComp;\r\n }\r\n\r\n this.myNotifyIconBackgroundComponent = this.myNotifyIconBackground.pp_addComponent(MeshComponent);\r\n this.myNotifyIconBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myNotifyIconBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myNotifyIconBackgroundComponent.material.color = this._myConfig.myNotifyIconColor;\r\n\r\n this.myNotifyIconCursorTargetComponent = this.myNotifyIconCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n this.myNotifyIconCollisionComponent = this.myNotifyIconCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myNotifyIconCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myNotifyIconCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myNotifyIconCollisionComponent.extents = this._myConfig.myNotifyIconCollisionExtents;\r\n }\r\n\r\n _addButtonsComponents() {\r\n // Worship the code copy pasteness\r\n\r\n this.myFilterButtonsBackgroundComponents = [];\r\n this.myFilterButtonsTextComponents = [];\r\n this.myFilterButtonsCursorTargetComponents = [];\r\n this.myFilterButtonsCollisionComponents = [];\r\n\r\n // Filter Buttons\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let buttonBackgroundMeshComp = this.myFilterButtonsBackgrounds[ConsoleVRWidgetMessageType[key]].pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]].pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.material.color = this._myConfig.myFilterButtonsTextColors[ConsoleVRWidgetMessageType[key]];\r\n buttonTextComp.text = this._myConfig.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType[key]];\r\n\r\n let buttonCursorTargetComp = this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]].pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]].pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]] = buttonBackgroundMeshComp;\r\n this.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]] = buttonTextComp;\r\n this.myFilterButtonsCursorTargetComponents[ConsoleVRWidgetMessageType[key]] = buttonCursorTargetComp;\r\n this.myFilterButtonsCollisionComponents[ConsoleVRWidgetMessageType[key]] = buttonCollisionComp;\r\n }\r\n\r\n // Clear \r\n {\r\n let buttonBackgroundMeshComp = this.myClearButtonBackground.pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myClearButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.text = this._myConfig.myClearButtonTextLabel;\r\n\r\n let buttonCursorTargetComp = this.myClearButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myClearButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myClearButtonBackgroundComponent = buttonBackgroundMeshComp;\r\n this.myClearButtonTextComponent = buttonTextComp;\r\n this.myClearButtonCursorTargetComponent = buttonCursorTargetComp;\r\n this.myClearButtonCollisionComponent = buttonCollisionComp;\r\n }\r\n\r\n // Up \r\n {\r\n let buttonBackgroundMeshComp = this.myUpButtonBackground.pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myUpButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.text = this._myConfig.myUpButtonTextLabel;\r\n\r\n let buttonCursorTargetComp = this.myUpButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myUpButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myUpButtonBackgroundComponent = buttonBackgroundMeshComp;\r\n this.myUpButtonTextComponent = buttonTextComp;\r\n this.myUpButtonCursorTargetComponent = buttonCursorTargetComp;\r\n this.myUpButtonCollisionComponent = buttonCollisionComp;\r\n }\r\n\r\n // Down \r\n {\r\n let buttonBackgroundMeshComp = this.myDownButtonBackground.pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myDownButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.text = this._myConfig.myDownButtonTextLabel;\r\n\r\n let buttonCursorTargetComp = this.myDownButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myDownButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myDownButtonBackgroundComponent = buttonBackgroundMeshComp;\r\n this.myDownButtonTextComponent = buttonTextComp;\r\n this.myDownButtonCursorTargetComponent = buttonCursorTargetComp;\r\n this.myDownButtonCollisionComponent = buttonCollisionComp;\r\n }\r\n }\r\n\r\n _addPointerComponents() {\r\n this.myPointerCursorTargetComponent = this.myPointerCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPointerCursorTargetComponent.isSurface = true;\r\n\r\n let collisionComp = this.myPointerCursorTarget.pp_addComponent(CollisionComponent);\r\n collisionComp.collider = this._myConfig.myPointerCollisionCollider;\r\n collisionComp.group = 1 << this._myConfig.myPointerCollisionGroup;\r\n collisionComp.extents = this._myConfig.myPointerCollisionExtents;\r\n\r\n this.myPointerCollisionComponent = collisionComp;\r\n }\r\n\r\n _setupButtonTextComponent(textComponent) {\r\n textComponent.alignment = this._myConfig.myTextAlignment;\r\n textComponent.justification = this._myConfig.myTextJustification;\r\n textComponent.material = this._myParams.myTextMaterial.clone();\r\n textComponent.material.color = this._myConfig.myTextColor;\r\n textComponent.text = \"\";\r\n }\r\n\r\n _onXRSessionStart() {\r\n this._setTransformForXR();\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n _setTransformForXR() {\r\n this.myNotifyIconPanel.pp_setPositionLocal(this._myConfig.myNotifyIconPanelPositions[this._myParams.myHandedness]);\r\n }\r\n\r\n _setTransformForNonXR() {\r\n this.myNotifyIconPanel.pp_setPositionLocal(this._myConfig.myNotifyIconPanelPositions[ToolHandedness.NONE]);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { WidgetFrameConfig } from \"./widget_frame_config.js\";\r\nimport { WidgetFrameUI } from \"./widget_frame_ui.js\";\r\n\r\nexport class WidgetParams {\r\n\r\n constructor() {\r\n this.myHandedness = ToolHandedness.NONE;\r\n\r\n this.myPlaneMaterial = null;\r\n this.myTextMaterial = null;\r\n }\r\n}\r\n\r\nexport class WidgetFrame {\r\n\r\n constructor(widgetLetterID, buttonsColumnIndex, engine = Globals.getMainEngine()) {\r\n this._myWidgetVisible = true;\r\n this._myPinned = false;\r\n\r\n this._myConfig = new WidgetFrameConfig(widgetLetterID, buttonsColumnIndex);\r\n this._myParams = null;\r\n\r\n this._myUI = new WidgetFrameUI(engine);\r\n this._myShowVisibilityButton = false;\r\n\r\n this._myWidgetVisibleChangedEmitter = new Emitter(); // Signature: listener(widgetVisible)\r\n this._myPinChangedEmitter = new Emitter(); // Signature: listener(pinned)\r\n\r\n this._myDestroyed = true;\r\n }\r\n\r\n getWidgetObject() {\r\n return this._myUI.myWidgetObject;\r\n }\r\n\r\n setVisible(visible) {\r\n this._myWidgetVisible = !visible;\r\n this._toggleVisibility(false, true);\r\n }\r\n\r\n isVisible() {\r\n return this._myWidgetVisible;\r\n }\r\n\r\n toggleVisibility() {\r\n this._toggleVisibility(false, true);\r\n }\r\n\r\n togglePin() {\r\n this._togglePin(false);\r\n }\r\n\r\n registerWidgetVisibleChangedEventListener(id, listener) {\r\n this._myWidgetVisibleChangedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterWidgetVisibleChangedEventListener(id) {\r\n this._myWidgetVisibleChangedEmitter.remove(id);\r\n }\r\n\r\n registerPinChangedEventListener(id, listener) {\r\n this._myPinChangedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPinChangedEventListener(id) {\r\n this._myPinChangedEmitter.remove(id);\r\n }\r\n\r\n start(parentObject, params) {\r\n this._myParams = params;\r\n\r\n this._myUI.build(parentObject, this._myConfig, params);\r\n this._myUI.setVisibilityButtonVisible(params.myShowVisibilityButton);\r\n this._myShowVisibilityButton = params.myShowVisibilityButton;\r\n if (!params.myShowOnStart) {\r\n this._toggleVisibility(false, false);\r\n }\r\n\r\n this._addListeners();\r\n }\r\n\r\n update(dt) {\r\n this._myUI.update(dt);\r\n }\r\n\r\n _addListeners() {\r\n let ui = this._myUI;\r\n\r\n ui.myPinButtonCursorTargetComponent.onClick.add(this._togglePin.bind(this, true));\r\n ui.myPinButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPinButtonBackgroundComponent.material));\r\n ui.myPinButtonCursorTargetComponent.onUnhover.add(this._pinUnhover.bind(this, ui.myPinButtonBackgroundComponent.material));\r\n\r\n ui.myVisibilityButtonCursorTargetComponent.onClick.add(this._toggleVisibility.bind(this, true, true));\r\n ui.myVisibilityButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myVisibilityButtonBackgroundComponent.material));\r\n ui.myVisibilityButtonCursorTargetComponent.onUnhover.add(this._visibilityUnhover.bind(this, ui.myVisibilityButtonBackgroundComponent.material));\r\n }\r\n\r\n _toggleVisibility(isButton, notify) {\r\n this._myWidgetVisible = !this._myWidgetVisible;\r\n\r\n this._myUI.setWidgetVisible(this._myWidgetVisible);\r\n\r\n let textMaterial = this._myUI.myVisibilityButtonTextComponent.material;\r\n let backgroundMaterial = this._myUI.myVisibilityButtonBackgroundComponent.material;\r\n if (this._myWidgetVisible) {\r\n textMaterial.color = this._myConfig.myDefaultTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myBackgroundColor;\r\n }\r\n } else {\r\n textMaterial.color = this._myConfig.myButtonDisabledTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n if (notify) {\r\n this._myWidgetVisibleChangedEmitter.notify(this._myWidgetVisible);\r\n }\r\n\r\n this._myUI.setVisibilityButtonVisible(this._myShowVisibilityButton);\r\n }\r\n\r\n _togglePin(isButton) {\r\n if (this._myWidgetVisible) {\r\n this._myPinned = !this._myPinned;\r\n\r\n this._myUI.setPinned(this._myPinned);\r\n\r\n let textMaterial = this._myUI.myPinButtonTextComponent.material;\r\n let backgroundMaterial = this._myUI.myPinButtonBackgroundComponent.material;\r\n if (this._myPinned) {\r\n textMaterial.color = this._myConfig.myDefaultTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myBackgroundColor;\r\n }\r\n } else {\r\n textMaterial.color = this._myConfig.myButtonDisabledTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n this._myPinChangedEmitter.notify(this._myPinned);\r\n }\r\n }\r\n\r\n _genericHover(material) {\r\n material.color = this._myConfig.myButtonHoverColor;\r\n }\r\n\r\n _visibilityUnhover(material) {\r\n if (this._myWidgetVisible) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n } else {\r\n material.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n _pinUnhover(material) {\r\n if (this._myPinned) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n } else {\r\n material.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n if (this._myUI != null) {\r\n this._myUI.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Alignment, Collider, Justification } from \"@wonderlandengine/api\";\r\nimport { quat_create, vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { ToolHandedness, ToolInputSourceType } from \"../cauldron/tool_types.js\";\r\n\r\nexport class WidgetFrameConfig {\r\n\r\n constructor(widgetLetterID, buttonsColumnIndex) {\r\n\r\n this._setupBuildConfig(widgetLetterID, buttonsColumnIndex);\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n _setupBuildConfig(widgetLetterID, buttonsColumnIndex) {\r\n // General\r\n this.myBackgroundColor = vec4_create(46 / 255, 46 / 255, 46 / 255, 1);\r\n\r\n this.myCursorTargetCollisionCollider = Collider.Box;\r\n this.myCursorTargetCollisionGroup = 7; // Keep this in sync with Tool Cursor\r\n this.myCursorTargetCollisionThickness = 0.001;\r\n\r\n this.myDefaultTextColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this.myTextAlignment = Alignment.Center;\r\n this.myTextJustification = Justification.Middle;\r\n this.myTextColor = this.myDefaultTextColor;\r\n\r\n this.myButtonTextScale = vec3_create(0.18, 0.18, 0.18);\r\n\r\n this.myVisibilityButtonBackgroundScale = vec3_create(0.015, 0.015, 1);\r\n this.myVisibilityButtonTextPosition = vec3_create(0, 0, 0.007);\r\n this.myVisibilityButtonTextScale = this.myButtonTextScale;\r\n\r\n let distanceBetweenToolsVisibilityButtons = 0.01;\r\n let buttonXOffset = this.myVisibilityButtonBackgroundScale[0] * (2 * buttonsColumnIndex) + distanceBetweenToolsVisibilityButtons * buttonsColumnIndex;\r\n\r\n this.myVisibilityButtonPosition = [];\r\n this.myVisibilityButtonPosition[ToolHandedness.NONE] = {};\r\n this.myVisibilityButtonPosition[ToolHandedness.NONE].myPosition = vec3_create(-0.3 + buttonXOffset, -0.205, 0.035);\r\n\r\n this.myVisibilityButtonPosition[ToolHandedness.LEFT] = {};\r\n this.myVisibilityButtonPosition[ToolHandedness.LEFT].myPosition = vec3_create(-0.2 + buttonXOffset, 0.025, 0.015);\r\n\r\n this.myVisibilityButtonPosition[ToolHandedness.RIGHT] = {};\r\n this.myVisibilityButtonPosition[ToolHandedness.RIGHT].myPosition = vec3_create(0.2 - buttonXOffset, 0.025, 0.015);\r\n\r\n this.myVisibilityButtonText = widgetLetterID;\r\n\r\n this.myVisibilityButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myVisibilityButtonCursorTargetPosition[2] = this.myVisibilityButtonTextPosition[2];\r\n this.myVisibilityButtonCollisionExtents = this.myVisibilityButtonBackgroundScale.pp_clone();\r\n this.myVisibilityButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myFlagButtonBackgroundScale = vec3_create(0.0125, 0.0125, 1);\r\n this.myFlagButtonTextPosition = vec3_create(0, 0, 0.007);\r\n this.myFlagButtonTextScale = vec3_create(0.15, 0.15, 0.15);\r\n\r\n let distanceBetweenFlagButtons = 0.0075;\r\n let pinFlagIndex = 0;\r\n let pinButtonYOffset = this.myVisibilityButtonBackgroundScale[1] + this.myFlagButtonBackgroundScale[1] + distanceBetweenFlagButtons +\r\n this.myFlagButtonBackgroundScale[1] * (2 * pinFlagIndex) + distanceBetweenFlagButtons * pinFlagIndex;\r\n\r\n this.myPinButtonPosition = [];\r\n this.myPinButtonPosition[ToolHandedness.NONE] = {};\r\n this.myPinButtonPosition[ToolHandedness.NONE].myPosition = this.myVisibilityButtonPosition[ToolHandedness.NONE].myPosition.pp_clone();\r\n this.myPinButtonPosition[ToolHandedness.NONE].myPosition[1] += pinButtonYOffset;\r\n\r\n this.myPinButtonPosition[ToolHandedness.LEFT] = {};\r\n this.myPinButtonPosition[ToolHandedness.LEFT].myPosition = this.myVisibilityButtonPosition[ToolHandedness.LEFT].myPosition.pp_clone();\r\n this.myPinButtonPosition[ToolHandedness.LEFT].myPosition[1] += pinButtonYOffset;\r\n\r\n this.myPinButtonPosition[ToolHandedness.RIGHT] = {};\r\n this.myPinButtonPosition[ToolHandedness.RIGHT].myPosition = this.myVisibilityButtonPosition[ToolHandedness.RIGHT].myPosition.pp_clone();\r\n this.myPinButtonPosition[ToolHandedness.RIGHT].myPosition[1] += pinButtonYOffset;\r\n\r\n this.myPinButtonText = \"P\";\r\n\r\n this.myPinButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myPinButtonCursorTargetPosition[2] = this.myFlagButtonTextPosition[2];\r\n this.myPinButtonCollisionExtents = this.myFlagButtonBackgroundScale.pp_clone();\r\n this.myPinButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this._initializeObjectsTransforms();\r\n\r\n this.myButtonHoverColor = vec4_create(150 / 255, 150 / 255, 150 / 255, 1);\r\n this.myButtonDisabledTextColor = this.myBackgroundColor;\r\n this.myButtonDisabledBackgroundColor = vec4_create(110 / 255, 110 / 255, 110 / 255, 1);\r\n }\r\n\r\n _initializeObjectsTransforms() {\r\n this.myPivotObjectTransforms = this._createDefaultObjectTransforms();\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation = quat_create(-0.645, 0.425, 0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation = quat_create(-0.645, -0.425, -0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation = quat_create(-0.645, 0.425, 0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation = quat_create(-0.645, -0.425, -0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation);\r\n\r\n /*\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myPosition = vec3_create(-0.04, 0.045, -0.055);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation = quat_create(0, 0.536, -0.43, 0.727);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myPosition = vec3_create(0.04, 0.045, -0.055);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation = quat_create(0, -0.536, 0.43, 0.727);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation);\r\n */\r\n\r\n this.myWidgetObjectTransforms = this._createDefaultObjectTransforms();\r\n\r\n this.myWidgetObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myPosition = vec3_create(0.1, 0.23, -0.02);\r\n this.myWidgetObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myPosition = vec3_create(0.07, 0.23, -0.02);\r\n\r\n this.myWidgetObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myPosition = vec3_create(0.1, 0.23, -0.02);\r\n this.myWidgetObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myPosition = vec3_create(0.07, 0.23, -0.02);\r\n\r\n this._myPivotObjectDistanceFromHeadNonXR = 0.6;\r\n }\r\n\r\n _createDefaultObjectTransforms() {\r\n let defaultObjectTransforms = [];\r\n\r\n for (let inputSourceTypeKey in ToolInputSourceType) {\r\n let inputSourceType = ToolInputSourceType[inputSourceTypeKey];\r\n defaultObjectTransforms[inputSourceType] = [];\r\n for (let handednessKey in ToolHandedness) {\r\n let handedness = ToolHandedness[handednessKey];\r\n defaultObjectTransforms[inputSourceType][handedness] = {};\r\n defaultObjectTransforms[inputSourceType][handedness].myPosition = vec3_create(0, 0, 0);\r\n defaultObjectTransforms[inputSourceType][handedness].myRotation = quat_create(0, 0, 0, 1);\r\n }\r\n }\r\n\r\n return defaultObjectTransforms;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { InputUtils } from \"../../input/cauldron/input_utils.js\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness, ToolInputSourceType } from \"../cauldron/tool_types.js\";\r\n\r\nexport class WidgetFrameUI {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myInputSourceType = null;\r\n\r\n this._myParentObject = null;\r\n this._myPinned = false;\r\n\r\n this._myWidgetVisible = true;\r\n this._myVisibilityButtonVisible = true;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n build(parentObject, config, params) {\r\n this._myParentObject = parentObject;\r\n this._myConfig = config;\r\n this._myParams = params;\r\n this._myPlaneMesh = Globals.getDefaultMeshes(this._myEngine).myDoubleSidedPlane;\r\n\r\n this._createSkeleton();\r\n this._setTransforms();\r\n this._addComponents();\r\n\r\n this._setTransformForNonXR();\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n }\r\n\r\n setWidgetVisible(visible) {\r\n this._myWidgetVisible = visible;\r\n this.myFlagsButtonPanel.pp_setActive(visible);\r\n if (visible) {\r\n this._updateObjectsTransforms(true);\r\n }\r\n }\r\n\r\n setVisibilityButtonVisible(visible) {\r\n this._myVisibilityButtonVisible = visible;\r\n this.myVisibilityButtonPanel.pp_setActive(visible);\r\n }\r\n\r\n setPinned(pinned) {\r\n if (pinned != this._myPinned) {\r\n this._myPinned = pinned;\r\n if (this._myPinned) {\r\n this.myPivotObject.pp_setParent(Globals.getSceneObjects(this._myEngine).myTools);\r\n } else {\r\n this.myPivotObject.pp_setParent(this.myFixForwardObject);\r\n\r\n if (!XRUtils.isSessionActive(this._myEngine)) {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n this._updateObjectsTransforms(true);\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n this._updateObjectsTransforms(false);\r\n }\r\n\r\n _updateObjectsTransforms(forceRefreshObjectsTransforms) {\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n let inputSourceType = InputUtils.getInputSourceTypeByHandedness(this._myParams.myHandedness, this._myEngine);\r\n\r\n if (inputSourceType != this._myInputSourceType || forceRefreshObjectsTransforms) {\r\n this._myInputSourceType = inputSourceType;\r\n\r\n if (!this._myPinned) {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myPosition);\r\n this.myPivotObject.pp_resetRotationLocal();\r\n this.myPivotObject.pp_rotateObjectQuat(this._myConfig.myPivotObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myRotation);\r\n\r\n this.myWidgetObject.pp_setPositionLocal(this._myConfig.myWidgetObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myPosition);\r\n this.myWidgetObject.pp_resetRotationLocal();\r\n this.myWidgetObject.pp_rotateObjectQuat(this._myConfig.myWidgetObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myRotation);\r\n\r\n this.myVisibilityButtonPanel.pp_setPositionLocal(this._myConfig.myVisibilityButtonPosition[this._myParams.myHandedness].myPosition);\r\n this.myPinButtonPanel.pp_setPositionLocal(this._myConfig.myPinButtonPosition[this._myParams.myHandedness].myPosition);\r\n }\r\n }\r\n } else {\r\n this.myVisibilityButtonPanel.pp_setActive(this._myWidgetVisible || this._myVisibilityButtonVisible);\r\n }\r\n }\r\n\r\n // Skeleton\r\n _createSkeleton() {\r\n this.myFixForwardObject = this._myParentObject.pp_addObject();\r\n\r\n if (Globals.isPoseForwardFixed(this._myEngine)) {\r\n this.myFixForwardObject.pp_rotateObject(vec3_create(0, 180, 0));\r\n }\r\n\r\n this.myPivotObject = this.myFixForwardObject.pp_addObject();\r\n this.myWidgetObject = this.myPivotObject.pp_addObject();\r\n\r\n this.myVisibilityButtonPanel = this.myPivotObject.pp_addObject();\r\n this.myVisibilityButtonBackground = this.myVisibilityButtonPanel.pp_addObject();\r\n this.myVisibilityButtonText = this.myVisibilityButtonPanel.pp_addObject();\r\n this.myVisibilityButtonCursorTarget = this.myVisibilityButtonPanel.pp_addObject();\r\n\r\n this.myFlagsButtonPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myPinButtonPanel = this.myFlagsButtonPanel.pp_addObject();\r\n this.myPinButtonBackground = this.myPinButtonPanel.pp_addObject();\r\n this.myPinButtonText = this.myPinButtonPanel.pp_addObject();\r\n this.myPinButtonCursorTarget = this.myPinButtonPanel.pp_addObject();\r\n\r\n this.myNonXRParentObject = Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_addObject();\r\n this.myNonXRParentObject.pp_translateLocal(vec3_create(0, 0, -this._myConfig._myPivotObjectDistanceFromHeadNonXR));\r\n this.myNonXRParentObject.pp_lookToLocal(vec3_create(0, 0, 1), vec3_create(0, 1, 0));\r\n\r\n }\r\n\r\n // Transforms\r\n _setTransforms() {\r\n this.myPivotObject.pp_markDirty();\r\n\r\n this.myVisibilityButtonPanel.pp_setPositionLocal(this._myConfig.myVisibilityButtonPosition[this._myParams.myHandedness].myPosition);\r\n this.myVisibilityButtonBackground.pp_scaleObject(this._myConfig.myVisibilityButtonBackgroundScale);\r\n this.myVisibilityButtonText.pp_setPositionLocal(this._myConfig.myVisibilityButtonTextPosition);\r\n this.myVisibilityButtonText.pp_scaleObject(this._myConfig.myVisibilityButtonTextScale);\r\n this.myVisibilityButtonCursorTarget.pp_setPositionLocal(this._myConfig.myVisibilityButtonCursorTargetPosition);\r\n\r\n this.myPinButtonPanel.pp_setPositionLocal(this._myConfig.myPinButtonPosition[this._myParams.myHandedness].myPosition);\r\n\r\n this.myPinButtonBackground.pp_scaleObject(this._myConfig.myFlagButtonBackgroundScale);\r\n this.myPinButtonText.pp_setPositionLocal(this._myConfig.myFlagButtonTextPosition);\r\n this.myPinButtonText.pp_scaleObject(this._myConfig.myFlagButtonTextScale);\r\n this.myPinButtonCursorTarget.pp_setPositionLocal(this._myConfig.myPinButtonCursorTargetPosition);\r\n }\r\n\r\n // Components\r\n _addComponents() {\r\n this.myVisibilityButtonBackgroundComponent = this.myVisibilityButtonBackground.pp_addComponent(MeshComponent);\r\n this.myVisibilityButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myVisibilityButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myVisibilityButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myVisibilityButtonTextComponent = this.myVisibilityButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(this.myVisibilityButtonTextComponent);\r\n this.myVisibilityButtonTextComponent.text = this._myConfig.myVisibilityButtonText;\r\n\r\n this.myVisibilityButtonCursorTargetComponent = this.myVisibilityButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myVisibilityButtonCollisionComponent = this.myVisibilityButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myVisibilityButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myVisibilityButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myVisibilityButtonCollisionComponent.extents = this._myConfig.myVisibilityButtonCollisionExtents;\r\n\r\n this.myPinButtonBackgroundComponent = this.myPinButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPinButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPinButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPinButtonBackgroundComponent.material.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n\r\n this.myPinButtonTextComponent = this.myPinButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(this.myPinButtonTextComponent);\r\n this.myPinButtonTextComponent.material.color = this._myConfig.myButtonDisabledTextColor;\r\n this.myPinButtonTextComponent.text = this._myConfig.myPinButtonText;\r\n\r\n this.myPinButtonCursorTargetComponent = this.myPinButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n this.myPinButtonCollisionComponent = this.myPinButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPinButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPinButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPinButtonCollisionComponent.extents = this._myConfig.myPinButtonCollisionExtents;\r\n }\r\n\r\n _setupButtonTextComponent(textComponent) {\r\n textComponent.alignment = this._myConfig.myTextAlignment;\r\n textComponent.justification = this._myConfig.myTextJustification;\r\n textComponent.material = this._myParams.myTextMaterial.clone();\r\n textComponent.material.color = this._myConfig.myTextColor;\r\n textComponent.text = \"\";\r\n }\r\n\r\n _onXRSessionStart() {\r\n this.myVisibilityButtonPanel.pp_setActive(this._myVisibilityButtonVisible);\r\n\r\n this._setTransformForXR();\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n _setTransformForXR() {\r\n this.myFixForwardObject.pp_setParent(this._myParentObject);\r\n\r\n this.myFixForwardObject.pp_resetTransformLocal();\r\n\r\n if (Globals.isPoseForwardFixed(this._myEngine)) {\r\n this.myFixForwardObject.pp_rotateObject(vec3_create(0, 180, 0));\r\n }\r\n\r\n this._updateObjectsTransforms(true);\r\n }\r\n\r\n _setTransformForNonXR() {\r\n if (!this._myPinned) {\r\n this.myFixForwardObject.pp_setParent(this.myNonXRParentObject);\r\n this.myFixForwardObject.pp_resetTransformLocal();\r\n\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myPosition);\r\n this.myPivotObject.pp_resetRotationLocal();\r\n this.myPivotObject.pp_rotateObjectQuat(this._myConfig.myPivotObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myRotation);\r\n\r\n this.myWidgetObject.pp_setPositionLocal(this._myConfig.myWidgetObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myPosition);\r\n this.myWidgetObject.pp_resetRotationLocal();\r\n this.myWidgetObject.pp_rotateObjectQuat(this._myConfig.myWidgetObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myRotation);\r\n\r\n this.myVisibilityButtonPanel.pp_setPositionLocal(this._myConfig.myVisibilityButtonPosition[ToolHandedness.NONE].myPosition);\r\n this.myPinButtonPanel.pp_setPositionLocal(this._myConfig.myPinButtonPosition[ToolHandedness.NONE].myPosition);\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { GamepadAxesID, GamepadButtonID } from \"../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec2_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { WidgetFrame, WidgetParams } from \"../widget_frame/widget_frame.js\";\r\nimport { ConsoleOriginalFunctions } from \"./console_original_functions.js\";\r\nimport { ConsoleVRWidgetConsoleFunction, ConsoleVRWidgetMessageType, ConsoleVRWidgetPulseOnNewMessage, ConsoleVRWidgetSender, OverrideBrowserConsoleFunctions } from \"./console_vr_types.js\";\r\nimport { ConsoleVRWidgetConfig } from \"./console_vr_widget_config.js\";\r\nimport { ConsoleVRWidgetUI } from \"./console_vr_widget_ui.js\";\r\n\r\nexport class ConsoleVRWidgetParams extends WidgetParams {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.myOverrideBrowserConsoleFunctions = false;\r\n this.myShowOnStart = false;\r\n this.myShowVisibilityButton = false;\r\n this.myPulseOnNewMessage = ConsoleVRWidgetPulseOnNewMessage.NEVER;\r\n\r\n this.myResetBrowserConsoleOriginalFunctionsOnDestroy = true;\r\n }\r\n}\r\n\r\nexport class ConsoleVRWidgetMessage {\r\n\r\n constructor(messageType, messageLines) {\r\n this.myType = messageType;\r\n this.myLines = messageLines;\r\n\r\n this._myOriginalText = messageLines.join(\"\\n\");\r\n\r\n this._myMessagesCount = 1;\r\n }\r\n\r\n hasSameInfo(message) {\r\n return this._myOriginalText == message._myOriginalText && this.myType == message.myType;\r\n }\r\n\r\n increaseCount() {\r\n this._myMessagesCount += 1;\r\n\r\n let countString = ((\"(x\").concat(this._myMessagesCount)).concat(\") \");\r\n\r\n let text = this._myOriginalText;\r\n text = countString.concat(text);\r\n this.myLines = text.split(\"\\n\");\r\n }\r\n}\r\n\r\n// Does Not Support:\r\n// - Placeholder like %d and other similar kind of way to build strings\r\n//\r\n// Known Issues:\r\n// - Since the actual call to the browser console is done by the widget, u will not be able to click\r\n// on the browser console source code link (usually on the right of the logged message) to go to the line where \r\n// the console function has been called, since it will always go to the line where \r\n// the console VR widget forwards the call to the browser console\r\nexport class ConsoleVRWidget {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myWidgetFrame = new WidgetFrame(\"C\", 0, engine);\r\n this._myWidgetFrame.registerWidgetVisibleChangedEventListener(this, this._widgetVisibleChanged.bind(this));\r\n\r\n this._myConfig = new ConsoleVRWidgetConfig();\r\n this._myParams = null;\r\n\r\n this._myUI = new ConsoleVRWidgetUI(engine);\r\n\r\n this._myMessages = [];\r\n\r\n this._myOldBrowserConsole = [];\r\n this._myOldConsoleVR = [];\r\n\r\n this._myTypeFilters = [];\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = false;\r\n }\r\n\r\n this._myScrollUp = false;\r\n this._myScrollDown = false;\r\n this._myScrollOffset = 0;\r\n this._myScrollTimer = 0;\r\n this._myScrollThumbstickTimer = 0;\r\n\r\n this._myPulseTimer = 0;\r\n\r\n this._myGamepadScrollEnabled = true;\r\n if (this._myConfig.myGamepadScrollOnlyOnHover) {\r\n this._myGamepadScrollEnabled = false;\r\n }\r\n\r\n this._myErrorEventListener = null;\r\n this._myUnhandledRejectionEventListener = null;\r\n\r\n this._myConsolePrintAddMessageEnabled = true;\r\n this._myConsolePrintAddMessageEnabledReset = false;\r\n this._myTextDirty = false;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setVisible(visible) {\r\n this._myWidgetFrame.setVisible(visible);\r\n }\r\n\r\n isVisible() {\r\n return this._myWidgetFrame.isVisible();\r\n }\r\n\r\n start(parentObject, params) {\r\n this._myLeftGamepad = Globals.getLeftGamepad(this._myEngine);\r\n this._myRightGamepad = Globals.getRightGamepad(this._myEngine);\r\n\r\n this._myParams = params;\r\n\r\n this._myWidgetFrame.start(parentObject, params);\r\n\r\n this._myUI.build(this._myWidgetFrame.getWidgetObject(), this._myConfig, params);\r\n this._myUI.setVisible(this._myWidgetFrame.isVisible());\r\n this._setNotifyIconActive(false);\r\n\r\n this._addListeners();\r\n\r\n this._overrideConsolesFunctions();\r\n }\r\n\r\n update(dt) {\r\n if (this._myConsolePrintAddMessageEnabledReset) {\r\n this._myConsolePrintAddMessageEnabledReset = false;\r\n this._myConsolePrintAddMessageEnabled = true;\r\n }\r\n\r\n this._myWidgetFrame.update(dt);\r\n\r\n if (this._myWidgetFrame.isVisible()) {\r\n if (this._myTextDirty) {\r\n this._updateAllTexts();\r\n }\r\n\r\n this._updateScroll(dt);\r\n }\r\n\r\n this._updateGamepadsExtraActions(dt);\r\n }\r\n\r\n // This must be done only when all the setup is complete, to avoid issues with other part of the code calling the console and then triggering the console vr while not ready yet\r\n _overrideConsolesFunctions() {\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.LOG] = console.log;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ERROR] = console.error;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.WARN] = console.warn;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.INFO] = console.info;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.DEBUG] = console.debug;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ASSERT] = console.assert;\r\n this._myOldBrowserConsoleClear = console.clear;\r\n\r\n if (this._myParams.myOverrideBrowserConsoleFunctions != OverrideBrowserConsoleFunctions.NONE) {\r\n\r\n if (this._myParams.myOverrideBrowserConsoleFunctions == OverrideBrowserConsoleFunctions.ALL) {\r\n console.log = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.LOG, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n }\r\n\r\n console.error = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n console.warn = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.WARN, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n\r\n if (this._myParams.myOverrideBrowserConsoleFunctions == OverrideBrowserConsoleFunctions.ALL) {\r\n console.info = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.INFO, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n console.debug = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.DEBUG, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n }\r\n\r\n console.assert = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ASSERT, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n\r\n console.clear = this._clearConsole.bind(this, true, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n\r\n this._myErrorEventListener = function (errorEvent) {\r\n if (errorEvent.error != null) {\r\n this._consolePrint(ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.WINDOW, \"Uncaught\", errorEvent.error.stack);\r\n } else {\r\n this._consolePrint(ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.WINDOW, \"Uncaught\", errorEvent.message);\r\n }\r\n }.bind(this);\r\n\r\n this._myUnhandledRejectionEventListener = function (errorEvent) {\r\n this._consolePrint(ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.WINDOW, \"Uncaught (in promise)\", errorEvent.reason);\r\n }.bind(this);\r\n\r\n window.addEventListener(\"error\", this._myErrorEventListener);\r\n window.addEventListener(\"unhandledrejection\", this._myUnhandledRejectionEventListener);\r\n }\r\n\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.LOG] = Globals.getConsoleVR(this._myEngine).log;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.ERROR] = Globals.getConsoleVR(this._myEngine).error;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.WARN] = Globals.getConsoleVR(this._myEngine).warn;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.INFO] = Globals.getConsoleVR(this._myEngine).info;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.DEBUG] = Globals.getConsoleVR(this._myEngine).debug;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.ASSERT] = Globals.getConsoleVR(this._myEngine).assert;\r\n this._myOldConsoleVRClear = Globals.getConsoleVR(this._myEngine).clear;\r\n\r\n Globals.getConsoleVR(this._myEngine).log = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.LOG, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).error = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).warn = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.WARN, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).info = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.INFO, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).debug = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.DEBUG, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).assert = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ASSERT, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).clear = this._clearConsole.bind(this, true, ConsoleVRWidgetSender.CONSOLE_VR);\r\n }\r\n\r\n // Text section\r\n\r\n _updateText(messageType) {\r\n let consoleText = \"\";\r\n\r\n if (!this._myTypeFilters[messageType]) {\r\n let linesCount = 0;\r\n let i = this._myMessages.length - 1;\r\n\r\n let scrollLinesToSkip = Math.round(this._myScrollOffset);\r\n\r\n while (i >= 0 && linesCount < this._myConfig.myMaxLines) {\r\n let message = this._myMessages[i];\r\n\r\n // Skip filtered messages\r\n if (this._myTypeFilters[message.myType]) {\r\n i -= 1;\r\n continue;\r\n }\r\n\r\n let messageLines = message.myLines.length;\r\n\r\n // Compute line to skip due to scroll offset\r\n let linesToSkip = 0;\r\n if (scrollLinesToSkip > 0) {\r\n let additionalEmptyLines = 0;\r\n if (i != this._myMessages.length - 1) {\r\n additionalEmptyLines = this._myConfig.myLinesBetweenMessages;\r\n }\r\n\r\n if (scrollLinesToSkip >= messageLines + additionalEmptyLines) { // + empty lines between messages\r\n scrollLinesToSkip -= messageLines + additionalEmptyLines;\r\n linesToSkip = messageLines + additionalEmptyLines;\r\n } else {\r\n linesToSkip = scrollLinesToSkip;\r\n scrollLinesToSkip = 0;\r\n }\r\n }\r\n\r\n // Add empty lines between messages\r\n if (i != this._myMessages.length - 1) {\r\n let emptyLinesToSkip = this._myConfig.myLinesBetweenMessages - Math.max(this._myConfig.myLinesBetweenMessages - linesToSkip, 0);\r\n let emptyLinesToShow = this._myConfig.myLinesBetweenMessages - emptyLinesToSkip;\r\n if (linesCount + emptyLinesToShow > this._myConfig.myMaxLines) {\r\n emptyLinesToShow = this._myMaxLines - linesCount;\r\n }\r\n\r\n for (let j = 0; j < emptyLinesToShow; j++) {\r\n consoleText = (\"\\n\").concat(consoleText);\r\n }\r\n\r\n linesCount += emptyLinesToShow;\r\n linesToSkip -= emptyLinesToSkip;\r\n }\r\n\r\n // Computing the number of message lines to show\r\n let linesToShow = messageLines - linesToSkip;\r\n if (linesCount + linesToShow > this._myConfig.myMaxLines) {\r\n linesToShow = this._myConfig.myMaxLines - linesCount;\r\n }\r\n\r\n if (linesToShow > 0) {\r\n if (message.myType == messageType) {\r\n // If the message is the same type of this message text component, add the message lines\r\n\r\n let linesToPrint = message.myLines.slice(messageLines - linesToShow - linesToSkip, messageLines - linesToSkip);\r\n let text = linesToPrint.join(\"\\n\");\r\n consoleText = (text.concat(\"\\n\")).concat(consoleText);\r\n\r\n linesCount += linesToShow;\r\n } else {\r\n // Otherwise add empty lines, so that the text component with the correct type will have space to show this message\r\n\r\n for (let j = 0; j < linesToShow; j++) {\r\n consoleText = (\"\\n\").concat(consoleText);\r\n }\r\n\r\n linesCount += linesToShow;\r\n }\r\n }\r\n\r\n i -= 1;\r\n }\r\n }\r\n\r\n consoleText = this._myConfig.myMessagesTextStartString.concat(consoleText);\r\n\r\n this._myUI.myMessagesTextComponents[messageType].text = consoleText;\r\n }\r\n\r\n _consolePrint(consoleFunction, sender, ...args) {\r\n switch (sender) {\r\n case ConsoleVRWidgetSender.BROWSER_CONSOLE:\r\n this._myOldBrowserConsole[consoleFunction].apply(console, args);\r\n break;\r\n case ConsoleVRWidgetSender.CONSOLE_VR:\r\n this._myOldConsoleVR[consoleFunction].apply(Globals.getConsoleVR(this._myEngine), args);\r\n break;\r\n default:\r\n this._myOldBrowserConsole[consoleFunction].apply(console, args);\r\n break;\r\n }\r\n\r\n if (this._myConsolePrintAddMessageEnabled && (consoleFunction != ConsoleVRWidgetConsoleFunction.ASSERT || (args.length > 0 && !args[0]))) {\r\n this._myTextDirty = true;\r\n this._pulseGamepad();\r\n\r\n try {\r\n let message = this._argsToMessage(consoleFunction, ...args);\r\n this._addMessage(message);\r\n\r\n if (this._myMessages.length >= this._myConfig.myMaxMessages + this._myConfig.myMaxMessagesDeletePad) {\r\n this._myMessages = this._myMessages.slice(this._myMessages.length - this._myConfig.myMaxMessages);\r\n this._clampScrollOffset();\r\n }\r\n } catch (error) {\r\n this._myConsolePrintAddMessageEnabled = false;\r\n this._myConsolePrintAddMessageEnabledReset = true;\r\n\r\n try {\r\n let errorMessage = \"An error occurred while trying to add a new message to the Console VR Widget\";\r\n let message = new ConsoleVRWidgetMessage(ConsoleVRWidgetMessageType.ERROR, [errorMessage]);\r\n this._myMessages.push(message);\r\n ConsoleOriginalFunctions.error(this._myEngine, errorMessage);\r\n } catch (anotherError) {\r\n // Do nothing\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n _argsToMessage(consoleFunction, ...args) {\r\n if (consoleFunction == ConsoleVRWidgetConsoleFunction.ASSERT) {\r\n args = args.slice(1);\r\n args.splice(0, 0, this._myConfig.myAssertStartString);\r\n }\r\n\r\n let messageType = this._consoleFunctionToMessageType(consoleFunction);\r\n\r\n let formattedText = this._formatArgs(...args);\r\n\r\n let lines = this._splitLongLines(formattedText);\r\n\r\n if (messageType == ConsoleVRWidgetMessageType.INFO) {\r\n messageType = ConsoleVRWidgetMessageType.LOG;\r\n } else if (messageType == ConsoleVRWidgetMessageType.EXCEPTION || messageType == ConsoleVRWidgetMessageType.ASSERT) {\r\n messageType = ConsoleVRWidgetMessageType.ERROR;\r\n }\r\n\r\n\r\n let message = new ConsoleVRWidgetMessage(messageType, lines);\r\n\r\n return message;\r\n }\r\n\r\n _consoleFunctionToMessageType(consoleFunction) {\r\n let messageType = ConsoleVRWidgetMessageType.LOG;\r\n\r\n if (consoleFunction < ConsoleVRWidgetConsoleFunction.INFO) {\r\n messageType = consoleFunction;\r\n } else if (consoleFunction == ConsoleVRWidgetConsoleFunction.INFO) {\r\n messageType = ConsoleVRWidgetMessageType.LOG;\r\n } else {\r\n messageType = ConsoleVRWidgetMessageType.ERROR;\r\n }\r\n\r\n return messageType;\r\n }\r\n\r\n // Here the formatting using placeholder like %d could be implemented in the future\r\n _formatArgs(...args) {\r\n let stringifiedArgs = [];\r\n for (let i = 0; i < args.length; i++) {\r\n if (args[i] === undefined) {\r\n stringifiedArgs.push(\"undefined\");\r\n } else {\r\n stringifiedArgs.push(this._stringifyItem(args[i]));\r\n }\r\n }\r\n\r\n let formattedString = stringifiedArgs.join(\" \");\r\n\r\n return formattedString;\r\n }\r\n\r\n _stringifyItem(item) {\r\n let stringifiedItem = null;\r\n\r\n if (item instanceof Error) {\r\n stringifiedItem = item.stack;\r\n } else if (typeof item == \"object\") {\r\n let linesBetweenItems = 2;\r\n\r\n try {\r\n stringifiedItem = JSON.stringify(item, this._jsonReplacer.bind(this), linesBetweenItems);\r\n } catch (error) {\r\n let cache = new WeakSet();\r\n\r\n stringifiedItem = JSON.stringify(item, function (key, value) {\r\n if (value != null && typeof value == \"object\") {\r\n if (cache.has(value)) {\r\n return \"\"; // Try to avoid circular reference, a repeated object will be caught in this check too sadly\r\n }\r\n cache.add(value);\r\n }\r\n\r\n return this._jsonReplacer(key, value);\r\n }.bind(this), linesBetweenItems);\r\n }\r\n\r\n stringifiedItem = stringifiedItem.replaceAll(\"\\\"[\", \"[\");\r\n stringifiedItem = stringifiedItem.replaceAll(\"'[\", \"[\");\r\n stringifiedItem = stringifiedItem.replaceAll(\"]\\\"\", \"]\");\r\n stringifiedItem = stringifiedItem.replaceAll(\"]'\", \"]\");\r\n } else {\r\n stringifiedItem = item;\r\n }\r\n\r\n return stringifiedItem;\r\n }\r\n\r\n _splitLongLines(messageText) {\r\n let linesToSplit = messageText.split(\"\\n\");\r\n let lines = [];\r\n for (let i = 0; i < linesToSplit.length; i++) {\r\n let lineToSplit = linesToSplit[i];\r\n\r\n if (lineToSplit.length > this._myConfig.myMaxCharactersPerLine) {\r\n let spacesAtStart = this._getSpacesAtStart(lineToSplit);\r\n let spaceToAdd = this._myConfig.myTabString.concat(spacesAtStart);\r\n let lineSplits = 0;\r\n\r\n while (lineToSplit.length > this._myConfig.myMaxCharactersPerLine && lineSplits < this._myConfig.myMaxLineSplits) {\r\n let firstSub = lineToSplit.substr(0, this._myConfig.myMaxCharactersPerLine - 1);\r\n let secondSub = lineToSplit.substr(this._myConfig.myMaxCharactersPerLine - 1);\r\n secondSub = spaceToAdd.concat(secondSub);\r\n\r\n lines.push(firstSub);\r\n\r\n lineToSplit = secondSub;\r\n lineSplits++;\r\n }\r\n lines.push(lineToSplit);\r\n } else {\r\n lines.push(lineToSplit);\r\n }\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n _getSpacesAtStart(text) {\r\n let spaces = \"\";\r\n let i = 0;\r\n\r\n while (i < text.length && text[i] == \" \") {\r\n spaces = spaces.concat(\" \");\r\n i++;\r\n }\r\n\r\n return spaces;\r\n }\r\n\r\n _addMessage(message) {\r\n let hasSameInfoAsPrev = false;\r\n if (this._myMessages.length > 0) {\r\n let lastMessage = this._myMessages[this._myMessages.length - 1];\r\n if (lastMessage.hasSameInfo(message)) {\r\n lastMessage.increaseCount();\r\n hasSameInfoAsPrev = true;\r\n }\r\n }\r\n\r\n if (!hasSameInfoAsPrev) {\r\n this._myMessages.push(message);\r\n }\r\n\r\n this._adjustScrollOffsetAfterMessageAdded(message, hasSameInfoAsPrev);\r\n this._updateNotifyIcon(message);\r\n }\r\n\r\n // If you have scrolled, new messages does not move the scroll position\r\n _adjustScrollOffsetAfterMessageAdded(message, hasSameInfoAsPrev) {\r\n if (!hasSameInfoAsPrev && !(this._myTypeFilters[message.myType]) && this._myScrollOffset > 0) {\r\n this._myScrollOffset += message.myLines.length + this._myConfig.myLinesBetweenMessages;\r\n }\r\n }\r\n\r\n _updateAllTexts() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this._updateText(ConsoleVRWidgetMessageType[key]);\r\n }\r\n\r\n this._myTextDirty = false;\r\n }\r\n }\r\n\r\n _updateNotifyIcon(message) {\r\n if (!(this._myTypeFilters[message.myType]) && this._myScrollOffset > 0) {\r\n this._setNotifyIconActive(true);\r\n }\r\n }\r\n\r\n _updateScroll(dt) {\r\n if (this._myScrollUp) {\r\n this._myScrollTimer += dt;\r\n while (this._myScrollTimer > this._myConfig.myScrollDelay) {\r\n this._myScrollTimer -= this._myConfig.myScrollDelay;\r\n this._myScrollOffset += this._myConfig.myScrollAmount;\r\n }\r\n } else if (this._myScrollDown) {\r\n this._myScrollTimer += dt;\r\n while (this._myScrollTimer > this._myConfig.myScrollDelay) {\r\n this._myScrollTimer -= this._myConfig.myScrollDelay;\r\n this._myScrollOffset -= this._myConfig.myScrollAmount;\r\n }\r\n }\r\n\r\n this._clampScrollOffset();\r\n\r\n if (this._myScrollUp || this._myScrollDown) {\r\n this._updateAllTexts();\r\n }\r\n\r\n if (this._myScrollOffset == 0) {\r\n this._setNotifyIconActive(false);\r\n }\r\n }\r\n\r\n _clampScrollOffset() {\r\n let maxScroll = this._getMaxScrollOffset();\r\n this._myScrollOffset = Math.pp_clamp(this._myScrollOffset, 0, maxScroll);\r\n }\r\n\r\n _getMaxScrollOffset() {\r\n return Math.max(this._getLinesCount() - this._myConfig.myMaxLines, 0);\r\n }\r\n\r\n _getLinesCount() {\r\n let linesCount = 0;\r\n for (let message of this._myMessages) {\r\n if (!this._myTypeFilters[message.myType]) {\r\n linesCount += message.myLines.length + this._myConfig.myLinesBetweenMessages;\r\n }\r\n }\r\n linesCount -= this._myConfig.myLinesBetweenMessages; // Empty line is added only between messages\r\n linesCount = Math.max(linesCount, 0);\r\n\r\n return linesCount;\r\n }\r\n\r\n // Listener section\r\n\r\n _addListeners() {\r\n let ui = this._myUI;\r\n\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let cursorTarget = ui.myFilterButtonsCursorTargetComponents[ConsoleVRWidgetMessageType[key]];\r\n let backgroundMaterial = ui.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]].material;\r\n let textMaterial = ui.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]].material;\r\n\r\n cursorTarget.onSingleClick.add(this._toggleFilter.bind(this, ConsoleVRWidgetMessageType[key], textMaterial));\r\n cursorTarget.onDoubleClick.add(this._filterAllButOne.bind(this, ConsoleVRWidgetMessageType[key], textMaterial));\r\n cursorTarget.onTripleClick.add(this._resetFilters.bind(this, ConsoleVRWidgetMessageType[key]));\r\n cursorTarget.onHover.add(this._filterHover.bind(this, ConsoleVRWidgetMessageType[key], backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._filterUnhover.bind(this, ConsoleVRWidgetMessageType[key], backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myClearButtonCursorTargetComponent;\r\n let backgroundMaterial = ui.myClearButtonBackgroundComponent.material;\r\n\r\n cursorTarget.onClick.add(this._clearConsole.bind(this, false, null));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._genericUnhover.bind(this, backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myUpButtonCursorTargetComponent;\r\n let backgroundMaterial = ui.myUpButtonBackgroundComponent.material;\r\n\r\n cursorTarget.onDoubleClick.add(this._instantScrollUp.bind(this, true));\r\n cursorTarget.onDown.add(this._setScrollUp.bind(this, true));\r\n cursorTarget.onDownOnHover.add(this._setScrollUp.bind(this, true));\r\n cursorTarget.onUp.add(this._setScrollUp.bind(this, false));\r\n cursorTarget.onUnhover.add(this._setScrollUp.bind(this, false));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._genericUnhover.bind(this, backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myDownButtonCursorTargetComponent;\r\n let backgroundMaterial = ui.myDownButtonBackgroundComponent.material;\r\n\r\n cursorTarget.onDoubleClick.add(this._instantScrollDown.bind(this));\r\n cursorTarget.onDown.add(this._setScrollDown.bind(this, true));\r\n cursorTarget.onDownOnHover.add(this._setScrollDown.bind(this, true));\r\n cursorTarget.onUp.add(this._setScrollDown.bind(this, false));\r\n cursorTarget.onUnhover.add(this._setScrollDown.bind(this, false));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._genericUnhover.bind(this, backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myNotifyIconCursorTargetComponent;\r\n let backgroundMaterial = ui.myNotifyIconBackgroundComponent.material;\r\n\r\n cursorTarget.onClick.add(this._instantScrollDown.bind(this));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._notifyIconUnhover.bind(this));\r\n }\r\n\r\n ui.myPointerCursorTargetComponent.onHover.add(this._setGamepadScrollEnabled.bind(this, true));\r\n ui.myPointerCursorTargetComponent.onUnhover.add(this._setGamepadScrollEnabled.bind(this, false));\r\n }\r\n\r\n _resetFilters(messageType) {\r\n if (this._myWidgetFrame.isVisible()) {\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let backgroundMaterial = this._myUI.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]].material;\r\n let filterTextMaterial = this._myUI.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]].material;\r\n\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = false;\r\n filterTextMaterial.color = this._myConfig.myMessageTypeColors[ConsoleVRWidgetMessageType[key]];\r\n if (ConsoleVRWidgetMessageType[key] != messageType) {\r\n backgroundMaterial.color = this._myConfig.myBackgroundColor;\r\n }\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _filterAllButOne(messageType) {\r\n if (this._myWidgetFrame.isVisible()) {\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let backgroundMaterial = this._myUI.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]].material;\r\n let filterTextMaterial = this._myUI.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]].material;\r\n if (ConsoleVRWidgetMessageType[key] != messageType) {\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = true;\r\n backgroundMaterial.color = this._myConfig.myFilterButtonDisabledBackgroundColor;\r\n filterTextMaterial.color = this._myConfig.myFilterButtonDisabledTextColor;\r\n } else {\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = false;\r\n filterTextMaterial.color = this._myConfig.myMessageTypeColors[messageType];\r\n }\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _toggleFilter(messageType, textMaterial) {\r\n if (this._myWidgetFrame.isVisible()) {\r\n\r\n this._myTypeFilters[messageType] = !this._myTypeFilters[messageType];\r\n if (this._myTypeFilters[messageType]) {\r\n textMaterial.color = this._myConfig.myFilterButtonDisabledTextColor;\r\n } else {\r\n textMaterial.color = this._myConfig.myMessageTypeColors[messageType];\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _clearConsole(codeDrivenClear = false, sender = null) {\r\n if (this._myWidgetFrame.isVisible() || codeDrivenClear) {\r\n this._myMessages = [];\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n\r\n if (codeDrivenClear) {\r\n switch (sender) {\r\n case ConsoleVRWidgetSender.BROWSER_CONSOLE:\r\n this._myOldBrowserConsoleClear.apply(console);\r\n break;\r\n case ConsoleVRWidgetSender.CONSOLE_VR:\r\n this._myOldConsoleVRClear.apply(Globals.getConsoleVR(this._myEngine));\r\n break;\r\n default:\r\n break;\r\n }\r\n } else if (this._myConfig.myClearBrowserConsoleWhenClearPressed) {\r\n ConsoleOriginalFunctions.clear(this._myEngine);\r\n }\r\n }\r\n }\r\n\r\n _setScrollUp(value) {\r\n if (this._myWidgetFrame.isVisible() || !value) {\r\n if (value) {\r\n this._myScrollTimer = 0;\r\n }\r\n\r\n this._myScrollUp = value;\r\n }\r\n }\r\n\r\n _setScrollDown(value) {\r\n if (this._myWidgetFrame.isVisible() || !value) {\r\n if (value) {\r\n this._myScrollTimer = 0;\r\n }\r\n\r\n this._myScrollDown = value;\r\n }\r\n }\r\n\r\n _instantScrollUp() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n this._myScrollOffset = this._getMaxScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _instantScrollDown() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n this._myScrollOffset = 0;\r\n this._setNotifyIconActive(false);\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _setNotifyIconActive(active) {\r\n this._myUI.myNotifyIconPanel.pp_setActive(active && this._myWidgetFrame.isVisible());\r\n }\r\n\r\n _notifyIconUnhover() {\r\n let material = this._myUI.myNotifyIconBackgroundComponent.material;\r\n material.color = this._myConfig.myNotifyIconColor;\r\n }\r\n\r\n _filterHover(messageType, material) {\r\n this._genericHover(material);\r\n }\r\n\r\n _filterUnhover(messageType, material) {\r\n if (this._myTypeFilters[messageType]) {\r\n material.color = this._myConfig.myFilterButtonDisabledBackgroundColor;\r\n } else {\r\n material.color = this._myConfig.myBackgroundColor;\r\n }\r\n }\r\n\r\n _genericHover(material) {\r\n material.color = this._myConfig.myButtonHoverColor;\r\n }\r\n\r\n _genericUnhover(material) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n }\r\n\r\n // Gamepad section\r\n\r\n _updateGamepadsExtraActions(dt) {\r\n if (this._myLeftGamepad && this._myRightGamepad) {\r\n if ((this._myLeftGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressStart() && this._myRightGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed()) ||\r\n (this._myRightGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressStart() && this._myLeftGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed())) {\r\n this._toggleVisibility();\r\n }\r\n\r\n this._myPulseTimer = Math.max(this._myPulseTimer - dt, 0);\r\n\r\n this._updateScrollWithThumbstick(dt);\r\n }\r\n }\r\n\r\n _toggleVisibility() {\r\n this._myWidgetFrame.toggleVisibility();\r\n }\r\n\r\n _widgetVisibleChanged(visible) {\r\n this._myUI.setVisible(visible);\r\n if (visible) {\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _updateScrollWithThumbstick(dt) {\r\n if (this._myWidgetFrame.isVisible() && this._myGamepadScrollEnabled) {\r\n let axes = vec2_create(0, 0);\r\n if (this._myConfig.myScrollThumbstickHandedness == ToolHandedness.LEFT) {\r\n axes = this._myLeftGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes;\r\n } else if (this._myConfig.myScrollThumbstickHandedness == ToolHandedness.RIGHT) {\r\n axes = this._myRightGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes;\r\n }\r\n\r\n if (Math.abs(axes[1]) > this._myConfig.myScrollThumbstickMinThreshold) {\r\n this._myScrollThumbstickTimer += dt;\r\n\r\n while (this._myScrollThumbstickTimer > this._myConfig.myScrollThumbstickDelay) {\r\n this._myScrollThumbstickTimer -= this._myConfig.myScrollThumbstickDelay;\r\n\r\n let normalizedScrollAmount = (Math.abs(axes[1]) - this._myConfig.myScrollThumbstickMinThreshold) / (1 - this._myConfig.myScrollThumbstickMinThreshold);\r\n this._myScrollOffset += Math.sign(axes[1]) * normalizedScrollAmount * this._myConfig.myScrollThumbstickAmount;\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n } else {\r\n this._myScrollThumbstickTimer = 0;\r\n }\r\n }\r\n }\r\n\r\n _pulseGamepad() {\r\n if (this._myLeftGamepad && this._myRightGamepad) {\r\n let pulseType = this._myParams.myPulseOnNewMessage;\r\n let pulseEnabled = pulseType == ConsoleVRWidgetPulseOnNewMessage.ALWAYS || (!this._myWidgetFrame.isVisible() && pulseType == ConsoleVRWidgetPulseOnNewMessage.WHEN_HIDDEN);\r\n if (pulseEnabled && this._myPulseTimer == 0) {\r\n if (this._myParams.myHandedness == ToolHandedness.RIGHT) {\r\n this._myRightGamepad.pulse(this._myConfig.myPulseIntensity, this._myConfig.myPulseDuration);\r\n } else {\r\n this._myLeftGamepad.pulse(this._myConfig.myPulseIntensity, this._myConfig.myPulseDuration);\r\n }\r\n this._myPulseTimer = this._myConfig.myPulseDelay;\r\n }\r\n }\r\n }\r\n\r\n _isSimpleArray(array) {\r\n if (this._isSpecialSimpleArray(array)) {\r\n return true;\r\n } else if (Array.isArray(array)) {\r\n let builtInArray = true;\r\n for (let element of array) {\r\n if (element instanceof Object) {\r\n builtInArray = false;\r\n break;\r\n }\r\n }\r\n\r\n return builtInArray;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _isSpecialSimpleArray(item) {\r\n return item && item.constructor &&\r\n (\r\n item.constructor.name == \"Uint8ClampedArray\" ||\r\n item.constructor.name == \"Uint8Array\" ||\r\n item.constructor.name == \"Uint16Array\" ||\r\n item.constructor.name == \"Uint32Array\" ||\r\n item.constructor.name == \"Int8Array\" ||\r\n item.constructor.name == \"Int16Array\" ||\r\n item.constructor.name == \"Int32Array\" ||\r\n item.constructor.name == \"Float32Array\" ||\r\n item.constructor.name == \"Float64Array\"\r\n );\r\n }\r\n\r\n _setGamepadScrollEnabled(enabled) {\r\n this._myGamepadScrollEnabled = enabled;\r\n\r\n if (!this._myConfig.myGamepadScrollOnlyOnHover) {\r\n this._myGamepadScrollEnabled = true;\r\n }\r\n }\r\n\r\n _jsonReplacer(key, value) {\r\n if (value instanceof Map) {\r\n return Array.from(value.entries());\r\n } else if (this._isSimpleArray(value)) {\r\n let array = value;\r\n if (this._isSpecialSimpleArray(array)) {\r\n let arrayCopy = []; // Special arrays like Float32Array do not print like Array\r\n for (let i = 0; i < array.length; i++) {\r\n arrayCopy[i] = array[i];\r\n }\r\n\r\n array = arrayCopy;\r\n }\r\n\r\n let stringifiedArray = JSON.stringify(array);\r\n stringifiedArray = stringifiedArray.split(\",\").join(\", \");\r\n return stringifiedArray;\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n window.removeEventListener(\"error\", this._myErrorEventListener);\r\n window.removeEventListener(\"unhandledrejection\", this._myUnhandledRejectionEventListener);\r\n\r\n this._myUI.destroy();\r\n this._myWidgetFrame.destroy();\r\n\r\n if (this._myParams.myResetBrowserConsoleOriginalFunctionsOnDestroy) {\r\n console.log = ConsoleOriginalFunctions.getLog(this._myEngine);\r\n console.error = ConsoleOriginalFunctions.getError(this._myEngine);\r\n console.warn = ConsoleOriginalFunctions.getWarn(this._myEngine);\r\n console.info = ConsoleOriginalFunctions.getInfo(this._myEngine);\r\n console.debug = ConsoleOriginalFunctions.getDebug(this._myEngine);\r\n console.assert = ConsoleOriginalFunctions.getAssert(this._myEngine);\r\n console.clear = ConsoleOriginalFunctions.getClear(this._myEngine);\r\n } else {\r\n console.log = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.LOG];\r\n console.error = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ERROR];\r\n console.warn = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.WARN];\r\n console.info = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.INFO];\r\n console.debug = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.DEBUG];\r\n console.assert = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ASSERT];\r\n console.clear = this._myOldBrowserConsoleClear;\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ConsoleVRWidget, ConsoleVRWidgetParams } from \"../console_vr_widget.js\";\r\nimport { InitConsoleVRComponent } from \"./init_console_vr_component.js\";\r\n\r\nexport class ConsoleVRToolComponent extends Component {\r\n static TypeName = \"pp-console-vr-tool\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"None\", \"Left\", \"Right\"], \"None\"),\r\n _myOverrideBrowserConsoleFunctions: Property.enum([\"None\", \"All\", \"Errors & Warns\"], \"All\"),\r\n _myShowOnStart: Property.bool(false),\r\n _myShowVisibilityButton: Property.bool(false),\r\n _myPulseOnNewMessage: Property.enum([\"Never\", \"Always\", \"When Hidden\"], \"Never\")\r\n };\r\n\r\n start() {\r\n this._myStarted = false;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this.object.pp_addComponent(InitConsoleVRComponent);\r\n\r\n this._myWidget = new ConsoleVRWidget(this.engine);\r\n\r\n let params = new ConsoleVRWidgetParams(this.engine);\r\n params.myHandedness = [null, \"left\", \"right\"][this._myHandedness];\r\n params.myOverrideBrowserConsoleFunctions = this._myOverrideBrowserConsoleFunctions;\r\n params.myShowOnStart = this._myShowOnStart;\r\n params.myShowVisibilityButton = this._myShowVisibilityButton;\r\n params.myPulseOnNewMessage = this._myPulseOnNewMessage;\r\n params.myPlaneMaterial = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n params.myTextMaterial = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n\r\n this._myWidget.start(this.object, params);\r\n\r\n this._myWidgetVisibleBackup = null;\r\n\r\n this._myStarted = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup != null) {\r\n this._myWidget.setVisible(false);\r\n this._myWidget.setVisible(this._myWidgetVisibleBackup);\r\n\r\n this._myWidgetVisibleBackup = null;\r\n }\r\n\r\n this._myWidget.update(dt);\r\n }\r\n } else if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myStarted) {\r\n this._myWidget.destroy();\r\n }\r\n }\r\n}", "/*\r\nEasy Tune Variables Examples\r\n\r\nNumber: Globals.getEasyTuneVariables().add(new EasyTuneNumber(\"Float\", 1.00, (newValue) => this.myFloat = newValue, true, 2, 0.1));\r\nNumber Array: Globals.getEasyTuneVariables().add(new EasyTuneNumberArray(\"Float Array\", [1.00, 2.00, 3.00], (newValue) => this.myFloatArray.pp_copy(newValue), true, 2, 0.1));\r\nInt: Globals.getEasyTuneVariables().add(new EasyTuneInt(\"Int\", this.myInt, (newValue) => this.myInt = newValue, true, 1));\r\nInt Array: Globals.getEasyTuneVariables().add(new EasyTuneIntArray(\"Int Array\", [1, 2, 3], (newValue) => this.myIntArray.pp_copy(newValue), true, 1));\r\nBool: Globals.getEasyTuneVariables().add(new EasyTuneBool(\"Bool\", this.myBool, (newValue) => this.myBool = newValue, true));\r\nBool Array: Globals.getEasyTuneVariables().add(new EasyTuneBoolArray(\"Bool Array\", [false, true, false], (newValue) => this.myBoolArray.pp_copy(newValue), true));\r\nTransform: Globals.getEasyTuneVariables().add(new EasyTuneTransform(\"Transform\", mat4_create(), (newValue) => this.myTransform.mat4_copy(newValue), true, true, 3));\r\n*/\r\n\r\nimport { Emitter } from \"@wonderlandengine/api\";\r\nimport { mat4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"./easy_tune_utils.js\";\r\n\r\nexport let EasyTuneVariableType = {\r\n NONE: 0,\r\n NUMBER: 1,\r\n BOOL: 2,\r\n TRANSFORM: 3\r\n};\r\n\r\nexport class EasyTuneVariableExtraParams {\r\n constructor(autoimportEnabled = null, manualImportEnabled = null, exportEnabled = null) {\r\n this.myAutoImportEnabled = autoimportEnabled;\r\n this.myManualImportEnabled = manualImportEnabled;\r\n this.myExportEnabled = exportEnabled;\r\n }\r\n}\r\n\r\nexport class EasyTuneVariable {\r\n\r\n constructor(name, type, onValueChangedEventListener = null, showOnWidget = true, extraParams = new EasyTuneVariableExtraParams(), engine = Globals.getMainEngine()) {\r\n this._myName = name;\r\n this._myType = type;\r\n\r\n this._myValue = null;\r\n this._myDefaultValue = null;\r\n\r\n this._myShowOnWidget = showOnWidget;\r\n this._myAutoImportEnabled = extraParams.myAutoImportEnabled != null ? extraParams.myAutoImportEnabled : EasyTuneUtils.getAutoImportEnabledDefaultValue(engine);\r\n this._myManualImportEnabled = extraParams.myManualImportEnabled != null ? extraParams.myManualImportEnabled : EasyTuneUtils.getManualImportEnabledDefaultValue(engine);\r\n this._myExportEnabled = extraParams.myExportEnabled != null ? extraParams.myExportEnabled : EasyTuneUtils.getExportEnabledDefaultValue(engine);\r\n\r\n this._myWidgetCurrentVariable = false;\r\n\r\n this._myValueChangedEmitter = new Emitter(); // Signature: listener(value, easyTuneVariables)\r\n\r\n this._myEngine = engine;\r\n\r\n if (onValueChangedEventListener != null) {\r\n this.registerValueChangedEventListener(this, onValueChangedEventListener);\r\n }\r\n }\r\n\r\n getName() {\r\n return this._myName;\r\n }\r\n\r\n getType() {\r\n return this._myType;\r\n }\r\n\r\n isWidgetCurrentVariable() {\r\n return this._myWidgetCurrentVariable;\r\n }\r\n\r\n setWidgetCurrentVariable(widgetCurrentVariable) {\r\n this._myWidgetCurrentVariable = widgetCurrentVariable;\r\n return this;\r\n }\r\n\r\n getValue() {\r\n return this._myValue;\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n let valueChanged = this._myValue != value;\r\n\r\n this._myValue = value;\r\n\r\n if (resetDefaultValue) {\r\n EasyTuneVariable.prototype.setDefaultValue.call(this, value);\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(this._myEngine);\r\n\r\n if (valueChanged) {\r\n this._myValueChangedEmitter.notify(this.getValue(), this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n getDefaultValue() {\r\n return this._myDefaultValue;\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myDefaultValue = value;\r\n return this;\r\n }\r\n\r\n isShownOnWidget() {\r\n return this._myShowOnWidget;\r\n }\r\n\r\n setShowOnWidget(showOnWidget) {\r\n this._myShowOnWidget = showOnWidget;\r\n return this;\r\n }\r\n\r\n isManualImportEnabled() {\r\n return this._myManualImportEnabled;\r\n }\r\n\r\n isAutoImportEnabled() {\r\n return this._myAutoImportEnabled;\r\n }\r\n\r\n isExportEnabled() {\r\n return this._myExportEnabled;\r\n }\r\n\r\n setManualImportEnabled(enabled) {\r\n this._myManualImportEnabled = enabled;\r\n return this;\r\n }\r\n\r\n setAutoImportEnabled(enabled) {\r\n this._myAutoImportEnabled = enabled;\r\n return this;\r\n }\r\n\r\n setExportEnabled(enabled) {\r\n this._myExportEnabled = enabled;\r\n return this;\r\n }\r\n\r\n fromJSON(valueJSON, resetDefaultValue = false) {\r\n this.setValue(JSON.parse(valueJSON), resetDefaultValue);\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.getValue());\r\n }\r\n\r\n registerValueChangedEventListener(id, listener) {\r\n this._myValueChangedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterValueChangedEventListener(id) {\r\n this._myValueChangedEmitter.remove(id);\r\n }\r\n}\r\n\r\nexport class EasyTuneVariableArray extends EasyTuneVariable {\r\n\r\n constructor(name, type, value, onValueChangedEventListener, showOnWidget, extraParams, engine) {\r\n super(name, type, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n EasyTuneVariableArray.prototype.setValue.call(this, value, true);\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n let valueChanged = this._myValue != null && !this._myValue.pp_equals(value);\r\n\r\n if (this._myValue == null) {\r\n this._myValue = value.pp_clone();\r\n } else {\r\n this._myValue.pp_copy(value);\r\n }\r\n\r\n if (resetDefaultValue) {\r\n EasyTuneVariableArray.prototype.setDefaultValue.call(this, value);\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(this._myEngine);\r\n\r\n if (valueChanged) {\r\n this._myValueChangedEmitter.notify(this.getValue(), this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n setDefaultValue(value) {\r\n if (this._myDefaultValue == null) {\r\n this._myDefaultValue = value.pp_clone();\r\n } else {\r\n this._myDefaultValue.pp_copy(value);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\n// NUMBER\r\n\r\nexport class EasyTuneNumberArray extends EasyTuneVariableArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, decimalPlaces = 3, stepPerSecond = 1, min = null, max = null, editAllValuesTogether = false, extraParams, engine) {\r\n super(name, EasyTuneVariableType.NUMBER, value, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n this._myDecimalPlaces = decimalPlaces;\r\n this._myStepPerSecond = stepPerSecond;\r\n\r\n this._myDefaultStepPerSecond = this._myStepPerSecond;\r\n\r\n this._myMin = min;\r\n this._myMax = max;\r\n\r\n this._myEditAllValuesTogether = editAllValuesTogether;\r\n\r\n this._clampValue(true);\r\n }\r\n\r\n setMax(max) {\r\n this._myMax = max;\r\n this._clampValue(false);\r\n }\r\n\r\n setMin(min) {\r\n this._myMin = min;\r\n this._clampValue(false);\r\n }\r\n\r\n _clampValue(resetDefaultValue) {\r\n let clampedValue = this._myValue.vec_clamp(this._myMin, this._myMax);\r\n\r\n if (!resetDefaultValue) {\r\n let clampedDefaultValue = this.getDefaultValue().vec_clamp(this._myMin, this._myMax);\r\n let defaultValueChanged = !clampedDefaultValue.vec_equals(this.getDefaultValue(), 0.00001);\r\n if (defaultValueChanged) {\r\n EasyTuneVariableArray.prototype.setDefaultValue.call(this, clampedDefaultValue);\r\n }\r\n }\r\n\r\n EasyTuneVariableArray.prototype.setValue.call(this, clampedValue, resetDefaultValue);\r\n }\r\n}\r\n\r\nexport class EasyTuneNumber extends EasyTuneNumberArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, decimalPlaces, stepPerSecond, min, max, extraParams, engine) {\r\n super(name, [value], onValueChangedEventListener, showOnWidget, decimalPlaces, stepPerSecond, min, max, undefined, extraParams, engine);\r\n\r\n this._myTempValue = [0];\r\n this._myTempDefaultValue = [0];\r\n }\r\n\r\n getValue() {\r\n return super.getValue()[0];\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n this._myTempValue[0] = value;\r\n return super.setValue(this._myTempValue, resetDefaultValue);\r\n }\r\n\r\n getDefaultValue() {\r\n return super.getDefaultValue()[0];\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myTempDefaultValue[0] = value;\r\n return super.setDefaultValue(this._myTempValue);\r\n }\r\n}\r\n\r\nexport class EasyTuneInt extends EasyTuneNumber {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, stepPerSecond, min, max, extraParams, engine) {\r\n super(name, value, onValueChangedEventListener, showOnWidget, 0, stepPerSecond, min, max, extraParams, engine);\r\n }\r\n}\r\n\r\nexport class EasyTuneIntArray extends EasyTuneNumberArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, stepPerSecond, min, max, editAllValuesTogether, extraParams, engine) {\r\n let roundedValue = value.pp_clone();\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n roundedValue[i] = Math.round(roundedValue[i]);\r\n }\r\n\r\n super(name, roundedValue, onValueChangedEventListener, showOnWidget, 0, stepPerSecond, min != null ? Math.round(min) : null, max != null ? Math.round(max) : max, editAllValuesTogether, extraParams, engine);\r\n }\r\n}\r\n\r\n// BOOL\r\n\r\nexport class EasyTuneBoolArray extends EasyTuneVariableArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, extraParams, engine) {\r\n super(name, EasyTuneVariableType.BOOL, value, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n }\r\n}\r\n\r\nexport class EasyTuneBool extends EasyTuneBoolArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, extraParams, engine) {\r\n super(name, [value], onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n this._myTempValue = [0];\r\n this._myTempDefaultValue = [0];\r\n }\r\n\r\n getValue() {\r\n return super.getValue()[0];\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n this._myTempValue[0] = value;\r\n return super.setValue(this._myTempValue, resetDefaultValue);\r\n }\r\n\r\n getDefaultValue() {\r\n return super.getDefaultValue()[0];\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myTempDefaultValue[0] = value;\r\n return super.setDefaultValue(this._myTempValue);\r\n }\r\n}\r\n\r\n// EASY TUNE EASY TRANSFORM\r\n\r\nexport class EasyTuneTransform extends EasyTuneVariable {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, scaleAsOne = true, decimalPlaces = 3, positionStepPerSecond = 1, rotationStepPerSecond = 50, scaleStepPerSecond = 1, extraParams, engine) {\r\n super(name, EasyTuneVariableType.TRANSFORM, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n this._myDecimalPlaces = decimalPlaces;\r\n\r\n this._myPosition = value.mat4_getPosition();\r\n this._myRotation = value.mat4_getRotationDegrees();\r\n this._myScale = value.mat4_getScale();\r\n\r\n let decimalPlacesMultiplier = Math.pow(10, this._myDecimalPlaces);\r\n for (let i = 0; i < 3; i++) {\r\n this._myScale[i] = Math.max(this._myScale[i], 1 / decimalPlacesMultiplier);\r\n }\r\n\r\n this._myScaleAsOne = scaleAsOne;\r\n\r\n this._myPositionStepPerSecond = positionStepPerSecond;\r\n this._myRotationStepPerSecond = rotationStepPerSecond;\r\n this._myScaleStepPerSecond = scaleStepPerSecond;\r\n\r\n this._myDefaultPosition = this._myPosition.vec3_clone();\r\n this._myDefaultRotation = this._myRotation.vec3_clone();\r\n this._myDefaultScale = this._myScale.vec3_clone();\r\n\r\n this._myDefaultPositionStepPerSecond = this._myPositionStepPerSecond;\r\n this._myDefaultRotationStepPerSecond = this._myRotationStepPerSecond;\r\n this._myDefaultScaleStepPerSecond = this._myScaleStepPerSecond;\r\n\r\n this._myTransform = mat4_create();\r\n this._myTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n\r\n this._myTempTransform = mat4_create();\r\n }\r\n\r\n getValue() {\r\n this._myTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n return this._myTransform;\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n this._myTempTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n\r\n value.mat4_getPosition(this._myPosition);\r\n value.mat4_getRotationDegrees(this._myRotation);\r\n value.mat4_getScale(this._myScale);\r\n\r\n this._myTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n\r\n let valueChanged = !this._myTempTransform.pp_equals(this._myTransform);\r\n\r\n if (resetDefaultValue) {\r\n EasyTuneTransform.prototype.setDefaultValue.call(this, value);\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(this._myEngine);\r\n\r\n if (valueChanged) {\r\n this._myValueChangedEmitter.notify(this.getValue(), this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myDefaultPosition = value.mat4_getPosition();\r\n this._myDefaultRotation = value.mat4_getRotationDegrees();\r\n this._myDefaultScale = value.mat4_getScale();\r\n\r\n return this;\r\n }\r\n\r\n fromJSON(valueJSON, resetDefaultValue = false) {\r\n this.setValue(JSON.parse(valueJSON), resetDefaultValue);\r\n }\r\n\r\n toJSON() {\r\n return this.getValue().vec_toString();\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _mySetWidgetCurrentVariableCallbacks = new WeakMap(); // Signature: callback(variableName)\r\nlet _myRefreshWidgetCallbacks = new WeakMap(); // Signature: callback()\r\n\r\nlet _myAutoImportEnabledDefaultValues = new WeakMap();\r\nlet _myManualImportEnabledDefaultValues = new WeakMap();\r\nlet _myExportEnabledDefaultValues = new WeakMap();\r\n\r\nexport function setWidgetCurrentVariable(variableName, engine = Globals.getMainEngine()) {\r\n if (_mySetWidgetCurrentVariableCallbacks.has(engine)) {\r\n for (let callback of _mySetWidgetCurrentVariableCallbacks.get(engine).values()) {\r\n callback(variableName);\r\n }\r\n }\r\n}\r\n\r\nexport function refreshWidget(engine = Globals.getMainEngine()) {\r\n if (_myRefreshWidgetCallbacks.has(engine)) {\r\n for (let callback of _myRefreshWidgetCallbacks.get(engine).values()) {\r\n callback();\r\n }\r\n }\r\n}\r\n\r\n// fileURL can contain parameters inside brackets, like {param}\r\n// Those parameters will be replaced with the same one on the current page url, like www.currentpage.com/?param=2\r\nexport function importVariables(fileURL = null, resetVariablesDefaultValueOnImport = false, manualImport = false, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n if (fileURL == null || fileURL.length == 0) {\r\n if (navigator.clipboard) {\r\n navigator.clipboard.readText().then(\r\n function (clipboard) {\r\n Globals.getEasyTuneVariables(engine).fromJSON(clipboard, resetVariablesDefaultValueOnImport, manualImport);\r\n\r\n EasyTuneUtils.refreshWidget(engine);\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Imported from: clipboard\");\r\n console.log(clipboard);\r\n }, function () {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from: clipboard\");\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from: clipboard\");\r\n console.error(reason);\r\n });\r\n }\r\n } else {\r\n let replacedFileURL = _importExportVariablesReplaceFileURLParams(fileURL, engine);\r\n\r\n fetch(replacedFileURL).then(\r\n function (response) {\r\n if (response.ok) {\r\n response.text().then(\r\n function (text) {\r\n Globals.getEasyTuneVariables(engine).fromJSON(text, resetVariablesDefaultValueOnImport, manualImport);\r\n\r\n EasyTuneUtils.refreshWidget(engine);\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Imported from:\", replacedFileURL);\r\n console.log(text);\r\n },\r\n function (response) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n );\r\n } else {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n },\r\n function (response) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(reason);\r\n });\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(engine);\r\n}\r\n\r\n// fileURL can contain parameters inside brackets, like {param}\r\n// Those parameters will be replaced with the same one on the current page url, like www.currentpage.com/?param=2\r\nexport function exportVariables(fileURL = null, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n let jsonVariables = Globals.getEasyTuneVariables(engine).toJSON();\r\n\r\n if (fileURL == null || fileURL.length == 0) {\r\n if (navigator.clipboard) {\r\n navigator.clipboard.writeText(jsonVariables).then(\r\n function () {\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Exported to: clipboard\");\r\n console.log(jsonVariables);\r\n },\r\n function () {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to: clipboard\");\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to: clipboard\");\r\n console.error(reason);\r\n });\r\n }\r\n } else {\r\n let replacedFileURL = _importExportVariablesReplaceFileURLParams(fileURL, engine);\r\n\r\n fetch(replacedFileURL, {\r\n headers: {\r\n \"Accept\": \"application/json\",\r\n \"Content-Type\": \"application/json\"\r\n },\r\n method: \"POST\",\r\n body: jsonVariables\r\n }).then(\r\n function (response) {\r\n if (response.ok) {\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Exported to:\", replacedFileURL);\r\n console.log(jsonVariables);\r\n } else {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n },\r\n function (response) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to:\", replacedFileURL);\r\n console.error(reason);\r\n });\r\n }\r\n}\r\n\r\nexport function setAutoImportEnabledDefaultValue(defaultValue, engine = Globals.getMainEngine()) {\r\n _myAutoImportEnabledDefaultValues.set(engine, defaultValue);\r\n}\r\n\r\nexport function setManualImportEnabledDefaultValue(defaultValue, engine = Globals.getMainEngine()) {\r\n _myManualImportEnabledDefaultValues.set(engine, defaultValue);\r\n}\r\n\r\nexport function setExportEnabledDefaultValue(defaultValue, engine = Globals.getMainEngine()) {\r\n _myExportEnabledDefaultValues.set(engine, defaultValue);\r\n}\r\n\r\nexport function getAutoImportEnabledDefaultValue(engine = Globals.getMainEngine()) {\r\n let defaultValue = true;\r\n\r\n if (_myAutoImportEnabledDefaultValues.has(engine)) {\r\n defaultValue = _myAutoImportEnabledDefaultValues.get(engine);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function getManualImportEnabledDefaultValue(engine = Globals.getMainEngine()) {\r\n let defaultValue = true;\r\n\r\n if (_myManualImportEnabledDefaultValues.has(engine)) {\r\n defaultValue = _myManualImportEnabledDefaultValues.get(engine);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function getExportEnabledDefaultValue(engine = Globals.getMainEngine()) {\r\n let defaultValue = true;\r\n\r\n if (_myExportEnabledDefaultValues.has(engine)) {\r\n defaultValue = _myExportEnabledDefaultValues.get(engine);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function addSetWidgetCurrentVariableCallback(id, callback, engine = Globals.getMainEngine()) {\r\n if (!_mySetWidgetCurrentVariableCallbacks.has(engine)) {\r\n _mySetWidgetCurrentVariableCallbacks.set(engine, new Map());\r\n }\r\n\r\n _mySetWidgetCurrentVariableCallbacks.get(engine).set(id, callback);\r\n}\r\n\r\nexport function removeSetWidgetCurrentVariableCallback(id, engine = Globals.getMainEngine()) {\r\n if (_mySetWidgetCurrentVariableCallbacks.has(engine)) {\r\n _mySetWidgetCurrentVariableCallbacks.get(engine).delete(id);\r\n }\r\n}\r\n\r\nexport function addRefreshWidgetCallback(id, callback, engine = Globals.getMainEngine()) {\r\n if (!_myRefreshWidgetCallbacks.has(engine)) {\r\n _myRefreshWidgetCallbacks.set(engine, new Map());\r\n }\r\n\r\n _myRefreshWidgetCallbacks.get(engine).set(id, callback);\r\n}\r\n\r\nexport function removeRefreshWidgetCallback(id, engine = Globals.getMainEngine()) {\r\n if (_myRefreshWidgetCallbacks.has(engine)) {\r\n _myRefreshWidgetCallbacks.get(engine).delete(id);\r\n }\r\n}\r\n\r\nexport let EasyTuneUtils = {\r\n setWidgetCurrentVariable,\r\n refreshWidget,\r\n importVariables,\r\n exportVariables,\r\n setAutoImportEnabledDefaultValue,\r\n setManualImportEnabledDefaultValue,\r\n setExportEnabledDefaultValue,\r\n getAutoImportEnabledDefaultValue,\r\n getManualImportEnabledDefaultValue,\r\n getExportEnabledDefaultValue,\r\n addSetWidgetCurrentVariableCallback,\r\n removeSetWidgetCurrentVariableCallback,\r\n addRefreshWidgetCallback,\r\n removeRefreshWidgetCallback\r\n};\r\n\r\n\r\n\r\nlet _importExportVariablesReplaceFileURLParams = function () {\r\n let matchEasyTuneURLParamsRegex = new RegExp(\"\\\\{.+?\\\\}\", \"g\");\r\n return function _importExportVariablesReplaceFileURLParams(fileURL, engine = Globals.getMainEngine()) {\r\n let params = fileURL.match(matchEasyTuneURLParamsRegex);\r\n\r\n if (params == null || params.length == 0) {\r\n return fileURL;\r\n }\r\n\r\n for (let i = 0; i < params.length; i++) {\r\n params[i] = params[i].replace(\"{\", \"\");\r\n params[i] = params[i].replace(\"}\", \"\");\r\n }\r\n\r\n let urlSearchParams = new URL(document.location).searchParams;\r\n\r\n let replacedFileURL = fileURL;\r\n\r\n for (let param of params) {\r\n let searchParamValue = urlSearchParams.get(param);\r\n if (searchParamValue != null) {\r\n replacedFileURL = replacedFileURL.replace(\"{\" + param + \"}\", searchParamValue);\r\n }\r\n }\r\n\r\n return replacedFileURL;\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"../easy_tune_utils.js\";\r\nimport { EasyTuneWidget, EasyTuneWidgetParams } from \"../easy_tune_widgets/easy_tune_widget.js\";\r\nimport { InitEasyTuneVariablesComponent } from \"./init_easy_tune_variables_component.js\";\r\n\r\nexport class EasyTuneToolComponent extends Component {\r\n static TypeName = \"pp-easy-tune-tool\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"None\", \"Left\", \"Right\"], \"None\"),\r\n _myShowOnStart: Property.bool(false),\r\n _myShowVisibilityButton: Property.bool(false),\r\n _myGamepadScrollVariableEnabled: Property.bool(true),\r\n\r\n _myShowVariablesImportExportButtons: Property.bool(false),\r\n _myVariablesImportURL: Property.string(\"\"), // The URL can contain parameters inside brackets, like {param}\r\n _myVariablesExportURL: Property.string(\"\"), // Those parameters will be replaced with the same one on the current page url, like www.currentpage.com/?param=2\r\n _myImportVariablesOnStart: Property.bool(false),\r\n _myResetVariablesDefaultValueOnImport: Property.bool(false)\r\n };\r\n\r\n init() {\r\n // #TODO this should check for tool enabled but it might not have been initialized yet, not way to specify component order\r\n // It can't be moved to start either, because other components might call setWidgetCurrentVariable or refreshWidget during start, \r\n // so it needs to be initialized before that\r\n\r\n this.object.pp_addComponent(InitEasyTuneVariablesComponent);\r\n\r\n this._myWidget = new EasyTuneWidget(this.engine);\r\n\r\n EasyTuneUtils.addSetWidgetCurrentVariableCallback(this, function (variableName) {\r\n this._myWidget.setCurrentVariable(variableName);\r\n }.bind(this), this.engine);\r\n\r\n EasyTuneUtils.addRefreshWidgetCallback(this, function () {\r\n this._myWidget.refresh();\r\n }.bind(this), this.engine);\r\n\r\n this._myStarted = false;\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n let params = new EasyTuneWidgetParams();\r\n params.myHandedness = [null, \"left\", \"right\"][this._myHandedness];\r\n params.myShowOnStart = this._myShowOnStart;\r\n params.myShowVisibilityButton = this._myShowVisibilityButton;\r\n params.myShowAdditionalButtons = true;\r\n params.myGamepadScrollVariableEnabled = this._myGamepadScrollVariableEnabled;\r\n params.myPlaneMaterial = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n params.myTextMaterial = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n\r\n params.myShowVariablesImportExportButtons = this._myShowVariablesImportExportButtons;\r\n params.myVariablesImportCallback = function (onSuccessCallback, onFailureCallback) {\r\n EasyTuneUtils.importVariables(this._myVariablesImportURL, this._myResetVariablesDefaultValueOnImport, true, onSuccessCallback, onFailureCallback, this.engine);\r\n }.bind(this);\r\n params.myVariablesExportCallback = function (onSuccessCallback, onFailureCallback) {\r\n EasyTuneUtils.exportVariables(this._myVariablesExportURL, onSuccessCallback, onFailureCallback, this.engine);\r\n }.bind(this);\r\n\r\n this._myWidget.start(this.object, params, Globals.getEasyTuneVariables(this.engine));\r\n\r\n this._myWidgetVisibleBackup = null;\r\n\r\n this._myStarted = true;\r\n this._myFirstUpdate = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n if (this._myImportVariablesOnStart) {\r\n EasyTuneUtils.importVariables(this._myVariablesImportURL, this._myResetVariablesDefaultValueOnImport, false, undefined, undefined, this.engine);\r\n }\r\n }\r\n\r\n if (this._myWidgetVisibleBackup != null) {\r\n this._myWidget.setVisible(false);\r\n this._myWidget.setVisible(this._myWidgetVisibleBackup);\r\n\r\n this._myWidgetVisibleBackup = null;\r\n }\r\n\r\n this._myWidget.update(dt);\r\n }\r\n } else if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n this._myWidget.destroy();\r\n\r\n EasyTuneUtils.removeSetWidgetCurrentVariableCallback(this, this.engine);\r\n EasyTuneUtils.removeRefreshWidgetCallback(this, this.engine);\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\n\r\nexport class EasyTuneBaseWidgetParams {\r\n\r\n constructor() {\r\n this.myVariablesImportCallback = null; // Signature: callback()\r\n this.myVariablesExportCallback = null; // Signature: callback()\r\n }\r\n}\r\n\r\nexport class EasyTuneBaseWidget {\r\n\r\n constructor(params) {\r\n this._myConfig = null;\r\n this._myUI = null;\r\n\r\n this._myParams = params;\r\n\r\n this._myVariable = null;\r\n\r\n this._myVisible = true;\r\n\r\n this._myScrollVariableRequestEmitter = new Emitter(); // Signature: listener(scrollAmount)\r\n\r\n this._myAppendToVariableName = \"\";\r\n\r\n this._myScrollVariableActive = false;\r\n this._myScrollDirection = 0;\r\n this._myScrollVariableTimer = 0;\r\n this._myHasScrolled = false;\r\n\r\n this._myResetImportLabelTimer = new Timer(0, false);\r\n this._myResetExportLabelTimer = new Timer(0, false);\r\n\r\n this._myDestroyed = false;\r\n\r\n }\r\n\r\n setVisible(visible) {\r\n if (visible) {\r\n this._refreshUI();\r\n }\r\n\r\n this._myUI.setVisible(visible);\r\n\r\n this._myVisible = visible;\r\n }\r\n\r\n setEasyTuneVariable(variable, appendToVariableName) {\r\n this._myVariable = variable;\r\n\r\n if (appendToVariableName != null) {\r\n this._myAppendToVariableName = appendToVariableName;\r\n } else {\r\n this._myAppendToVariableName = \"\";\r\n }\r\n\r\n this._setEasyTuneVariableHook();\r\n\r\n this._refreshUI();\r\n }\r\n\r\n isScrollVariableActive() {\r\n return this._myScrollVariableActive;\r\n }\r\n\r\n getScrollVariableDirection() {\r\n return this._myScrollDirection;\r\n }\r\n\r\n setScrollVariableActive(active, scrollDirection) {\r\n this._myScrollVariableActive = active;\r\n this._myScrollDirection = scrollDirection;\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n this._myHasScrolled = false;\r\n }\r\n\r\n getWidget() {\r\n return this;\r\n }\r\n\r\n syncWidget(otherEasyTuneWidget) {\r\n if (otherEasyTuneWidget != null) {\r\n if (otherEasyTuneWidget._myResetImportLabelTimer.isRunning()) {\r\n this._myResetImportLabelTimer.start(otherEasyTuneWidget._myResetImportLabelTimer.getTimeLeft());\r\n } else {\r\n this._myResetImportLabelTimer.reset();\r\n }\r\n\r\n if (otherEasyTuneWidget._myResetExportLabelTimer.isRunning()) {\r\n this._myResetExportLabelTimer.start(otherEasyTuneWidget._myResetExportLabelTimer.getTimeLeft());\r\n } else {\r\n this._myResetExportLabelTimer.reset();\r\n }\r\n\r\n this._myUI.myImportButtonTextComponent.text = otherEasyTuneWidget._myUI.myImportButtonTextComponent.text;\r\n this._myUI.myExportButtonTextComponent.text = otherEasyTuneWidget._myUI.myExportButtonTextComponent.text;\r\n\r\n this.setScrollVariableActive(otherEasyTuneWidget.isScrollVariableActive(), otherEasyTuneWidget.getScrollVariableDirection());\r\n } else {\r\n this._myResetImportLabelTimer.reset();\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportButtonText;\r\n\r\n this._myResetExportLabelTimer.reset();\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportButtonText;\r\n }\r\n }\r\n\r\n onImportSuccess() {\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportSuccessButtonText;\r\n this._myResetImportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n onImportFailure() {\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportFailureButtonText;\r\n this._myResetImportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n onExportSuccess() {\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportSuccessButtonText;\r\n this._myResetExportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n onExportFailure() {\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportFailureButtonText;\r\n this._myResetExportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n registerScrollVariableRequestEventListener(id, listener) {\r\n this._myScrollVariableRequestEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterScrollVariableRequestEventListener(id) {\r\n this._myScrollVariableRequestEmitter.remove(id);\r\n }\r\n\r\n start(parentObject, easyTuneParams) {\r\n this._myConfig.build();\r\n\r\n this._myResetImportLabelTimer.reset(this._myConfig.myImportExportResetLabelSeconds);\r\n this._myResetExportLabelTimer.reset(this._myConfig.myImportExportResetLabelSeconds);\r\n\r\n this._myUI.build(parentObject, this._myConfig, easyTuneParams);\r\n this._myUI.setImportExportButtonsVisible(easyTuneParams.myShowVariablesImportExportButtons);\r\n\r\n this._startHook(parentObject, easyTuneParams);\r\n\r\n this._addListeners();\r\n }\r\n\r\n update(dt) {\r\n if (this._isActive()) {\r\n this._updateHook(dt);\r\n\r\n this._updateScrollVariable(dt);\r\n\r\n this._updateImportExportLabel(dt);\r\n }\r\n }\r\n\r\n // Hooks\r\n\r\n _setEasyTuneVariableHook() {\r\n }\r\n\r\n _refreshUIHook() {\r\n }\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n }\r\n\r\n _addListenersHook() {\r\n }\r\n\r\n _updateHook(dt) {\r\n }\r\n\r\n // Hooks end\r\n\r\n _refreshUI() {\r\n if (this._myVariable) {\r\n if (this._myVariable.getName() != null) {\r\n this._myUI.myVariableLabelTextComponent.text = this._myVariable.getName().concat(this._myAppendToVariableName);\r\n } else {\r\n let name = \"Unknown\";\r\n this._myUI.myVariableLabelTextComponent.text = name.concat(this._myAppendToVariableName);\r\n }\r\n\r\n this._refreshUIHook();\r\n }\r\n }\r\n\r\n _updateScrollVariable(dt) {\r\n if (this._myScrollVariableActive) {\r\n if (this._myScrollVariableTimer <= 0) {\r\n this._scrollVariableRequest(this._myScrollDirection);\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n this._myHasScrolled = true;\r\n } else {\r\n this._myScrollVariableTimer -= dt;\r\n }\r\n }\r\n }\r\n\r\n _updateImportExportLabel(dt) {\r\n if (this._myResetImportLabelTimer.isRunning(dt)) {\r\n this._myResetImportLabelTimer.update(dt);\r\n if (this._myResetImportLabelTimer.isDone()) {\r\n this._myResetImportLabelTimer.reset();\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportButtonText;\r\n }\r\n }\r\n\r\n if (this._myResetExportLabelTimer.isRunning(dt)) {\r\n this._myResetExportLabelTimer.update(dt);\r\n if (this._myResetExportLabelTimer.isDone()) {\r\n this._myResetExportLabelTimer.reset();\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportButtonText;\r\n }\r\n }\r\n }\r\n\r\n _isActive() {\r\n return this._myVisible && this._myVariable;\r\n }\r\n\r\n _addListeners() {\r\n let ui = this._myUI;\r\n\r\n ui.myNextButtonCursorTargetComponent.onDown.add(this._setScrollVariableActive.bind(this, true, 1, false));\r\n ui.myNextButtonCursorTargetComponent.onDownOnHover.add(this._setScrollVariableActive.bind(this, true, 1, false));\r\n ui.myNextButtonCursorTargetComponent.onUpWithDown.add(this._setScrollVariableActive.bind(this, false, 0, false));\r\n ui.myNextButtonCursorTargetComponent.onUpWithNoDown.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myNextButtonCursorTargetComponent.onUnhover.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myNextButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myNextButtonBackgroundComponent.material));\r\n ui.myNextButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myNextButtonBackgroundComponent.material));\r\n\r\n ui.myPreviousButtonCursorTargetComponent.onDown.add(this._setScrollVariableActive.bind(this, true, -1, false));\r\n ui.myPreviousButtonCursorTargetComponent.onDownOnHover.add(this._setScrollVariableActive.bind(this, true, -1, false));\r\n ui.myPreviousButtonCursorTargetComponent.onUpWithDown.add(this._setScrollVariableActive.bind(this, false, 0, false));\r\n ui.myPreviousButtonCursorTargetComponent.onUpWithNoDown.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myPreviousButtonCursorTargetComponent.onUnhover.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myPreviousButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPreviousButtonBackgroundComponent.material));\r\n ui.myPreviousButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myPreviousButtonBackgroundComponent.material));\r\n\r\n ui.myImportButtonCursorTargetComponent.onUpWithDown.add(this._importVariables.bind(this));\r\n ui.myImportButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myImportButtonBackgroundComponent.material));\r\n ui.myImportButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myImportButtonBackgroundComponent.material));\r\n\r\n ui.myExportButtonCursorTargetComponent.onUpWithDown.add(this._exportVariables.bind(this));\r\n ui.myExportButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myExportButtonBackgroundComponent.material));\r\n ui.myExportButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myExportButtonBackgroundComponent.material));\r\n\r\n this._addListenersHook();\r\n }\r\n\r\n _setScrollVariableActive(active, scrollDirection, skipForceScroll) {\r\n if (this._isActive() || !active) {\r\n let forceScroll = !active && !this._myHasScrolled && !skipForceScroll;\r\n let oldScrollDirection = this._myScrollDirection;\r\n\r\n this.setScrollVariableActive(active, scrollDirection);\r\n\r\n if (forceScroll) {\r\n this._scrollVariableRequest(oldScrollDirection);\r\n }\r\n }\r\n }\r\n\r\n _scrollVariableRequest(amount) {\r\n if (this._isActive() && amount != 0) {\r\n this._myScrollVariableRequestEmitter.notify(amount);\r\n }\r\n }\r\n\r\n _genericHover(material) {\r\n material.color = this._myConfig.myButtonHoverColor;\r\n }\r\n\r\n _genericUnhover(material) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n }\r\n\r\n _importVariables() {\r\n if (this._myUI.myImportButtonTextComponent.text == this._myConfig.myImportButtonText) {\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportingButtonText;\r\n this._myResetImportLabelTimer.reset();\r\n\r\n this._myParams.myVariablesImportCallback();\r\n }\r\n }\r\n\r\n _exportVariables() {\r\n if (this._myUI.myExportButtonTextComponent.text == this._myConfig.myExportButtonText) {\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportingButtonText;\r\n this._myResetExportLabelTimer.reset();\r\n\r\n this._myParams.myVariablesExportCallback();\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n if (this._myUI != null) {\r\n this._myUI.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\n\r\nexport class EasyTuneBaseArrayWidgetSelector {\r\n\r\n constructor(params, gamepad, engine = Globals.getMainEngine()) {\r\n this._myGamepad = gamepad;\r\n\r\n this._myParentObject = null;\r\n\r\n this._myParams = params;\r\n this._myEasyTuneParams = null;\r\n\r\n this._myWidgets = new Map();\r\n\r\n this._myVariable = null;\r\n this._myVisible = true;\r\n\r\n this._myAppendToVariableName = null;\r\n\r\n this._myScrollVariableRequestEmitter = new Emitter(); // Signature: listener(scrollAmount)\r\n\r\n this._myCurrentArraySize = null;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setEasyTuneVariable(variable, appendToVariableName) {\r\n this._myVariable = variable;\r\n\r\n this._myCurrentArraySize = this._myVariable.getValue().length; // null for non array variable\r\n\r\n this._myAppendToVariableName = appendToVariableName;\r\n\r\n if (!this._myWidgets.has(this._myCurrentArraySize)) {\r\n this._createWidget(this._myCurrentArraySize);\r\n }\r\n\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.setEasyTuneVariable(variable, appendToVariableName);\r\n }\r\n\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setVisible(visible) {\r\n for (let widget of this._myWidgets.values()) {\r\n widget.setVisible(false);\r\n }\r\n\r\n if (this._myVariable) {\r\n this._sizeChangedCheck();\r\n\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.setVisible(visible);\r\n }\r\n }\r\n\r\n this._myVisible = visible;\r\n }\r\n\r\n isScrollVariableActive() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n return widget.isScrollVariableActive();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getScrollVariableDirection() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n return widget.getScrollVariableDirection();\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n setScrollVariableActive(active, scrollDirection) {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.setScrollVariableActive(active, scrollDirection);\r\n }\r\n }\r\n\r\n getWidget() {\r\n return this._myWidgets.get(this._myCurrentArraySize);\r\n }\r\n\r\n registerScrollVariableRequestEventListener(id, listener) {\r\n this._myScrollVariableRequestEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterScrollVariableRequestEventListener(id) {\r\n this._myScrollVariableRequestEmitter.remove(id);\r\n }\r\n\r\n start(parentObject, easyTuneParams) {\r\n this._myParentObject = parentObject;\r\n this._myEasyTuneParams = easyTuneParams;\r\n\r\n this._createWidget(1);\r\n\r\n if (this._myVariable) {\r\n this.setEasyTuneVariable(this._myVariable, this._myAppendToVariableName);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._isActive()) {\r\n this._sizeChangedCheck();\r\n\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.update(dt);\r\n }\r\n }\r\n }\r\n\r\n onImportSuccess() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onImportSuccess();\r\n }\r\n }\r\n\r\n onImportFailure() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onImportFailure();\r\n }\r\n }\r\n\r\n onExportSuccess() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onExportSuccess();\r\n }\r\n }\r\n\r\n onExportFailure() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onExportFailure();\r\n }\r\n }\r\n\r\n _isActive() {\r\n return this._myVisible && this._myVariable;\r\n }\r\n\r\n _scrollVariableRequest(amount) {\r\n this._myScrollVariableRequestEmitter.notify(amount);\r\n }\r\n\r\n _createWidget(arraySize) {\r\n this._myWidgets.set(arraySize, this._getEasyTuneArrayWidget(arraySize));\r\n this._myWidgets.get(arraySize).start(this._myParentObject, this._myEasyTuneParams);\r\n this._myWidgets.get(arraySize).setVisible(false);\r\n this._myWidgets.get(arraySize).registerScrollVariableRequestEventListener(this, this._scrollVariableRequest.bind(this));\r\n }\r\n\r\n _sizeChangedCheck() {\r\n if (this._myVariable.getValue().length != this._myCurrentArraySize) {\r\n this.setEasyTuneVariable(this._myVariable, this._myAppendToVariableName);\r\n }\r\n }\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @returns {any}\r\n */\r\n _getEasyTuneArrayWidget(arraySize) {\r\n return null;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let widget of this._myWidgets.values()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Alignment, Collider, Justification } from \"@wonderlandengine/api\";\r\nimport { vec3_create, vec4_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { ToolHandedness } from \"../../../cauldron/tool_types.js\";\r\n\r\nexport class EasyTuneBaseWidgetConfig {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n build() {\r\n this._setupBuildConfig();\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n // Hooks\r\n\r\n _getBackPanelMaxY() {\r\n return this.myDisplayPanelPosition[1] + this.myVariableLabelPanelPosition[1] + this.mySideButtonBackgroundScale[1] + this._mySideButtonDistanceFromBorder * 1.25;\r\n }\r\n\r\n _getBackPanelMinY() {\r\n return this.myDisplayPanelPosition[1] - this._mySideButtonDistanceFromBorder * 1.25 - this.mySideButtonBackgroundScale[1];\r\n }\r\n\r\n _getBackPanelMaxX() {\r\n return this._mySideButtonPanelHalfWidth;\r\n }\r\n\r\n _getBackPanelMinX() {\r\n return -this._mySideButtonPanelHalfWidth;\r\n }\r\n\r\n // Small Z offset to avoid glitching with other widgets\r\n _getPivotZOffset() {\r\n return 0;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n }\r\n\r\n // Hooks end\r\n\r\n _setupBuildConfig() {\r\n // General\r\n\r\n this.myBackgroundColor = vec4_create(46 / 255, 46 / 255, 46 / 255, 1);\r\n\r\n this.myCursorTargetCollisionCollider = Collider.Box;\r\n this.myCursorTargetCollisionGroup = 7; // Keep this in sync with Tool Cursor\r\n this.myCursorTargetCollisionThickness = 0.001;\r\n\r\n this.myDefaultTextColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this.myTextAlignment = Alignment.Center;\r\n this.myTextJustification = Justification.Middle;\r\n this.myTextColor = this.myDefaultTextColor;\r\n\r\n this.myLabelTextScale = vec3_create(0.18, 0.18, 0.18);\r\n this.myButtonTextScale = vec3_create(0.18, 0.18, 0.18);\r\n\r\n this._myPanelZOffset = 0.01;\r\n this._myColliderZOffset = 0.017;\r\n this._mySideButtonDistanceFromBorder = 0.0125;\r\n this._mySideButtonPanelHalfWidth = 0.2;\r\n\r\n // Pivot\r\n\r\n this.myPivotObjectPositions = [];\r\n this.myPivotObjectPositions[ToolHandedness.NONE] = vec3_create(0, 0, this._getPivotZOffset());\r\n this.myPivotObjectPositions[ToolHandedness.LEFT] = vec3_create(-0.04, 0.02, this._getPivotZOffset());\r\n this.myPivotObjectPositions[ToolHandedness.RIGHT] = vec3_create(-0.08, 0.02, this._getPivotZOffset());\r\n\r\n this.mySideButtonBackgroundScale = vec3_create(0.015, 0.015, 1);\r\n this.mySideButtonTextScale = this.myButtonTextScale;\r\n this.mySideButtonTextPosition = vec3_create(0, 0, 0.007);\r\n\r\n this.mySideButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.mySideButtonCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.mySideButtonCollisionExtents = this.mySideButtonBackgroundScale.pp_clone();\r\n this.mySideButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myLeftSideButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myLeftSideButtonPosition[0] = -this._mySideButtonPanelHalfWidth + this.mySideButtonBackgroundScale[0] + this._mySideButtonDistanceFromBorder;\r\n\r\n this.myRightSideButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myRightSideButtonPosition[0] = -this.myLeftSideButtonPosition[0];\r\n\r\n // Display\r\n\r\n this.myDisplayPanelPosition = vec3_create(0, 0.1, 0);\r\n\r\n this.myVariableLabelPanelPosition = vec3_create(0, 0.025, this._myPanelZOffset);\r\n this.myVariableLabelTextScale = this.myLabelTextScale;\r\n\r\n this.myVariableLabelCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myVariableLabelCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myVariableLabelCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myVariableLabelCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myNextButtonText = \">\";\r\n this.myPreviousButtonText = \"<\";\r\n\r\n this._setupBuildConfigHook();\r\n\r\n // Background\r\n\r\n {\r\n let maxX = this._getBackPanelMaxX();\r\n let minX = this._getBackPanelMinX();\r\n let maxY = this._getBackPanelMaxY();\r\n let minY = this._getBackPanelMinY();\r\n\r\n this.myBackPanelPosition = [(maxX + minX) / 2, (maxY + minY) / 2, 0];\r\n this.myBackBackgroundScale = [(maxX - minX) / 2, (maxY - minY) / 2, 1];\r\n\r\n this.myBackBackgroundColor = vec4_create(70 / 255, 70 / 255, 70 / 255, 1);\r\n }\r\n\r\n // Import Export\r\n\r\n this.myImportExportButtonBackgroundScale = vec3_create(0.04, 0.02, 1);\r\n this.myImportExportButtonTextScale = this.myButtonTextScale;\r\n this.myImportExportButtonTextPosition = vec3_create(0, 0, 0.007);\r\n\r\n this.myImportExportPanelPosition = [0, this._getBackPanelMaxY() + this._mySideButtonDistanceFromBorder + this.myImportExportButtonBackgroundScale[1], this._myPanelZOffset];\r\n\r\n this.myImportExportButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myImportExportButtonCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myImportExportButtonCollisionExtents = this.myImportExportButtonBackgroundScale.pp_clone();\r\n this.myImportExportButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myImportButtonText = \"Import\";\r\n this.myExportButtonText = \"Export\";\r\n\r\n this.myImportExportResetLabelSeconds = 2;\r\n\r\n this.myImportingButtonText = \"...\";\r\n this.myImportSuccessButtonText = \"Done\";\r\n this.myImportFailureButtonText = \"Error\";\r\n\r\n this.myExportingButtonText = \"...\";\r\n this.myExportSuccessButtonText = \"Done\";\r\n this.myExportFailureButtonText = \"Error\";\r\n\r\n this.myImportButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myImportButtonPosition[0] = -this.myImportExportButtonBackgroundScale[0] - this._mySideButtonDistanceFromBorder / 2;\r\n\r\n this.myExportButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myExportButtonPosition[0] = -this.myImportButtonPosition[0];\r\n\r\n\r\n // Pointer\r\n\r\n this.myPointerCollisionExtents = this.myBackBackgroundScale.pp_clone();\r\n this.myPointerCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n this.myPointerCursorTargetPosition = this.myBackPanelPosition.pp_clone();\r\n this.myPointerCursorTargetPosition[2] = this._myColliderZOffset - 0.0001; // A little behind the button target to avoid hiding it\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this.myButtonHoverColor = vec4_create(150 / 255, 150 / 255, 150 / 255, 1);\r\n\r\n this.myScrollVariableDelay = 0.5;\r\n\r\n this._setupRuntimeConfigHook();\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneBoolArrayWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n constructor(arraySize) {\r\n super();\r\n\r\n this.myArraySize = arraySize;\r\n }\r\n\r\n _getBackPanelMinY() {\r\n let valuePanelLastPosition = (this.myValuePanelsPositions[this.myArraySize - 1]) ? this.myValuePanelsPositions[this.myArraySize - 1][1] : 0;\r\n return super._getBackPanelMinY() + this.myValuesPanelPosition[1] + valuePanelLastPosition;\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00802713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myIncreaseButtonText = \"+\";\r\n this.myDecreaseButtonText = \"-\";\r\n\r\n this._myValuePanelDistanceFromVariableLabelPanel = 0.055;\r\n this._myDistanceBetweenValues = this.mySideButtonBackgroundScale[1] * 2 + 0.015;\r\n\r\n this.myValuesPanelPosition = [0, this.myVariableLabelPanelPosition[1] - this._myValuePanelDistanceFromVariableLabelPanel, this._myPanelZOffset];\r\n\r\n this.myValueTextScale = vec3_create(0.4, 0.4, 0.4);\r\n\r\n this.myValueCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myValueCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myValueCollisionExtents = vec3_create(0.065, 0.02, 1);\r\n this.myValueCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myValuePanelsPositions = [];\r\n this.myValuePanelsPositions[0] = vec3_create(0, 0, 0);\r\n for (let i = 1; i < this.myArraySize; i++) {\r\n this.myValuePanelsPositions[i] = this.myValuePanelsPositions[i - 1].pp_clone();\r\n this.myValuePanelsPositions[i][1] -= this._myDistanceBetweenValues;\r\n }\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n this.myTextHoverScaleMultiplier = vec3_create(1.1, 1.1, 1.1);\r\n\r\n this.myThumbstickToggleThreshold = 0.6;\r\n this.myButtonEditDelay = 0;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneBoolArrayWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n setAdditionalButtonsVisible(visible) {\r\n this._myAdditionalButtonsVisible = visible;\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myValueDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n }\r\n\r\n _buildHook() {\r\n this._myAdditionalButtonsVisible = true;\r\n }\r\n\r\n _createSkeletonHook() {\r\n this.myValuesPanel = this.myDisplayPanel.pp_addObject();\r\n\r\n this.myValuePanels = [];\r\n this.myValueTexts = [];\r\n this.myValueCursorTargets = [];\r\n\r\n this.myValueIncreaseButtonPanels = [];\r\n this.myValueIncreaseButtonBackgrounds = [];\r\n this.myValueIncreaseButtonTexts = [];\r\n this.myValueIncreaseButtonCursorTargets = [];\r\n\r\n this.myValueDecreaseButtonPanels = [];\r\n this.myValueDecreaseButtonBackgrounds = [];\r\n this.myValueDecreaseButtonTexts = [];\r\n this.myValueDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i] = this.myValuesPanel.pp_addObject();\r\n this.myValueTexts[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueCursorTargets[i] = this.myValuePanels[i].pp_addObject();\r\n\r\n this.myValueIncreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueIncreaseButtonBackgrounds[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonTexts[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonCursorTargets[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myValueDecreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueDecreaseButtonBackgrounds[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonTexts[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonCursorTargets[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n }\r\n\r\n _setTransformHook() {\r\n this.myValuesPanel.pp_setPositionLocal(this._myConfig.myValuesPanelPosition);\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myValueTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myValueCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myValueIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myValueIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myValueDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myValueDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n }\r\n\r\n _addComponentsHook() {\r\n this.myValueTextComponents = [];\r\n this.myValueCursorTargetComponents = [];\r\n this.myValueCollisionComponents = [];\r\n\r\n this.myValueIncreaseButtonBackgroundComponents = [];\r\n this.myValueIncreaseButtonTextComponents = [];\r\n this.myValueIncreaseButtonCursorTargetComponents = [];\r\n this.myValueIncreaseButtonCollisionComponents = [];\r\n\r\n this.myValueDecreaseButtonBackgroundComponents = [];\r\n this.myValueDecreaseButtonTextComponents = [];\r\n this.myValueDecreaseButtonCursorTargetComponents = [];\r\n this.myValueDecreaseButtonCollisionComponents = [];\r\n\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueTextComponents[i] = this.myValueTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueTextComponents[i]);\r\n this.myValueTextComponents[i].text = \" \";\r\n\r\n this.myValueCursorTargetComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueCollisionComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myValueIncreaseButtonBackgroundComponents[i] = this.myValueIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueIncreaseButtonTextComponents[i] = this.myValueIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueIncreaseButtonTextComponents[i]);\r\n this.myValueIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myValueIncreaseButtonCursorTargetComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueIncreaseButtonCollisionComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myValueDecreaseButtonBackgroundComponents[i] = this.myValueDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueDecreaseButtonTextComponents[i] = this.myValueDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueDecreaseButtonTextComponents[i]);\r\n this.myValueDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myValueDecreaseButtonCursorTargetComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueDecreaseButtonCollisionComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n }\r\n\r\n _setVisibleHook(visible) {\r\n if (visible) {\r\n this.setAdditionalButtonsVisible(this._myAdditionalButtonsVisible);\r\n }\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../../cauldron/utils/xr_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../../../cauldron/tool_types.js\";\r\n\r\nexport class EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n build(parentObject, config, params) {\r\n this._myParentObject = parentObject;\r\n this._myConfig = config;\r\n this._myParams = params;\r\n\r\n this._myImportExportButtonsVisible = true;\r\n\r\n this._myPlaneMesh = Globals.getDefaultMeshes(this._myEngine).myDoubleSidedPlane;\r\n\r\n this._buildHook();\r\n\r\n this._createSkeleton();\r\n this._setTransforms();\r\n this._addComponents();\r\n\r\n this._setTransformForNonXR();\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n }\r\n\r\n setVisible(visible) {\r\n this.myPivotObject.pp_setActive(visible);\r\n\r\n if (visible) {\r\n this.setImportExportButtonsVisible(this._myImportExportButtonsVisible);\r\n }\r\n\r\n this._setVisibleHook(visible);\r\n }\r\n\r\n setImportExportButtonsVisible(visible) {\r\n this._myImportExportButtonsVisible = visible;\r\n\r\n this.myImportExportPanel.pp_setActive(this._myImportExportButtonsVisible);\r\n }\r\n\r\n // Hooks\r\n\r\n _buildHook() {\r\n }\r\n\r\n _setVisibleHook(visible) {\r\n }\r\n\r\n _createSkeletonHook() {\r\n }\r\n\r\n _setTransformHook() {\r\n }\r\n\r\n _addComponentsHook() {\r\n }\r\n\r\n // Hooks end\r\n\r\n // Skeleton\r\n\r\n _createSkeleton() {\r\n this.myPivotObject = this._myParentObject.pp_addObject();\r\n\r\n this.myBackPanel = this.myPivotObject.pp_addObject();\r\n this.myBackBackground = this.myBackPanel.pp_addObject();\r\n\r\n // Display\r\n\r\n this.myDisplayPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myVariableLabelPanel = this.myDisplayPanel.pp_addObject();\r\n this.myVariableLabelText = this.myVariableLabelPanel.pp_addObject();\r\n this.myVariableLabelCursorTarget = this.myVariableLabelPanel.pp_addObject();\r\n\r\n // Next/Previous\r\n\r\n this.myNextButtonPanel = this.myVariableLabelPanel.pp_addObject();\r\n this.myNextButtonBackground = this.myNextButtonPanel.pp_addObject();\r\n this.myNextButtonText = this.myNextButtonPanel.pp_addObject();\r\n this.myNextButtonCursorTarget = this.myNextButtonPanel.pp_addObject();\r\n\r\n this.myPreviousButtonPanel = this.myVariableLabelPanel.pp_addObject();\r\n this.myPreviousButtonBackground = this.myPreviousButtonPanel.pp_addObject();\r\n this.myPreviousButtonText = this.myPreviousButtonPanel.pp_addObject();\r\n this.myPreviousButtonCursorTarget = this.myPreviousButtonPanel.pp_addObject();\r\n\r\n // Import/Export\r\n\r\n this.myImportExportPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myImportButtonPanel = this.myImportExportPanel.pp_addObject();\r\n this.myImportButtonBackground = this.myImportButtonPanel.pp_addObject();\r\n this.myImportButtonText = this.myImportButtonPanel.pp_addObject();\r\n this.myImportButtonCursorTarget = this.myImportButtonPanel.pp_addObject();\r\n\r\n this.myExportButtonPanel = this.myImportExportPanel.pp_addObject();\r\n this.myExportButtonBackground = this.myExportButtonPanel.pp_addObject();\r\n this.myExportButtonText = this.myExportButtonPanel.pp_addObject();\r\n this.myExportButtonCursorTarget = this.myExportButtonPanel.pp_addObject();\r\n\r\n // Pointer\r\n\r\n this.myPointerCursorTarget = this.myPivotObject.pp_addObject();\r\n\r\n this._createSkeletonHook();\r\n }\r\n\r\n // Transforms\r\n\r\n _setTransforms() {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectPositions[this._myParams.myHandedness]);\r\n\r\n this.myBackPanel.pp_setPositionLocal(this._myConfig.myBackPanelPosition);\r\n this.myBackBackground.pp_scaleObject(this._myConfig.myBackBackgroundScale);\r\n\r\n // Display\r\n this.myDisplayPanel.pp_setPositionLocal(this._myConfig.myDisplayPanelPosition);\r\n\r\n this.myVariableLabelPanel.pp_setPositionLocal(this._myConfig.myVariableLabelPanelPosition);\r\n this.myVariableLabelText.pp_scaleObject(this._myConfig.myVariableLabelTextScale);\r\n this.myVariableLabelCursorTarget.pp_setPositionLocal(this._myConfig.myVariableLabelCursorTargetPosition);\r\n\r\n // Next/Previous\r\n\r\n this.myNextButtonPanel.pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myNextButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myNextButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myNextButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myNextButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myPreviousButtonPanel.pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myPreviousButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPreviousButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPreviousButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPreviousButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n // Import/Export\r\n\r\n this.myImportExportPanel.pp_setPositionLocal(this._myConfig.myImportExportPanelPosition);\r\n\r\n this.myImportButtonPanel.pp_setPositionLocal(this._myConfig.myImportButtonPosition);\r\n this.myImportButtonBackground.pp_scaleObject(this._myConfig.myImportExportButtonBackgroundScale);\r\n this.myImportButtonText.pp_setPositionLocal(this._myConfig.myImportExportButtonTextPosition);\r\n this.myImportButtonText.pp_scaleObject(this._myConfig.myImportExportButtonTextScale);\r\n this.myImportButtonCursorTarget.pp_setPositionLocal(this._myConfig.myImportExportButtonCursorTargetPosition);\r\n\r\n this.myExportButtonPanel.pp_setPositionLocal(this._myConfig.myExportButtonPosition);\r\n this.myExportButtonBackground.pp_scaleObject(this._myConfig.myImportExportButtonBackgroundScale);\r\n this.myExportButtonText.pp_setPositionLocal(this._myConfig.myImportExportButtonTextPosition);\r\n this.myExportButtonText.pp_scaleObject(this._myConfig.myImportExportButtonTextScale);\r\n this.myExportButtonCursorTarget.pp_setPositionLocal(this._myConfig.myImportExportButtonCursorTargetPosition);\r\n\r\n // Pointer\r\n\r\n this.myPointerCursorTarget.pp_setPositionLocal(this._myConfig.myPointerCursorTargetPosition);\r\n\r\n this._setTransformHook();\r\n }\r\n\r\n // Components\r\n\r\n _addComponents() {\r\n this.myBackBackgroundComponent = this.myBackBackground.pp_addComponent(MeshComponent);\r\n this.myBackBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myBackBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myBackBackgroundComponent.material.color = this._myConfig.myBackBackgroundColor;\r\n\r\n // Display\r\n\r\n this.myVariableLabelTextComponent = this.myVariableLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myVariableLabelTextComponent);\r\n this.myVariableLabelTextComponent.text = \" \";\r\n\r\n this.myVariableLabelCursorTargetComponent = this.myVariableLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myVariableLabelCollisionComponent = this.myVariableLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myVariableLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myVariableLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myVariableLabelCollisionComponent.extents = this._myConfig.myVariableLabelCollisionExtents;\r\n\r\n // Next/Previous\r\n\r\n this.myNextButtonBackgroundComponent = this.myNextButtonBackground.pp_addComponent(MeshComponent);\r\n this.myNextButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myNextButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myNextButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myNextButtonTextComponent = this.myNextButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myNextButtonTextComponent);\r\n this.myNextButtonTextComponent.text = this._myConfig.myNextButtonText;\r\n\r\n this.myNextButtonCursorTargetComponent = this.myNextButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myNextButtonCollisionComponent = this.myNextButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myNextButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myNextButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myNextButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPreviousButtonBackgroundComponent = this.myPreviousButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPreviousButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPreviousButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPreviousButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPreviousButtonTextComponent = this.myPreviousButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPreviousButtonTextComponent);\r\n this.myPreviousButtonTextComponent.text = this._myConfig.myPreviousButtonText;\r\n\r\n this.myPreviousButtonCursorTargetComponent = this.myPreviousButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPreviousButtonCollisionComponent = this.myPreviousButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPreviousButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPreviousButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPreviousButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Import/Export\r\n\r\n this.myImportButtonBackgroundComponent = this.myImportButtonBackground.pp_addComponent(MeshComponent);\r\n this.myImportButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myImportButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myImportButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myImportButtonTextComponent = this.myImportButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myImportButtonTextComponent);\r\n this.myImportButtonTextComponent.text = this._myConfig.myImportButtonText;\r\n\r\n this.myImportButtonCursorTargetComponent = this.myImportButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myImportButtonCollisionComponent = this.myImportButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myImportButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myImportButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myImportButtonCollisionComponent.extents = this._myConfig.myImportExportButtonCollisionExtents;\r\n\r\n this.myExportButtonBackgroundComponent = this.myExportButtonBackground.pp_addComponent(MeshComponent);\r\n this.myExportButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myExportButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myExportButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myExportButtonTextComponent = this.myExportButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myExportButtonTextComponent);\r\n this.myExportButtonTextComponent.text = this._myConfig.myExportButtonText;\r\n\r\n this.myExportButtonCursorTargetComponent = this.myExportButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myExportButtonCollisionComponent = this.myExportButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myExportButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myExportButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myExportButtonCollisionComponent.extents = this._myConfig.myImportExportButtonCollisionExtents;\r\n\r\n // Pointer\r\n\r\n this.myPointerCollisionComponent = this.myPointerCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPointerCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPointerCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPointerCollisionComponent.extents = this._myConfig.myPointerCollisionExtents;\r\n\r\n this._addComponentsHook();\r\n }\r\n\r\n _setupTextComponent(textComponent) {\r\n textComponent.alignment = this._myConfig.myTextAlignment;\r\n textComponent.justification = this._myConfig.myTextJustification;\r\n textComponent.material = this._myParams.myTextMaterial.clone();\r\n textComponent.material.color = this._myConfig.myTextColor;\r\n textComponent.text = \"\";\r\n }\r\n\r\n _onXRSessionStart() {\r\n this._setTransformForXR();\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n _setTransformForXR() {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectPositions[this._myParams.myHandedness]);\r\n }\r\n\r\n _setTransformForNonXR() {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectPositions[ToolHandedness.NONE]);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { GamepadAxesID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneBoolArrayWidgetConfig } from \"./easy_tune_bool_array_widget_config.js\";\r\nimport { EasyTuneBoolArrayWidgetUI } from \"./easy_tune_bool_array_widget_ui.js\";\r\n\r\nexport class EasyTuneBoolArrayWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, arraySize, gamepad, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myNonArray = arraySize == null;\r\n this._myArraySize = this._myNonArray ? 1 : arraySize;\r\n\r\n this._myConfig = new EasyTuneBoolArrayWidgetConfig(this._myArraySize);\r\n this._myUI = new EasyTuneBoolArrayWidgetUI(engine);\r\n\r\n this._myGamepad = gamepad;\r\n\r\n this._myValueEditIndex = 0;\r\n this._myValueButtonEditIntensity = 0;\r\n this._myValueButtonEditIntensityTimer = 0;\r\n this._myValueEditEnabled = false;\r\n\r\n this._myTempValue = [];\r\n\r\n this._myTempNonArrayValue = [0];\r\n this._myTempNonArrayDefaultValue = [0];\r\n }\r\n\r\n _refreshUIHook() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._myUI.myValueTextComponents[i].text = (this._getVariableValue()[i]) ? \"true\" : \"false\";\r\n }\r\n }\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n this._myUI.setAdditionalButtonsVisible(easyTuneParams.myShowAdditionalButtons);\r\n }\r\n\r\n _setEasyTuneVariableHook() {\r\n if (this._myVariable != null) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n }\r\n }\r\n\r\n _updateHook(dt) {\r\n this._updateValue(dt);\r\n }\r\n\r\n _updateValue(dt) {\r\n let stickVariableIntensity = 0;\r\n\r\n if (this._myGamepad) {\r\n stickVariableIntensity = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n }\r\n\r\n let valueIntensity = 0;\r\n if (this._myValueEditEnabled) {\r\n valueIntensity = stickVariableIntensity;\r\n } else if (this._myValueButtonEditIntensity != 0) {\r\n if (this._myValueButtonEditIntensityTimer <= 0) {\r\n valueIntensity = this._myValueButtonEditIntensity;\r\n } else {\r\n this._myValueButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (this._myValueEditIndex >= 0 && this._myValueEditIndex < this._getVariableValue().length) {\r\n if (Math.abs(valueIntensity) > this._myConfig.myThumbstickToggleThreshold) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n this._myTempValue[this._myValueEditIndex] = valueIntensity > 0;\r\n this._setVariableValue(this._myTempValue);\r\n this._refreshUI();\r\n }\r\n }\r\n }\r\n\r\n _addListenersHook() {\r\n let ui = this._myUI;\r\n\r\n ui.myVariableLabelCursorTargetComponent.onClick.add(this._resetAllValues.bind(this));\r\n ui.myVariableLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myVariableLabelText));\r\n ui.myVariableLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myVariableLabelText, this._myConfig.myVariableLabelTextScale));\r\n\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myValueCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, i));\r\n ui.myValueCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], true));\r\n ui.myValueCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], false));\r\n }\r\n }\r\n\r\n _setValueEditIntensity(index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myValueButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n this._myValueEditIndex = index;\r\n }\r\n\r\n this._myValueButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setValueEditEnabled(index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n this._myValueEditIndex = index;\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myValueTextScale);\r\n }\r\n\r\n this._myValueEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _resetValue(index) {\r\n if (this._isActive()) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n this._myTempValue[index] = this._getVariableDefaultValue()[index];\r\n this._setVariableValue(this._myTempValue);\r\n\r\n this._myUI.myValueTextComponents[index].text = (this._getVariableValue()[index]) ? \"true\" : \"false\";\r\n }\r\n }\r\n\r\n _resetAllValues() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._resetValue(i);\r\n }\r\n }\r\n\r\n _genericTextHover(text) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n }\r\n\r\n _genericTextUnhover(text, originalScale) {\r\n text.pp_setScaleLocal(originalScale);\r\n }\r\n\r\n _getVariableValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayValue[0] = this._myVariable.getValue();\r\n return this._myTempNonArrayValue;\r\n }\r\n\r\n return this._myVariable.getValue();\r\n }\r\n\r\n _getVariableDefaultValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayDefaultValue[0] = this._myVariable.getDefaultValue();\r\n return this._myTempNonArrayDefaultValue;\r\n }\r\n\r\n return this._myVariable.getDefaultValue();\r\n }\r\n\r\n _setVariableValue(value) {\r\n if (this._myNonArray) {\r\n this._myVariable.setValue(value[0]);\r\n } else {\r\n this._myVariable.setValue(this._myTempValue);\r\n }\r\n }\r\n}", "import { EasyTuneBaseArrayWidgetSelector } from \"../base/easy_tune_base_array_widget_selector.js\";\r\nimport { EasyTuneBoolArrayWidget } from \"./easy_tune_bool_array_widget.js\";\r\n\r\nexport class EasyTuneBoolArrayWidgetSelector extends EasyTuneBaseArrayWidgetSelector {\r\n\r\n _getEasyTuneArrayWidget(arraySize) {\r\n return new EasyTuneBoolArrayWidget(this._myParams, arraySize, this._myGamepad, this._myEngine);\r\n }\r\n}", "import { ToolHandedness } from \"../../cauldron/tool_types.js\";\r\n\r\nexport class EasyTuneWidgetConfig {\r\n\r\n constructor() {\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this.myGamepadHandedness = ToolHandedness.RIGHT;\r\n\r\n this.myScrollVariableDelay = 0.5;\r\n this.myScrollVariableMinXThreshold = 0.6;\r\n this.myScrollVariableMaxYThreshold = 0.25;\r\n this.myScrollVariableButtonID = null;\r\n\r\n this.myRefreshVariablesDelay = null;\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneNoneWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n _getBackPanelMinY() {\r\n return super._getBackPanelMinY() + this.myTypeNotSupportedPanelPosition[1];\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00804713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myTypeNotSupportedPanelPosition = vec3_create(0, -0.03, this._myPanelZOffset);\r\n this.myTypeNotSupportedTextScale = vec3_create(0.275, 0.275, 0.275);\r\n this.myTypeNotSupportedText = \"Type Not Supported\";\r\n }\r\n}", "import { TextComponent } from \"@wonderlandengine/api\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneNoneWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n _createSkeletonHook() {\r\n this.myTypeNotSupportedPanel = this.myDisplayPanel.pp_addObject();\r\n this.myTypeNotSupportedText = this.myTypeNotSupportedPanel.pp_addObject();\r\n this.myTypeNotSupportedCursorTarget = this.myTypeNotSupportedPanel.pp_addObject();\r\n }\r\n\r\n _setTransformHook() {\r\n this.myTypeNotSupportedPanel.pp_setPositionLocal(this._myConfig.myTypeNotSupportedPanelPosition);\r\n this.myTypeNotSupportedText.pp_scaleObject(this._myConfig.myTypeNotSupportedTextScale);\r\n }\r\n\r\n _addComponentsHook() {\r\n this.myTypeNotSupportedTextComponent = this.myTypeNotSupportedText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myTypeNotSupportedTextComponent);\r\n this.myTypeNotSupportedTextComponent.text = this._myConfig.myTypeNotSupportedText;\r\n }\r\n}", "import { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneNoneWidgetConfig } from \"./easy_tune_none_widget_config.js\";\r\nimport { EasyTuneNoneWidgetUI } from \"./easy_tune_none_widget_ui.js\";\r\n\r\nexport class EasyTuneNoneWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myConfig = new EasyTuneNoneWidgetConfig();\r\n this._myUI = new EasyTuneNoneWidgetUI(engine);\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneNumberArrayWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n constructor(arraySize) {\r\n super();\r\n\r\n this.myArraySize = arraySize;\r\n }\r\n\r\n _getBackPanelMinY() {\r\n return this.myStepPanelPosition[1] - this._mySideButtonDistanceFromBorder * 1.25 - this.mySideButtonBackgroundScale[1];\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00803713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myIncreaseButtonText = \"+\";\r\n this.myDecreaseButtonText = \"-\";\r\n\r\n this._myValuePanelDistanceFromVariableLabelPanel = 0.055;\r\n this._myDistanceBetweenValues = this.mySideButtonBackgroundScale[1] * 2 + 0.015;\r\n\r\n this.myValuesPanelPosition = [0, this.myVariableLabelPanelPosition[1] - this._myValuePanelDistanceFromVariableLabelPanel, this._myPanelZOffset];\r\n\r\n this.myValueTextScale = vec3_create(0.4, 0.4, 0.4);\r\n\r\n this.myValueCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myValueCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myValueCollisionExtents = vec3_create(0.065, 0.02, 1);\r\n this.myValueCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myValuePanelsPositions = [];\r\n this.myValuePanelsPositions[0] = vec3_create(0, 0, 0);\r\n for (let i = 1; i < this.myArraySize; i++) {\r\n this.myValuePanelsPositions[i] = this.myValuePanelsPositions[i - 1].pp_clone();\r\n this.myValuePanelsPositions[i][1] -= this._myDistanceBetweenValues;\r\n }\r\n\r\n let valuePanelLastPosition = (this.myValuePanelsPositions[this.myArraySize - 1]) ? this.myValuePanelsPositions[this.myArraySize - 1][1] : 0;\r\n this.myStepPanelPosition = [0, this.myDisplayPanelPosition[1] + this.myValuesPanelPosition[1] + valuePanelLastPosition - this._myValuePanelDistanceFromVariableLabelPanel, this._myPanelZOffset];\r\n this.myStepTextScale = this.myLabelTextScale;\r\n this.myStepStartString = \"Step: \";\r\n\r\n this.myStepCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myStepCursorTargetPosition[2] = this._myColliderZOffset - this.myStepPanelPosition[2];\r\n this.myStepCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myStepCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n this.myTextHoverScaleMultiplier = vec3_create(1.1, 1.1, 1.1);\r\n\r\n this.myEditThumbstickMinThreshold = 0.35;\r\n this.myStepMultiplierStepPerSecond = 2.25;\r\n this.myButtonEditDelay = 0;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneNumberArrayWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n setAdditionalButtonsVisible(visible) {\r\n this._myAdditionalButtonsVisible = visible;\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myValueDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n\r\n this.myStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n\r\n _buildHook() {\r\n this._myAdditionalButtonsVisible = true;\r\n }\r\n\r\n _createSkeletonHook() {\r\n this.myValuesPanel = this.myDisplayPanel.pp_addObject();\r\n\r\n this.myValuePanels = [];\r\n this.myValueTexts = [];\r\n this.myValueCursorTargets = [];\r\n\r\n this.myValueIncreaseButtonPanels = [];\r\n this.myValueIncreaseButtonBackgrounds = [];\r\n this.myValueIncreaseButtonTexts = [];\r\n this.myValueIncreaseButtonCursorTargets = [];\r\n\r\n this.myValueDecreaseButtonPanels = [];\r\n this.myValueDecreaseButtonBackgrounds = [];\r\n this.myValueDecreaseButtonTexts = [];\r\n this.myValueDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i] = this.myValuesPanel.pp_addObject();\r\n this.myValueTexts[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueCursorTargets[i] = this.myValuePanels[i].pp_addObject();\r\n\r\n this.myValueIncreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueIncreaseButtonBackgrounds[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonTexts[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonCursorTargets[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myValueDecreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueDecreaseButtonBackgrounds[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonTexts[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonCursorTargets[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n this.myStepPanel = this.myPivotObject.pp_addObject();\r\n this.myStepText = this.myStepPanel.pp_addObject();\r\n this.myStepCursorTarget = this.myStepPanel.pp_addObject();\r\n\r\n this.myStepIncreaseButtonPanel = this.myStepPanel.pp_addObject();\r\n this.myStepIncreaseButtonBackground = this.myStepIncreaseButtonPanel.pp_addObject();\r\n this.myStepIncreaseButtonText = this.myStepIncreaseButtonPanel.pp_addObject();\r\n this.myStepIncreaseButtonCursorTarget = this.myStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myStepDecreaseButtonPanel = this.myStepPanel.pp_addObject();\r\n this.myStepDecreaseButtonBackground = this.myStepDecreaseButtonPanel.pp_addObject();\r\n this.myStepDecreaseButtonText = this.myStepDecreaseButtonPanel.pp_addObject();\r\n this.myStepDecreaseButtonCursorTarget = this.myStepDecreaseButtonPanel.pp_addObject();\r\n }\r\n\r\n _setTransformHook() {\r\n this.myValuesPanel.pp_setPositionLocal(this._myConfig.myValuesPanelPosition);\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myValueTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myValueCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myValueIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myValueIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myValueDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myValueDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n this.myStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n _addComponentsHook() {\r\n this.myValueTextComponents = [];\r\n this.myValueCursorTargetComponents = [];\r\n this.myValueCollisionComponents = [];\r\n\r\n this.myValueIncreaseButtonBackgroundComponents = [];\r\n this.myValueIncreaseButtonTextComponents = [];\r\n this.myValueIncreaseButtonCursorTargetComponents = [];\r\n this.myValueIncreaseButtonCollisionComponents = [];\r\n\r\n this.myValueDecreaseButtonBackgroundComponents = [];\r\n this.myValueDecreaseButtonTextComponents = [];\r\n this.myValueDecreaseButtonCursorTargetComponents = [];\r\n this.myValueDecreaseButtonCollisionComponents = [];\r\n\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueTextComponents[i] = this.myValueTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueTextComponents[i]);\r\n this.myValueTextComponents[i].text = \" \";\r\n\r\n this.myValueCursorTargetComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueCollisionComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myValueIncreaseButtonBackgroundComponents[i] = this.myValueIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueIncreaseButtonTextComponents[i] = this.myValueIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueIncreaseButtonTextComponents[i]);\r\n this.myValueIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myValueIncreaseButtonCursorTargetComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueIncreaseButtonCollisionComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myValueDecreaseButtonBackgroundComponents[i] = this.myValueDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueDecreaseButtonTextComponents[i] = this.myValueDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueDecreaseButtonTextComponents[i]);\r\n this.myValueDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myValueDecreaseButtonCursorTargetComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueDecreaseButtonCollisionComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n this.myStepTextComponent = this.myStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myStepTextComponent);\r\n this.myStepTextComponent.text = \" \";\r\n\r\n this.myStepCursorTargetComponent = this.myStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myStepCollisionComponent = this.myStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myStepIncreaseButtonBackgroundComponent = this.myStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myStepIncreaseButtonTextComponent = this.myStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myStepIncreaseButtonTextComponent);\r\n this.myStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myStepIncreaseButtonCursorTargetComponent = this.myStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myStepIncreaseButtonCollisionComponent = this.myStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myStepDecreaseButtonBackgroundComponent = this.myStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myStepDecreaseButtonTextComponent = this.myStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myStepDecreaseButtonTextComponent);\r\n this.myStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myStepDecreaseButtonCursorTargetComponent = this.myStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myStepDecreaseButtonCollisionComponent = this.myStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n _setVisibleHook(visible) {\r\n if (visible) {\r\n this.setAdditionalButtonsVisible(this._myAdditionalButtonsVisible);\r\n }\r\n }\r\n}", "import { GamepadAxesID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneNumberArrayWidgetConfig } from \"./easy_tune_number_array_widget_config.js\";\r\nimport { EasyTuneNumberArrayWidgetUI } from \"./easy_tune_number_array_widget_ui.js\";\r\n\r\nexport class EasyTuneNumberArrayWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, arraySize, gamepad, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myGamepad = gamepad;\r\n\r\n this._myNonArray = arraySize == null;\r\n this._myArraySize = this._myNonArray ? 1 : arraySize;\r\n\r\n this._myConfig = new EasyTuneNumberArrayWidgetConfig(this._myArraySize);\r\n this._myUI = new EasyTuneNumberArrayWidgetUI(engine);\r\n\r\n this._myValueEditIndex = -1;\r\n\r\n this._myValueButtonEditIntensity = 0;\r\n this._myValueButtonEditIntensityTimer = 0;\r\n this._myStepButtonEditIntensity = 0;\r\n this._myStepButtonEditIntensityTimer = 0;\r\n\r\n this._myValueEditEnabled = false;\r\n this._myStepEditEnabled = false;\r\n\r\n this._myValueRealValue = 0;\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = false;\r\n\r\n this._myTempValue = [];\r\n\r\n this._myTempNonArrayValue = [0];\r\n this._myTempNonArrayDefaultValue = [0];\r\n }\r\n\r\n _refreshUIHook() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._myUI.myValueTextComponents[i].text = this._getVariableValue()[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n\r\n this._myUI.myStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myStepPerSecond);\r\n }\r\n\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n this._myUI.setAdditionalButtonsVisible(easyTuneParams.myShowAdditionalButtons);\r\n }\r\n\r\n _setEasyTuneVariableHook() {\r\n if (this._myVariable != null) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n }\r\n }\r\n\r\n _updateHook(dt) {\r\n this._updateValue(dt);\r\n }\r\n\r\n _updateValue(dt) {\r\n let stickVariableIntensity = 0;\r\n\r\n if (this._myGamepad) {\r\n let y = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n\r\n if (Math.abs(y) > this._myConfig.myEditThumbstickMinThreshold) {\r\n let normalizedEditAmount = (Math.abs(y) - this._myConfig.myEditThumbstickMinThreshold) / (1 - this._myConfig.myEditThumbstickMinThreshold);\r\n stickVariableIntensity = Math.sign(y) * normalizedEditAmount;\r\n }\r\n }\r\n\r\n let valueIntensity = 0;\r\n if (this._myValueEditEnabled) {\r\n valueIntensity = stickVariableIntensity;\r\n } else if (this._myValueButtonEditIntensity != 0) {\r\n if (this._myValueButtonEditIntensityTimer <= 0) {\r\n valueIntensity = this._myValueButtonEditIntensity;\r\n } else {\r\n this._myValueButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (this._myValueEditIndex >= 0 && this._myValueEditIndex < this._getVariableValue().length) {\r\n if (valueIntensity != 0) {\r\n let amountToAdd = valueIntensity * this._myVariable._myStepPerSecond * dt;\r\n\r\n this._myValueRealValue += amountToAdd;\r\n\r\n if (this._myVariable._myMin != null && this._myVariable._myMax != null) {\r\n this._myValueRealValue = Math.pp_clamp(this._myValueRealValue, this._myVariable._myMin, this._myVariable._myMax);\r\n } else if (this._myVariable._myMin != null) {\r\n this._myValueRealValue = Math.max(this._myValueRealValue, this._myVariable._myMin);\r\n } else if (this._myVariable._myMax != null) {\r\n this._myValueRealValue = Math.min(this._myValueRealValue, this._myVariable._myMax);\r\n }\r\n\r\n let decimalPlacesMultiplier = Math.pow(10, this._myVariable._myDecimalPlaces);\r\n\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n\r\n if (this._myVariable._myEditAllValuesTogether) {\r\n let newValue = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n let difference = newValue - this._myTempValue[this._myValueEditIndex];\r\n\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._myTempValue[i] = Math.round((this._myTempValue[i] + difference) * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n\r\n if (this._myVariable._myMin != null && this._myVariable._myMax != null) {\r\n this._myTempValue[i] = Math.pp_clamp(this._myTempValue[i], this._myVariable._myMin, this._myVariable._myMax);\r\n } else if (this._myVariable._myMin != null) {\r\n this._myTempValue[i] = Math.max(this._myTempValue[i], this._myVariable._myMin);\r\n } else if (this._myVariable._myMax != null) {\r\n this._myTempValue[i] = Math.min(this._myTempValue[i], this._myVariable._myMax);\r\n }\r\n\r\n this._myUI.myValueTextComponents[i].text = this._myTempValue[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n\r\n } else {\r\n this._myTempValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n\r\n if (this._myVariable._myMin != null && this._myVariable._myMax != null) {\r\n this._myTempValue[this._myValueEditIndex] = Math.pp_clamp(this._myTempValue[this._myValueEditIndex], this._myVariable._myMin, this._myVariable._myMax);\r\n } else if (this._myVariable._myMin != null) {\r\n this._myTempValue[this._myValueEditIndex] = Math.max(this._myTempValue[this._myValueEditIndex], this._myVariable._myMin);\r\n } else if (this._myVariable._myMax != null) {\r\n this._myTempValue[this._myValueEditIndex] = Math.min(this._myTempValue[this._myValueEditIndex], this._myVariable._myMax);\r\n }\r\n\r\n this._myUI.myValueTextComponents[this._myValueEditIndex].text = this._myTempValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n\r\n this._setVariableValue(this._myTempValue);\r\n } else {\r\n this._myValueRealValue = this._getVariableValue()[this._myValueEditIndex];\r\n }\r\n }\r\n\r\n let stepIntensity = 0;\r\n if (this._myStepEditEnabled) {\r\n stepIntensity = stickVariableIntensity;\r\n } else if (this._myStepButtonEditIntensity != 0) {\r\n if (this._myStepButtonEditIntensityTimer <= 0) {\r\n stepIntensity = this._myStepButtonEditIntensity;\r\n } else {\r\n this._myStepButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (stepIntensity != 0) {\r\n let amountToAdd = 0;\r\n if (this._myStepFastEdit) {\r\n amountToAdd = Math.sign(stepIntensity) * 1;\r\n this._myStepFastEdit = false;\r\n } else {\r\n amountToAdd = stepIntensity * this._myConfig.myStepMultiplierStepPerSecond * dt;\r\n }\r\n\r\n this._myStepMultiplierValue += amountToAdd;\r\n if (Math.abs(this._myStepMultiplierValue) >= 1) {\r\n if (Math.sign(this._myStepMultiplierValue) > 0) {\r\n this._myStepMultiplierValue -= 1;\r\n this._changeStep(this._myVariable._myStepPerSecond * 10);\r\n } else {\r\n this._myStepMultiplierValue += 1;\r\n this._changeStep(this._myVariable._myStepPerSecond * 0.1);\r\n }\r\n }\r\n } else {\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = true;\r\n }\r\n }\r\n\r\n _addListenersHook() {\r\n let ui = this._myUI;\r\n\r\n ui.myVariableLabelCursorTargetComponent.onClick.add(this._resetAllValues.bind(this));\r\n ui.myVariableLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myVariableLabelText));\r\n ui.myVariableLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myVariableLabelText, this._myConfig.myVariableLabelTextScale));\r\n\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myValueCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, i));\r\n ui.myValueCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], true));\r\n ui.myValueCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], false));\r\n }\r\n\r\n ui.myStepCursorTargetComponent.onClick.add(this._resetStep.bind(this));\r\n ui.myStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, ui.myStepText, true));\r\n ui.myStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, ui.myStepText, false));\r\n\r\n ui.myStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 1));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 1));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, -1));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, -1));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0));\r\n\r\n ui.myStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myStepIncreaseButtonBackgroundComponent.material));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myStepIncreaseButtonBackgroundComponent.material));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myStepDecreaseButtonBackgroundComponent.material));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myStepDecreaseButtonBackgroundComponent.material));\r\n }\r\n\r\n _setValueEditIntensity(index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myValueButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n this._myValueRealValue = this._getVariableValue()[index];\r\n this._myValueEditIndex = index;\r\n }\r\n\r\n this._myValueButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setStepEditIntensity(value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myStepButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n }\r\n\r\n this._myStepButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setValueEditEnabled(index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n this._myValueRealValue = this._getVariableValue()[index];\r\n this._myValueEditIndex = index;\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myValueTextScale);\r\n }\r\n\r\n this._myValueEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _setStepEditEnabled(text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myStepTextScale);\r\n }\r\n\r\n this._myStepEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _resetValue(index) {\r\n if (this._isActive()) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n this._myTempValue[index] = this._getVariableDefaultValue()[index];\r\n this._setVariableValue(this._myTempValue);\r\n\r\n this._myUI.myValueTextComponents[index].text = this._getVariableValue()[index].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n }\r\n\r\n _resetAllValues() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._resetValue(i);\r\n }\r\n }\r\n\r\n _resetStep() {\r\n if (this._isActive()) {\r\n this._changeStep(this._myVariable._myDefaultStepPerSecond);\r\n }\r\n }\r\n\r\n _changeStep(step) {\r\n step = Math.pp_roundDecimal(step, 10);\r\n this._myVariable._myStepPerSecond = step;\r\n this._myUI.myStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myStepPerSecond);\r\n }\r\n\r\n _genericTextHover(text) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n }\r\n\r\n _genericTextUnhover(text, originalScale) {\r\n text.pp_setScaleLocal(originalScale);\r\n }\r\n\r\n _getVariableValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayValue[0] = this._myVariable.getValue();\r\n return this._myTempNonArrayValue;\r\n }\r\n\r\n return this._myVariable.getValue();\r\n }\r\n\r\n _getVariableDefaultValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayDefaultValue[0] = this._myVariable.getDefaultValue();\r\n return this._myTempNonArrayDefaultValue;\r\n }\r\n\r\n return this._myVariable.getDefaultValue();\r\n }\r\n\r\n _setVariableValue(value) {\r\n if (this._myNonArray) {\r\n this._myVariable.setValue(value[0]);\r\n } else {\r\n this._myVariable.setValue(this._myTempValue);\r\n }\r\n }\r\n}", "import { EasyTuneBaseArrayWidgetSelector } from \"../base/easy_tune_base_array_widget_selector.js\";\r\nimport { EasyTuneNumberArrayWidget } from \"./easy_tune_number_array_widget.js\";\r\n\r\nexport class EasyTuneNumberArrayWidgetSelector extends EasyTuneBaseArrayWidgetSelector {\r\n\r\n _getEasyTuneArrayWidget(arraySize) {\r\n return new EasyTuneNumberArrayWidget(this._myParams, arraySize, this._myGamepad, this._myEngine);\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneTransformWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n _getBackPanelMinY() {\r\n return super._getBackPanelMinY() + this.myPositionPanelPosition[1] + this.myStepPanelPosition[1];\r\n }\r\n\r\n _getBackPanelMaxX() {\r\n return this.myDisplayPanelPosition[0] + this.myRotationPanelPosition[0] + this.myIncreaseButtonPosition[0] + this.mySideButtonBackgroundScale[0] + this._mySideButtonDistanceFromBorder;\r\n }\r\n\r\n _getBackPanelMinX() {\r\n return this.myDisplayPanelPosition[0] + this.myScalePanelPosition[0] + this.myDecreaseButtonPosition[0] - this.mySideButtonBackgroundScale[0] - this._mySideButtonDistanceFromBorder;\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00805713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myIncreaseButtonText = \"+\";\r\n this.myDecreaseButtonText = \"-\";\r\n\r\n this.myDecreaseButtonPosition = vec3_create(-0.13, 0, -0.00001);\r\n this.myIncreaseButtonPosition = vec3_create(-this.myDecreaseButtonPosition[0], 0, -0.00001);\r\n\r\n let distanceBetweenComponents = Math.abs(this.myIncreaseButtonPosition[0]) + Math.abs(this.myRightSideButtonPosition[0]);\r\n let distanceFromVariableLabel = 0.045;\r\n this.myPositionPanelPosition = [0, this.myVariableLabelPanelPosition[1] - distanceFromVariableLabel, this._myPanelZOffset];\r\n this.myRotationPanelPosition = [this.myPositionPanelPosition[0] + distanceBetweenComponents, this.myVariableLabelPanelPosition[1] - distanceFromVariableLabel, this._myPanelZOffset];\r\n this.myScalePanelPosition = [this.myPositionPanelPosition[0] - distanceBetweenComponents, this.myVariableLabelPanelPosition[1] - distanceFromVariableLabel, this._myPanelZOffset];\r\n\r\n this.myPositionText = \"Position\";\r\n this.myRotationText = \"Rotation\";\r\n this.myScaleText = \"Scale\";\r\n\r\n this.myComponentLabelTextScale = this.myLabelTextScale;\r\n this.myComponentLabelCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myComponentLabelCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myComponentLabelCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myComponentLabelCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this._myValuePanelDistanceFromVariableLabelPanel = 0.055;\r\n this._myDistanceBetweenValues = this.mySideButtonBackgroundScale[1] * 2 + 0.015;\r\n\r\n this.myValueTextScale = vec3_create(0.4, 0.4, 0.4);\r\n\r\n this.myValueCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myValueCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myValueCollisionExtents = vec3_create(0.065, 0.02, 1);\r\n this.myValueCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myValuePanelsPositions = [];\r\n this.myValuePanelsPositions[0] = vec3_create(0, -this._myValuePanelDistanceFromVariableLabelPanel, 0);\r\n for (let i = 1; i < 3; i++) {\r\n this.myValuePanelsPositions[i] = this.myValuePanelsPositions[i - 1].pp_clone();\r\n this.myValuePanelsPositions[i][1] -= this._myDistanceBetweenValues;\r\n }\r\n\r\n let valuePanelLastPosition = this.myValuePanelsPositions[2][1];\r\n this.myStepPanelPosition = [0, valuePanelLastPosition - this._myValuePanelDistanceFromVariableLabelPanel, 0];\r\n this.myStepTextScale = this.myLabelTextScale;\r\n this.myStepStartString = \"Step: \";\r\n\r\n this.myStepCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myStepCursorTargetPosition[2] = this._myColliderZOffset - this.myStepPanelPosition[2];\r\n this.myStepCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myStepCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n this.myTextHoverScaleMultiplier = vec3_create(1.1, 1.1, 1.1);\r\n\r\n this.myEditThumbstickMinThreshold = 0.35;\r\n this.myStepMultiplierStepPerSecond = 2.25;\r\n this.myButtonEditDelay = 0;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneTransformWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n setAdditionalButtonsVisible(visible) {\r\n this._myAdditionalButtonsVisible = visible;\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myPositionDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n this.myPositionStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myPositionStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myRotationDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n this.myRotationStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myRotationStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScaleIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myScaleDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n this.myScaleStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myScaleStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n\r\n _buildHook() {\r\n this._myAdditionalButtonsVisible = true;\r\n }\r\n\r\n _createSkeletonHook() {\r\n // Position\r\n\r\n this.myPositionPanel = this.myDisplayPanel.pp_addObject();\r\n this.myPositionLabelText = this.myPositionPanel.pp_addObject();\r\n this.myPositionLabelCursorTarget = this.myPositionPanel.pp_addObject();\r\n\r\n this.myPositionPanels = [];\r\n this.myPositionTexts = [];\r\n this.myPositionCursorTargets = [];\r\n\r\n this.myPositionIncreaseButtonPanels = [];\r\n this.myPositionIncreaseButtonBackgrounds = [];\r\n this.myPositionIncreaseButtonTexts = [];\r\n this.myPositionIncreaseButtonCursorTargets = [];\r\n\r\n this.myPositionDecreaseButtonPanels = [];\r\n this.myPositionDecreaseButtonBackgrounds = [];\r\n this.myPositionDecreaseButtonTexts = [];\r\n this.myPositionDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionPanels[i] = this.myPositionPanel.pp_addObject();\r\n this.myPositionTexts[i] = this.myPositionPanels[i].pp_addObject();\r\n this.myPositionCursorTargets[i] = this.myPositionPanels[i].pp_addObject();\r\n\r\n this.myPositionIncreaseButtonPanels[i] = this.myPositionPanels[i].pp_addObject();\r\n this.myPositionIncreaseButtonBackgrounds[i] = this.myPositionIncreaseButtonPanels[i].pp_addObject();\r\n this.myPositionIncreaseButtonTexts[i] = this.myPositionIncreaseButtonPanels[i].pp_addObject();\r\n this.myPositionIncreaseButtonCursorTargets[i] = this.myPositionIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myPositionDecreaseButtonPanels[i] = this.myPositionPanels[i].pp_addObject();\r\n this.myPositionDecreaseButtonBackgrounds[i] = this.myPositionDecreaseButtonPanels[i].pp_addObject();\r\n this.myPositionDecreaseButtonTexts[i] = this.myPositionDecreaseButtonPanels[i].pp_addObject();\r\n this.myPositionDecreaseButtonCursorTargets[i] = this.myPositionDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n // Rotation\r\n\r\n this.myRotationPanel = this.myDisplayPanel.pp_addObject();\r\n this.myRotationLabelText = this.myRotationPanel.pp_addObject();\r\n this.myRotationLabelCursorTarget = this.myRotationPanel.pp_addObject();\r\n\r\n this.myRotationPanels = [];\r\n this.myRotationTexts = [];\r\n this.myRotationCursorTargets = [];\r\n\r\n this.myRotationIncreaseButtonPanels = [];\r\n this.myRotationIncreaseButtonBackgrounds = [];\r\n this.myRotationIncreaseButtonTexts = [];\r\n this.myRotationIncreaseButtonCursorTargets = [];\r\n\r\n this.myRotationDecreaseButtonPanels = [];\r\n this.myRotationDecreaseButtonBackgrounds = [];\r\n this.myRotationDecreaseButtonTexts = [];\r\n this.myRotationDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationPanels[i] = this.myRotationPanel.pp_addObject();\r\n this.myRotationTexts[i] = this.myRotationPanels[i].pp_addObject();\r\n this.myRotationCursorTargets[i] = this.myRotationPanels[i].pp_addObject();\r\n\r\n this.myRotationIncreaseButtonPanels[i] = this.myRotationPanels[i].pp_addObject();\r\n this.myRotationIncreaseButtonBackgrounds[i] = this.myRotationIncreaseButtonPanels[i].pp_addObject();\r\n this.myRotationIncreaseButtonTexts[i] = this.myRotationIncreaseButtonPanels[i].pp_addObject();\r\n this.myRotationIncreaseButtonCursorTargets[i] = this.myRotationIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myRotationDecreaseButtonPanels[i] = this.myRotationPanels[i].pp_addObject();\r\n this.myRotationDecreaseButtonBackgrounds[i] = this.myRotationDecreaseButtonPanels[i].pp_addObject();\r\n this.myRotationDecreaseButtonTexts[i] = this.myRotationDecreaseButtonPanels[i].pp_addObject();\r\n this.myRotationDecreaseButtonCursorTargets[i] = this.myRotationDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n // Scale\r\n\r\n this.myScalePanel = this.myDisplayPanel.pp_addObject();\r\n this.myScaleLabelText = this.myScalePanel.pp_addObject();\r\n this.myScaleLabelCursorTarget = this.myScalePanel.pp_addObject();\r\n\r\n this.myScalePanels = [];\r\n this.myScaleTexts = [];\r\n this.myScaleCursorTargets = [];\r\n\r\n this.myScaleIncreaseButtonPanels = [];\r\n this.myScaleIncreaseButtonBackgrounds = [];\r\n this.myScaleIncreaseButtonTexts = [];\r\n this.myScaleIncreaseButtonCursorTargets = [];\r\n\r\n this.myScaleDecreaseButtonPanels = [];\r\n this.myScaleDecreaseButtonBackgrounds = [];\r\n this.myScaleDecreaseButtonTexts = [];\r\n this.myScaleDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScalePanels[i] = this.myScalePanel.pp_addObject();\r\n this.myScaleTexts[i] = this.myScalePanels[i].pp_addObject();\r\n this.myScaleCursorTargets[i] = this.myScalePanels[i].pp_addObject();\r\n\r\n this.myScaleIncreaseButtonPanels[i] = this.myScalePanels[i].pp_addObject();\r\n this.myScaleIncreaseButtonBackgrounds[i] = this.myScaleIncreaseButtonPanels[i].pp_addObject();\r\n this.myScaleIncreaseButtonTexts[i] = this.myScaleIncreaseButtonPanels[i].pp_addObject();\r\n this.myScaleIncreaseButtonCursorTargets[i] = this.myScaleIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myScaleDecreaseButtonPanels[i] = this.myScalePanels[i].pp_addObject();\r\n this.myScaleDecreaseButtonBackgrounds[i] = this.myScaleDecreaseButtonPanels[i].pp_addObject();\r\n this.myScaleDecreaseButtonTexts[i] = this.myScaleDecreaseButtonPanels[i].pp_addObject();\r\n this.myScaleDecreaseButtonCursorTargets[i] = this.myScaleDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n // Steps\r\n\r\n // Position\r\n\r\n this.myPositionStepPanel = this.myPositionPanel.pp_addObject();\r\n this.myPositionStepText = this.myPositionStepPanel.pp_addObject();\r\n this.myPositionStepCursorTarget = this.myPositionStepPanel.pp_addObject();\r\n\r\n this.myPositionStepIncreaseButtonPanel = this.myPositionStepPanel.pp_addObject();\r\n this.myPositionStepIncreaseButtonBackground = this.myPositionStepIncreaseButtonPanel.pp_addObject();\r\n this.myPositionStepIncreaseButtonText = this.myPositionStepIncreaseButtonPanel.pp_addObject();\r\n this.myPositionStepIncreaseButtonCursorTarget = this.myPositionStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myPositionStepDecreaseButtonPanel = this.myPositionStepPanel.pp_addObject();\r\n this.myPositionStepDecreaseButtonBackground = this.myPositionStepDecreaseButtonPanel.pp_addObject();\r\n this.myPositionStepDecreaseButtonText = this.myPositionStepDecreaseButtonPanel.pp_addObject();\r\n this.myPositionStepDecreaseButtonCursorTarget = this.myPositionStepDecreaseButtonPanel.pp_addObject();\r\n\r\n // Rotation\r\n\r\n this.myRotationStepPanel = this.myRotationPanel.pp_addObject();\r\n this.myRotationStepText = this.myRotationStepPanel.pp_addObject();\r\n this.myRotationStepCursorTarget = this.myRotationStepPanel.pp_addObject();\r\n\r\n this.myRotationStepIncreaseButtonPanel = this.myRotationStepPanel.pp_addObject();\r\n this.myRotationStepIncreaseButtonBackground = this.myRotationStepIncreaseButtonPanel.pp_addObject();\r\n this.myRotationStepIncreaseButtonText = this.myRotationStepIncreaseButtonPanel.pp_addObject();\r\n this.myRotationStepIncreaseButtonCursorTarget = this.myRotationStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myRotationStepDecreaseButtonPanel = this.myRotationStepPanel.pp_addObject();\r\n this.myRotationStepDecreaseButtonBackground = this.myRotationStepDecreaseButtonPanel.pp_addObject();\r\n this.myRotationStepDecreaseButtonText = this.myRotationStepDecreaseButtonPanel.pp_addObject();\r\n this.myRotationStepDecreaseButtonCursorTarget = this.myRotationStepDecreaseButtonPanel.pp_addObject();\r\n\r\n // Scale\r\n\r\n this.myScaleStepPanel = this.myScalePanel.pp_addObject();\r\n this.myScaleStepText = this.myScaleStepPanel.pp_addObject();\r\n this.myScaleStepCursorTarget = this.myScaleStepPanel.pp_addObject();\r\n\r\n this.myScaleStepIncreaseButtonPanel = this.myScaleStepPanel.pp_addObject();\r\n this.myScaleStepIncreaseButtonBackground = this.myScaleStepIncreaseButtonPanel.pp_addObject();\r\n this.myScaleStepIncreaseButtonText = this.myScaleStepIncreaseButtonPanel.pp_addObject();\r\n this.myScaleStepIncreaseButtonCursorTarget = this.myScaleStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myScaleStepDecreaseButtonPanel = this.myScaleStepPanel.pp_addObject();\r\n this.myScaleStepDecreaseButtonBackground = this.myScaleStepDecreaseButtonPanel.pp_addObject();\r\n this.myScaleStepDecreaseButtonText = this.myScaleStepDecreaseButtonPanel.pp_addObject();\r\n this.myScaleStepDecreaseButtonCursorTarget = this.myScaleStepDecreaseButtonPanel.pp_addObject();\r\n }\r\n\r\n _setTransformHook() {\r\n // Position\r\n\r\n this.myPositionPanel.pp_setPositionLocal(this._myConfig.myPositionPanelPosition);\r\n this.myPositionLabelText.pp_scaleObject(this._myConfig.myComponentLabelTextScale);\r\n this.myPositionLabelCursorTarget.pp_setPositionLocal(this._myConfig.myComponentLabelCursorTargetPosition);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionPanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myPositionTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myPositionCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myPositionIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myPositionIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myPositionDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myPositionDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n // Rotation\r\n\r\n this.myRotationPanel.pp_setPositionLocal(this._myConfig.myRotationPanelPosition);\r\n this.myRotationLabelText.pp_scaleObject(this._myConfig.myComponentLabelTextScale);\r\n this.myRotationLabelCursorTarget.pp_setPositionLocal(this._myConfig.myComponentLabelCursorTargetPosition);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationPanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myRotationTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myRotationCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myRotationIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myRotationIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myRotationDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myRotationDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n // Scale\r\n\r\n this.myScalePanel.pp_setPositionLocal(this._myConfig.myScalePanelPosition);\r\n this.myScaleLabelText.pp_scaleObject(this._myConfig.myComponentLabelTextScale);\r\n this.myScaleLabelCursorTarget.pp_setPositionLocal(this._myConfig.myComponentLabelCursorTargetPosition);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScalePanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myScaleTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myScaleCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myScaleIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myScaleIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myScaleDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myScaleDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n // Steps\r\n\r\n // Position\r\n\r\n this.myPositionStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myPositionStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myPositionStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myPositionStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myPositionStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myPositionStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myPositionStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n // Rotation\r\n\r\n this.myRotationStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myRotationStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myRotationStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myRotationStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myRotationStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myRotationStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myRotationStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n // Scale\r\n\r\n this.myScaleStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myScaleStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myScaleStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myScaleStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myScaleStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myScaleStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myScaleStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n _addComponentsHook() {\r\n // Position\r\n\r\n this.myPositionLabelTextComponent = this.myPositionLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionLabelTextComponent);\r\n this.myPositionLabelTextComponent.text = this._myConfig.myPositionText;\r\n\r\n this.myPositionLabelCursorTargetComponent = this.myPositionLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionLabelCollisionComponent = this.myPositionLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionLabelCollisionComponent.extents = this._myConfig.myComponentLabelCollisionExtents;\r\n\r\n this.myPositionTextComponents = [];\r\n this.myPositionCursorTargetComponents = [];\r\n this.myPositionCollisionComponents = [];\r\n\r\n this.myPositionIncreaseButtonBackgroundComponents = [];\r\n this.myPositionIncreaseButtonTextComponents = [];\r\n this.myPositionIncreaseButtonCursorTargetComponents = [];\r\n this.myPositionIncreaseButtonCollisionComponents = [];\r\n\r\n this.myPositionDecreaseButtonBackgroundComponents = [];\r\n this.myPositionDecreaseButtonTextComponents = [];\r\n this.myPositionDecreaseButtonCursorTargetComponents = [];\r\n this.myPositionDecreaseButtonCollisionComponents = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionTextComponents[i] = this.myPositionTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionTextComponents[i]);\r\n this.myPositionTextComponents[i].text = \" \";\r\n\r\n this.myPositionCursorTargetComponents[i] = this.myPositionCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myPositionCollisionComponents[i] = this.myPositionCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myPositionCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myPositionIncreaseButtonBackgroundComponents[i] = this.myPositionIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myPositionIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myPositionIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionIncreaseButtonTextComponents[i] = this.myPositionIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionIncreaseButtonTextComponents[i]);\r\n this.myPositionIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myPositionIncreaseButtonCursorTargetComponents[i] = this.myPositionIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myPositionIncreaseButtonCollisionComponents[i] = this.myPositionIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myPositionIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPositionDecreaseButtonBackgroundComponents[i] = this.myPositionDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myPositionDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myPositionDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionDecreaseButtonTextComponents[i] = this.myPositionDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionDecreaseButtonTextComponents[i]);\r\n this.myPositionDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myPositionDecreaseButtonCursorTargetComponents[i] = this.myPositionDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myPositionDecreaseButtonCollisionComponents[i] = this.myPositionDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myPositionDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n // Rotation\r\n\r\n this.myRotationLabelTextComponent = this.myRotationLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationLabelTextComponent);\r\n this.myRotationLabelTextComponent.text = this._myConfig.myRotationText;\r\n\r\n this.myRotationLabelCursorTargetComponent = this.myRotationLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationLabelCollisionComponent = this.myRotationLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationLabelCollisionComponent.extents = this._myConfig.myComponentLabelCollisionExtents;\r\n\r\n this.myRotationTextComponents = [];\r\n this.myRotationCursorTargetComponents = [];\r\n this.myRotationCollisionComponents = [];\r\n\r\n this.myRotationIncreaseButtonBackgroundComponents = [];\r\n this.myRotationIncreaseButtonTextComponents = [];\r\n this.myRotationIncreaseButtonCursorTargetComponents = [];\r\n this.myRotationIncreaseButtonCollisionComponents = [];\r\n\r\n this.myRotationDecreaseButtonBackgroundComponents = [];\r\n this.myRotationDecreaseButtonTextComponents = [];\r\n this.myRotationDecreaseButtonCursorTargetComponents = [];\r\n this.myRotationDecreaseButtonCollisionComponents = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationTextComponents[i] = this.myRotationTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationTextComponents[i]);\r\n this.myRotationTextComponents[i].text = \" \";\r\n\r\n this.myRotationCursorTargetComponents[i] = this.myRotationCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myRotationCollisionComponents[i] = this.myRotationCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myRotationCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myRotationIncreaseButtonBackgroundComponents[i] = this.myRotationIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myRotationIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myRotationIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationIncreaseButtonTextComponents[i] = this.myRotationIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationIncreaseButtonTextComponents[i]);\r\n this.myRotationIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myRotationIncreaseButtonCursorTargetComponents[i] = this.myRotationIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myRotationIncreaseButtonCollisionComponents[i] = this.myRotationIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myRotationIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myRotationDecreaseButtonBackgroundComponents[i] = this.myRotationDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myRotationDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myRotationDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationDecreaseButtonTextComponents[i] = this.myRotationDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationDecreaseButtonTextComponents[i]);\r\n this.myRotationDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myRotationDecreaseButtonCursorTargetComponents[i] = this.myRotationDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myRotationDecreaseButtonCollisionComponents[i] = this.myRotationDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myRotationDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n // Scale\r\n\r\n this.myScaleLabelTextComponent = this.myScaleLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleLabelTextComponent);\r\n this.myScaleLabelTextComponent.text = this._myConfig.myScaleText;\r\n\r\n this.myScaleLabelCursorTargetComponent = this.myScaleLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleLabelCollisionComponent = this.myScaleLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleLabelCollisionComponent.extents = this._myConfig.myComponentLabelCollisionExtents;\r\n\r\n this.myScaleTextComponents = [];\r\n this.myScaleCursorTargetComponents = [];\r\n this.myScaleCollisionComponents = [];\r\n\r\n this.myScaleIncreaseButtonBackgroundComponents = [];\r\n this.myScaleIncreaseButtonTextComponents = [];\r\n this.myScaleIncreaseButtonCursorTargetComponents = [];\r\n this.myScaleIncreaseButtonCollisionComponents = [];\r\n\r\n this.myScaleDecreaseButtonBackgroundComponents = [];\r\n this.myScaleDecreaseButtonTextComponents = [];\r\n this.myScaleDecreaseButtonCursorTargetComponents = [];\r\n this.myScaleDecreaseButtonCollisionComponents = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScaleTextComponents[i] = this.myScaleTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleTextComponents[i]);\r\n this.myScaleTextComponents[i].text = \" \";\r\n\r\n this.myScaleCursorTargetComponents[i] = this.myScaleCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myScaleCollisionComponents[i] = this.myScaleCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myScaleCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myScaleIncreaseButtonBackgroundComponents[i] = this.myScaleIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myScaleIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myScaleIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleIncreaseButtonTextComponents[i] = this.myScaleIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleIncreaseButtonTextComponents[i]);\r\n this.myScaleIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myScaleIncreaseButtonCursorTargetComponents[i] = this.myScaleIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myScaleIncreaseButtonCollisionComponents[i] = this.myScaleIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myScaleIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myScaleDecreaseButtonBackgroundComponents[i] = this.myScaleDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myScaleDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myScaleDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleDecreaseButtonTextComponents[i] = this.myScaleDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleDecreaseButtonTextComponents[i]);\r\n this.myScaleDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myScaleDecreaseButtonCursorTargetComponents[i] = this.myScaleDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myScaleDecreaseButtonCollisionComponents[i] = this.myScaleDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myScaleDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n // Steps\r\n\r\n // Position \r\n this.myPositionStepTextComponent = this.myPositionStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepTextComponent);\r\n this.myPositionStepTextComponent.text = \" \";\r\n\r\n this.myPositionStepCursorTargetComponent = this.myPositionStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepCollisionComponent = this.myPositionStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n this.myPositionStepIncreaseButtonBackgroundComponent = this.myPositionStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepIncreaseButtonTextComponent = this.myPositionStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepIncreaseButtonTextComponent);\r\n this.myPositionStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myPositionStepIncreaseButtonCursorTargetComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepIncreaseButtonCollisionComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPositionStepDecreaseButtonBackgroundComponent = this.myPositionStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepDecreaseButtonTextComponent = this.myPositionStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepDecreaseButtonTextComponent);\r\n this.myPositionStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myPositionStepDecreaseButtonCursorTargetComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepDecreaseButtonCollisionComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Rotation\r\n\r\n this.myRotationStepTextComponent = this.myRotationStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepTextComponent);\r\n this.myRotationStepTextComponent.text = \" \";\r\n\r\n this.myRotationStepCursorTargetComponent = this.myRotationStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepCollisionComponent = this.myRotationStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n this.myRotationStepIncreaseButtonBackgroundComponent = this.myRotationStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepIncreaseButtonTextComponent = this.myRotationStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepIncreaseButtonTextComponent);\r\n this.myRotationStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myRotationStepIncreaseButtonCursorTargetComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepIncreaseButtonCollisionComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myRotationStepDecreaseButtonBackgroundComponent = this.myRotationStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepDecreaseButtonTextComponent = this.myRotationStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepDecreaseButtonTextComponent);\r\n this.myRotationStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myRotationStepDecreaseButtonCursorTargetComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepDecreaseButtonCollisionComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Scale\r\n\r\n this.myScaleStepTextComponent = this.myScaleStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepTextComponent);\r\n this.myScaleStepTextComponent.text = \" \";\r\n\r\n this.myScaleStepCursorTargetComponent = this.myScaleStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepCollisionComponent = this.myScaleStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n this.myScaleStepIncreaseButtonBackgroundComponent = this.myScaleStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepIncreaseButtonTextComponent = this.myScaleStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepIncreaseButtonTextComponent);\r\n this.myScaleStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myScaleStepIncreaseButtonCursorTargetComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepIncreaseButtonCollisionComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myScaleStepDecreaseButtonBackgroundComponent = this.myScaleStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepDecreaseButtonTextComponent = this.myScaleStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepDecreaseButtonTextComponent);\r\n this.myScaleStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myScaleStepDecreaseButtonCursorTargetComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepDecreaseButtonCollisionComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n _addStepComponents() {\r\n // Position\r\n this.myPositionStepTextComponent = this.myPositionStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepTextComponent);\r\n this.myPositionStepTextComponent.text = \" \";\r\n\r\n this.myPositionStepCursorTargetComponent = this.myPositionStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepCollisionComponent = this.myPositionStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myPositionStepIncreaseButtonBackgroundComponent = this.myPositionStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepIncreaseButtonTextComponent = this.myPositionStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepIncreaseButtonTextComponent);\r\n this.myPositionStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myPositionStepIncreaseButtonCursorTargetComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepIncreaseButtonCollisionComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPositionStepDecreaseButtonBackgroundComponent = this.myPositionStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepDecreaseButtonTextComponent = this.myPositionStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepDecreaseButtonTextComponent);\r\n this.myPositionStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myPositionStepDecreaseButtonCursorTargetComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepDecreaseButtonCollisionComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Rotation\r\n this.myRotationStepTextComponent = this.myRotationStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepTextComponent);\r\n this.myRotationStepTextComponent.text = \" \";\r\n\r\n this.myRotationStepCursorTargetComponent = this.myRotationStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepCollisionComponent = this.myRotationStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myRotationStepIncreaseButtonBackgroundComponent = this.myRotationStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepIncreaseButtonTextComponent = this.myRotationStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepIncreaseButtonTextComponent);\r\n this.myRotationStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myRotationStepIncreaseButtonCursorTargetComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepIncreaseButtonCollisionComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myRotationStepDecreaseButtonBackgroundComponent = this.myRotationStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepDecreaseButtonTextComponent = this.myRotationStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepDecreaseButtonTextComponent);\r\n this.myRotationStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myRotationStepDecreaseButtonCursorTargetComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepDecreaseButtonCollisionComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Scale\r\n this.myScaleStepTextComponent = this.myScaleStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepTextComponent);\r\n this.myScaleStepTextComponent.text = \" \";\r\n\r\n this.myScaleStepCursorTargetComponent = this.myScaleStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepCollisionComponent = this.myScaleStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myScaleStepIncreaseButtonBackgroundComponent = this.myScaleStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepIncreaseButtonTextComponent = this.myScaleStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepIncreaseButtonTextComponent);\r\n this.myScaleStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myScaleStepIncreaseButtonCursorTargetComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepIncreaseButtonCollisionComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myScaleStepDecreaseButtonBackgroundComponent = this.myScaleStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepDecreaseButtonTextComponent = this.myScaleStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepDecreaseButtonTextComponent);\r\n this.myScaleStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myScaleStepDecreaseButtonCursorTargetComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepDecreaseButtonCollisionComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n}", "import { GamepadAxesID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { mat4_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneTransformWidgetConfig } from \"./easy_tune_transform_widget_config.js\";\r\nimport { EasyTuneTransformWidgetUI } from \"./easy_tune_transform_widget_ui.js\";\r\n\r\nexport class EasyTuneTransformWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, gamepad, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myGamepad = gamepad;\r\n\r\n this._myConfig = new EasyTuneTransformWidgetConfig();\r\n this._myUI = new EasyTuneTransformWidgetUI(engine);\r\n\r\n this._myValueButtonEditIntensity = 0;\r\n this._myValueButtonEditIntensityTimer = 0;\r\n this._myStepButtonEditIntensity = 0;\r\n this._myStepButtonEditIntensityTimer = 0;\r\n\r\n this._myValueEditEnabled = false;\r\n this._myStepEditEnabled = false;\r\n\r\n this._myValueRealValue = 0;\r\n this._myComponentStepValue = 0;\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = false;\r\n\r\n this._myValueEditIndex = -1;\r\n this._myComponentIndex = 0;\r\n this._myStepIndex = 0;\r\n\r\n this._myTempTransformValue = mat4_create();\r\n this._myTempPositionValue = vec3_create();\r\n this._myTempRotationValue = vec3_create();\r\n this._myTempScaleValue = vec3_create();\r\n }\r\n\r\n _refreshUIHook() {\r\n for (let i = 0; i < 3; i++) {\r\n this._myUI.myPositionTextComponents[i].text = this._myVariable._myPosition[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n this._myUI.myPositionStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myPositionStepPerSecond);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this._myUI.myRotationTextComponents[i].text = this._myVariable._myRotation[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n this._myUI.myRotationStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myRotationStepPerSecond);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this._myUI.myScaleTextComponents[i].text = this._myVariable._myScale[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n this._myUI.myScaleStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myScaleStepPerSecond);\r\n }\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n this._myUI.setAdditionalButtonsVisible(easyTuneParams.myShowAdditionalButtons);\r\n }\r\n\r\n _setEasyTuneVariableHook() {\r\n if (this._myVariable != null) {\r\n this._myTempPositionValue.pp_copy(this._myVariable._myPosition);\r\n this._myTempRotationValue.pp_copy(this._myVariable._myRotation);\r\n this._myTempScaleValue.pp_copy(this._myVariable._myScale);\r\n }\r\n }\r\n\r\n _updateHook(dt) {\r\n this._updateValue(dt);\r\n }\r\n\r\n _updateValue(dt) {\r\n let stickVariableIntensity = 0;\r\n\r\n if (this._myGamepad) {\r\n let y = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n\r\n if (Math.abs(y) > this._myConfig.myEditThumbstickMinThreshold) {\r\n let normalizedEditAmount = (Math.abs(y) - this._myConfig.myEditThumbstickMinThreshold) / (1 - this._myConfig.myEditThumbstickMinThreshold);\r\n stickVariableIntensity = Math.sign(y) * normalizedEditAmount;\r\n }\r\n }\r\n\r\n let valueIntensity = 0;\r\n if (this._myValueEditEnabled) {\r\n valueIntensity = stickVariableIntensity;\r\n } else if (this._myValueButtonEditIntensity != 0) {\r\n if (this._myValueButtonEditIntensityTimer <= 0) {\r\n valueIntensity = this._myValueButtonEditIntensity;\r\n } else {\r\n this._myValueButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (this._myValueEditIndex >= 0 && this._myValueEditIndex < 3) {\r\n if (valueIntensity != 0) {\r\n this._myTempPositionValue.pp_copy(this._myVariable._myPosition);\r\n this._myTempRotationValue.pp_copy(this._myVariable._myRotation);\r\n this._myTempScaleValue.pp_copy(this._myVariable._myScale);\r\n\r\n let amountToAdd = valueIntensity * this._myComponentStepValue * dt;\r\n\r\n this._myValueRealValue += amountToAdd;\r\n\r\n let decimalPlacesMultiplier = Math.pow(10, this._myVariable._myDecimalPlaces);\r\n\r\n switch (this._myComponentIndex) {\r\n case 0:\r\n this._myTempPositionValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myUI.myPositionTextComponents[this._myValueEditIndex].text = this._myTempPositionValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 1:\r\n if (this._myValueRealValue > 180) {\r\n while (this._myValueRealValue > 180) {\r\n this._myValueRealValue -= 180;\r\n }\r\n this._myValueRealValue = -180 + this._myValueRealValue;\r\n }\r\n\r\n if (this._myValueRealValue < -180) {\r\n while (this._myValueRealValue < - 180) {\r\n this._myValueRealValue += 180;\r\n }\r\n this._myValueRealValue = 180 - this._myValueRealValue;\r\n }\r\n\r\n this._myTempRotationValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myUI.myRotationTextComponents[this._myValueEditIndex].text = this._myTempRotationValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 2:\r\n if (this._myValueRealValue <= 0) {\r\n this._myValueRealValue = 1 / decimalPlacesMultiplier;\r\n }\r\n\r\n if (this._myVariable._myScaleAsOne) {\r\n let newValue = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n let difference = newValue - this._myTempScaleValue[this._myValueEditIndex];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this._myTempScaleValue[i] = Math.round((this._myTempScaleValue[i] + difference) * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myTempScaleValue[i] = Math.max(this._myTempScaleValue[i], 1 / decimalPlacesMultiplier);\r\n this._myUI.myScaleTextComponents[i].text = this._myTempScaleValue[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n } else {\r\n this._myTempScaleValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myTempScaleValue[this._myValueEditIndex] = Math.max(this._myTempScaleValue[this._myValueEditIndex], 1 / decimalPlacesMultiplier);\r\n this._myUI.myScaleTextComponents[this._myValueEditIndex].text = this._myTempScaleValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n break;\r\n }\r\n\r\n this._myTempTransformValue.mat4_setPositionRotationDegreesScale(this._myTempPositionValue, this._myTempRotationValue, this._myTempScaleValue);\r\n this._myVariable.setValue(this._myTempTransformValue);\r\n } else {\r\n switch (this._myComponentIndex) {\r\n case 0:\r\n this._myValueRealValue = this._myVariable._myPosition[this._myValueEditIndex];\r\n break;\r\n case 1:\r\n this._myValueRealValue = this._myVariable._myRotation[this._myValueEditIndex];\r\n break;\r\n case 2:\r\n this._myValueRealValue = this._myVariable._myScale[this._myValueEditIndex];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let stepIntensity = 0;\r\n if (this._myStepEditEnabled) {\r\n stepIntensity = stickVariableIntensity;\r\n } else if (this._myStepButtonEditIntensity != 0) {\r\n if (this._myStepButtonEditIntensityTimer <= 0) {\r\n stepIntensity = this._myStepButtonEditIntensity;\r\n } else {\r\n this._myStepButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (stepIntensity != 0) {\r\n let amountToAdd = 0;\r\n if (this._myStepFastEdit) {\r\n amountToAdd = Math.sign(stepIntensity) * 1;\r\n this._myStepFastEdit = false;\r\n } else {\r\n amountToAdd = stepIntensity * this._myConfig.myStepMultiplierStepPerSecond * dt;\r\n }\r\n\r\n this._myStepMultiplierValue += amountToAdd;\r\n if (Math.abs(this._myStepMultiplierValue) >= 1) {\r\n let stepValue = 0;\r\n switch (this._myStepIndex) {\r\n case 0:\r\n stepValue = this._myVariable._myPositionStepPerSecond;\r\n break;\r\n case 1:\r\n stepValue = this._myVariable._myRotationStepPerSecond;\r\n break;\r\n case 2:\r\n stepValue = this._myVariable._myScaleStepPerSecond;\r\n break;\r\n default:\r\n stepValue = 0;\r\n }\r\n if (Math.sign(this._myStepMultiplierValue) > 0) {\r\n this._myStepMultiplierValue -= 1;\r\n this._changeStep(this._myStepIndex, stepValue * 10);\r\n } else {\r\n this._myStepMultiplierValue += 1;\r\n this._changeStep(this._myStepIndex, stepValue * 0.1);\r\n }\r\n }\r\n } else {\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = true;\r\n }\r\n }\r\n\r\n _addListenersHook() {\r\n let ui = this._myUI;\r\n\r\n ui.myVariableLabelCursorTargetComponent.onClick.add(this._resetAllValues.bind(this));\r\n ui.myVariableLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myVariableLabelText));\r\n ui.myVariableLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myVariableLabelText, this._myConfig.myVariableLabelTextScale));\r\n\r\n ui.myPositionLabelCursorTargetComponent.onClick.add(this._resetComponentValues.bind(this, 0));\r\n ui.myPositionLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myPositionLabelText));\r\n ui.myPositionLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myPositionLabelText, this._myConfig.myComponentLabelTextScale));\r\n for (let i = 0; i < 3; i++) {\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 0, i, 1));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 0, i, 1));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 0, i, -1));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 0, i, -1));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myPositionIncreaseButtonBackgroundComponents[i].material));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myPositionIncreaseButtonBackgroundComponents[i].material));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myPositionDecreaseButtonBackgroundComponents[i].material));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myPositionDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myPositionCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, 0, i));\r\n ui.myPositionCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, 0, i, ui.myPositionTexts[i], true));\r\n ui.myPositionCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, 0, i, ui.myPositionTexts[i], false));\r\n }\r\n\r\n ui.myRotationLabelCursorTargetComponent.onClick.add(this._resetComponentValues.bind(this, 1));\r\n ui.myRotationLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myRotationLabelText));\r\n ui.myRotationLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myRotationLabelText, this._myConfig.myComponentLabelTextScale));\r\n for (let i = 0; i < 3; i++) {\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 1, i, 1));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 1, i, 1));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 1, i, -1));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 1, i, -1));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myRotationIncreaseButtonBackgroundComponents[i].material));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myRotationIncreaseButtonBackgroundComponents[i].material));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myRotationDecreaseButtonBackgroundComponents[i].material));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myRotationDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myRotationCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, 1, i));\r\n ui.myRotationCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, 1, i, ui.myRotationTexts[i], true));\r\n ui.myRotationCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, 1, i, ui.myRotationTexts[i], false));\r\n }\r\n\r\n ui.myScaleLabelCursorTargetComponent.onClick.add(this._resetComponentValues.bind(this, 2));\r\n ui.myScaleLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myScaleLabelText));\r\n ui.myScaleLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myScaleLabelText, this._myConfig.myComponentLabelTextScale));\r\n for (let i = 0; i < 3; i++) {\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 2, i, 1));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 2, i, 1));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 2, i, -1));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 2, i, -1));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myScaleIncreaseButtonBackgroundComponents[i].material));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myScaleIncreaseButtonBackgroundComponents[i].material));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myScaleDecreaseButtonBackgroundComponents[i].material));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myScaleDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myScaleCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, 2, i));\r\n ui.myScaleCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, 2, i, ui.myScaleTexts[i], true));\r\n ui.myScaleCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, 2, i, ui.myScaleTexts[i], false));\r\n }\r\n\r\n ui.myPositionStepCursorTargetComponent.onClick.add(this._resetStep.bind(this, 0));\r\n ui.myPositionStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, 0, ui.myPositionStepText, true));\r\n ui.myPositionStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, 0, ui.myPositionStepText, false));\r\n\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 0, 1));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 0, 1));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 0, -1));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 0, -1));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPositionStepIncreaseButtonBackgroundComponent.material));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myPositionStepIncreaseButtonBackgroundComponent.material));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPositionStepDecreaseButtonBackgroundComponent.material));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myPositionStepDecreaseButtonBackgroundComponent.material));\r\n\r\n ui.myRotationStepCursorTargetComponent.onClick.add(this._resetStep.bind(this, 1));\r\n ui.myRotationStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, 1, ui.myRotationStepText, true));\r\n ui.myRotationStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, 1, ui.myRotationStepText, false));\r\n\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 1, 1));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 1, 1));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 1, -1));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 1, -1));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myRotationStepIncreaseButtonBackgroundComponent.material));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myRotationStepIncreaseButtonBackgroundComponent.material));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myRotationStepDecreaseButtonBackgroundComponent.material));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myRotationStepDecreaseButtonBackgroundComponent.material));\r\n\r\n ui.myScaleStepCursorTargetComponent.onClick.add(this._resetStep.bind(this, 2));\r\n ui.myScaleStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, 2, ui.myScaleStepText, true));\r\n ui.myScaleStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, 2, ui.myScaleStepText, false));\r\n\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 2, 1));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 2, 1));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 2, -1));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 2, -1));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myScaleStepIncreaseButtonBackgroundComponent.material));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myScaleStepIncreaseButtonBackgroundComponent.material));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myScaleStepDecreaseButtonBackgroundComponent.material));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myScaleStepDecreaseButtonBackgroundComponent.material));\r\n\r\n }\r\n\r\n _setValueEditIntensity(componentIndex, index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n switch (componentIndex) {\r\n case 0:\r\n this._myValueRealValue = this._myVariable._myPosition[index];\r\n this._myComponentStepValue = this._myVariable._myPositionStepPerSecond;\r\n break;\r\n case 1:\r\n this._myValueRealValue = this._myVariable._myRotation[index];\r\n this._myComponentStepValue = this._myVariable._myRotationStepPerSecond;\r\n break;\r\n case 2:\r\n this._myValueRealValue = this._myVariable._myScale[index];\r\n this._myComponentStepValue = this._myVariable._myScaleStepPerSecond;\r\n break;\r\n }\r\n\r\n this._myValueButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n this._myValueEditIndex = index;\r\n this._myComponentIndex = componentIndex;\r\n }\r\n\r\n this._myValueButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setStepEditIntensity(index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myStepButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n }\r\n\r\n this._myStepButtonEditIntensity = value;\r\n\r\n this._myStepIndex = index;\r\n }\r\n }\r\n\r\n _setValueEditEnabled(componentIndex, index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n switch (componentIndex) {\r\n case 0:\r\n this._myValueRealValue = this._myVariable._myPosition[index];\r\n this._myComponentStepValue = this._myVariable._myPositionStepPerSecond;\r\n break;\r\n case 1:\r\n this._myValueRealValue = this._myVariable._myRotation[index];\r\n this._myComponentStepValue = this._myVariable._myRotationStepPerSecond;\r\n break;\r\n case 2:\r\n this._myValueRealValue = this._myVariable._myScale[index];\r\n this._myComponentStepValue = this._myVariable._myScaleStepPerSecond;\r\n break;\r\n }\r\n\r\n this._myValueEditIndex = index;\r\n this._myComponentIndex = componentIndex;\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myValueTextScale);\r\n }\r\n\r\n this._myValueEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _setStepEditEnabled(index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myStepTextScale);\r\n }\r\n\r\n this._myStepEditEnabled = enabled;\r\n this._myStepIndex = index;\r\n }\r\n }\r\n\r\n _resetValue(componentIndex, index) {\r\n if (this._isActive()) {\r\n this._myTempPositionValue.pp_copy(this._myVariable._myPosition);\r\n this._myTempRotationValue.pp_copy(this._myVariable._myRotation);\r\n this._myTempScaleValue.pp_copy(this._myVariable._myScale);\r\n\r\n switch (componentIndex) {\r\n case 0:\r\n this._myTempPositionValue[index] = this._myVariable._myDefaultPosition[index];\r\n this._myUI.myPositionTextComponents[index].text = this._myTempPositionValue[index].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 1:\r\n this._myTempRotationValue[index] = this._myVariable._myDefaultRotation[index];\r\n this._myUI.myRotationTextComponents[index].text = this._myTempRotationValue[index].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 2:\r\n this._myTempScaleValue[index] = this._myVariable._myDefaultScale[index];\r\n this._myUI.myScaleTextComponents[index].text = this._myTempScaleValue[index].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n\r\n }\r\n\r\n this._myTempTransformValue.mat4_setPositionRotationDegreesScale(this._myTempPositionValue, this._myTempRotationValue, this._myTempScaleValue);\r\n this._myVariable.setValue(this._myTempTransformValue);\r\n }\r\n }\r\n\r\n _resetAllValues() {\r\n for (let i = 0; i < 3; i++) {\r\n this._resetComponentValues(i);\r\n }\r\n }\r\n\r\n _resetComponentValues(index) {\r\n for (let i = 0; i < 3; i++) {\r\n this._resetValue(index, i);\r\n }\r\n }\r\n\r\n _resetStep(index) {\r\n if (this._isActive()) {\r\n let defaultValue = 0;\r\n switch (index) {\r\n case 0:\r\n defaultValue = this._myVariable._myDefaultPositionStepPerSecond;\r\n break;\r\n case 1:\r\n defaultValue = this._myVariable._myDefaultRotationStepPerSecond;\r\n break;\r\n case 2:\r\n defaultValue = this._myVariable._myDefaultScaleStepPerSecond;\r\n break;\r\n default:\r\n defaultValue = 0;\r\n }\r\n\r\n this._changeStep(index, defaultValue);\r\n }\r\n }\r\n\r\n _changeStep(index, step) {\r\n step = Math.pp_roundDecimal(step, 10);\r\n\r\n switch (index) {\r\n case 0:\r\n this._myVariable._myPositionStepPerSecond = step;\r\n this._myUI.myPositionStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myPositionStepPerSecond);\r\n break;\r\n case 1:\r\n this._myVariable._myRotationStepPerSecond = step;\r\n this._myUI.myRotationStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myRotationStepPerSecond);\r\n break;\r\n case 2:\r\n this._myVariable._myScaleStepPerSecond = step;\r\n this._myUI.myScaleStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myScaleStepPerSecond);\r\n break;\r\n }\r\n }\r\n\r\n _genericTextHover(text) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n }\r\n\r\n _genericTextUnhover(text, originalScale) {\r\n text.pp_setScaleLocal(originalScale);\r\n }\r\n}", "import { GamepadAxesID, GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../../cauldron/tool_types.js\";\r\nimport { WidgetFrame, WidgetParams } from \"../../widget_frame/widget_frame.js\";\r\nimport { EasyTuneVariableType } from \"../easy_tune_variable_types.js\";\r\nimport { EasyTuneBaseWidgetParams } from \"./base/easy_tune_base_widget.js\";\r\nimport { EasyTuneBoolArrayWidgetSelector } from \"./bool/easy_tune_bool_array_widget_selector.js\";\r\nimport { EasyTuneWidgetConfig } from \"./easy_tune_widget_config.js\";\r\nimport { EasyTuneNoneWidget } from \"./none/easy_tune_none_widget.js\";\r\nimport { EasyTuneNumberArrayWidgetSelector } from \"./number/easy_tune_number_widget_selector.js\";\r\nimport { EasyTuneTransformWidget } from \"./transform/easy_tune_transform_widget.js\";\r\n\r\nexport class EasyTuneWidgetParams extends WidgetParams {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.myShowOnStart = false;\r\n this.myShowVisibilityButton = false;\r\n this.myShowAdditionalButtons = false;\r\n this.myGamepadScrollVariableEnabled = false;\r\n\r\n this.myShowVariablesImportExportButtons = false;\r\n this.myVariablesImportCallback = null; // Signature: callback()\r\n this.myVariablesExportCallback = null; // Signature: callback()\r\n }\r\n}\r\n\r\nexport class EasyTuneWidget {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myStarted = false;\r\n this._myStartVariable = null;\r\n\r\n this._myWidgetFrame = new WidgetFrame(\"E\", 1, engine);\r\n this._myWidgetFrame.registerWidgetVisibleChangedEventListener(this, this._widgetVisibleChanged.bind(this));\r\n\r\n this._myConfig = new EasyTuneWidgetConfig();\r\n this._myParams = null;\r\n\r\n this._myWidgets = [];\r\n\r\n this._myEasyTuneVariables = null;\r\n this._myEasyTuneLastSize = 0;\r\n this._myVariableNames = null;\r\n\r\n this._myCurrentWidget = null;\r\n this._myCurrentVariable = null;\r\n\r\n this._myScrollVariableTimer = 0;\r\n\r\n this._myGamepad = null;\r\n\r\n this._myRefreshVariablesTimer = 0;\r\n\r\n this._myDirty = false;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setCurrentVariable(variableName) {\r\n if (!this._myStarted) {\r\n this._myStartVariable = variableName;\r\n } else if (this._myEasyTuneVariables.has(variableName)) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(variableName);\r\n this._selectCurrentWidget();\r\n } else {\r\n console.warn(\"Can't change easy tune current variable to inexistent variable:\", variableName);\r\n }\r\n }\r\n\r\n refresh() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n this._myDirty = true;\r\n }\r\n }\r\n\r\n setVisible(visible) {\r\n this._myWidgetFrame.setVisible(visible);\r\n }\r\n\r\n isVisible() {\r\n return this._myWidgetFrame.isVisible();\r\n }\r\n\r\n start(parentObject, params, easyTuneVariables) {\r\n this._myRightGamepad = Globals.getRightGamepad(this._myEngine);\r\n this._myLeftGamepad = Globals.getLeftGamepad(this._myEngine);\r\n if (this._myConfig.myGamepadHandedness == ToolHandedness.RIGHT) {\r\n this._myGamepad = this._myRightGamepad;\r\n } else if (this._myConfig.myGamepadHandedness == ToolHandedness.LEFT) {\r\n this._myGamepad = this._myLeftGamepad;\r\n }\r\n\r\n this._myStarted = true;\r\n\r\n this._myParams = params;\r\n\r\n this._myWidgetFrame.start(parentObject, params);\r\n\r\n this._myEasyTuneVariables = easyTuneVariables;\r\n this._myEasyTuneLastSize = this.getValidEasyTuneVariablesLength();\r\n this._myVariableNames = this.getValidEasyTuneVariablesNames();\r\n\r\n if (this.getValidEasyTuneVariablesLength() > 0) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[0]);\r\n }\r\n\r\n if (this._myStartVariable != null) {\r\n if (this._myEasyTuneVariables.has(this._myStartVariable)) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myStartVariable);\r\n } else {\r\n console.warn(\"Can't change easy tune current variable to inexistent variable:\", this._myStartVariable);\r\n }\r\n }\r\n\r\n this._initializeWidgets();\r\n }\r\n\r\n update(dt) {\r\n this._myWidgetFrame.update(dt);\r\n\r\n if (this.getValidEasyTuneVariablesLength() != this._myEasyTuneLastSize || this._myDirty) {\r\n this._refreshEasyTuneVariables();\r\n }\r\n\r\n if (this._myWidgetFrame.isVisible() && this.getValidEasyTuneVariablesLength() > 0) {\r\n if (this._myConfig.myRefreshVariablesDelay != null) {\r\n this._myRefreshVariablesTimer += dt;\r\n if (this._myRefreshVariablesTimer > this._myConfig.myRefreshVariablesDelay) {\r\n this._myRefreshVariablesTimer = 0;\r\n this._refreshEasyTuneVariables();\r\n }\r\n }\r\n\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.update(dt);\r\n }\r\n\r\n if (this._myParams.myGamepadScrollVariableEnabled) {\r\n this._updateGamepadScrollVariable(dt);\r\n }\r\n }\r\n\r\n this._updateGamepadWidgetVisibility();\r\n\r\n this._updateWidgetCurrentVariable();\r\n }\r\n\r\n _initializeWidgets() {\r\n let widgetParams = new EasyTuneBaseWidgetParams();\r\n widgetParams.myVariablesImportCallback = this._importVariables.bind(this);\r\n widgetParams.myVariablesExportCallback = this._exportVariables.bind(this);\r\n\r\n this._myWidgets[EasyTuneVariableType.NONE] = new EasyTuneNoneWidget(widgetParams, this._myEngine);\r\n this._myWidgets[EasyTuneVariableType.NUMBER] = new EasyTuneNumberArrayWidgetSelector(widgetParams, this._myGamepad, this._myEngine);\r\n this._myWidgets[EasyTuneVariableType.BOOL] = new EasyTuneBoolArrayWidgetSelector(widgetParams, this._myGamepad, this._myEngine);\r\n this._myWidgets[EasyTuneVariableType.TRANSFORM] = new EasyTuneTransformWidget(widgetParams, this._myGamepad, this._myEngine);\r\n\r\n for (let widget of this._myWidgets) {\r\n if (widget != null) {\r\n widget.start(this._myWidgetFrame.getWidgetObject(), this._myParams);\r\n widget.setVisible(false);\r\n widget.registerScrollVariableRequestEventListener(this, this._scrollVariable.bind(this));\r\n }\r\n }\r\n\r\n this._selectCurrentWidget();\r\n }\r\n\r\n _selectCurrentWidget() {\r\n if (this.getValidEasyTuneVariablesLength() <= 0) {\r\n return;\r\n } else if (this._myCurrentVariable == null) {\r\n this._myVariableNames = this.getValidEasyTuneVariablesNames();\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[0]);\r\n }\r\n\r\n let prevWidget = null;\r\n if (this._myCurrentWidget != null) {\r\n prevWidget = this._myCurrentWidget.getWidget();\r\n }\r\n\r\n if (this._myCurrentVariable.getType() in this._myWidgets) {\r\n this._myCurrentWidget = this._myWidgets[this._myCurrentVariable.getType()];\r\n } else {\r\n this._myCurrentWidget = this._myWidgets[EasyTuneVariableType.NONE];\r\n }\r\n\r\n this._myCurrentWidget.setEasyTuneVariable(this._myCurrentVariable, this._createIndexString());\r\n this._myCurrentWidget.getWidget().syncWidget(prevWidget);\r\n\r\n if (prevWidget != null) {\r\n prevWidget.setVisible(false);\r\n }\r\n\r\n this._myCurrentWidget.setVisible(this._myWidgetFrame.isVisible());\r\n }\r\n\r\n _refreshEasyTuneVariables() {\r\n this._myVariableNames = this.getValidEasyTuneVariablesNames();\r\n this._myEasyTuneLastSize = this.getValidEasyTuneVariablesLength();\r\n\r\n if (this.getValidEasyTuneVariablesLength() > 0) {\r\n if (this._myCurrentVariable && this._myVariableNames.pp_hasEqual(this._myCurrentVariable.getName())) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myCurrentVariable.getName());\r\n } else {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[0]);\r\n }\r\n\r\n this._selectCurrentWidget();\r\n } else {\r\n this._myCurrentVariable = null;\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.setVisible(false);\r\n this._myCurrentWidget = null;\r\n }\r\n }\r\n\r\n this._myDirty = false;\r\n }\r\n\r\n _updateGamepadWidgetVisibility() {\r\n if (this._myGamepad) {\r\n if ((this._myGamepad.getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressStart() && this._myGamepad.getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (this._myGamepad.getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && this._myGamepad.getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressed())) {\r\n this._toggleVisibility();\r\n }\r\n }\r\n }\r\n\r\n _toggleVisibility() {\r\n this._myWidgetFrame.toggleVisibility();\r\n }\r\n\r\n _widgetVisibleChanged(visible) {\r\n for (let widget of this._myWidgets) {\r\n if (widget != null) {\r\n widget.setVisible(false);\r\n }\r\n }\r\n\r\n if (this._myCurrentWidget) {\r\n if (this.getValidEasyTuneVariablesLength() > 0) {\r\n this._myCurrentWidget.setVisible(visible);\r\n } else {\r\n this._myCurrentWidget.setVisible(false);\r\n }\r\n }\r\n\r\n if (visible) {\r\n this._refreshEasyTuneVariables();\r\n }\r\n }\r\n\r\n _updateGamepadScrollVariable(dt) {\r\n if (this._myGamepad && (!this._myConfig.myScrollVariableButtonID || this._myGamepad.getButtonInfo(this._myConfig.myScrollVariableButtonID).isPressed())) {\r\n let x = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[0];\r\n let y = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n if (Math.abs(x) > this._myConfig.myScrollVariableMinXThreshold && Math.abs(y) < this._myConfig.myScrollVariableMaxYThreshold) {\r\n this._myScrollVariableTimer += dt;\r\n while (this._myScrollVariableTimer > this._myConfig.myScrollVariableDelay) {\r\n this._myScrollVariableTimer -= this._myConfig.myScrollVariableDelay;\r\n this._scrollVariable(Math.sign(x));\r\n }\r\n } else {\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n }\r\n } else {\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n }\r\n }\r\n\r\n _scrollVariable(amount) {\r\n if (this.getValidEasyTuneVariablesLength() <= 0) {\r\n return;\r\n }\r\n\r\n let variableIndex = this._getVariableIndex(this._myCurrentVariable);\r\n if (variableIndex >= 0) {\r\n // Manage negative numbers\r\n let newIndex = (((variableIndex + amount) % this._myVariableNames.length) + this._myVariableNames.length) % this._myVariableNames.length;\r\n if (this._myEasyTuneVariables.has(this._myVariableNames[newIndex])) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[newIndex]);\r\n this._selectCurrentWidget();\r\n } else {\r\n this._refreshEasyTuneVariables();\r\n }\r\n } else {\r\n this._refreshEasyTuneVariables();\r\n }\r\n }\r\n\r\n _createIndexString() {\r\n let indexString = \" (\";\r\n let index = (this._getVariableIndex(this._myCurrentVariable) + 1).toString();\r\n let length = (this.getValidEasyTuneVariablesLength()).toString();\r\n while (index.length < length.length) {\r\n index = \"0\".concat(index);\r\n }\r\n\r\n indexString = indexString.concat(index).concat(\" - \").concat(length).concat(\")\");\r\n\r\n return indexString;\r\n }\r\n\r\n _getVariableIndex(variable) {\r\n let variableIndex = this._myVariableNames.indexOf(variable.getName());\r\n return variableIndex;\r\n }\r\n\r\n _updateWidgetCurrentVariable() {\r\n for (let variable of this._myEasyTuneVariables.getEasyTuneVariablesList()) {\r\n variable.setWidgetCurrentVariable(false);\r\n }\r\n\r\n if (this._myWidgetFrame.isVisible() && this._myCurrentVariable) {\r\n this._myCurrentVariable.setWidgetCurrentVariable(true);\r\n }\r\n }\r\n\r\n _importVariables() {\r\n this._myParams.myVariablesImportCallback(this._onImportSuccess.bind(this), this._onImportFailure.bind(this));\r\n }\r\n\r\n _exportVariables() {\r\n this._myParams.myVariablesExportCallback(this._onExportSuccess.bind(this), this._onExportFailure.bind(this));\r\n }\r\n\r\n _onImportSuccess() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onImportSuccess();\r\n }\r\n }\r\n\r\n _onImportFailure() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onImportFailure();\r\n }\r\n }\r\n\r\n _onExportSuccess() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onExportSuccess();\r\n }\r\n }\r\n\r\n _onExportFailure() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onExportFailure();\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let widget of this._myWidgets) {\r\n widget.destroy();\r\n }\r\n\r\n this._myWidgetFrame.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n\r\n\r\n getValidEasyTuneVariablesLength() {\r\n return this.getValidEasyTuneVariablesNames().length;\r\n }\r\n\r\n getValidEasyTuneVariablesNames() {\r\n let names = this._myEasyTuneVariables.getEasyTuneVariablesNames();\r\n\r\n let validNames = [];\r\n for (let name of names) {\r\n let variable = this._myEasyTuneVariables.getEasyTuneVariable(name);\r\n if (variable.isShownOnWidget()) {\r\n validNames.push(name);\r\n }\r\n }\r\n\r\n return validNames;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { EasyTuneUtils } from \"../easy_tune_utils.js\";\r\n\r\nexport class EasyTuneImportVariablesComponent extends Component {\r\n static TypeName = \"pp-easy-tune-import-variables\";\r\n static Properties = {\r\n _myVariablesImportURL: Property.string(\"\"),\r\n _myResetVariablesDefaultValueOnImport: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myFirstUpdate = true;\r\n }\r\n\r\n update(dt) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n EasyTuneUtils.importVariables(this._myVariablesImportURL, this._myResetVariablesDefaultValueOnImport, false, undefined, undefined, this.engine);\r\n }\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"../easy_tune_utils.js\";\r\n\r\nexport class EasyObjectTuner {\r\n\r\n constructor(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine = Globals.getMainEngine()) {\r\n this._myObject = object;\r\n this._myUseTuneTarget = useTuneTarget;\r\n this._mySetAsWidgetCurrentVariable = setAsWidgetCurrentVariable;\r\n\r\n this._myEasyObject = this._myObject;\r\n if (this._myUseTuneTarget) {\r\n this._myEasyObject = Globals.getEasyTuneTarget(engine);\r\n }\r\n this._myPrevEasyObject = null;\r\n\r\n let variableNamePrefix = this._getVariableNamePrefix();\r\n\r\n if (variableName == \"\") {\r\n let objectName = this._myObject.pp_getName();\r\n if (objectName != \"\") {\r\n this._myEasyTuneVariableName = variableNamePrefix.concat(objectName);\r\n } else {\r\n this._myEasyTuneVariableName = variableNamePrefix.concat(this._myObject.pp_getID());\r\n }\r\n } else {\r\n this._myEasyTuneVariableName = variableNamePrefix.concat(variableName);\r\n }\r\n\r\n this._myEngine = engine;\r\n }\r\n\r\n start() {\r\n let easyTuneVariable = this._createEasyTuneVariable(this._myEasyTuneVariableName);\r\n\r\n Globals.getEasyTuneVariables(this._myEngine).add(easyTuneVariable);\r\n if (this._mySetAsWidgetCurrentVariable) {\r\n EasyTuneUtils.setWidgetCurrentVariable(this._myEasyTuneVariableName, this._myEngine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.getEasyTuneVariables(this._myEngine).isWidgetCurrentVariable(this._myEasyTuneVariableName)) {\r\n if (this._myUseTuneTarget) {\r\n this._myEasyObject = Globals.getEasyTuneTarget(this._myEngine);\r\n }\r\n\r\n if (this._myPrevEasyObject != this._myEasyObject) {\r\n this._myPrevEasyObject = this._myEasyObject;\r\n if (this._myEasyObject) {\r\n let value = this._getObjectValue(this._myEasyObject);\r\n Globals.getEasyTuneVariables(this._myEngine).set(this._myEasyTuneVariableName, value, true);\r\n } else {\r\n let value = this._getDefaultValue();\r\n Globals.getEasyTuneVariables(this._myEngine).set(this._myEasyTuneVariableName, value, true);\r\n }\r\n }\r\n\r\n if (this._myEasyObject) {\r\n this._updateObjectValue(this._myEasyObject, Globals.getEasyTuneVariables(this._myEngine).get(this._myEasyTuneVariableName));\r\n }\r\n }\r\n }\r\n}", "import { LightComponent } from \"@wonderlandengine/api\";\r\nimport { EasyTuneNumber } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyLightAttenuation extends EasyObjectTuner {\r\n\r\n constructor(object, variableName, setAsWidgetCurrentVariable, useTuneTarget) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget);\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = \"Light Attenuation \";\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneNumber(variableName, this._getDefaultValue(), null, true, 3, 0.01, 0, 1, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let attenuation = this._getLightAttenuation(object);\r\n return attenuation;\r\n }\r\n\r\n _getDefaultValue() {\r\n return 0;\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let attenuation = value;\r\n\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light) {\r\n light.color[3] = attenuation;\r\n }\r\n }\r\n\r\n _getLightAttenuation(object) {\r\n let attenuation = this._getDefaultValue();\r\n\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light) {\r\n attenuation = light.color[3];\r\n }\r\n\r\n return attenuation;\r\n }\r\n}", "import { LightComponent } from \"@wonderlandengine/api\";\r\nimport { ColorUtils } from \"../../../cauldron/utils/color_utils.js\";\r\nimport { GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneIntArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyLightColor extends EasyObjectTuner {\r\n\r\n constructor(colorModel, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myColorModel = colorModel;\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Light RGB \";\r\n } else {\r\n nameFirstPart = \"Light HSV \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneIntArray(variableName, this._getDefaultValue(), null, true, 100, 0, 255, false, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let color = null;\r\n\r\n let lightColor = this._getLightColor(object);\r\n if (lightColor) {\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbCodeToHuman(lightColor);\r\n } else {\r\n color = ColorUtils.hsvCodeToHuman(ColorUtils.rgbToHSV(lightColor));\r\n }\r\n } else {\r\n color = this._getDefaultValue();\r\n }\r\n\r\n return color;\r\n }\r\n\r\n _getDefaultValue() {\r\n return vec3_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let color = value;\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbHumanToCode(color);\r\n } else {\r\n color = ColorUtils.hsvToRGB(ColorUtils.hsvHumanToCode(color));\r\n }\r\n\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light != null) {\r\n light.color[0] = color[0];\r\n light.color[1] = color[1];\r\n light.color[2] = color[2];\r\n }\r\n\r\n if ((Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed())) {\r\n\r\n let hsvColor = ColorUtils.color1To255(ColorUtils.rgbToHSV(color));\r\n let rgbColor = ColorUtils.color1To255(color);\r\n\r\n console.log(\"RGB:\", rgbColor.vec_toString(0), \"- HSV:\", hsvColor.vec_toString(0));\r\n }\r\n }\r\n\r\n _getLightColor(object) {\r\n let color = null;\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light) {\r\n color = light.color.slice(0, 3);\r\n }\r\n\r\n return color;\r\n }\r\n}", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { ColorUtils } from \"../../../cauldron/utils/color_utils.js\";\r\nimport { GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneIntArray, EasyTuneNumberArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyMeshColor extends EasyObjectTuner {\r\n\r\n constructor(colorModel, colorType, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myColorModel = colorModel;\r\n this._myColorType = colorType;\r\n this._myColorVariableNames = [\"color\", \"diffuseColor\", \"ambientColor\", \"specularColor\", \"emissiveColor\", \"fogColor\", \"ambientFactor\",];\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Mesh RGB \";\r\n } else {\r\n nameFirstPart = \"Mesh HSV \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n if (this._myColorType == 6) {\r\n return new EasyTuneNumberArray(variableName, this._getDefaultValue(), null, true, 3, 0.1, 0, 1, false, undefined, this._myEngine);\r\n }\r\n return new EasyTuneIntArray(variableName, this._getDefaultValue(), null, true, 100, 0, 255, false, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let color = null;\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n if (this._myColorType != 6) {\r\n color = meshMaterial[this._myColorVariableNames[this._myColorType]].pp_clone();\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbCodeToHuman(color);\r\n } else {\r\n color = ColorUtils.hsvCodeToHuman(ColorUtils.rgbToHSV(color));\r\n }\r\n } else {\r\n color = [meshMaterial[this._myColorVariableNames[this._myColorType]]];\r\n }\r\n } else {\r\n color = this._getDefaultValue();\r\n }\r\n\r\n return color;\r\n }\r\n\r\n _getDefaultValue() {\r\n if (this._myColorType == 6) {\r\n return [0];\r\n }\r\n\r\n return vec4_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let color = value;\r\n\r\n if (this._myColorType != 6) {\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbHumanToCode(color);\r\n } else {\r\n color = ColorUtils.hsvToRGB(ColorUtils.hsvHumanToCode(color));\r\n }\r\n }\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n meshMaterial[this._myColorVariableNames[this._myColorType]] = color;\r\n }\r\n\r\n if (this._myColorType != 6) {\r\n if ((Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed())) {\r\n\r\n let hsvColor = ColorUtils.color1To255(ColorUtils.rgbToHSV(color));\r\n let rgbColor = ColorUtils.color1To255(color);\r\n\r\n console.log(\"RGB:\", rgbColor.vec_toString(0), \"- HSV:\", hsvColor.vec_toString(0));\r\n }\r\n }\r\n }\r\n\r\n _getMeshMaterial(object) {\r\n let material = null;\r\n let mesh = object.pp_getComponent(MeshComponent);\r\n if (mesh) {\r\n material = mesh.material;\r\n }\r\n\r\n return material;\r\n }\r\n}", "import { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneNumberArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyScale extends EasyObjectTuner {\r\n\r\n constructor(local, scaleAsOne, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myLocal = local;\r\n this._myScaleAsOne = scaleAsOne;\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n return \"Scale \";\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneNumberArray(variableName, this._getDefaultValue(), null, true, 3, 1, 0.001, null, this._myScaleAsOne, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n return this._myLocal ? object.pp_getScaleLocal() : object.pp_getScale();\r\n }\r\n\r\n _getDefaultValue() {\r\n return vec3_create(1, 1, 1);\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n if (this._myLocal) {\r\n object.pp_setScaleLocal(value);\r\n } else {\r\n object.pp_setScale(value);\r\n }\r\n }\r\n}", "import { mat4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneTransform } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyTransform extends EasyObjectTuner {\r\n\r\n constructor(local, scaleAsOne, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myLocal = local;\r\n this._myScaleAsOne = scaleAsOne;\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n return \"Transform \";\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneTransform(variableName, this._getDefaultValue(), null, true, this._myScaleAsOne, 3, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n return this._myLocal ? object.pp_getTransformLocal() : object.pp_getTransform();\r\n }\r\n\r\n _getDefaultValue() {\r\n return mat4_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n if (this._myLocal) {\r\n object.pp_setTransformLocal(value);\r\n } else {\r\n object.pp_setTransform(value);\r\n }\r\n }\r\n}", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { EasyTuneNumber } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyMeshAmbientFactor extends EasyObjectTuner {\r\n\r\n constructor(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Mesh AF \";\r\n } else {\r\n nameFirstPart = \"Mesh AF \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneNumber(variableName, this._getDefaultValue(), null, true, 3, 0.1, 0, 1, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let ambientFactor = null;\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n ambientFactor = meshMaterial.ambientFactor;\r\n } else {\r\n ambientFactor = this._getDefaultValue();\r\n }\r\n\r\n return ambientFactor;\r\n }\r\n\r\n _getDefaultValue() {\r\n return 0;\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let ambientFactor = value;\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n meshMaterial.ambientFactor = ambientFactor;\r\n }\r\n }\r\n\r\n _getMeshMaterial(object) {\r\n let material = null;\r\n let mesh = object.pp_getComponent(MeshComponent);\r\n if (mesh) {\r\n material = mesh.material;\r\n }\r\n\r\n return material;\r\n }\r\n}", "import { TextComponent } from \"@wonderlandengine/api\";\r\nimport { ColorUtils } from \"../../../cauldron/utils/color_utils.js\";\r\nimport { GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneIntArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyTextColor extends EasyObjectTuner {\r\n\r\n constructor(colorModel, colorType, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myColorModel = colorModel;\r\n this._myColorType = colorType;\r\n this._myColorVariableNames = [\"color\", \"effectColor\"];\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Text RGB \";\r\n } else {\r\n nameFirstPart = \"Text HSV \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneIntArray(variableName, this._getDefaultValue(), null, true, 100, 0, 255, false, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let color = null;\r\n\r\n let textMaterial = this._getTextMaterial(object);\r\n if (textMaterial) {\r\n color = textMaterial[this._myColorVariableNames[this._myColorType]].pp_clone();\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbCodeToHuman(color);\r\n } else {\r\n color = ColorUtils.hsvCodeToHuman(ColorUtils.rgbToHSV(color));\r\n }\r\n } else {\r\n color = this._getDefaultValue();\r\n }\r\n\r\n return color;\r\n }\r\n\r\n _getDefaultValue() {\r\n return vec4_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let color = value;\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbHumanToCode(color);\r\n } else {\r\n color = ColorUtils.hsvToRGB(ColorUtils.hsvHumanToCode(color));\r\n }\r\n\r\n let textMaterial = this._getTextMaterial(object);\r\n if (textMaterial) {\r\n textMaterial[this._myColorVariableNames[this._myColorType]] = color;\r\n }\r\n\r\n if ((Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed())) {\r\n\r\n let hsvColor = ColorUtils.color1To255(ColorUtils.rgbToHSV(color));\r\n let rgbColor = ColorUtils.color1To255(color);\r\n\r\n console.log(\"RGB:\", rgbColor.vec_toString(0), \"- HSV:\", hsvColor.vec_toString(0));\r\n }\r\n }\r\n\r\n _getTextMaterial(object) {\r\n let material = null;\r\n let text = object.pp_getComponent(TextComponent);\r\n if (text) {\r\n material = text.material;\r\n }\r\n\r\n return material;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyLightAttenuation } from \"../easy_light_attenuation.js\";\r\n\r\nexport class EasyLightAttenuationComponent extends Component {\r\n static TypeName = \"pp-easy-light-attenuation\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyLightAttenuation(this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyLightColor } from \"../easy_light_color.js\";\r\n\r\nexport class EasyLightColorComponent extends Component {\r\n static TypeName = \"pp-easy-light-color\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myColorModel: Property.enum([\"RGB\", \"HSV\"], \"HSV\")\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyLightColor(this._myColorModel, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyMeshAmbientFactor } from \"../easy_mesh_ambient_factor.js\";\r\n\r\nexport class EasyMeshAmbientFactorComponent extends Component {\r\n static TypeName = \"pp-easy-mesh-ambient-factor\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _myUseTuneTarget: Property.bool(false),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyMeshAmbientFactor(this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyMeshColor } from \"../easy_mesh_color.js\";\r\n\r\nexport class EasyMeshColorComponent extends Component {\r\n static TypeName = \"pp-easy-mesh-color\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _myUseTuneTarget: Property.bool(false),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myColorModel: Property.enum([\"RGB\", \"HSV\"], \"HSV\"),\r\n _myColorType: Property.enum([\"Color\", \"Diffuse Color\", \"Ambient Color\", \"Specular Color\", \"Emissive Color\", \"Fog Color\", \"Ambient Factor\"], \"Color\"),\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyMeshColor(this._myColorModel, this._myColorType, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyScale } from \"../easy_scale.js\";\r\n\r\nexport class EasyScaleComponent extends Component {\r\n static TypeName = \"pp-easy-scale\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myLocal: Property.bool(false),\r\n _myScaleAsOne: Property.bool(true) // Edit all scale values together\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyScale(this._myLocal, this._myScaleAsOne, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"../../easy_tune_utils.js\";\r\nimport { EasyTuneInt } from \"../../easy_tune_variable_types.js\";\r\n\r\nexport class EasySetTuneTargetChildNumberComponent extends Component {\r\n static TypeName = \"pp-easy-set-tune-target-child-number\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n };\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyTuneVariableName = \"Target Child \";\r\n\r\n if (this._myVariableName == \"\") {\r\n this._myEasyTuneVariableName = this._myEasyTuneVariableName.concat(this.object.pp_getID());\r\n } else {\r\n this._myEasyTuneVariableName = this._myEasyTuneVariableName.concat(this._myVariableName);\r\n }\r\n\r\n let childrenCount = this.object.pp_getChildren().length;\r\n let min = 1;\r\n let max = childrenCount;\r\n if (childrenCount == 0) {\r\n min = 0;\r\n max = 0;\r\n }\r\n\r\n Globals.getEasyTuneVariables(this.engine).add(new EasyTuneInt(this._myEasyTuneVariableName, 0, null, true, 10, min, max, undefined, this.engine));\r\n if (this._mySetAsWidgetCurrentVariable) {\r\n EasyTuneUtils.setWidgetCurrentVariable(this._myEasyTuneVariableName, this.engine);\r\n }\r\n\r\n this._myCurrentChildIndex = -1;\r\n this._myCurrentChildrenCount = childrenCount;\r\n\r\n this._myEasyTuneTarget = null;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (Globals.getEasyTuneVariables(this.engine).isWidgetCurrentVariable(this._myEasyTuneVariableName)) {\r\n let childrenCount = this.object.pp_getChildren().length;\r\n if (childrenCount != this._myCurrentChildrenCount) {\r\n this._myCurrentChildrenCount = childrenCount;\r\n\r\n let min = 1;\r\n let max = childrenCount;\r\n if (childrenCount == 0) {\r\n min = 0;\r\n max = 0;\r\n }\r\n\r\n let easyTuneVariable = Globals.getEasyTuneVariables(this.engine).getEasyTuneVariable(this._myEasyTuneVariableName);\r\n easyTuneVariable.setMin(min);\r\n easyTuneVariable.setMax(max);\r\n }\r\n\r\n let childIndex = Globals.getEasyTuneVariables(this.engine).get(this._myEasyTuneVariableName);\r\n if (childIndex != this._myCurrentChildIndex) {\r\n if (childIndex == 0 && this._myCurrentChildIndex != -1) {\r\n if (Globals.getEasyTuneTarget(this.engine) == this._myEasyTuneTarget) {\r\n Globals.removeEasyTuneTarget(this.engine);\r\n }\r\n this._myEasyTuneTarget = null;\r\n } else if (childIndex > 0) {\r\n this._myEasyTuneTarget = this.object.pp_getChildren()[childIndex - 1];\r\n Globals.setEasyTuneTarget(this._myEasyTuneTarget, this.engine);\r\n }\r\n\r\n this._myCurrentChildIndex = childIndex;\r\n }\r\n }\r\n }\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { GrabberHandComponent } from \"../../../../gameplay/grab_throw/grabber_hand_component.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\n\r\nexport class EasySetTuneTargeetGrabComponent extends Component {\r\n static TypeName = \"pp-easy-set-tune-target-grab\";\r\n static Properties = {};\r\n\r\n start() {\r\n this._myGrabber = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myGrabber = this.object.pp_getComponent(GrabberHandComponent);\r\n this._myEasyTuneTarget = null;\r\n }\r\n }\r\n\r\n _onRelease(grabber, grabbable) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyTuneTarget = grabbable.object;\r\n Globals.setEasyTuneTarget(this._myEasyTuneTarget, this.engine);\r\n }\r\n }\r\n\r\n _onGrab(grabber, grabbable) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (Globals.getEasyTuneTarget(this.engine) == this._myEasyTuneTarget) {\r\n Globals.removeEasyTuneTarget(this.engine);\r\n }\r\n this._myEasyTuneTarget = null;\r\n }\r\n }\r\n\r\n onActivate() {\r\n if (this._myGrabber != null) {\r\n //this._myGrabber.registerGrabEventListener(this, this._onGrab.bind(this));\r\n this._myGrabber.registerThrowEventListener(this, this._onRelease.bind(this));\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myGrabber != null) {\r\n //this._myGrabber.unregisterGrabEventListener(this);\r\n this._myGrabber.unregisterThrowEventListener(this);\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTextColor } from \"../easy_text_color.js\";\r\n\r\nexport class EasyTextColorComponent extends Component {\r\n static TypeName = \"pp-easy-text-color\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myColorModel: Property.enum([\"RGB\", \"HSV\"], \"HSV\"),\r\n _myColorType: Property.enum([\"Color\", \"Effect Color\"], \"Color\")\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyTextColor(this._myColorModel, this._myColorType, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTransform } from \"../easy_transform.js\";\r\n\r\nexport class EasyTransformComponent extends Component {\r\n static TypeName = \"pp-easy-transform\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myLocal: Property.bool(true),\r\n _myScaleAsOne: Property.bool(true) // Edit all scale values together\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyTransform(this._myLocal, this._myScaleAsOne, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n}"], - "mappings": "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,GAAG;AACnB,kBAAU,CAAC,IAAI,CAAC,UAAU,CAAC;MAC/B,WAAW,UAAU,CAAC,KAAK,GAAG;AAC1B,kBAAU,CAAC,IAAI,CAAC,UAAU,CAAC;MAC/B,WAAW,UAAU,CAAC,KAAK,GAAG;AAC1B,kBAAU,CAAC,IAAI,CAAC,UAAU,CAAC;MAC/B;IACJ;AAEA,cAAU,MAAM,WAAW,QAAQ,GAAG;AAEtC,WAAO;EACX;AACJ,EAAC;AAEM,IAAI,YAAY;EACnB,QAAA5D;EACA,KAAAC;EACA,WAAAC;EACA,MAAAC;EACA,OAAAC;EACA;EACA;EACA;EACA;EACA,QAAAK;EACA,QAAAD;EACA,eAAAF;EACA;EACA;EACA;EACA;EACA,KAAAI;EACA;EACA,OAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAAI;EACA,WAAAC;EACA,QAAAC;EACA;EACA;EACA,cAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAAY;EACA,mBAAAC;EACA,mBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAAiB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAAS;EACA,aAAAC;EACA;;;;AHx6BE,SAAUE,QAAO,GAAG,GAAG,GAAG,GAAC;AAC7B,MAAI,MAAM,QAAQ,OAAM;AAExB,MAAI,KAAK,MAAM;AACX,cAAU,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC;EACjC;AAEA,SAAO;AACX;AAEM,SAAUC,KAAI,MAAM,GAAG,GAAG,GAAG,GAAC;AAChC,MAAI,KAAK,MAAM;AACX,YAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;EAChC,OAAO;AACH,YA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,cAAc;EACvB,aAAAjJ;EACA;EACA;EACA,aAAAC;EACA,oBAAAC;EACA,oBAAAC;EACA;EACA,iBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAAK;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAAK;EACA;EACA;EACA,YAAAC;EACA;EACA;EACA,aAAAG;EACA;EACA;EACA,OAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,UAAAG;EACA;EACA;EACA,aAAAG;EACA;EACA;EACA,aAAAC;EACA,oBAAAC;EACA,oBAAAC;EACA;EACA,iBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAAO;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,YAAAC;EACA;EACA;EACA,aAAAG;EACA;EACA;EACA,OAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,UAAAG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAAgB;EACA,eAAAC;EACA,eAAAC;EACA;EACA,YAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAAY;EACA,mBAAAE;EACA,mBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAAI;EACA,qBAAAC;EACA,qBAAAC;EACA;EACA,kBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAAAa;EACA,yBAAAC;EACA,yBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,iBAAAkB;EACA;EACA;EACA,OAAAG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAAG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKJ,SAAS,gBAAgB,OAAe,qBAAoD,OAAY;AACpG,MAAI,oBAAoB,IAAI,QAAQ,GAAG;AACnC,UAAM,mBAAmB,oBAAoB,IAAI,QAAQ,IAAK;AAE9D,UAAM,sBAA8C,CAAA;AACpD,eAAW,CAAC,eAAe,cAAc,KAAK,oBAAoB,QAAO,GAAI;AACzE,UAAI,iBAAiB,UAAU;AAC3B,4BAAoB,aAAa,IAAI,iBAAiB;MAC1D;IACJ;AAEA,UAAM,eAAe,kBAAkB,mBAAmB;EAC9D;AACJ;;;AFlgGA,IAAI,oBAAoB,oBAAI,QAAO;AACnC,IAAI,+BAA+B,oBAAI,QAAO;AAExC,IAAO,kBAAP,MAAsB;EAExB,cAAA;AACI,SAAK,yBAAyB;AAC9B,SAAK,oCAAoC,oBAAI,IAAG;AAChD,SAAK,6CAA6C,oBAAI,IAAG;EAC7D;;EAGA,uBAAuB,WAAS;AAC5B,SAAK,yBAAyB;EAClC;;;EAIA,sBAAsB,eA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", - "names": ["Component", "Property", "Howler", "Howler", "Component", "Property", "error", "isMobile", "isLocalhost", "error", "Component", "Property", "Component", "Property", "Emitter", "error", "Emitter", "error", "Component", "Property", "Component", "Component", "Component", "gl_mat3", "gl_quat", "sign", "angle", "random", "randomUUID", "distance", "equals", "has", "remove", "clear", "length", "gl_mat4", "create", "copy", "getRotationDegrees", "getRotationRadians", "setPosition", "setRotationDegrees", "setRotationRadians", "setRotationQuat", "setPositionRotationDegrees", "setPositionRotationRadians", "first", "getForward", "getLeft", "getUp", "toLocal", "angle", "rotateAxisRadians", "lerp", "interpolate", "slerp", "_customGLMatrixFromQuat2", "create", "gl_mat4", "set", "copy", "identity", "invert", "mul", "first", "clone", "getPosition", "getRotation", "getRotationDegrees", "getRotationRadians", "getRotationQuat", "setPosition", "setRotation", "setRotationDegrees", "setRotationRadians", "setRotationQuat", "scale", "setScale", "setPositionRotationDegreesScale", "setPositionRotationRadiansScale", "setPositionRotation", "setPositionRotationDegrees", "setPositionRotationRadians", "setPositionRotationQuat", "getAxes", "getForward", "getBackward", "getLeft", "getRight", "getUp", "getDown", "toWorld", "toLocal", "hasUniformScale", "toQuat", "_customGLMatrixGetRotation", "create", "set", "normalize", "copy", "clone", "first", "lengthSquared", "angle", "length", "equals", "mul", "scale", "angleSignedRadians", "anglePivotedRadians", "anglePivotedSignedRadians", "toRadians", "toDegrees", "toQuat", "isNormalized", "valueAlongAxis", "valueAlongPlane", "removeComponentAlongAxis", "copyComponentAlongAxis", "signTo", "projectOnAxisAlongAxis", "projectOnPlaneAlongAxis", "zero", "rotateDegrees", "rotateRadians", "rotateQuat", "rotateAxis", "rotateAxisDegrees", "rotateAxisRadians", "rotateAroundDegrees", "rotateAroundRadians", "rotateAroundAxisRadians", "convertPositionToLocalMatrix", "convertPositionToWorldQuat", "convertPositionToLocalQuat", "convertDirectionToWorldMatrix", "convertDirectionToLocalMatrix", "convertDirectionToWorldQuat", "convertDirectionToLocalQuat", "degreesAddRotationDegrees", "degreesAddRotationRadians", "degreesAddRotationQuat", "radiansAddRotationDegrees", "radiansAddRotationRadians", "radiansAddRotationQuat", "toMatrix", "degreesToMatrix", "radiansToMatrix", "rotationToDegrees", "rotationToRadians", "rotationToQuat", "rotationToPivotedDegrees", "rotationToPivotedRadians", "rotationToPivotedQuat", "lerp", "interpolate", "perpendicularRandom", "create", "set", "normalize", "copy", "clone", "identity", "length", "lengthSquared", "invert", "conjugate", "mul", "first", "zero", "getAxis", "angle", "getAngleRadians", "getAxisScaledRadians", "getAxes", "getForward", "getBackward", "getLeft", "getRight", "getUp", "getDown", "setForward", "setBackward", "setUp", "setDown", "setLeft", "setRight", "toWorld", "toLocal", "fromAxes", "fromRadians", "toRadians", "toDegrees", "isNormalized", "addRotation", "addRotationDegrees", "addRotationRadians", "addRotationQuat", "subRotationDegrees", "subRotationRadians", "subRotationQuat", "rotationTo", "rotationToDegrees", "toQuat", "rotationToRadians", "rotationToQuat", "rotationAroundAxisDegrees", "rotationAroundAxisRadians", "getTwist", "getSwing", "getTwistFromSwing", "toMatrix", "rotate", "rotateDegrees", "rotateRadians", "rotateQuat", "rotateAxis", "rotateAxisDegrees", "rotateAxisRadians", "lerp", "interpolate", "slerp", "sinterpolate", "_setAxes", "gl_mat3", "set", "copy", "clone", "toDegrees", "create", "toRadians", "toQuat", "gl_quat", "fromAxes", "create", "set", "copy", "clone", "length", "normalize", "zero", "isZero", "create", "set", "copy", "clone", "clone", "first", "equals", "MeshComponent", "clone", "copy", "MeshComponent", "clone", "copy", "MeshComponent", "MeshComponent", "clone", "copy", "MeshComponent", "MeshComponent", "clone", "copy", "first", "raycast", "copy", "length", "clone", "copy", "clone", "copy", "clone", "copy", "clone", "scale", "copy", "visualElements", "Component", "Component", "Property", "Component", "Property", "create", "error", "clone", "invert", "makeDoubleSided", "Component", "Property", "Component", "Property", "Handedness", "HandednessIndex", "InputSourceType", "TrackedHandJointID", "TrackedHandJointIDIndex", "Component", "Property", "Component", "Alignment", "Justification", "Alignment", "Justification", "length", "scale", "Component", "Component", "Property", "Component", "Property", "Component", "copy", "reset", "distance", "transformQuat", "transformQuat", "distance", "computeSurfacePerceivedAngle", "distance", "first", "first", "first", "firstHeightPosition", "angleNormalWithMovementThreshold", "zero", "distance", "transformQuat", "angleSigned", "transformQuat", "zero", "transformQuat", "checkMovement", "checkTeleportToTransform", "checkTransform", "updateGroundInfo", "updateCeilingInfo", "convertCollisionRuntimeParamsToCharacterCollisionResults", "convertCharacterColliderSetupToCollisionCheckParams", "Component", "Component", "Property", "Emitter", "Emitter", "Emitter", "info", "emitter", "error", "Emitter", "Emitter", "error", "getPosition", "getRotationDegrees", "getRotationRadians", "getRotationQuat", "transformQuat", "getTransformMatrix", "getTransformQuat", "getRotationQuat", "Emitter", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "clear", "Component", "Property", "Component", "Property", "Component", "Property", "MeshComponent", "TextComponent", "ViewComponent", "ARCamera8thwall", "Cursor", "CursorTarget", "DebugObject", "DeviceOrientationLook", "FingerCursor", "FixedFoveation", "HandTracking", "HitTestLocation", "HowlerAudioListener", "HowlerAudioSource", "ImageTexture", "MouseLookComponent", "PlayerHeight", "TargetFramerate", "TeleportComponent", "Trail", "TwoJointIkSolver", "VideoTexture", "VrModeActiveSwitch", "Vrm", "WasdControlsComponent", "MeshComponent", "TextComponent", "MeshComponent", "TextComponent", "getPosition", "getRotation", "getRotationDegrees", "getRotationRadians", "getRotationQuat", "getRotationWorldRadians", "getRotationWorldMatrix", "getRotationLocalRadians", "getRotationLocalMatrix", "getScale", "transformQuat", "scale", "getTransformWorldMatrix", "getTransformLocalMatrix", "getAxes", "getForward", "getForwardWorld", "getForwardLocal", "getBackward", "getBackwardWorld", "getBackwardLocal", "getUp", "getUpWorld", "getUpLocal", "getDown", "getDownWorld", "getDownLocal", "getLeft", "getLeftWorld", "getLeftLocal", "getRight", "getRightWorld", "getRightLocal", "setPosition", "setRotation", "setRotationDegrees", "setRotationRadians", "setRotationQuat", "setRotationWorldDegrees", "setRotationWorldRadians", "setRotationWorldMatrix", "setRotationLocalDegrees", "setRotationLocalRadians", "setRotationLocalMatrix", "setScale", "setScaleWorld", "setScaleLocal", "setAxes", "setForward", "setForwardWorld", "setForwardLocal", "setBackward", "setBackwardWorld", "setBackwardLocal", "setUp", "setUpWorld", "setUpLocal", "setDown", "setDownWorld", "setDownLocal", "setLeft", "setLeftWorld", "setLeftLocal", "setRight", "setRightWorld", "setRightLocal", "setTransformWorldMatrix", "setTransformLocalMatrix", "zero", "resetPositionWorld", "resetPositionLocal", "identity", "resetRotationWorld", "resetRotationLocal", "resetScaleWorld", "resetScaleLocal", "translateAxisWorld", "translateAxisLocal", "translateAxisObject", "rotate", "rotateDegrees", "rotateRadians", "rotateQuat", "rotateWorldDegrees", "rotateWorldRadians", "rotateWorldMatrix", "rotateWorldQuat", "rotateLocalDegrees", "rotateLocalRadians", "rotateLocalMatrix", "rotateLocalQuat", "rotateObjectDegrees", "rotateObjectRadians", "rotateObjectMatrix", "rotateAxis", "angle", "rotateAxisDegrees", "rotateAxisRadians", "rotateAxisWorldRadians", "rotateAxisLocalRadians", "rotateAxisObjectRadians", "rotateAround", "rotateAroundDegrees", "rotateAroundRadians", "rotateAroundQuat", "rotateAroundWorldDegrees", "rotateAroundWorldRadians", "rotateAroundWorldMatrix", "rotateAroundWorldQuat", "rotateAroundLocalDegrees", "rotateAroundLocalRadians", "rotateAroundLocalMatrix", "rotateAroundLocalQuat", "rotateAroundObjectDegrees", "rotateAroundObjectRadians", "rotateAroundObjectMatrix", "rotateAroundObjectQuat", "rotateAroundAxis", "rotateAroundAxisDegrees", "rotateAroundAxisRadians", "rotateAroundAxisWorldRadians", "rotateAroundAxisLocalRadians", "rotateAroundAxisObjectRadians", "scaleObject", "lookAtWorld", "lookAtLocal", "lookToWorld", "lookToLocal", "convertPositionObjectToWorld", "convertDirectionObjectToWorld", "convertPositionWorldToObject", "convertDirectionWorldToObject", "convertTransformObjectToWorldMatrix", "convertTransformObjectToWorldQuat", "convertTransformWorldToObjectMatrix", "convertTransformWorldToObjectQuat", "setParent", "hasUniformScale", "hasUniformScaleWorld", "hasUniformScaleLocal", "clone", "toStringExtended", "toStringCompact", "equals", "first", "error", "MeshComponent", "TextComponent", "ViewComponent", "isCloneable", "clone", "ARCamera8thwall", "Cursor", "CursorTarget", "DebugObject", "DeviceOrientationLook", "FingerCursor", "FixedFoveation", "HandTracking", "HitTestLocation", "HowlerAudioListener", "HowlerAudioSource", "ImageTexture", "MouseLookComponent", "PlayerHeight", "TargetFramerate", "TeleportComponent", "Trail", "TwoJointIkSolver", "VideoTexture", "VrModeActiveSwitch", "Vrm", "WasdControlsComponent", "error", "property", "isClass", "angle", "scale", "clone", "equals", "zero", "isZero", "scale", "clamp", "toString", "log", "error", "warn", "angle", "scale", "angle", "Emitter", "Emitter", "InputComponent", "ViewComponent", "Cursor", "CursorTarget", "HitTestLocation", "CursorTarget", "InputComponent", "ViewComponent", "HitTestLocation", "session", "Cursor", "Emitter", "CursorTarget", "Emitter", "CursorTarget", "MouseLookComponent", "MouseLookComponent", "Component", "Property", "Component", "Property", "Component", "Property", "Howler", "Component", "Howler", "Component", "Howler", "Component", "Howler", "Component", "PhysXComponent", "Property", "Emitter", "PhysXComponent", "Emitter", "PhysXComponent", "Component", "Property", "distance", "scale", "PhysXComponent", "Alignment", "Component", "Justification", "MeshComponent", "Property", "TextComponent", "Component", "Property", "reset", "MeshComponent", "TextComponent", "Alignment", "Justification", "Component", "PhysXComponent", "Property", "scale", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Alignment", "Component", "Justification", "Property", "Component", "Property", "Alignment", "Justification", "Component", "_ButtonBehaviorWhenNotAvailable", "Component", "Emitter", "clone", "error", "MeshComponent", "setAlpha", "MeshComponent", "TextComponent", "Component", "Property", "Component", "Property", "isClass", "isFunction", "error", "first", "isObject", "property", "isClass", "isFunction", "first", "error", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "AnimationComponent", "CollisionComponent", "Component", "InputComponent", "LightComponent", "MeshComponent", "PhysXComponent", "Property", "TextComponent", "ViewComponent", "Component", "Property", "AnimationComponent", "CollisionComponent", "InputComponent", "LightComponent", "MeshComponent", "PhysXComponent", "TextComponent", "ViewComponent", "fromNumber", "toNumber", "Component", "Emitter", "PhysXComponent", "Property", "Component", "Property", "Emitter", "PhysXComponent", "Component", "Emitter", "PhysXComponent", "Property", "Component", "Property", "Emitter", "PhysXComponent", "first", "error", "result", "Component", "Property", "TextComponent", "Component", "Property", "TextComponent", "copy", "computeSurfacePerceivedAngle", "angle", "transformQuat", "resetPosition", "resetRotation", "distance", "rotateQuat", "setRotationQuat", "Emitter", "PhysXComponent", "distance", "distance", "getPosition", "first", "hit", "distance", "MeshComponent", "MeshComponent", "distance", "angle", "params", "first", "Emitter", "PhysXComponent", "Component", "Property", "Component", "Property", "CollisionComponent", "Component", "Property", "CursorTarget", "Component", "Property", "CollisionComponent", "CursorTarget", "error", "Component", "Property", "Component", "Property", "Component", "MeshComponent", "Property", "Component", "Property", "MeshComponent", "transformQuat", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "transformQuat", "Component", "Property", "Component", "Property", "Alignment", "Component", "Justification", "MeshComponent", "Property", "TextComponent", "Component", "Property", "length", "MeshComponent", "TextComponent", "Alignment", "Justification", "scale", "angle", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Component", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Component", "Component", "Component", "Component", "Component", "Component", "MeshComponent", "Property", "ViewComponent", "Cursor", "CursorTarget", "Component", "Property", "MeshComponent", "Cursor", "ViewComponent", "CursorTarget", "transformQuat", "Alignment", "Collider", "Justification", "Collider", "Alignment", "Justification", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "Emitter", "Alignment", "Collider", "Justification", "Collider", "Alignment", "Justification", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "Emitter", "error", "Component", "Property", "Component", "Property", "Emitter", "response", "_importExportVariablesReplaceFileURLParams", "Emitter", "Component", "Property", "Emitter", "Emitter", "Emitter", "Emitter", "Alignment", "Collider", "Justification", "Collider", "Alignment", "Justification", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "TextComponent", "TextComponent", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "length", "Component", "Property", "Component", "Property", "Component", "Property", "LightComponent", "LightComponent", "LightComponent", "LightComponent", "MeshComponent", "MeshComponent", "MeshComponent", "MeshComponent", "TextComponent", "TextComponent", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Component", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property"] -} diff --git a/wle_pp/wle_pp_bundle/bundle/bundle.js b/wle_pp/wle_pp_bundle/bundle/pp/bundle.js similarity index 99% rename from wle_pp/wle_pp_bundle/bundle/bundle.js rename to wle_pp/wle_pp_bundle/bundle/pp/bundle.js index 5162cae..3c2bae1 100644 --- a/wle_pp/wle_pp_bundle/bundle/bundle.js +++ b/wle_pp/wle_pp_bundle/bundle/pp/bundle.js @@ -22275,8 +22275,12 @@ function initPlugins() { initWLPlugins(); } +// dist/pp/pp/pp_version.js +var PP_VERSION = "0.6.2"; + // dist/pp/pp/init_pp.js function initPP(engine) { + console.log("PP version: " + PP_VERSION); Globals.setMainEngine(engine); ComponentUtils.setDefaultWLComponentCloneCallbacks(engine); registerWLComponents(engine); diff --git a/wle_pp/wle_pp_bundle/bundle/pp/bundle.js.map b/wle_pp/wle_pp_bundle/bundle/pp/bundle.js.map new file mode 100644 index 0000000..c177496 --- /dev/null +++ b/wle_pp/wle_pp_bundle/bundle/pp/bundle.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../src/pp/index.ts", "../../src/pp/pp/register_pp_components.js", "../../src/pp/audio/audio_globals.js", "../../src/pp/cauldron/cauldron/analytics_globals.js", "../../src/pp/cauldron/cauldron/save_globals.js", "../../src/pp/cauldron/object_pool/object_pool_globals.js", "../../src/pp/cauldron/visual/visual_globals.js", "../../src/pp/cauldron/wl/engine_globals.ts", "../../src/pp/cauldron/wl/getters/default_resources_globals.ts", "../../src/pp/cauldron/wl/getters/scene_objects_globals.ts", "../../src/pp/debug/debug_globals.ts", "../../src/pp/gameplay/experimental/character_controller/collision/character_collision_system_globals.js", "../../src/pp/input/cauldron/input_globals.ts", "../../src/pp/tool/cauldron/tool_globals.js", "../../src/pp/tool/console_vr/console_vr_globals.js", "../../src/pp/tool/easy_tune/easy_tune_globals.ts", "../../src/pp/pp/globals.ts", "../../src/pp/pp/components/pp_gateway_component.ts", "../../src/pp/audio/components/audio_manager_component.js", "../../src/pp/audio/audio_manager.js", "../../src/pp/audio/audio_player.js", "../../src/pp/audio/audio_setup.js", "../../src/pp/cauldron/cauldron/components/analytics_manager_component.js", "../../src/pp/cauldron/utils/xr_utils.js", "../../src/pp/cauldron/utils/browser_utils.js", "../../src/pp/cauldron/cauldron/analytics_manager.js", "../../src/pp/cauldron/cauldron/components/save_manager_component.js", "../../src/pp/cauldron/cauldron/save_manager.js", "../../src/pp/cauldron/utils/save_utils.ts", "../../src/pp/cauldron/cauldron/timer.js", "../../src/pp/cauldron/object_pool/components/object_pool_manager_component.js", "../../src/pp/cauldron/object_pool/object_pool_manager.js", "../../src/pp/cauldron/visual/components/visual_manager_component.js", "../../src/pp/cauldron/utils/array/mat3_utils.ts", "../../src/pp/cauldron/utils/array/quat_utils.js", "../../src/pp/cauldron/utils/math_utils.ts", "../../src/pp/cauldron/utils/array/array_utils.ts", "../../src/pp/cauldron/utils/array/vec3_utils.js", "../../src/pp/cauldron/utils/array/mat4_utils.js", "../../src/pp/cauldron/utils/array/quat2_utils.js", "../../src/pp/cauldron/utils/array/vec2_utils.ts", "../../src/pp/cauldron/utils/array/vec4_utils.js", "../../src/pp/plugin/js/extensions/array/vec_create_extension.ts", "../../src/pp/cauldron/object_pool/object_pool.js", "../../src/pp/cauldron/visual/elements/visual_arrow.js", "../../src/pp/cauldron/visual/elements/visual_element_types.js", "../../src/pp/cauldron/visual/elements/visual_line.js", "../../src/pp/cauldron/visual/elements/visual_mesh.js", "../../src/pp/cauldron/visual/elements/visual_point.js", "../../src/pp/cauldron/physics/physics_utils.js", "../../src/pp/cauldron/physics/physics_layer_flags.js", "../../src/pp/cauldron/physics/physics_raycast_params.js", "../../src/pp/cauldron/visual/elements/visual_raycast.js", "../../src/pp/cauldron/visual/elements/visual_text.js", "../../src/pp/cauldron/visual/elements/visual_torus.js", "../../src/pp/cauldron/visual/elements/visual_transform.js", "../../src/pp/cauldron/visual/visual_manager.js", "../../src/pp/cauldron/visual/visual_resources.js", "../../src/pp/cauldron/wl/components/add_wl_to_window_component.js", "../../src/pp/cauldron/wl/getters/components/get_default_resources_component.js", "../../src/pp/cauldron/wl/utils/mesh_utils.js", "../../src/pp/cauldron/wl/getters/default_resources.ts", "../../src/pp/cauldron/wl/getters/components/get_scene_objects_component.js", "../../src/pp/input/cauldron/input_types.ts", "../../src/pp/cauldron/wl/getters/scene_objects.ts", "../../src/pp/debug/components/debug_manager_component.js", "../../src/pp/debug/debug_visual_manager.js", "../../src/pp/debug/debug_manager.js", "../../src/pp/debug/components/enable_debug_component.js", "../../src/pp/gameplay/experimental/character_controller/collision/components/character_collision_system_component.js", "../../src/pp/gameplay/experimental/character_controller/collision/character_collision_results.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_params.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_base.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_surface.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_base.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_position.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_movement.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal_sliding.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_horizontal.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_vertical.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_move.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_teleport.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_position.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check.js", "../../src/pp/gameplay/experimental/character_controller/collision/collision_check_bridge.js", "../../src/pp/gameplay/experimental/character_controller/collision/character_collision_system.js", "../../src/pp/input/cauldron/components/input_manager_component.js", "../../src/pp/input/gamepad/gamepad_buttons.js", "../../src/pp/input/gamepad/gamepad_cores/gamepad_core.js", "../../src/pp/input/gamepad/gamepad_cores/classic_gamepad_core.js", "../../src/pp/input/cauldron/keyboard.js", "../../src/pp/input/gamepad/gamepad_cores/keyboard_gamepad_core.js", "../../src/pp/input/gamepad/gamepad_cores/xr_gamepad_core.js", "../../src/pp/input/cauldron/input_manager.js", "../../src/pp/input/gamepad/base_gamepad.js", "../../src/pp/input/gamepad/universal_gamepad.js", "../../src/pp/input/gamepad/cauldron/gamepads_manager.js", "../../src/pp/input/pose/base_pose.js", "../../src/pp/input/cauldron/input_utils.js", "../../src/pp/input/pose/hand_pose.js", "../../src/pp/input/pose/head_pose.js", "../../src/pp/input/pose/tracked_hand_joint_pose.js", "../../src/pp/input/pose/tracked_hand_pose.js", "../../src/pp/input/cauldron/mouse.js", "../../src/pp/tool/cauldron/components/enable_tool_component.js", "../../src/pp/tool/console_vr/components/init_console_vr_component.js", "../../src/pp/tool/console_vr/console_original_functions.js", "../../src/pp/tool/console_vr/console_vr.js", "../../src/pp/tool/easy_tune/components/init_easy_tune_variables_component.js", "../../src/pp/tool/easy_tune/easy_tune_variables.js", "../../src/pp/cauldron/wl/register_wl_components.js", "../../src/pp/cauldron/wl/utils/component_utils.js", "../../src/pp/cauldron/wl/utils/default_wl_component_clone_callbacks.js", "../../src/pp/cauldron/wl/utils/object_utils.ts", "../../src/pp/cauldron/utils/js_utils.js", "../../src/pp/plugin/utils/plugin_utils.ts", "../../src/pp/plugin/js/extensions/array/array_extension_utils.ts", "../../src/pp/plugin/js/extensions/array/array_extension.ts", "../../src/pp/plugin/js/extensions/array/array_extension_legacy.js", "../../src/pp/plugin/js/extensions/array/mat3_extension.ts", "../../src/pp/plugin/js/extensions/array/vec2_extension.ts", "../../src/pp/cauldron/utils/array/vec_utils.ts", "../../src/pp/plugin/js/extensions/array/vec_extension.ts", "../../src/pp/plugin/js/extensions/math_extension.ts", "../../src/pp/plugin/js/extensions/number_extension.ts", "../../src/pp/plugin/js/extensions/init_js_extentions.ts", "../../src/pp/plugin/js/init_js_plugins.ts", "../../src/pp/plugin/wl/extensions/cauldron_extensions.js", "../../src/pp/plugin/wl/extensions/object_extension.ts", "../../src/pp/plugin/wl/extensions/init_wl_extentions.ts", "../../src/pp/plugin/wl/mods/components/cauldron_mods.ts", "../../src/pp/plugin/wl/mods/components/cursor_component_mod.js", "../../src/pp/plugin/wl/mods/components/cursor_target_component_mod.ts", "../../src/pp/plugin/wl/mods/components/mouse_look_component_mod.js", "../../src/pp/plugin/wl/mods/components/init_component_mods.ts", "../../src/pp/plugin/wl/mods/init_wl_mods.ts", "../../src/pp/plugin/wl/init_wl_plugins.ts", "../../src/pp/plugin/init_plugins.ts", "../../src/pp/pp/pp_version.ts", "../../src/pp/pp/init_pp.ts", "../../src/pp/pp/components/add_pp_to_window_component.js", "../../src/pp/audio/audio_utils.js", "../../src/pp/audio/howler/howler_audio_player.js", "../../src/pp/audio/components/mute_everything_component.js", "../../src/pp/audio/components/spatial_audio_listener_component.js", "../../src/pp/cauldron/benchmarks/benchmark_max_physx_component.js", "../../src/pp/cauldron/physics/physics_collision_collector.js", "../../src/pp/cauldron/benchmarks/benchmark_max_visible_triangles_component.js", "../../src/pp/cauldron/cauldron/components/adjust_hierarchy_physx_scale_component.js", "../../src/pp/cauldron/cauldron/components/clear_console_on_xr_session_start_component.js", "../../src/pp/cauldron/cauldron/components/set_active_component.js", "../../src/pp/cauldron/cauldron/components/show_fps_component.js", "../../src/pp/cauldron/cauldron/components/show_xr_buttons_component.ts", "../../src/pp/cauldron/fsm/fsm.js", "../../src/pp/cauldron/fsm/state.js", "../../src/pp/cauldron/fsm/transition.js", "../../src/pp/cauldron/fsm/states/timer_state.js", "../../src/pp/cauldron/utils/color_utils.js", "../../src/pp/cauldron/utils/analytics_utils.js", "../../src/pp/cauldron/wl/utils/material_utils.js", "../../src/pp/cauldron/wl/utils/text_utils.js", "../../src/pp/debug/components/debug_transform_component.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_overwriter.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analyzer.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analysis_results_logger.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_functions_performance_analyzer_component.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_functions_performance_analyzer_component.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_array_functions_performance_analyzer_component.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_array_creation_performance_analyzer_component.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_function_performance_analyzer_component.js", "../../src/pp/debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_components_function_performance_analyzer_component.js", "../../src/pp/gameplay/cauldron/cauldron/direction_2D_to_3D_converter.js", "../../src/pp/gameplay/cauldron/cauldron/number_over_factor.ts", "../../src/pp/gameplay/grab_throw/grabbable_component.js", "../../src/pp/gameplay/grab_throw/grabber_hand_component.js", "../../src/pp/gameplay/integrations/construct_arcade/ca_utils.js", "../../src/pp/gameplay/integrations/construct_arcade/ca_dummy_server.js", "../../src/pp/gameplay/integrations/construct_arcade/ca_display_leaderboard_component.js", "../../src/pp/gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_utils.ts", "../../src/pp/gameplay/experimental/character_controller/collision/character_collider_setup.js", "../../src/pp/gameplay/experimental/character_controller/character_controller_utils.js", "../../src/pp/gameplay/experimental/character_controller/collision/character_collider_setup_utils.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_head_manager.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_transform_manager.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_rotate.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_movement.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion.js", "../../src/pp/input/gamepad/cauldron/gamepad_utils.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_obscure_manager.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_visualizer.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_parable.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_state.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_state.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_blink_state.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_shift_state.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_state.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_smooth.js", "../../src/pp/gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_component.js", "../../src/pp/input/cauldron/components/finger_cursor_component.js", "../../src/pp/input/cauldron/components/switch_hand_object_component.js", "../../src/pp/input/cauldron/components/tracked_hand_draw_joint_component.js", "../../src/pp/input/cauldron/components/tracked_hand_draw_all_joints_component.js", "../../src/pp/input/cauldron/components/tracked_hand_draw_skin_component.js", "../../src/pp/input/gamepad/cauldron/gamepad_mesh_animator_component.js", "../../src/pp/input/gamepad/cauldron/gamepad_control_scheme_component.js", "../../src/pp/input/gamepad/gamepad_cores/virtual_gamepad_gamepad_core.js", "../../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_icon.js", "../../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_params.js", "../../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_virtual_button.js", "../../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_virtual_thumbstick.js", "../../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad.js", "../../src/pp/input/gamepad/virtual_gamepad/virtual_gamepad_component.js", "../../src/pp/input/pose/components/set_player_height_component.js", "../../src/pp/input/pose/components/set_hand_local_transform_component.js", "../../src/pp/input/pose/components/set_head_local_transform_component.ts", "../../src/pp/input/pose/components/set_tracked_hand_joint_local_transform_component.js", "../../src/pp/input/pose/components/copy_hand_transform_component.js", "../../src/pp/input/pose/components/copy_head_transform_component.js", "../../src/pp/input/pose/components/copy_player_transform_component.js", "../../src/pp/input/pose/components/copy_reference_space_transform_component.js", "../../src/pp/tool/cauldron/tool_types.js", "../../src/pp/tool/cauldron/components/tool_cursor_component.js", "../../src/pp/tool/console_vr/console_vr_widget_config.js", "../../src/pp/tool/console_vr/console_vr_types.js", "../../src/pp/tool/console_vr/console_vr_widget_ui.js", "../../src/pp/tool/widget_frame/widget_frame.js", "../../src/pp/tool/widget_frame/widget_frame_config.js", "../../src/pp/tool/widget_frame/widget_frame_ui.js", "../../src/pp/tool/console_vr/console_vr_widget.js", "../../src/pp/tool/console_vr/components/console_vr_tool_component.js", "../../src/pp/tool/easy_tune/easy_tune_variable_types.js", "../../src/pp/tool/easy_tune/easy_tune_utils.js", "../../src/pp/tool/easy_tune/components/easy_tune_tool_component.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_array_widget_selector.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_config.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_config.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_ui.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_ui.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_selector.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/easy_tune_widget_config.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_config.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_ui.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_config.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_ui.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/number/easy_tune_number_widget_selector.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_config.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_ui.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget.js", "../../src/pp/tool/easy_tune/easy_tune_widgets/easy_tune_widget.js", "../../src/pp/tool/easy_tune/components/easy_tune_import_variables_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_object_tuner.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_light_attenuation.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_light_color.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_mesh_color.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_scale.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_transform.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_mesh_ambient_factor.js", "../../src/pp/tool/easy_tune/easy_object_tuners/easy_text_color.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_light_attenuation_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_light_color_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_mesh_ambient_factor_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_mesh_color_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_scale_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_child_number_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_grab_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_text_color_component.js", "../../src/pp/tool/easy_tune/easy_object_tuners/components/easy_transform_component.js"], + "sourcesContent": ["// PP\r\nexport * from \"./pp/register_pp_components.js\";\r\nexport { Globals } from \"./pp/globals.js\";\r\n\r\nexport * from \"./pp/components/pp_gateway_component.js\";\r\nexport * from \"./pp/components/add_pp_to_window_component.js\";\r\n\r\n//\tPLUGIN\r\nexport { PluginUtils } from \"./plugin/utils/plugin_utils.js\";\r\n\r\nexport * from \"./plugin/js/extensions/array/vec_create_extension.js\";\r\nexport { ArrayExtensionUtils } from \"./plugin/js/extensions/array/array_extension_utils.js\";\r\n\r\n//\tAUDIO\r\nexport * from \"./audio/audio_manager.js\";\r\nexport * from \"./audio/audio_player.js\";\r\nexport * from \"./audio/audio_setup.js\";\r\nexport { AudioUtils } from \"./audio/audio_utils.js\";\r\n\r\nexport * from \"./audio/howler/howler_audio_player.js\";\r\n\r\nexport * from \"./audio/components/audio_manager_component.js\";\r\nexport * from \"./audio/components/mute_everything_component.js\";\r\nexport * from \"./audio/components/spatial_audio_listener_component.js\";\r\n\r\n//\tCAULDRON\r\nexport * from \"./cauldron/benchmarks/benchmark_max_physx_component.js\";\r\nexport * from \"./cauldron/benchmarks/benchmark_max_visible_triangles_component.js\";\r\n\r\nexport * from \"./cauldron/cauldron/save_manager.js\";\r\nexport * from \"./cauldron/cauldron/analytics_manager.js\";\r\nexport * from \"./cauldron/cauldron/timer.js\";\r\n\r\nexport * from \"./cauldron/cauldron/components/adjust_hierarchy_physx_scale_component.js\";\r\nexport * from \"./cauldron/cauldron/components/analytics_manager_component.js\";\r\nexport * from \"./cauldron/cauldron/components/clear_console_on_xr_session_start_component.js\";\r\nexport * from \"./cauldron/cauldron/components/save_manager_component.js\";\r\nexport * from \"./cauldron/cauldron/components/set_active_component.js\";\r\nexport * from \"./cauldron/cauldron/components/show_fps_component.js\";\r\nexport * from \"./cauldron/cauldron/components/show_xr_buttons_component.js\";\r\n\r\nexport * from \"./cauldron/fsm/fsm.js\";\r\nexport * from \"./cauldron/fsm/state.js\";\r\nexport * from \"./cauldron/fsm/transition.js\";\r\nexport * from \"./cauldron/fsm/states/timer_state.js\";\r\n\r\nexport * from \"./cauldron/object_pool/object_pool.js\";\r\nexport * from \"./cauldron/object_pool/object_pool_manager.js\";\r\nexport * from \"./cauldron/object_pool/components/object_pool_manager_component.js\";\r\n\r\nexport * from \"./cauldron/type_definitions/array_type_definitions.js\";\r\n\r\nexport { ColorUtils } from \"./cauldron/utils/color_utils.js\";\r\nexport { SaveUtils } from \"./cauldron/utils/save_utils.js\";\r\nexport { XRUtils } from \"./cauldron/utils/xr_utils.js\";\r\nexport { BrowserUtils } from \"./cauldron/utils/browser_utils.js\";\r\nexport { AnalyticsUtils } from \"./cauldron/utils/analytics_utils.js\";\r\n\r\nexport { ArrayUtils } from \"./cauldron/utils/array/array_utils.js\";\r\nexport { VecUtils } from \"./cauldron/utils/array/vec_utils.js\";\r\nexport { Vec2Utils } from \"./cauldron/utils/array/vec2_utils.js\";\r\nexport { Vec3Utils } from \"./cauldron/utils/array/vec3_utils.js\";\r\nexport { Vec4Utils } from \"./cauldron/utils/array/vec4_utils.js\";\r\nexport { QuatUtils } from \"./cauldron/utils/array/quat_utils.js\";\r\nexport { Quat2Utils } from \"./cauldron/utils/array/quat2_utils.js\";\r\nexport { Mat3Utils } from \"./cauldron/utils/array/mat3_utils.js\";\r\nexport { Mat4Utils } from \"./cauldron/utils/array/mat4_utils.js\";\r\n\r\nexport { JSUtils } from \"./cauldron/utils/js_utils.js\";\r\nexport { MathUtils, EasingFunction, EasingSupportFunction } from \"./cauldron/utils/math_utils.js\";\r\n\r\nexport { PhysicsUtils } from \"./cauldron/physics/physics_utils.js\";\r\nexport * from \"./cauldron/physics/physics_raycast_params.js\";\r\nexport * from \"./cauldron/physics/physics_layer_flags.js\";\r\nexport * from \"./cauldron/physics/physics_collision_collector.js\";\r\n\r\nexport * from \"./cauldron/visual/visual_manager.js\";\r\nexport * from \"./cauldron/visual/visual_resources.js\";\r\n\r\nexport * from \"./cauldron/visual/elements/visual_element_types.js\";\r\nexport * from \"./cauldron/visual/elements/visual_line.js\";\r\nexport * from \"./cauldron/visual/elements/visual_mesh.js\";\r\nexport * from \"./cauldron/visual/elements/visual_point.js\";\r\nexport * from \"./cauldron/visual/elements/visual_arrow.js\";\r\nexport * from \"./cauldron/visual/elements/visual_text.js\";\r\nexport * from \"./cauldron/visual/elements/visual_transform.js\";\r\nexport * from \"./cauldron/visual/elements/visual_raycast.js\";\r\nexport * from \"./cauldron/visual/elements/visual_torus.js\";\r\n\r\nexport * from \"./cauldron/visual/components/visual_manager_component.js\";\r\n\r\nexport * from \"./cauldron/wl/register_wl_components.js\";\r\nexport * from \"./cauldron/wl/components/add_wl_to_window_component.js\";\r\nexport { ObjectUtils, CloneParams } from \"./cauldron/wl/utils/object_utils.js\";\r\nexport { ComponentUtils, DeepCloneParams, CustomCloneParams } from \"./cauldron/wl/utils/component_utils.js\";\r\nexport { DefaultWLComponentCloneCallbacks } from \"./cauldron/wl/utils/default_wl_component_clone_callbacks.js\";\r\nexport { MaterialUtils } from \"./cauldron/wl/utils/material_utils.js\";\r\nexport { MeshUtils, MeshCreationVertexParams, MeshCreationTriangleParams, MeshCreationParams } from \"./cauldron/wl/utils/mesh_utils.js\";\r\nexport { TextUtils } from \"./cauldron/wl/utils/text_utils.js\";\r\nexport * from \"./cauldron/wl/getters/scene_objects.js\";\r\nexport * from \"./cauldron/wl/getters/default_resources.js\";\r\nexport * from \"./cauldron/wl/getters/components/get_scene_objects_component.js\";\r\nexport * from \"./cauldron/wl/getters/components/get_default_resources_component.js\";\r\n\r\n//\tDEBUG\r\nexport * from \"./debug/debug_manager.js\";\r\nexport * from \"./debug/debug_visual_manager.js\";\r\n\r\nexport * from \"./debug/components/debug_transform_component.js\";\r\nexport * from \"./debug/components/debug_manager_component.js\";\r\nexport * from \"./debug/components/enable_debug_component.js\";\r\n\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_overwriter.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analyzer.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/debug_functions_performance_analysis_results_logger.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_functions_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_functions_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_array_functions_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_pp_array_creation_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_function_performance_analyzer_component.js\";\r\nexport * from \"./debug/debug_functions_overwriter/debug_functions_performance_analyzer/components/debug_wl_components_function_performance_analyzer_component.js\";\r\n\r\n//\tGAMEPLAY\r\n\r\n// CAULDRON\r\nexport * from \"./gameplay/cauldron/cauldron/direction_2D_to_3D_converter.js\";\r\nexport * from \"./gameplay/cauldron/cauldron/number_over_factor.js\";\r\n\r\n// GRAB & THROW\r\nexport * from \"./gameplay/grab_throw/grabbable_component.js\";\r\nexport * from \"./gameplay/grab_throw/grabber_hand_component.js\";\r\n\r\n// INTEGRATIONS\r\nexport { CAUtils, CAError } from \"./gameplay/integrations/construct_arcade/ca_utils.js\";\r\nexport * from \"./gameplay/integrations/construct_arcade/ca_dummy_server.js\";\r\nexport * from \"./gameplay/integrations/construct_arcade/ca_display_leaderboard_component.js\";\r\n\r\n// EXPERIMENTAL\r\n\r\n// CHARACTER CONTROLLER\r\nexport * from \"./gameplay/experimental/character_controller/collision/legacy/collision_check/collision_params.js\";\r\nexport { CollisionCheck } from \"./gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check.js\";\r\nexport { CollisionCheckUtils } from \"./gameplay/experimental/character_controller/collision/legacy/collision_check/collision_check_utils.js\";\r\n\r\nexport { CollisionCheckBridge } from \"./gameplay/experimental/character_controller/collision/collision_check_bridge.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/character_collider_setup.js\";\r\nexport { CharacterControllerUtils } from \"./gameplay/experimental/character_controller/character_controller_utils.js\";\r\nexport { CharacterColliderSetupUtils, CharacterColliderSetupSimplifiedCreationParams, CharacterColliderSetupSimplifiedCreationAccuracyLevel } from \"./gameplay/experimental/character_controller/collision/character_collider_setup_utils.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/character_collision_results.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/character_collision_system.js\";\r\nexport * from \"./gameplay/experimental/character_controller/collision/components/character_collision_system_component.js\";\r\n\r\n// LOCOMOTION\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_head_manager.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_transform_manager.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_rotate.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_movement.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_smooth.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_obscure_manager.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/player_locomotion_component.js\";\r\n\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_parable.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_visualizer.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_detection_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_blink_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport_teleport_shift_state.js\";\r\nexport * from \"./gameplay/experimental/locomotion/legacy/locomotion/teleport/player_locomotion_teleport.js\";\r\n\r\n//\tINPUT\r\nexport * from \"./input/cauldron/input_types.js\";\r\nexport { InputUtils } from \"./input/cauldron/input_utils.js\";\r\nexport * from \"./input/cauldron/keyboard.js\";\r\nexport * from \"./input/cauldron/mouse.js\";\r\nexport * from \"./input/cauldron/input_manager.js\";\r\n\r\nexport * from \"./input/cauldron/components/finger_cursor_component.js\";\r\nexport * from \"./input/cauldron/components/input_manager_component.js\";\r\nexport * from \"./input/cauldron/components/switch_hand_object_component.js\";\r\nexport * from \"./input/cauldron/components/tracked_hand_draw_joint_component.js\";\r\nexport * from \"./input/cauldron/components/tracked_hand_draw_all_joints_component.js\";\r\nexport * from \"./input/cauldron/components/tracked_hand_draw_skin_component.js\";\r\n\r\nexport * from \"./input/gamepad/gamepad_buttons.js\";\r\nexport * from \"./input/gamepad/base_gamepad.js\";\r\nexport * from \"./input/gamepad/universal_gamepad.js\";\r\nexport * from \"./input/gamepad/cauldron/gamepad_mesh_animator_component.js\";\r\nexport * from \"./input/gamepad/cauldron/gamepads_manager.js\";\r\nexport { GamepadUtils } from \"./input/gamepad/cauldron/gamepad_utils.js\";\r\nexport * from \"./input/gamepad/cauldron/gamepad_control_scheme_component.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/xr_gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/keyboard_gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/virtual_gamepad_gamepad_core.js\";\r\nexport * from \"./input/gamepad/gamepad_cores/classic_gamepad_core.js\";\r\n\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_component.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_params.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_virtual_button.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_virtual_thumbstick.js\";\r\nexport * from \"./input/gamepad/virtual_gamepad/virtual_gamepad_icon.js\";\r\n\r\nexport * from \"./input/pose/base_pose.js\";\r\nexport * from \"./input/pose/hand_pose.js\";\r\nexport * from \"./input/pose/head_pose.js\";\r\nexport * from \"./input/pose/tracked_hand_joint_pose.js\";\r\nexport * from \"./input/pose/tracked_hand_pose.js\";\r\n\r\nexport * from \"./input/pose/components/set_player_height_component.js\";\r\nexport * from \"./input/pose/components/set_hand_local_transform_component.js\";\r\nexport * from \"./input/pose/components/set_head_local_transform_component.js\";\r\nexport * from \"./input/pose/components/set_tracked_hand_joint_local_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_hand_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_head_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_player_transform_component.js\";\r\nexport * from \"./input/pose/components/copy_reference_space_transform_component.js\";\r\n\r\n//\tTOOL\r\nexport * from \"./tool/cauldron/tool_types.js\";\r\nexport * from \"./tool/cauldron/components/tool_cursor_component.js\";\r\nexport * from \"./tool/cauldron/components/enable_tool_component.js\";\r\n\r\nexport * from \"./tool/console_vr/console_vr_widget_config.js\";\r\nexport * from \"./tool/console_vr/console_vr_widget_ui.js\";\r\nexport * from \"./tool/console_vr/console_vr_widget.js\";\r\nexport * from \"./tool/console_vr/console_vr.js\";\r\nexport * from \"./tool/console_vr/console_vr_types.js\";\r\nexport { ConsoleOriginalFunctions } from \"./tool/console_vr/console_original_functions.js\";\r\n\r\nexport * from \"./tool/console_vr/components/console_vr_tool_component.js\";\r\nexport * from \"./tool/console_vr/components/init_console_vr_component.js\";\r\n\r\nexport * from \"./tool/easy_tune/easy_tune_variables.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_variable_types.js\";\r\nexport { EasyTuneUtils } from \"./tool/easy_tune/easy_tune_utils.js\";\r\n\r\nexport * from \"./tool/easy_tune/components/easy_tune_tool_component.js\";\r\nexport * from \"./tool/easy_tune/components/easy_tune_import_variables_component.js\";\r\nexport * from \"./tool/easy_tune/components/init_easy_tune_variables_component.js\";\r\n\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_object_tuner.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_light_attenuation.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_light_color.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_mesh_color.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_scale.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_transform.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_mesh_ambient_factor.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/easy_text_color.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_light_attenuation_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_light_color_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_mesh_ambient_factor_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_mesh_color_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_scale_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_child_number_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_set_tune_target_grab_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_text_color_component.js\";\r\nexport * from \"./tool/easy_tune/easy_object_tuners/components/easy_transform_component.js\";\r\n\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/easy_tune_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/easy_tune_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/base/easy_tune_base_array_widget_selector.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/bool/easy_tune_bool_array_widget_selector.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/none/easy_tune_none_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_array_widget_config.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/number/easy_tune_number_widget_selector.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_ui.js\";\r\nexport * from \"./tool/easy_tune/easy_tune_widgets/transform/easy_tune_transform_widget_config.js\";\r\n\r\nexport * from \"./tool/widget_frame/widget_frame_config.js\";\r\nexport * from \"./tool/widget_frame/widget_frame_ui.js\";\r\nexport * from \"./tool/widget_frame/widget_frame.js\";", "import { AddPPToWindowComponent, AddWLToWindowComponent, AdjustHierarchyPhysXScaleComponent, AnalyticsManagerComponent, AudioManagerComponent, BenchmarkMaxPhysXComponent, BenchmarkMaxVisibleTrianglesComponent, CADisplayLeaderboardComponent, CharacterCollisionSystemComponent, ClearConsoleOnXRSessionStartComponent, ConsoleVRToolComponent, CopyHandTransformComponent, CopyHeadTransformComponent, CopyPlayerTransformComponent, CopyReferenceSpaceTransformComponent, DebugArrayFunctionsPerformanceAnalyzerComponent, DebugFunctionsPerformanceAnalyzerComponent, DebugManagerComponent, DebugPPArrayCreationPerformanceAnalyzerComponent, DebugPPFunctionsPerformanceAnalyzerComponent, DebugTransformComponent, DebugWLComponentsFunctionsPerformanceAnalyzerComponent, DebugWLFunctionsPerformanceAnalyzerComponent, EasyLightAttenuationComponent, EasyLightColorComponent, EasyMeshAmbientFactorComponent, EasyMeshColorComponent, EasyScaleComponent, EasySetTuneTargeetGrabComponent, EasySetTuneTargetChildNumberComponent, EasyTextColorComponent, EasyTransformComponent, EasyTuneImportVariablesComponent, EasyTuneToolComponent, EnableDebugComponent, EnableToolComponent, FingerCursorComponent, GamepadControlSchemeComponent, GamepadMeshAnimatorComponent, GetDefaultResourcesComponent, GetSceneObjectsComponent, GrabbableComponent, GrabberHandComponent, InitConsoleVRComponent, InitEasyTuneVariablesComponent, InputManagerComponent, MuteEverythingComponent, ObjectPoolManagerComponent, PPGatewayComponent, PlayerLocomotionComponent, SaveManagerComponent, SetActiveComponent, SetHandLocalTransformComponent, SetHeadLocalTransformComponent, SetPlayerHeightComponent, SetTrackedHandJointLocalTransformComponent, ShowFPSComponent, ShowXRButtonsComponent, SpatialAudioListenerComponent, SwitchHandObjectComponent, ToolCursorComponent, TrackedHandDrawAllJointsComponent, TrackedHandDrawJointComponent, TrackedHandDrawSkinComponent, VirtualGamepadComponent, VisualManagerComponent } from \"../index.js\";\r\n\r\nexport function registerPPComponents(engine) {\r\n engine.registerComponent(\r\n AddPPToWindowComponent,\r\n AddWLToWindowComponent,\r\n AdjustHierarchyPhysXScaleComponent,\r\n AnalyticsManagerComponent,\r\n AudioManagerComponent,\r\n BenchmarkMaxPhysXComponent,\r\n BenchmarkMaxVisibleTrianglesComponent,\r\n CADisplayLeaderboardComponent,\r\n CharacterCollisionSystemComponent,\r\n ClearConsoleOnXRSessionStartComponent,\r\n ConsoleVRToolComponent,\r\n CopyHandTransformComponent,\r\n CopyHeadTransformComponent,\r\n CopyReferenceSpaceTransformComponent,\r\n CopyPlayerTransformComponent,\r\n DebugPPArrayCreationPerformanceAnalyzerComponent,\r\n DebugArrayFunctionsPerformanceAnalyzerComponent,\r\n DebugFunctionsPerformanceAnalyzerComponent,\r\n DebugManagerComponent,\r\n DebugPPFunctionsPerformanceAnalyzerComponent,\r\n DebugTransformComponent,\r\n DebugWLComponentsFunctionsPerformanceAnalyzerComponent,\r\n DebugWLFunctionsPerformanceAnalyzerComponent,\r\n EasyLightAttenuationComponent,\r\n EasyLightColorComponent,\r\n EasyMeshAmbientFactorComponent,\r\n EasyMeshColorComponent,\r\n EasyScaleComponent,\r\n EasySetTuneTargeetGrabComponent,\r\n EasySetTuneTargetChildNumberComponent,\r\n EasyTextColorComponent,\r\n EasyTransformComponent,\r\n EasyTuneImportVariablesComponent,\r\n EasyTuneToolComponent,\r\n EnableDebugComponent,\r\n EnableToolComponent,\r\n FingerCursorComponent,\r\n GamepadControlSchemeComponent,\r\n GamepadMeshAnimatorComponent,\r\n GetDefaultResourcesComponent,\r\n GetSceneObjectsComponent,\r\n GrabbableComponent,\r\n GrabberHandComponent,\r\n InitConsoleVRComponent,\r\n InitEasyTuneVariablesComponent,\r\n InputManagerComponent,\r\n MuteEverythingComponent,\r\n ObjectPoolManagerComponent,\r\n PPGatewayComponent,\r\n PlayerLocomotionComponent,\r\n SaveManagerComponent,\r\n SetActiveComponent,\r\n SetHandLocalTransformComponent,\r\n SetHeadLocalTransformComponent,\r\n SetPlayerHeightComponent,\r\n SetTrackedHandJointLocalTransformComponent,\r\n ShowFPSComponent,\r\n ShowXRButtonsComponent,\r\n SpatialAudioListenerComponent,\r\n SwitchHandObjectComponent,\r\n ToolCursorComponent,\r\n TrackedHandDrawAllJointsComponent,\r\n TrackedHandDrawJointComponent,\r\n TrackedHandDrawSkinComponent,\r\n VirtualGamepadComponent,\r\n VisualManagerComponent\r\n );\r\n}", "import { Globals } from \"../pp/globals.js\";\r\n\r\nlet _myAudioManagers = new WeakMap();\r\n\r\nexport function getAudioManager(engine = Globals.getMainEngine()) {\r\n return _myAudioManagers.get(engine);\r\n}\r\n\r\nexport function setAudioManager(audioManager, engine = Globals.getMainEngine()) {\r\n _myAudioManagers.set(engine, audioManager);\r\n}\r\n\r\nexport function removeAudioManager(engine = Globals.getMainEngine()) {\r\n _myAudioManagers.delete(engine);\r\n}\r\n\r\nexport function hasAudioManager(engine = Globals.getMainEngine()) {\r\n return _myAudioManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myAnalyticsManagers = new WeakMap();\r\n\r\nexport function getAnalyticsManager(engine = Globals.getMainEngine()) {\r\n return _myAnalyticsManagers.get(engine);\r\n}\r\n\r\nexport function setAnalyticsManager(analyticsManager, engine = Globals.getMainEngine()) {\r\n _myAnalyticsManagers.set(engine, analyticsManager);\r\n}\r\n\r\nexport function removeAnalyticsManager(engine = Globals.getMainEngine()) {\r\n _myAnalyticsManagers.delete(engine);\r\n}\r\n\r\nexport function hasAnalyticsManager(engine = Globals.getMainEngine()) {\r\n return _myAnalyticsManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _mySaveManagers = new WeakMap();\r\n\r\nexport function getSaveManager(engine = Globals.getMainEngine()) {\r\n return _mySaveManagers.get(engine);\r\n}\r\n\r\nexport function setSaveManager(saveManager, engine = Globals.getMainEngine()) {\r\n _mySaveManagers.set(engine, saveManager);\r\n}\r\n\r\nexport function removeSaveManager(engine = Globals.getMainEngine()) {\r\n _mySaveManagers.delete(engine);\r\n}\r\n\r\nexport function hasSaveManager(engine = Globals.getMainEngine()) {\r\n return _mySaveManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myObjectPoolManagers = new WeakMap();\r\n\r\nexport function getObjectPoolManager(engine = Globals.getMainEngine()) {\r\n return _myObjectPoolManagers.get(engine);\r\n}\r\n\r\nexport function setObjectPoolManager(objectPoolManager, engine = Globals.getMainEngine()) {\r\n _myObjectPoolManagers.set(engine, objectPoolManager);\r\n}\r\n\r\nexport function removeObjectPoolManager(engine = Globals.getMainEngine()) {\r\n _myObjectPoolManagers.delete(engine);\r\n}\r\n\r\nexport function hasObjectPoolManager(engine = Globals.getMainEngine()) {\r\n return _myObjectPoolManagers.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myVisualResourcesContainer = new WeakMap();\r\nlet _myVisualManagers = new WeakMap();\r\n\r\nexport function getVisualResources(engine = Globals.getMainEngineinEngine()) {\r\n return _myVisualResourcesContainer.get(engine);\r\n}\r\n\r\nexport function setVisualResources(visualResources, engine = Globals.getMainEngine()) {\r\n _myVisualResourcesContainer.set(engine, visualResources);\r\n}\r\n\r\nexport function removeVisualResources(engine = Globals.getMainEngine()) {\r\n _myVisualResourcesContainer.delete(engine);\r\n}\r\n\r\nexport function hasVisualResources(engine = Globals.getMainEngine()) {\r\n return _myVisualResourcesContainer.has(engine);\r\n}\r\n\r\nexport function getVisualManager(engine = Globals.getMainEngine()) {\r\n return _myVisualManagers.get(engine);\r\n}\r\n\r\nexport function setVisualManager(visualManager, engine = Globals.getMainEngine()) {\r\n _myVisualManagers.set(engine, visualManager);\r\n}\r\n\r\nexport function removeVisualManager(engine = Globals.getMainEngine()) {\r\n _myVisualManagers.delete(engine);\r\n}\r\n\r\nexport function hasVisualManager(engine = Globals.getMainEngine()) {\r\n return _myVisualManagers.has(engine);\r\n}", "import { Physics, Scene, WASM, WonderlandEngine, XR } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myMainEngine: WonderlandEngine | null = null;\r\nconst _myEngines: WonderlandEngine[] = [];\r\n\r\nexport function getMainEngine(): WonderlandEngine | null {\r\n return _myMainEngine;\r\n}\r\n\r\nexport function setMainEngine(engine: WonderlandEngine): void {\r\n if (!hasEngine(engine)) {\r\n addEngine(engine);\r\n }\r\n\r\n _myMainEngine = engine;\r\n}\r\n\r\nexport function removeMainEngine(): void {\r\n _myMainEngine = null;\r\n}\r\n\r\nexport function getEngines(): WonderlandEngine[] {\r\n return _myEngines;\r\n}\r\n\r\nexport function addEngine(engine: WonderlandEngine): void {\r\n removeEngine(engine);\r\n _myEngines.push(engine);\r\n}\r\n\r\nexport function removeEngine(engine: Readonly): void {\r\n const index = _myEngines.indexOf(engine as WonderlandEngine);\r\n\r\n if (index >= 0) {\r\n _myEngines.splice(index, 1);\r\n\r\n if (getMainEngine() == engine) {\r\n removeMainEngine();\r\n }\r\n }\r\n}\r\n\r\nexport function hasEngine(engine: Readonly): boolean {\r\n return _myEngines.indexOf(engine as WonderlandEngine) >= 0;\r\n}\r\n\r\nexport function getScene(): Scene | null;\r\nexport function getScene(engine: Readonly): Scene;\r\nexport function getScene(engine: Readonly | null = Globals.getMainEngine()): Scene | null {\r\n let scene = null;\r\n\r\n if (engine != null) {\r\n scene = engine.scene;\r\n }\r\n\r\n return scene;\r\n}\r\n\r\nexport function getPhysics(): Physics | null;\r\nexport function getPhysics(engine: Readonly): Physics;\r\nexport function getPhysics(engine: Readonly | null = Globals.getMainEngine()): Physics | null {\r\n let physics = null;\r\n\r\n if (engine != null) {\r\n physics = engine.physics;\r\n }\r\n\r\n return physics;\r\n}\r\n\r\nexport function getCanvas(): HTMLCanvasElement | null;\r\nexport function getCanvas(engine: Readonly): HTMLCanvasElement;\r\nexport function getCanvas(engine: Readonly | null = Globals.getMainEngine()): HTMLCanvasElement | null {\r\n let canvas = null;\r\n\r\n if (engine != null) {\r\n canvas = engine.canvas;\r\n }\r\n\r\n return canvas;\r\n}\r\n\r\nexport function getWASM(): WASM | null;\r\nexport function getWASM(engine: Readonly): WASM;\r\nexport function getWASM(engine: Readonly | null = Globals.getMainEngine()): WASM | null {\r\n let wasm = null;\r\n\r\n if (engine != null) {\r\n wasm = engine.wasm;\r\n }\r\n\r\n return wasm;\r\n}\r\n\r\nexport function getXR(): XR | null;\r\nexport function getXR(engine: Readonly): XR;\r\nexport function getXR(engine: Readonly | null = Globals.getMainEngine()): XR | null {\r\n let xr = null;\r\n\r\n if (engine != null) {\r\n xr = engine.xr;\r\n }\r\n\r\n return xr;\r\n}", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { DefaultResources, DefaultResourcesMaterials, DefaultResourcesMeshes } from \"./default_resources.js\";\r\n\r\nconst _myDefaultResourcesContainer: WeakMap, DefaultResources> = new WeakMap();\r\n\r\nexport function getDefaultResources(engine: Readonly | null = Globals.getMainEngine()): DefaultResources | null {\r\n if (engine == null) return null;\r\n\r\n const defaultResources = _myDefaultResourcesContainer.get(engine);\r\n return defaultResources != null ? defaultResources : null;\r\n}\r\n\r\nexport function setDefaultResources(defaultResources: DefaultResources, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDefaultResourcesContainer.set(engine, defaultResources);\r\n }\r\n}\r\n\r\nexport function removeDefaultResources(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDefaultResourcesContainer.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasDefaultResources(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myDefaultResourcesContainer.has(engine) : false;\r\n}\r\n\r\nexport function getDefaultMeshes(engine: Readonly | null = Globals.getMainEngine()): DefaultResourcesMeshes | null {\r\n const defaultResources = getDefaultResources(engine);\r\n\r\n if (defaultResources != null) {\r\n return defaultResources.myMeshes;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getDefaultMaterials(engine: Readonly | null = Globals.getMainEngine()): DefaultResourcesMaterials | null {\r\n const defaultResources = getDefaultResources(engine);\r\n\r\n if (defaultResources != null) {\r\n return defaultResources.myMaterials;\r\n }\r\n\r\n return null;\r\n}", "import { Object3D, WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { PlayerObjects, SceneObjects } from \"./scene_objects.js\";\r\n\r\nconst _mySceneObjectsContainer: WeakMap, SceneObjects> = new WeakMap();\r\n\r\nexport function getSceneObjects(engine: Readonly | null = Globals.getMainEngine()): SceneObjects | null {\r\n if (engine == null) return null;\r\n\r\n const sceneObjects = _mySceneObjectsContainer.get(engine);\r\n return sceneObjects != null ? sceneObjects : null;\r\n}\r\n\r\nexport function setSceneObjects(sceneObjects: SceneObjects, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _mySceneObjectsContainer.set(engine, sceneObjects);\r\n }\r\n}\r\n\r\nexport function removeSceneObjects(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _mySceneObjectsContainer.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasSceneObjects(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _mySceneObjectsContainer.has(engine) : false;\r\n}\r\n\r\nexport function getRootObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myRoot;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getSceneObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myScene;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getPlayerObjects(engine: Readonly | null = Globals.getMainEngine()): PlayerObjects | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myPlayerObjects;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getPlayerObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myPlayerObjects.myPlayer;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getHeadObject(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n const sceneObjects = getSceneObjects(engine);\r\n\r\n if (sceneObjects != null) {\r\n return sceneObjects.myPlayerObjects.myHead;\r\n }\r\n\r\n return null;\r\n}", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../pp/globals.js\";\r\nimport { DebugManager } from \"./debug_manager.js\";\r\nimport { DebugVisualManager } from \"./debug_visual_manager.js\";\r\n\r\nconst _myDebugManagers: WeakMap, DebugManager> = new WeakMap();\r\nconst _myDebugEnableds: WeakMap, boolean> = new WeakMap();\r\n\r\nexport function getDebugManager(engine: Readonly | null = Globals.getMainEngine()): DebugManager | null {\r\n if (engine == null) return null;\r\n\r\n const debugManager = _myDebugManagers.get(engine);\r\n return debugManager != null ? debugManager : null;\r\n}\r\n\r\nexport function setDebugManager(debugManager: DebugManager, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugManagers.set(engine, debugManager);\r\n }\r\n}\r\n\r\nexport function removeDebugManager(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugManagers.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasDebugManager(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myDebugManagers.has(engine) : false;\r\n}\r\n\r\nexport function getDebugVisualManager(engine: Readonly | null = Globals.getMainEngine()): DebugVisualManager | null {\r\n const debugManager = getDebugManager(engine);\r\n\r\n if (debugManager != null) {\r\n return debugManager.getDebugVisualManager();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function isDebugEnabled(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? !!_myDebugEnableds.get(engine) : false;\r\n}\r\n\r\nexport function setDebugEnabled(debugEnabled: boolean, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugEnableds.set(engine, debugEnabled);\r\n }\r\n}\r\n\r\nexport function removeDebugEnabled(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myDebugEnableds.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasDebugEnabled(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myDebugEnableds.has(engine) : false;\r\n}", "import { Globals } from \"../../../../pp/globals.js\";\r\n\r\nlet _myCharacterCollisionSystems = new WeakMap();\r\n\r\nexport function getCharacterCollisionSystem(engine = Globals.getMainEngine()) {\r\n return _myCharacterCollisionSystems.get(engine);\r\n}\r\n\r\nexport function setCharacterCollisionSystem(characterCollisionSystem, engine = Globals.getMainEngine()) {\r\n _myCharacterCollisionSystems.set(engine, characterCollisionSystem);\r\n}\r\n\r\nexport function removeCharacterCollisionSystem(engine = Globals.getMainEngine()) {\r\n _myCharacterCollisionSystems.delete(engine);\r\n}\r\n\r\nexport function hasCharacterCollisionSystem(engine = Globals.getMainEngine()) {\r\n return _myCharacterCollisionSystems.has(engine);\r\n}", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { GamepadsManager } from \"../../input/gamepad/cauldron/gamepads_manager.js\";\r\nimport { HandPose } from \"../../input/pose/hand_pose.js\";\r\nimport { HeadPose } from \"../../input/pose/head_pose.js\";\r\nimport { TrackedHandPose } from \"../../input/pose/tracked_hand_pose.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { BaseGamepad } from \"../gamepad/base_gamepad.js\";\r\nimport { InputManager } from \"./input_manager.js\";\r\nimport { Handedness } from \"./input_types.js\";\r\nimport { Keyboard } from \"./keyboard.js\";\r\nimport { Mouse } from \"./mouse.js\";\r\n\r\nconst _myInputManagers: WeakMap, InputManager> = new WeakMap();\r\nconst _myPoseForwardFixeds: WeakMap, boolean> = new WeakMap();\r\n\r\nexport function getInputManager(engine: Readonly | null = Globals.getMainEngine()): InputManager | null {\r\n if (engine == null) return null;\r\n\r\n const inputManager = _myInputManagers.get(engine);\r\n return inputManager != null ? inputManager : null;\r\n}\r\n\r\nexport function setInputManager(inputManager: InputManager, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myInputManagers.set(engine, inputManager);\r\n }\r\n}\r\n\r\nexport function removeInputManager(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myInputManagers.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasInputManager(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myInputManagers.has(engine) : false;\r\n}\r\n\r\nexport function getMouse(engine: Readonly | null = Globals.getMainEngine()): Mouse | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getMouse();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getKeyboard(engine: Readonly | null = Globals.getMainEngine()): Keyboard | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getKeyboard();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Gamepad\r\n\r\nexport function getGamepadsManager(engine: Readonly | null = Globals.getMainEngine()): GamepadsManager | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getGamepad(handedness: Handedness, engine: Readonly | null = Globals.getMainEngine()): BaseGamepad | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getGamepad(handedness);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getGamepads(engine: Readonly | null = Globals.getMainEngine()): BaseGamepad[] | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getGamepads();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getLeftGamepad(engine: Readonly | null = Globals.getMainEngine()): BaseGamepad | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getLeftGamepad();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getRightGamepad(engine: Readonly | null = Globals.getMainEngine()): BaseGamepad | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getGamepadsManager().getRightGamepad();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Pose\r\n\r\nexport function getHeadPose(engine: Readonly | null = Globals.getMainEngine()): HeadPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getHeadPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getHandPose(handedness: Handedness, engine: Readonly | null = Globals.getMainEngine()): HandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getHandPose(handedness);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getHandPoses(engine: Readonly | null = Globals.getMainEngine()): HandPose[] | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getHandPoses();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getLeftHandPose(engine: Readonly | null = Globals.getMainEngine()): HandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getLeftHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getRightHandPose(engine: Readonly | null = Globals.getMainEngine()): HandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getRightHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getTrackedHandPose(handedness: Handedness, engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getTrackedHandPose(handedness);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getTrackedHandPoses(engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose[] | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getTrackedHandPoses();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getLeftTrackedHandPose(engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getLeftTrackedHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getRightTrackedHandPose(engine: Readonly | null = Globals.getMainEngine()): TrackedHandPose | null {\r\n const inputManager = getInputManager(engine);\r\n\r\n if (inputManager != null) {\r\n return inputManager.getRightTrackedHandPose();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Pose Forward Fixed\r\n\r\nexport function isPoseForwardFixed(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? !!_myPoseForwardFixeds.get(engine) : false;\r\n}\r\n\r\nexport function setPoseForwardFixed(toolEnabled: boolean, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myPoseForwardFixeds.set(engine, toolEnabled);\r\n }\r\n}\r\n\r\nexport function removePoseForwardFixed(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myPoseForwardFixeds.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasPoseForwardFixed(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myPoseForwardFixeds.has(engine) : false;\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myToolEnableds = new WeakMap();\r\n\r\nexport function isToolEnabled(engine = Globals.getMainEngine()) {\r\n return _myToolEnableds.get(engine);\r\n}\r\n\r\nexport function setToolEnabled(toolEnabled, engine = Globals.getMainEngine()) {\r\n _myToolEnableds.set(engine, toolEnabled);\r\n}\r\n\r\nexport function removeToolEnabled(engine = Globals.getMainEngine()) {\r\n _myToolEnableds.delete(engine);\r\n}\r\n\r\nexport function hasToolEnabled(engine = Globals.getMainEngine()) {\r\n return _myToolEnableds.has(engine);\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myConsoleVRs = new WeakMap();\r\n\r\nexport function getConsoleVR(engine = Globals.getMainEngine()) {\r\n return _myConsoleVRs.get(engine);\r\n}\r\n\r\nexport function setConsoleVR(consoleVR, engine = Globals.getMainEngine()) {\r\n _myConsoleVRs.set(engine, consoleVR);\r\n}\r\n\r\nexport function removeConsoleVR(engine = Globals.getMainEngine()) {\r\n _myConsoleVRs.delete(engine);\r\n}\r\n\r\nexport function hasConsoleVR(engine = Globals.getMainEngine()) {\r\n return _myConsoleVRs.has(engine);\r\n}", "import { Object3D, WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { EasyTuneVariables } from \"./easy_tune_variables.js\";\r\n\r\nconst _myEasyTuneVariablesList: WeakMap, EasyTuneVariables> = new WeakMap();\r\nconst _myEasyTuneTargets: WeakMap, Object3D> = new WeakMap();\r\n\r\nexport function getEasyTuneVariables(engine: Readonly | null = Globals.getMainEngine()): EasyTuneVariables | null {\r\n if (engine == null) return null;\r\n\r\n const easyTuneVariables = _myEasyTuneVariablesList.get(engine);\r\n return easyTuneVariables != null ? easyTuneVariables : null;\r\n}\r\n\r\nexport function setEasyTuneVariables(easyTuneVariables: EasyTuneVariables, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneVariablesList.set(engine, easyTuneVariables);\r\n }\r\n}\r\n\r\nexport function removeEasyTuneVariables(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneVariablesList.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasEasyTuneVariables(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myEasyTuneVariablesList.has(engine) : false;\r\n}\r\n\r\nexport function getEasyTuneTarget(engine: Readonly | null = Globals.getMainEngine()): Object3D | null {\r\n if (engine == null) return null;\r\n\r\n const easyTuneTarget = _myEasyTuneTargets.get(engine);\r\n return easyTuneTarget != null ? easyTuneTarget : null;\r\n}\r\n\r\nexport function setEasyTuneTarget(easyTuneTarget: Object3D, engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneTargets.set(engine, easyTuneTarget);\r\n }\r\n}\r\n\r\nexport function removeEasyTuneTarget(engine: Readonly | null = Globals.getMainEngine()): void {\r\n if (engine != null) {\r\n _myEasyTuneTargets.delete(engine);\r\n }\r\n}\r\n\r\nexport function hasEasyTuneTarget(engine: Readonly | null = Globals.getMainEngine()): boolean {\r\n return engine != null ? _myEasyTuneTargets.has(engine) : false;\r\n}", "import * as AudioGlobals from \"../audio/audio_globals.js\";\r\nimport * as AnalyticsGlobals from \"../cauldron/cauldron/analytics_globals.js\";\r\nimport * as SaveGlobals from \"../cauldron/cauldron/save_globals.js\";\r\nimport * as ObjectPoolManagerGlobals from \"../cauldron/object_pool/object_pool_globals.js\";\r\nimport * as VisualGlobals from \"../cauldron/visual/visual_globals.js\";\r\nimport * as EngineGlobals from \"../cauldron/wl/engine_globals.js\";\r\nimport * as DefaultResourcesGlobals from \"../cauldron/wl/getters/default_resources_globals.js\";\r\nimport * as SceneObjectsGlobals from \"../cauldron/wl/getters/scene_objects_globals.js\";\r\nimport * as DebugGlobals from \"../debug/debug_globals.js\";\r\nimport * as CharacterCollisionSystemGlobals from \"../gameplay/experimental/character_controller/collision/character_collision_system_globals.js\";\r\nimport * as InputGlobals from \"../input/cauldron/input_globals.js\";\r\nimport * as ToolGlobals from \"../tool/cauldron/tool_globals.js\";\r\nimport * as ConsoleVRGlobals from \"../tool/console_vr/console_vr_globals.js\";\r\nimport * as EasyTuneGlobals from \"../tool/easy_tune/easy_tune_globals.js\";\r\n\r\nexport const Globals = {\r\n ...EngineGlobals,\r\n ...SceneObjectsGlobals,\r\n ...DefaultResourcesGlobals,\r\n ...AudioGlobals,\r\n ...VisualGlobals,\r\n ...DebugGlobals,\r\n ...ObjectPoolManagerGlobals,\r\n ...CharacterCollisionSystemGlobals,\r\n ...InputGlobals,\r\n ...SaveGlobals,\r\n ...AnalyticsGlobals,\r\n ...ToolGlobals,\r\n ...ConsoleVRGlobals,\r\n ...EasyTuneGlobals\r\n} as const;", "import { Component, Property, WonderlandEngine, type ComponentProperty } from \"@wonderlandengine/api\";\r\nimport { AudioManagerComponent } from \"../../audio/components/audio_manager_component.js\";\r\nimport { AnalyticsManagerComponent } from \"../../cauldron/cauldron/components/analytics_manager_component.js\";\r\nimport { SaveManagerComponent } from \"../../cauldron/cauldron/components/save_manager_component.js\";\r\nimport { ObjectPoolManagerComponent } from \"../../cauldron/object_pool/components/object_pool_manager_component.js\";\r\nimport { VisualManagerComponent } from \"../../cauldron/visual/components/visual_manager_component.js\";\r\nimport { AddWLToWindowComponent } from \"../../cauldron/wl/components/add_wl_to_window_component.js\";\r\nimport { GetDefaultResourcesComponent } from \"../../cauldron/wl/getters/components/get_default_resources_component.js\";\r\nimport { GetSceneObjectsComponent } from \"../../cauldron/wl/getters/components/get_scene_objects_component.js\";\r\nimport { DebugManagerComponent } from \"../../debug/components/debug_manager_component.js\";\r\nimport { EnableDebugComponent } from \"../../debug/components/enable_debug_component.js\";\r\nimport { CharacterCollisionSystemComponent } from \"../../gameplay/experimental/character_controller/collision/components/character_collision_system_component.js\";\r\nimport { InputManagerComponent } from \"../../input/cauldron/components/input_manager_component.js\";\r\nimport { EnableToolComponent } from \"../../tool/cauldron/components/enable_tool_component.js\";\r\nimport { InitConsoleVRComponent } from \"../../tool/console_vr/components/init_console_vr_component.js\";\r\nimport { InitEasyTuneVariablesComponent } from \"../../tool/easy_tune/components/init_easy_tune_variables_component.js\";\r\nimport { initPP } from \"../init_pp.js\";\r\nimport { AddPPToWindowComponent } from \"./add_pp_to_window_component.js\";\r\n\r\n// #TODO enable this again as soon as it is possible for the wonderland engine to find components not specified in the index.js,\r\n//since that would make the extension be included just by using the library, and not only when this component is used\r\n//import \"../../plugin/add_type_extensions_to_typescript.js\";\r\n\r\nconst _myRegisteredEngines: WeakMap, null> = new WeakMap();\r\n\r\nexport class PPGatewayComponent extends Component {\r\n public static override TypeName = \"pp-gateway\";\r\n public static override Properties = {\r\n _myEnableDebug: Property.bool(true),\r\n _myEnableTool: Property.bool(true),\r\n _myAddPPToWindow: Property.bool(true),\r\n _myAddWLToWindow: Property.bool(true),\r\n ...InputManagerComponent.Properties,\r\n ...AudioManagerComponent.Properties,\r\n ...VisualManagerComponent.Properties,\r\n ...CharacterCollisionSystemComponent.Properties,\r\n ...ObjectPoolManagerComponent.Properties,\r\n ...SaveManagerComponent.Properties,\r\n ...AnalyticsManagerComponent.Properties,\r\n ...DebugManagerComponent.Properties,\r\n ...GetSceneObjectsComponent.Properties,\r\n ...GetDefaultResourcesComponent.Properties\r\n };\r\n\r\n private _myEnableDebug!: boolean;\r\n private _myEnableTool!: boolean;\r\n\r\n private _myAddPPToWindow!: boolean;\r\n private _myAddWLToWindow!: boolean;\r\n\r\n private _myGetDefaultResourcesComponent!: GetDefaultResourcesComponent;\r\n private _myGetSceneObjectsComponent!: GetSceneObjectsComponent;\r\n private _myEnableDebugComponent!: EnableDebugComponent;\r\n private _myEnableToolComponent!: EnableToolComponent;\r\n private _myAddPPToWindowComponent!: AddPPToWindowComponent;\r\n private _myAddWLToWindowComponent!: AddWLToWindowComponent;\r\n private _myInitConsoleVRComponent!: InitConsoleVRComponent;\r\n private _myInitEasyTuneVariablesComponent!: InitEasyTuneVariablesComponent;\r\n private _myObjectPoolManagerComponent!: ObjectPoolManagerComponent;\r\n private _myInputManagerComponent!: InputManagerComponent;\r\n private _myAudioManagerComponent!: AudioManagerComponent;\r\n private _myVisualManagerComponent!: VisualManagerComponent;\r\n private _myCharacterCollisionSystemComponent!: CharacterCollisionSystemComponent;\r\n private _mySaveManagerComponent!: SaveManagerComponent;\r\n private _myAnalyticsManagerComponent!: AnalyticsManagerComponent;\r\n private _myDebugManagerComponent!: DebugManagerComponent;\r\n\r\n public static override onRegister(engine: WonderlandEngine): void {\r\n if (!_myRegisteredEngines.has(engine)) {\r\n _myRegisteredEngines.set(engine, null);\r\n initPP(engine);\r\n }\r\n }\r\n\r\n public override init(): void {\r\n this._myGetDefaultResourcesComponent = this.object.pp_addComponent(GetDefaultResourcesComponent, this._getProperties(GetDefaultResourcesComponent.Properties), false)!;\r\n this._myGetSceneObjectsComponent = this.object.pp_addComponent(GetSceneObjectsComponent, this._getProperties(GetSceneObjectsComponent.Properties), false)!;\r\n\r\n if (this._myEnableDebug) {\r\n this._myEnableDebugComponent = this.object.pp_addComponent(EnableDebugComponent, false)!;\r\n }\r\n\r\n if (this._myEnableTool) {\r\n this._myEnableToolComponent = this.object.pp_addComponent(EnableToolComponent, false)!;\r\n }\r\n\r\n if (this._myAddPPToWindow) {\r\n this._myAddPPToWindowComponent = this.object.pp_addComponent(AddPPToWindowComponent, false)!;\r\n }\r\n\r\n if (this._myAddWLToWindow) {\r\n this._myAddWLToWindowComponent = this.object.pp_addComponent(AddWLToWindowComponent, false)!;\r\n }\r\n\r\n this._myInitConsoleVRComponent = this.object.pp_addComponent(InitConsoleVRComponent, false)!;\r\n this._myInitEasyTuneVariablesComponent = this.object.pp_addComponent(InitEasyTuneVariablesComponent, false)!;\r\n\r\n this._myObjectPoolManagerComponent = this.object.pp_addComponent(ObjectPoolManagerComponent, this._getProperties(ObjectPoolManagerComponent.Properties), false)!;\r\n this._myInputManagerComponent = this.object.pp_addComponent(InputManagerComponent, this._getProperties(InputManagerComponent.Properties), false)!;\r\n this._myAudioManagerComponent = this.object.pp_addComponent(AudioManagerComponent, this._getProperties(AudioManagerComponent.Properties), false)!;\r\n this._myVisualManagerComponent = this.object.pp_addComponent(VisualManagerComponent, this._getProperties(VisualManagerComponent.Properties), false)!;\r\n this._myCharacterCollisionSystemComponent = this.object.pp_addComponent(CharacterCollisionSystemComponent, this._getProperties(CharacterCollisionSystemComponent.Properties), false)!;\r\n this._mySaveManagerComponent = this.object.pp_addComponent(SaveManagerComponent, this._getProperties(SaveManagerComponent.Properties), false)!;\r\n this._myAnalyticsManagerComponent = this.object.pp_addComponent(AnalyticsManagerComponent, this._getProperties(AnalyticsManagerComponent.Properties), false)!;\r\n\r\n this._myDebugManagerComponent = this.object.pp_addComponent(DebugManagerComponent, this._getProperties(DebugManagerComponent.Properties), false)!;\r\n }\r\n\r\n public override start(): void {\r\n this._myGetDefaultResourcesComponent.active = true;\r\n this._myGetSceneObjectsComponent.active = true;\r\n\r\n if (this._myEnableDebugComponent != null) {\r\n this._myEnableDebugComponent.active = true;\r\n }\r\n\r\n if (this._myEnableToolComponent != null) {\r\n this._myEnableToolComponent.active = true;\r\n }\r\n\r\n if (this._myAddPPToWindowComponent != null) {\r\n this._myAddPPToWindowComponent.active = true;\r\n }\r\n\r\n if (this._myAddWLToWindowComponent != null) {\r\n this._myAddWLToWindowComponent.active = true;\r\n }\r\n\r\n this._myInitConsoleVRComponent.active = true;\r\n this._myInitEasyTuneVariablesComponent.active = true;\r\n\r\n this._myObjectPoolManagerComponent.active = true;\r\n this._myInputManagerComponent.active = true;\r\n this._myAudioManagerComponent.active = true;\r\n this._myVisualManagerComponent.active = true;\r\n this._myCharacterCollisionSystemComponent.active = true;\r\n this._mySaveManagerComponent.active = true;\r\n this._myAnalyticsManagerComponent.active = true;\r\n\r\n this._myDebugManagerComponent.active = true;\r\n }\r\n\r\n private _getProperties(propertiesToGet: Record): Record {\r\n const properties: Record = {};\r\n\r\n if (propertiesToGet != null) {\r\n const propertyNames = Object.getOwnPropertyNames(propertiesToGet);\r\n\r\n for (const propertyName of propertyNames) {\r\n const _this = (this as any);\r\n if (_this[propertyName] != undefined) {\r\n properties[propertyName] = _this[propertyName];\r\n }\r\n }\r\n }\r\n\r\n return properties;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { AudioManager } from \"../audio_manager.js\";\r\n\r\nexport class AudioManagerComponent extends Component {\r\n static TypeName = \"pp-audio-manager\";\r\n static Properties = {\r\n _myPreloadAudio: Property.bool(false),\r\n _myCleanUpAudioSourcesOnInit: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myAudioManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasAudioManager(this.engine)) {\r\n this._myAudioManager = new AudioManager(this._myPreloadAudio, this.engine);\r\n\r\n if (this._myCleanUpAudioSourcesOnInit) {\r\n this._myAudioManager.unloadAllAudioSources();\r\n }\r\n\r\n Globals.setAudioManager(this._myAudioManager, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myAudioManager != null && Globals.getAudioManager(this.engine) == this._myAudioManager) {\r\n Globals.removeAudioManager(this.engine);\r\n }\r\n }\r\n}", "import { Howler } from \"howler\";\r\nimport { Globals } from \"../pp/globals.js\";\r\nimport { AudioPlayer } from \"./audio_player.js\";\r\n\r\nexport class AudioManager {\r\n\r\n constructor(preloadAudio = true, engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myPreloadAudio = preloadAudio;\r\n this._myAudioSetups = new Map();\r\n\r\n this._myAudioPlayersCreatedForPreload = [];\r\n }\r\n\r\n createAudioPlayer(audioSetupID) {\r\n let audioSetup = this.getAudioSetup(audioSetupID);\r\n if (audioSetup != null) {\r\n return new AudioPlayer(this.getAudioSetup(audioSetupID));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getAudioSetup(id) {\r\n return this._myAudioSetups.get(id);\r\n }\r\n\r\n addAudioSetup(id, audioSetup, preloadAudioOverride = null) {\r\n this._myAudioSetups.set(id, audioSetup);\r\n if ((this._myPreloadAudio && preloadAudioOverride == null) || (preloadAudioOverride != null && preloadAudioOverride)) {\r\n this._myAudioPlayersCreatedForPreload.push(this.createAudioPlayer(id));\r\n }\r\n }\r\n\r\n removeAudioSetup(id) {\r\n this._myAudioSetups.delete(id);\r\n }\r\n\r\n setVolume(volume) {\r\n Howler.volume(volume);\r\n }\r\n\r\n setMute(mute) {\r\n Howler.mute(mute);\r\n }\r\n\r\n stop() {\r\n Howler.stop();\r\n }\r\n\r\n unloadAllAudioSources() {\r\n Howler.unload();\r\n }\r\n}", "import { RetainEmitter } from \"@wonderlandengine/api\";\r\nimport { Howl, Howler } from \"howler\";\r\nimport { AudioSetup } from \"./audio_setup.js\";\r\n\r\nexport let AudioEvent = {\r\n END: \"end\",\r\n STOP: \"stop\",\r\n LOAD: \"load\",\r\n LOAD_ERROR: \"loaderror\",\r\n PLAY: \"play\",\r\n PLAY_ERROR: \"playerror\",\r\n PAUSE: \"pause\",\r\n MUTE: \"mute\",\r\n VOLUME: \"volume\",\r\n RATE: \"rate\",\r\n SEEK: \"seek\",\r\n FADE: \"fade\",\r\n UNLOCK: \"unlock\"\r\n};\r\n\r\nexport class AudioPlayer {\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @param {any} audioInstance\r\n */\r\n constructor(audioSetupOrAudioFilePath, audioInstance = null) {\r\n if (audioSetupOrAudioFilePath == null) {\r\n this._myAudioSetup = new AudioSetup();\r\n } else if (typeof audioSetupOrAudioFilePath == \"string\") {\r\n this._myAudioSetup = new AudioSetup(audioSetupOrAudioFilePath);\r\n } else {\r\n this._myAudioSetup = audioSetupOrAudioFilePath.clone();\r\n }\r\n\r\n this._myAudio = null;\r\n\r\n if (audioInstance == null) {\r\n this._myAudio = new Howl({\r\n src: [this._myAudioSetup.myAudioFilePath],\r\n loop: this._myAudioSetup.myLoop,\r\n volume: this._myAudioSetup.myVolume,\r\n autoplay: false,\r\n rate: this._myAudioSetup.myRate,\r\n pool: this._myAudioSetup.myPool,\r\n pos: (this._myAudioSetup.mySpatial) ? this._myAudioSetup.myPosition : null,\r\n refDistance: this._myAudioSetup.myReferenceDistance,\r\n preload: this._myAudioSetup.myPreload\r\n });\r\n\r\n this._myAudio._pannerAttr.refDistance = this._myAudioSetup.myReferenceDistance;\r\n } else {\r\n this._myAudio = audioInstance;\r\n }\r\n\r\n this._myLastAudioID = null;\r\n\r\n this._myAudioEventEmitters = new Map();\r\n for (let eventKey in AudioEvent) {\r\n this._myAudioEventEmitters.set(AudioEvent[eventKey], new RetainEmitter()); // Signature: listener(audioID)\r\n }\r\n\r\n this._addListeners();\r\n\r\n if (this._myAudioSetup.myAutoPlay) {\r\n this.play();\r\n }\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isValid() {\r\n return this._myAudio != null;\r\n }\r\n\r\n play() {\r\n if (Howler.state != \"running\" && this._myAudioSetup.myPreventPlayWhenAudioContextNotRunning) {\r\n return false;\r\n }\r\n\r\n let audioID = this._myAudio.play();\r\n if (audioID != null) {\r\n this._myLastAudioID = audioID;\r\n\r\n this.updatePosition(this._myAudioSetup.myPosition, true);\r\n this.updatePitch(this._myAudioSetup.myPitch, true);\r\n this.updateVolume(this._myAudioSetup.myVolume, true);\r\n }\r\n\r\n return audioID != null;\r\n }\r\n\r\n stop() {\r\n this._myAudio.stop();\r\n }\r\n\r\n pause() {\r\n this._myAudio.pause();\r\n }\r\n\r\n resume() {\r\n this._myAudio.play();\r\n }\r\n\r\n isPlaying(checkOnlyLast = false) {\r\n let playing = false;\r\n\r\n if (checkOnlyLast) {\r\n playing = this._myAudio.playing(this._myLastAudioID);\r\n }\r\n else {\r\n playing = this._myAudio.playing();\r\n }\r\n\r\n return playing;\r\n }\r\n\r\n isLoaded() {\r\n return this._myAudio.state() == \"loaded\";\r\n }\r\n\r\n fade(fromVolume, toVolume, duration, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setVolume(toVolume);\r\n }\r\n\r\n if (updateOnlyLast) {\r\n this._myAudio.fade(fromVolume, toVolume, duration * 1000, this._myLastAudioID);\r\n } else {\r\n this._myAudio.fade(fromVolume, toVolume, duration * 1000);\r\n }\r\n }\r\n\r\n isFading(checkOnlyLast = true) {\r\n let fading = false;\r\n\r\n if (checkOnlyLast) {\r\n let lastSound = this._myAudio._soundById(this._myLastAudioID);\r\n if (lastSound != null) {\r\n fading = lastSound._fadeTo != null;\r\n }\r\n } else {\r\n for (let sound of this._myAudio._sounds) {\r\n if (sound._fadeTo != null) {\r\n fading = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return fading;\r\n }\r\n\r\n updatePosition(position, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setPosition(position);\r\n }\r\n\r\n if (this._myAudioSetup.mySpatial && position) {\r\n if (updateOnlyLast) {\r\n this._myAudio.pos(position[0], position[1], position[2], this._myLastAudioID);\r\n } else {\r\n this._myAudio.pos(position[0], position[1], position[2]);\r\n }\r\n }\r\n }\r\n\r\n updatePitch(pitch, updateOnlyLast = true, setValueOnPlayer = true) {\r\n this.updateRate(pitch, updateOnlyLast, setValueOnPlayer);\r\n }\r\n\r\n updateRate(rate, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setRate(rate);\r\n }\r\n\r\n if (rate != null) {\r\n if (updateOnlyLast) {\r\n this._myAudio.rate(rate, this._myLastAudioID);\r\n } else {\r\n this._myAudio.rate(rate);\r\n }\r\n }\r\n }\r\n\r\n updateVolume(volume, updateOnlyLast = true, setValueOnPlayer = true) {\r\n if (setValueOnPlayer) {\r\n this.setVolume(volume);\r\n }\r\n\r\n if (volume != null) {\r\n if (updateOnlyLast) {\r\n this._myAudio.volume(volume, this._myLastAudioID);\r\n } else {\r\n this._myAudio.volume(volume);\r\n }\r\n }\r\n }\r\n\r\n setSpatial(spatial) {\r\n this._myAudioSetup.mySpatial = spatial;\r\n }\r\n\r\n setPosition(position) {\r\n this._myAudioSetup.myPosition = position;\r\n }\r\n\r\n setPitch(pitch) {\r\n this._myAudioSetup.myPitch = pitch;\r\n }\r\n\r\n setRate(rate) {\r\n this._myAudioSetup.myRate = rate;\r\n }\r\n\r\n setVolume(volume) {\r\n this._myAudioSetup.myVolume = volume;\r\n }\r\n\r\n getDuration() {\r\n return this._myAudio.duration();\r\n }\r\n\r\n getVolume() {\r\n return this._myAudioSetup.myVolume;\r\n }\r\n\r\n getPitch() {\r\n return this._myAudioSetup.myPitch;\r\n }\r\n\r\n getRate() {\r\n return this._myAudioSetup.myRate;\r\n }\r\n\r\n registerAudioEventListener(audioEvent, id, listener, notifyOnce = false, notifyIfAlreadyHappened = false) {\r\n this._myAudioEventEmitters.get(audioEvent).add(listener, { id: id, once: notifyOnce, immediate: notifyIfAlreadyHappened });\r\n }\r\n\r\n unregisterAudioEventListener(audioEvent, id) {\r\n this._myAudioEventEmitters.get(audioEvent).remove(id);\r\n }\r\n\r\n _addListeners() {\r\n if (this._myAudio != null) {\r\n for (let eventKey in AudioEvent) {\r\n let event = AudioEvent[eventKey];\r\n this._myAudio.on(event, function (audioID) {\r\n let emitter = this._myAudioEventEmitters.get(event);\r\n emitter.notify(audioID);\r\n }.bind(this));\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myAudio.unload();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "export class AudioSetup {\r\n\r\n constructor(audioFilePath = null) {\r\n this.myAudioFilePath = audioFilePath;\r\n\r\n this.myLoop = false;\r\n this.myAutoPlay = false;\r\n\r\n this.myVolume = 1.0;\r\n this._myRate = 1.0; // From 0.5 to 4.0\r\n\r\n this.myPool = 5;\r\n this.myPreload = true;\r\n\r\n this.myPreventPlayWhenAudioContextNotRunning = false;\r\n\r\n // Spatial Params\r\n\r\n this.myPosition = null;\r\n this.mySpatial = true;\r\n this.myReferenceDistance = Number.MAX_VALUE; // At this distance (and closer) the volume is not reduced\r\n }\r\n\r\n clone() {\r\n let audioSetup = new AudioSetup();\r\n\r\n audioSetup.myAudioFilePath = this.myAudioFilePath;\r\n\r\n audioSetup.myLoop = this.myLoop;\r\n audioSetup.myAutoPlay = this.myAutoPlay;\r\n\r\n audioSetup.myVolume = this.myVolume;\r\n audioSetup.myPitch = this.myPitch;\r\n audioSetup.myRate = this.myRate;\r\n\r\n audioSetup.myPool = this.myPool;\r\n audioSetup.myPreload = this.myPreload;\r\n\r\n audioSetup.myPreventPlayWhenAudioContextNotRunning = this.myPreventPlayWhenAudioContextNotRunning;\r\n\r\n // Spatial\r\n\r\n if (this.myPosition != null) {\r\n audioSetup.myPosition = this.myPosition.vec3_clone();\r\n } else {\r\n audioSetup.myPosition = null;\r\n }\r\n\r\n audioSetup.mySpatial = this.mySpatial;\r\n audioSetup.myReferenceDistance = this.myReferenceDistance;\r\n\r\n return audioSetup;\r\n }\r\n\r\n get myPitch() {\r\n return this._myRate;\r\n }\r\n\r\n get myRate() {\r\n return this._myRate;\r\n }\r\n\r\n set myPitch(pitch) {\r\n this._myRate = pitch;\r\n }\r\n\r\n set myRate(rate) {\r\n this._myRate = rate;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { BrowserUtils } from \"../../utils/browser_utils.js\";\r\nimport { AnalyticsManager } from \"../analytics_manager.js\";\r\n\r\nexport class AnalyticsManagerComponent extends Component {\r\n static TypeName = \"pp-analytics-manager\";\r\n static Properties = {\r\n _myDisableAnalyticsOnLocalhost: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myAnalyticsManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasAnalyticsManager(this.engine)) {\r\n this._myAnalyticsManager = new AnalyticsManager();\r\n\r\n if (BrowserUtils.isLocalhost() && this._myDisableAnalyticsOnLocalhost) {\r\n this._myAnalyticsManager.setAnalyticsEnabled(false);\r\n }\r\n\r\n Globals.setAnalyticsManager(this._myAnalyticsManager, this.engine);\r\n\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myAnalyticsManager != null) {\r\n this._myAnalyticsManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myAnalyticsManager != null && Globals.getAnalyticsManager(this.engine) == this._myAnalyticsManager) {\r\n Globals.removeAnalyticsManager(this.engine);\r\n }\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\nimport { BrowserUtils } from \"./browser_utils.js\";\r\n\r\nexport function getSession(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.session : null;\r\n}\r\n\r\nexport function getSessionMode(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.sessionMode : null;\r\n}\r\n\r\nexport function getReferenceSpace(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.currentReferenceSpace : null;\r\n}\r\n\r\nexport function getReferenceSpaceType(engine = Globals.getMainEngine()) {\r\n let type = \"local\";\r\n\r\n try {\r\n let xr = Globals.getXR(engine);\r\n type = xr != null ? xr.currentReferenceSpaceType : null;\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n\r\n return type;\r\n}\r\n\r\nexport function getFrame(engine = Globals.getMainEngine()) {\r\n let xr = Globals.getXR(engine);\r\n return xr != null ? xr.frame : null;\r\n}\r\n\r\nexport function isSessionActive(engine = Globals.getMainEngine()) {\r\n return XRUtils.getSession(engine) != null;\r\n}\r\n\r\nexport function isReferenceSpaceFloorBased(engine = Globals.getMainEngine()) {\r\n return XRUtils.getReferenceSpaceType(engine).includes(\"floor\");\r\n}\r\n\r\nexport function exitSession(engine = Globals.getMainEngine()) {\r\n let xrSession = XRUtils.getSession(engine);\r\n\r\n if (xrSession != null) {\r\n xrSession.end();\r\n }\r\n}\r\n\r\nexport function registerSessionStartEventListener(id, listener, manuallyCallSessionStartIfSessionAlreadyActive = true, addManualCallFlagToStartListener = false, engine = Globals.getMainEngine()) {\r\n if (listener != null) {\r\n if (addManualCallFlagToStartListener) {\r\n engine.onXRSessionStart.add(listener.bind(undefined, false), { id: id, immediate: false });\r\n } else {\r\n engine.onXRSessionStart.add(listener, { id: id, immediate: false });\r\n }\r\n\r\n if (manuallyCallSessionStartIfSessionAlreadyActive && XRUtils.isSessionActive(engine)) {\r\n if (addManualCallFlagToStartListener) {\r\n listener(true, XRUtils.getSession(engine), XRUtils.getSessionMode(engine));\r\n } else {\r\n listener(XRUtils.getSession(engine), XRUtils.getSessionMode(engine));\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function unregisterSessionStartEventListener(id, engine = Globals.getMainEngine()) {\r\n engine.onXRSessionStart.remove(id);\r\n}\r\n\r\nexport function registerSessionEndEventListener(id, listener, engine = Globals.getMainEngine()) {\r\n if (listener != null) {\r\n engine.onXRSessionEnd.add(listener, { id: id });\r\n }\r\n}\r\n\r\nexport function unregisterSessionEndEventListener(id, engine = Globals.getMainEngine()) {\r\n return engine.onXRSessionEnd.remove(id);\r\n}\r\n\r\nexport function registerSessionStartEndEventListeners(id, startListener, endListener, manuallyCallSessionStartIfSessionAlreadyActive = true, addManualCallFlagToStartListener = false, engine = Globals.getMainEngine()) {\r\n XRUtils.registerSessionEndEventListener(id, endListener, engine);\r\n XRUtils.registerSessionStartEventListener(id, startListener, manuallyCallSessionStartIfSessionAlreadyActive, addManualCallFlagToStartListener, engine);\r\n}\r\n\r\nexport function unregisterSessionStartEndEventListeners(id, engine = Globals.getMainEngine()) {\r\n XRUtils.unregisterSessionEndEventListener(id, engine);\r\n XRUtils.unregisterSessionStartEventListener(id, engine);\r\n}\r\n\r\nexport function isXRSupported(engine = Globals.getMainEngine()) {\r\n return XRUtils.isVRSupported(engine) || XRUtils.isARSupported(engine);\r\n}\r\n\r\nexport function isVRSupported(engine = Globals.getMainEngine()) {\r\n return engine.vrSupported;\r\n}\r\n\r\nexport function isARSupported(engine = Globals.getMainEngine()) {\r\n return engine.arSupported;\r\n}\r\n\r\nexport function isDeviceEmulated(onlyOnLocalhost = true) {\r\n let emulated = window.CustomWebXRPolyfill != null && (!onlyOnLocalhost || BrowserUtils.isLocalhost());\r\n return emulated;\r\n}\r\n\r\nexport let XRUtils = {\r\n getSession,\r\n getSessionMode,\r\n getReferenceSpace,\r\n getReferenceSpaceType,\r\n getFrame,\r\n isSessionActive,\r\n exitSession,\r\n registerSessionStartEventListener,\r\n unregisterSessionStartEventListener,\r\n registerSessionEndEventListener,\r\n unregisterSessionEndEventListener,\r\n registerSessionStartEndEventListeners,\r\n unregisterSessionStartEndEventListeners,\r\n isReferenceSpaceFloorBased,\r\n isXRSupported,\r\n isVRSupported,\r\n isARSupported,\r\n isDeviceEmulated\r\n};", "import { Globals } from \"../../pp/globals.js\";\r\nimport { XRUtils } from \"./xr_utils.js\";\r\n\r\nexport let isMobile = function () {\r\n let checkMobileRegex = new RegExp(\"Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\", \"i\");\r\n return function isMobile() {\r\n let userAgent = navigator.userAgent;\r\n return userAgent != null && userAgent.match(checkMobileRegex) != null;\r\n };\r\n}();\r\n\r\nexport function isDesktop() {\r\n return !BrowserUtils.isMobile();\r\n}\r\n\r\nexport let isLocalhost = function () {\r\n let localhostRegex = new RegExp(\"(localhost|127\\\\.0\\\\.0\\\\.1)(:(\\\\d{4}))?\");\r\n return function isLocalhost(port = null, isRegex = false) {\r\n let isLocalhost = false;\r\n\r\n let localhostMatch = window.location.origin.match(localhostRegex);\r\n\r\n if (localhostMatch != null) {\r\n if (port == null) {\r\n isLocalhost = true;\r\n } else if (localhostMatch.length >= 4 && localhostMatch[3] != null) {\r\n let portMatch = localhostMatch[3];\r\n if (isRegex) {\r\n isLocalhost = portMatch.match(port) != null;\r\n } else {\r\n isLocalhost = portMatch == port;\r\n }\r\n }\r\n }\r\n\r\n return isLocalhost;\r\n };\r\n}();\r\n\r\nexport function openLink(url, newTab = true, exitXRSessionBeforeOpen = true, exitXRSessionOnSuccess = true, tryOpenLinkOnClickOnFailure = false, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n let element = document.createElement(\"a\");\r\n\r\n element.style.display = \"none\";\r\n\r\n document.body.appendChild(element);\r\n\r\n element.addEventListener(\"click\", function () {\r\n let targetPage = undefined;\r\n if (newTab) {\r\n targetPage = \"_blank\";\r\n } else {\r\n targetPage = \"_top\";\r\n }\r\n\r\n let result = window.open(url, targetPage);\r\n\r\n if (result != null) {\r\n if (!exitXRSessionBeforeOpen && exitXRSessionOnSuccess) {\r\n XRUtils.exitSession(engine);\r\n }\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n } else {\r\n if (tryOpenLinkOnClickOnFailure) {\r\n setTimeout(function () {\r\n BrowserUtils.openLinkOnClick(url, newTab, exitXRSessionOnSuccess, onSuccessCallback, onFailureCallback);\r\n }, 100);\r\n } else if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n }\r\n });\r\n\r\n if (exitXRSessionBeforeOpen) {\r\n XRUtils.exitSession(engine);\r\n }\r\n\r\n element.click();\r\n\r\n document.body.removeChild(element);\r\n}\r\n\r\nexport function openLinkOnClick(url, newTab = true, exitXRSessionOnSuccess = true, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n document.addEventListener(\"click\", function () {\r\n let targetPage = undefined;\r\n if (newTab) {\r\n targetPage = \"_blank\";\r\n } else {\r\n targetPage = \"_top\";\r\n }\r\n\r\n let result = window.open(url, targetPage);\r\n\r\n if (result != null) {\r\n if (exitXRSessionOnSuccess) {\r\n XRUtils.exitSession(engine);\r\n }\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n } else {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n }\r\n }, { once: true });\r\n}\r\n\r\nexport let BrowserUtils = {\r\n isMobile,\r\n isDesktop,\r\n isLocalhost,\r\n openLink,\r\n openLinkOnClick\r\n};", "export class AnalyticsManager {\r\n constructor() {\r\n this._myAnalyticsEnabled = true;\r\n\r\n this._mySendDataCallback = null;\r\n\r\n this._myDefaultEventCooldown = 0;\r\n this._myEventCooldowns = new Map();\r\n\r\n this._myDataLogEnabled = false;\r\n this._myEventsLogEnabled = false;\r\n\r\n this._myErrorsLogEnabled = false;\r\n }\r\n\r\n update(dt) {\r\n if (this._myEventCooldowns.size > 0) {\r\n let eventNamesToUpdateCooldown = this._myEventCooldowns.keys();\r\n for (let eventName of eventNamesToUpdateCooldown) {\r\n let newCooldown = this._myEventCooldowns.get(eventName) - dt;\r\n if (newCooldown <= 0) {\r\n this._myEventCooldowns.delete(eventName);\r\n } else {\r\n this._myEventCooldowns.set(eventName, newCooldown);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setAnalyticsEnabled(enabled) {\r\n this._myAnalyticsEnabled = enabled;\r\n }\r\n\r\n isAnalyticsEnabled() {\r\n return this._myAnalyticsEnabled;\r\n }\r\n\r\n setSendDataCallback(callback) {\r\n this._mySendDataCallback = callback;\r\n }\r\n\r\n sendData(...args) {\r\n let dataSent = false;\r\n\r\n try {\r\n if (this._myAnalyticsEnabled) {\r\n if (this._myDataLogEnabled) {\r\n console.log(\"Analytics Data: \" + args);\r\n }\r\n\r\n if (this._mySendDataCallback != null) {\r\n this._mySendDataCallback(...args);\r\n\r\n dataSent = true;\r\n } else if (this._myErrorsLogEnabled) {\r\n console.error(\"Analytics Error: You need to set the send data callback\");\r\n } else {\r\n console.warn(\"Analytics Error: You need to set the send data callback\");\r\n }\r\n }\r\n } catch (error) {\r\n if (this._myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n\r\n dataSent = false;\r\n }\r\n\r\n return dataSent;\r\n }\r\n\r\n sendEvent(eventName, value = null) {\r\n let eventSent = false;\r\n\r\n try {\r\n if (this._myAnalyticsEnabled) {\r\n if (this._myEventsLogEnabled) {\r\n if (value != null) {\r\n console.log(\"Analytics Event: \" + eventName + \" - Value: \" + value);\r\n } else {\r\n console.log(\"Analytics Event: \" + eventName);\r\n }\r\n }\r\n\r\n if (this._mySendDataCallback != null) {\r\n if (value != null) {\r\n this._mySendDataCallback(\"event\", eventName, { \"value\": value });\r\n } else {\r\n this._mySendDataCallback(\"event\", eventName);\r\n }\r\n\r\n eventSent = true;\r\n } else if (this._myErrorsLogEnabled) {\r\n console.error(\"Analytics Error: You need to set the send data callback\");\r\n } else {\r\n console.warn(\"Analytics Error: You need to set the send data callback\");\r\n }\r\n }\r\n } catch (error) {\r\n if (this._myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n\r\n eventSent = false;\r\n }\r\n\r\n return eventSent;\r\n }\r\n\r\n sendEventOnce(eventName, value = null) {\r\n if (this._myAnalyticsEnabled) {\r\n if (!this.hasEventAlreadyBeenSent(eventName)) {\r\n let eventSent = this.sendEvent(eventName, value, true);\r\n\r\n if (eventSent) {\r\n this._myEventsSentOnce.pp_pushUnique(eventName);\r\n }\r\n }\r\n }\r\n }\r\n\r\n clearEventSentOnceState(eventName) {\r\n this._myEventsSentOnce.pp_removeEqual(eventName);\r\n }\r\n\r\n clearAllEventsSentOnceState() {\r\n this._myEventsSentOnce.pp_clear();\r\n }\r\n\r\n hasEventAlreadyBeenSent(eventName) {\r\n return this._myEventsSentOnce.pp_hasEqual(eventName);\r\n }\r\n\r\n getEventsAlreadyBeenSent() {\r\n return this._myEventsSentOnce;\r\n }\r\n\r\n sendEventWithCooldown(eventName, value = null, cooldownSeconds = this._myDefaultEventCooldown) {\r\n if (this._myAnalyticsEnabled) {\r\n if (this.getEventCooldown(eventName) <= 0) {\r\n let eventSent = this.sendEvent(eventName, value, true);\r\n\r\n if (eventSent) {\r\n this._myEventCooldowns.set(eventName, cooldownSeconds);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getDefaultEventCooldown() {\r\n return this._myDefaultEventCooldown;\r\n }\r\n\r\n setDefaultEventCooldown(cooldownSeconds) {\r\n this._myDefaultEventCooldown = cooldownSeconds;\r\n }\r\n\r\n clearEventCooldown(eventName) {\r\n this._myEventCooldowns.delete(eventName);\r\n }\r\n\r\n clearAllEventCooldowns() {\r\n this._myEventCooldowns.clear();\r\n }\r\n\r\n getEventCooldown(eventName) {\r\n let eventCooldown = this._myEventCooldowns.get(eventName);\r\n\r\n if (eventCooldown != null) {\r\n return eventCooldown;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n getEventCooldowns() {\r\n return this._myEventCooldowns;\r\n }\r\n\r\n setDataLogEnabled(enabled) {\r\n this._myDataLogEnabled = enabled;\r\n }\r\n\r\n isDataLogEnabled() {\r\n return this._myDataLogEnabled;\r\n }\r\n\r\n setEventsLogEnabled(enabled) {\r\n this._myEventsLogEnabled = enabled;\r\n }\r\n\r\n isEventsLogEnabled() {\r\n return this._myEventsLogEnabled;\r\n }\r\n\r\n setErrorsLogEnabled(enabled) {\r\n this._myErrorsLogEnabled = enabled;\r\n }\r\n\r\n isErrorsLogEnabled() {\r\n return this._myErrorsLogEnabled;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { SaveManager } from \"../save_manager.js\";\r\n\r\nexport class SaveManagerComponent extends Component {\r\n static TypeName = \"pp-save-manager\";\r\n static Properties = {\r\n _mySaveID: Property.string(\"\"),\r\n _myAutoLoadSaves: Property.bool(true),\r\n };\r\n\r\n init() {\r\n this._mySaveManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (this._mySaveID.length > 0 && !Globals.hasSaveManager(this.engine)) {\r\n this._mySaveManager = new SaveManager(this._mySaveID, this._myAutoLoadSaves, this.engine);\r\n\r\n Globals.setSaveManager(this._mySaveManager, this.engine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._mySaveManager != null) {\r\n this._mySaveManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._mySaveManager != null && Globals.getSaveManager(this.engine) == this._mySaveManager) {\r\n Globals.removeSaveManager(this.engine);\r\n }\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { SaveUtils } from \"../utils/save_utils.js\";\r\nimport { XRUtils } from \"../utils/xr_utils.js\";\r\nimport { Timer } from \"./timer.js\";\r\n\r\nexport class SaveManager {\r\n\r\n constructor(saveID, autoLoadSaves = true, engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._mySaveID = saveID;\r\n\r\n this._myCommitSavesDelayTimer = new Timer(0, false);\r\n this._myDelaySavesCommit = true;\r\n this._myCommitSavesDirty = false;\r\n this._myCommitSavesDirtyClearOnFail = true;\r\n this._myCommitSavesOnInterrupt = true;\r\n this._myCommitSavesWhenLoadSavesFailed = false;\r\n this._myResetSaveObjectOnLoadSavesFail = false;\r\n\r\n this._mySaveObject = {};\r\n this._myLoadSavesSucceded = false;\r\n\r\n this._mySaveObjectLoadedOnce = false;\r\n this._myAtLeastOneValueSavedOnce = false;\r\n\r\n this._myClearEmitter = new Emitter(); // Signature: listener()\r\n this._myDeleteEmitter = new Emitter(); // Signature: listener(id)\r\n this._myDeleteIDEmitters = new Map(); // Signature: listener(id)\r\n this._mySaveEmitter = new Emitter(); // Signature: listener(id, value)\r\n this._mySaveValueChangedEmitter = new Emitter(); // Signature: listener(id, value)\r\n this._mySaveIDEmitters = new Map(); // Signature: listener(id, value)\r\n this._mySaveValueChangedIDEmitters = new Map(); // Signature: listener(id, value)\r\n this._myCommitSavesEmitter = new Emitter(); // Signature: listener(succeeded)\r\n this._myLoadEmitter = new Emitter(); // Signature: listener(id, value)\r\n this._myLoadIDEmitters = new Map(); // Signature: listener(id, value)\r\n this._myLoadSavesEmitter = new Emitter(); // Signature: listener(loadSavesSucceded, saveObjectReset)\r\n\r\n if (autoLoadSaves) {\r\n this.loadSaves();\r\n }\r\n\r\n this._myXRVisibilityChangeEventListener = null;\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n\r\n this._myWindowVisibilityChangeEventListener = function () {\r\n if (document.visibilityState != \"visible\") {\r\n this._onInterrupt();\r\n }\r\n }.bind(this);\r\n window.addEventListener('visibilitychange', this._myWindowVisibilityChangeEventListener);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setCommitSavesDelay(delay) {\r\n this._myCommitSavesDelayTimer.start(delay);\r\n }\r\n\r\n setDelaySavesCommit(delayed) {\r\n this._myDelaySavesCommit = delayed;\r\n }\r\n\r\n setCommitSavesDirty(dirty, startDelayTimer = true) {\r\n this._myCommitSavesDirty = dirty;\r\n if (dirty && startDelayTimer) {\r\n if (!this.startDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._myCommitSavesDelayTimer.reset();\r\n }\r\n }\r\n\r\n setCommitSavesDirtyClearOnFail(clearOnFail) {\r\n this._myCommitSavesDirtyClearOnFail = clearOnFail;\r\n }\r\n\r\n setCommitSavesOnInterrupt(commitSavesOnInterrupt) {\r\n this._myCommitSavesOnInterrupt = commitSavesOnInterrupt;\r\n }\r\n\r\n setCommitSavesWhenLoadSavesFailed(commitSavesWhenLoadSavesFailed) {\r\n this._myCommitSavesWhenLoadSavesFailed = commitSavesWhenLoadSavesFailed;\r\n }\r\n\r\n setResetSaveObjectOnLoadSavesFail(resetSaveObjectOnLoadSavesFail) {\r\n this._myResetSaveObjectOnLoadSavesFail = resetSaveObjectOnLoadSavesFail;\r\n }\r\n\r\n getCommitSavesDelay() {\r\n return this._myCommitSavesDelayTimer.getDuration();\r\n }\r\n\r\n isDelaySavesCommit() {\r\n return this._myDelaySavesCommit;\r\n }\r\n\r\n isCommitSavesDirty() {\r\n return this._myCommitSavesDirty;\r\n }\r\n\r\n isCommitSavesDirtyClearOnFail() {\r\n return this._myCommitSavesDirtyClearOnFail;\r\n }\r\n\r\n isCommitSavesOnInterrupt() {\r\n return this._myCommitSavesOnInterrupt;\r\n }\r\n\r\n isCommitSavesWhenLoadSavesFailed() {\r\n return this._myCommitSavesWhenLoadSavesFailed;\r\n }\r\n\r\n isResetSaveObjectOnLoadSavesFail() {\r\n return this._myResetSaveObjectOnLoadSavesFail;\r\n }\r\n\r\n hasLoadSavesSucceded() {\r\n return this._myLoadSavesSucceded;\r\n }\r\n\r\n update(dt) {\r\n if (this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.update(dt);\r\n if (this._myCommitSavesDelayTimer.isDone()) {\r\n if (this._myCommitSavesDirty) {\r\n this._commitSaves();\r\n }\r\n }\r\n } else {\r\n if (this._myCommitSavesDirty) {\r\n this._commitSaves();\r\n }\r\n }\r\n }\r\n\r\n has(id) {\r\n return id in this._mySaveObject;\r\n }\r\n\r\n save(id, value, overrideDelaySavesCommit = null) {\r\n let sameValue = false;\r\n if (this.has(id)) {\r\n sameValue = this._mySaveObject[id] === value;\r\n }\r\n\r\n if (!sameValue) {\r\n this._mySaveObject[id] = value;\r\n\r\n if ((this._myDelaySavesCommit && overrideDelaySavesCommit == null) || (overrideDelaySavesCommit != null && overrideDelaySavesCommit)) {\r\n this._myCommitSavesDirty = true;\r\n if (!this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n this._myAtLeastOneValueSavedOnce = true;\r\n\r\n this._mySaveEmitter.notify(id, value);\r\n\r\n if (this._mySaveIDEmitters.size > 0) {\r\n let emitter = this._mySaveIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id, value);\r\n }\r\n }\r\n\r\n if (!sameValue) {\r\n this._mySaveValueChangedEmitter.notify(id, value);\r\n\r\n if (this._mySaveValueChangedIDEmitters.size > 0) {\r\n let emitter = this._mySaveValueChangedIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n delete(id, overrideDelaySavesCommit = null) {\r\n if (this.has(id)) {\r\n delete this._mySaveObject[id];\r\n\r\n if ((this._myDelaySavesCommit && overrideDelaySavesCommit == null) || (overrideDelaySavesCommit != null && overrideDelaySavesCommit)) {\r\n this._myCommitSavesDirty = true;\r\n if (!this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n this._myAtLeastOneValueSavedOnce = true;\r\n\r\n this._myDeleteEmitter.notify(id);\r\n\r\n if (this._myDeleteIDEmitters.size > 0) {\r\n let emitter = this._myDeleteIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id);\r\n }\r\n }\r\n }\r\n\r\n clear(overrideDelaySavesCommit = null) {\r\n if (Object.keys(this._mySaveObject).length > 0) {\r\n this._mySaveObject = {};\r\n\r\n if ((this._myDelaySavesCommit && overrideDelaySavesCommit == null) || (overrideDelaySavesCommit != null && overrideDelaySavesCommit)) {\r\n this._myCommitSavesDirty = true;\r\n if (!this._myCommitSavesDelayTimer.isRunning()) {\r\n this._myCommitSavesDelayTimer.start();\r\n }\r\n } else {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n this._myAtLeastOneValueSavedOnce = true;\r\n\r\n this._myClearEmitter.notify();\r\n }\r\n\r\n load(id, defaultValue) {\r\n let value = this._mySaveObject[id];\r\n\r\n if (value == null && defaultValue != null) {\r\n value = defaultValue;\r\n }\r\n\r\n this._myLoadEmitter.notify(id, value);\r\n\r\n if (this._myLoadIDEmitters.size > 0) {\r\n let emitter = this._myLoadIDEmitters.get(id);\r\n if (emitter != null) {\r\n emitter.notify(id, value);\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n commitSaves(commitSavesOnlyIfDirty = true) {\r\n if (this._myCommitSavesDirty || !commitSavesOnlyIfDirty) {\r\n this._commitSaves();\r\n }\r\n }\r\n\r\n _commitSaves() {\r\n let succeded = true;\r\n\r\n if (this._myLoadSavesSucceded || this._myCommitSavesWhenLoadSavesFailed) {\r\n try {\r\n let saveObjectStringified = JSON.stringify(this._mySaveObject);\r\n SaveUtils.save(this._mySaveID, saveObjectStringified);\r\n } catch (error) {\r\n succeded = false;\r\n }\r\n }\r\n\r\n if (succeded || this._myCommitSavesDirtyClearOnFail) {\r\n this._myCommitSavesDirty = false;\r\n this._myCommitSavesDelayTimer.reset();\r\n }\r\n\r\n this._myCommitSavesEmitter.notify(succeded);\r\n\r\n return succeded;\r\n }\r\n\r\n loadSaves() {\r\n let saveObject = {};\r\n let loadSavesSucceded = false;\r\n let saveObjectReset = false;\r\n\r\n let maxLoadObjectAttempts = 3;\r\n do {\r\n try {\r\n saveObject = SaveUtils.loadObject(this._mySaveID, {});\r\n loadSavesSucceded = true;\r\n } catch (error) {\r\n maxLoadObjectAttempts--;\r\n }\r\n } while (maxLoadObjectAttempts > 0 && !loadSavesSucceded);\r\n\r\n if (loadSavesSucceded) {\r\n this._mySaveObject = saveObject;\r\n this._myLoadSavesSucceded = true;\r\n } else if (this._myResetSaveObjectOnLoadSavesFail) {\r\n this._mySaveObject = {};\r\n this._myLoadSavesSucceded = false;\r\n\r\n saveObjectReset = true;\r\n }\r\n\r\n this._mySaveObjectLoadedOnce = true;\r\n\r\n this._myLoadSavesEmitter.notify(loadSavesSucceded, saveObjectReset);\r\n\r\n return loadSavesSucceded;\r\n }\r\n\r\n _onXRSessionStart(session) {\r\n this._myXRVisibilityChangeEventListener = function (event) {\r\n if (event.session.visibilityState != \"visible\") {\r\n this._onInterrupt();\r\n }\r\n }.bind(this);\r\n\r\n session.addEventListener(\"visibilitychange\", this._myXRVisibilityChangeEventListener);\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._myXRVisibilityChangeEventListener = null;\r\n\r\n this._onInterrupt();\r\n }\r\n\r\n _onInterrupt() {\r\n if (this._myCommitSavesOnInterrupt && this._myCommitSavesDirty && (this._mySaveObjectLoadedOnce || this._myAtLeastOneValueSavedOnce)) {\r\n this.commitSaves();\r\n }\r\n }\r\n\r\n registerClearEventListener(listenerID, listener) {\r\n this._myClearEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterClearEventListener(listenerID) {\r\n this._myClearEmitter.remove(listenerID);\r\n }\r\n\r\n registerDeleteEventListener(listenerID, listener) {\r\n this._myDeleteEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterDeleteEventListener(listenerID) {\r\n this._myDeleteEmitter.remove(listenerID);\r\n }\r\n\r\n registerDeleteIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._myDeleteIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._myDeleteIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._myDeleteIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterDeleteIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._myDeleteIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._myDeleteIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerSaveEventListener(listenerID, listener) {\r\n this._mySaveEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveEventListener(listenerID) {\r\n this._mySaveEmitter.remove(listenerID);\r\n }\r\n\r\n registerSaveIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._mySaveIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._mySaveIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._mySaveIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._mySaveIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._mySaveIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerSaveValueChangedEventListener(listenerID, listener) {\r\n this._mySaveValueChangedEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveValueChangedEventListener(listenerID) {\r\n this._mySaveValueChangedEmitter.remove(listenerID);\r\n }\r\n\r\n registerSaveValueChangedIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._mySaveValueChangedIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._mySaveValueChangedIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._mySaveValueChangedIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterSaveValueChangedIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._mySaveValueChangedIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._mySaveValueChangedIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerCommitSavesEventListener(listenerID, listener) {\r\n this._myCommitSavesEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterCommitSavesEventListener(listenerID) {\r\n this._myCommitSavesEmitter.remove(listenerID);\r\n }\r\n\r\n registerLoadEventListener(listenerID, listener) {\r\n this._myLoadEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterLoadEventListener(listenerID) {\r\n this._myLoadEmitter.remove(listenerID);\r\n }\r\n\r\n registerLoadIDEventListener(valueID, listenerID, listener) {\r\n let valueIDEmitter = this._myLoadIDEmitters.get(valueID);\r\n if (valueIDEmitter == null) {\r\n this._myLoadIDEmitters.set(valueID, new Map());\r\n valueIDEmitter = this._myLoadIDEmitters.get(valueID);\r\n }\r\n\r\n valueIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterLoadIDEventListener(valueID, listenerID) {\r\n let valueIDEmitter = this._myLoadIDEmitters.get(valueID);\r\n if (valueIDEmitter != null) {\r\n valueIDEmitter.remove(listenerID);\r\n\r\n if (valueIDEmitter.size <= 0) {\r\n this._myLoadIDEmitters.delete(valueID);\r\n }\r\n }\r\n }\r\n\r\n registerLoadSavesEventListener(listenerID, listener) {\r\n this._myLoadSavesEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterLoadSavesEventListener(listenerID) {\r\n this._myLoadSavesEmitter.remove(listenerID);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.getSession(this._myEngine)?.removeEventListener(\"visibilitychange\", this._myXRVisibilityChangeEventListener);\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n\r\n window.removeEventListener('visibilitychange', this._myWindowVisibilityChangeEventListener);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "export function save(id: string, value: string): void {\r\n if (value != null) {\r\n localStorage.setItem(id, value);\r\n }\r\n}\r\n\r\nexport function has(id: string): boolean {\r\n return SaveUtils.loadString(id, null) != null;\r\n}\r\n\r\nexport function remove(id: string): void {\r\n return localStorage.removeItem(id);\r\n}\r\n\r\nexport function clear(): void {\r\n return localStorage.clear();\r\n}\r\n\r\nexport function load(id: string, defaultValue: string | null = null): string | null {\r\n return SaveUtils.loadString(id, defaultValue);\r\n}\r\n\r\nexport function loadString(id: string, defaultValue: string | null = null): string | null {\r\n const item = localStorage.getItem(id);\r\n\r\n if (item != null) {\r\n return item;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadNumber(id: string, defaultValue: number | null = null): number | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item != null) {\r\n return Number(item);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadBool(id: string, defaultValue: boolean | null = null): boolean | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item == \"true\") {\r\n return true;\r\n } else if (item == \"false\") {\r\n return false;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadObject(id: string, defaultValue: Readonly | null = null): object | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item != null) {\r\n try {\r\n const parsedValue = JSON.parse(item);\r\n if (parsedValue.constructor == Object) {\r\n return parsedValue;\r\n }\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function loadArray(id: string, defaultValue: Readonly | null = null): T[] | null {\r\n const item = SaveUtils.loadString(id);\r\n\r\n if (item != null) {\r\n try {\r\n const parsedValue = JSON.parse(item);\r\n if (Array.isArray(parsedValue)) {\r\n return parsedValue;\r\n }\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n }\r\n\r\n return defaultValue as T[] | null;\r\n}\r\n\r\nexport const SaveUtils = {\r\n save,\r\n has,\r\n remove,\r\n clear,\r\n load,\r\n loadString,\r\n loadNumber,\r\n loadBool,\r\n loadObject,\r\n loadArray\r\n} as const;", "import { Emitter } from \"@wonderlandengine/api\";\r\n\r\nexport class Timer {\r\n\r\n constructor(duration, autoStart = true) {\r\n this._myDuration = duration;\r\n this._myOnEndEmitter = new Emitter(); // Signature: listener()\r\n\r\n this._myDone = false;\r\n this._myJustDone = false;\r\n this._myStarted = false;\r\n\r\n if (autoStart) {\r\n this.start();\r\n } else {\r\n this.reset();\r\n }\r\n }\r\n\r\n start(duration = null) {\r\n this.reset(duration);\r\n this._myStarted = true;\r\n }\r\n\r\n end() {\r\n this._done();\r\n }\r\n\r\n reset(duration = null) {\r\n if (duration != null) {\r\n this._myDuration = Math.max(0, duration);\r\n }\r\n\r\n this._myTimeLeft = this._myDuration;\r\n this._myDone = false;\r\n this._myJustDone = false;\r\n this._myStarted = false;\r\n }\r\n\r\n update(dt) {\r\n this._myJustDone = false;\r\n\r\n if (this.isRunning()) {\r\n this._myTimeLeft = Math.max(0, this._myTimeLeft - dt);\r\n if (this._myTimeLeft == 0) {\r\n this._done();\r\n }\r\n }\r\n }\r\n\r\n isDone() {\r\n return this._myDone;\r\n }\r\n\r\n isJustDone() {\r\n return this._myJustDone;\r\n }\r\n\r\n isStarted() {\r\n return this._myStarted;\r\n }\r\n\r\n isRunning() {\r\n return this.isStarted() && !this.isDone();\r\n }\r\n\r\n getDuration() {\r\n return this._myDuration;\r\n }\r\n\r\n setDuration(duration) {\r\n const newDuration = Math.max(0, duration);\r\n\r\n if (this.isRunning()) {\r\n const timeElapsed = Math.max(0, this._myDuration - this._myTimeLeft);\r\n this._myTimeLeft = Math.max(0, newDuration - timeElapsed);\r\n }\r\n\r\n this._myDuration = newDuration;\r\n }\r\n\r\n getTimeLeft() {\r\n return this._myTimeLeft;\r\n }\r\n\r\n setTimeLeft(timeLeft) {\r\n if (this.isRunning()) {\r\n this._myTimeLeft = Math.max(0, timeLeft);\r\n\r\n if (this._myTimeLeft > this._myDuration) {\r\n this._myDuration = this._myTimeLeft;\r\n }\r\n }\r\n }\r\n\r\n getTimeElapsed() {\r\n let timeElapsed = 0;\r\n if (this.isRunning()) {\r\n timeElapsed = this._myDuration - this._myTimeLeft;\r\n }\r\n return Math.max(0, timeElapsed);\r\n }\r\n\r\n setTimeElapsed(timeElapsed) {\r\n this.setTimeLeft(this._myDuration - Math.max(0, timeElapsed));\r\n }\r\n\r\n getPercentage() {\r\n let percentage = 1;\r\n if (this._myTimeLeft > 0 && this._myDuration > 0) {\r\n percentage = (this._myDuration - this._myTimeLeft) / this._myDuration;\r\n }\r\n return Math.pp_clamp(percentage, 0, 1);\r\n }\r\n\r\n setPercentage(percentage) {\r\n if (this.isRunning()) {\r\n let durationPercentage = Math.pp_clamp(1 - percentage, 0, 1);\r\n this._myTimeLeft = this._myDuration * durationPercentage;\r\n }\r\n }\r\n\r\n onEnd(listener, id = null) {\r\n this._myOnEndEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterOnEnd(id = null) {\r\n this._myOnEndEmitter.remove(id);\r\n }\r\n\r\n _done() {\r\n this._myTimeLeft = 0;\r\n this._myDone = true;\r\n this._myJustDone = true;\r\n\r\n this._myOnEndEmitter.notify();\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ObjectPoolManager } from \"../object_pool_manager.js\";\r\n\r\nexport class ObjectPoolManagerComponent extends Component {\r\n static TypeName = \"pp-object-pools-manager\";\r\n\r\n init() {\r\n this._myObjectPoolManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasObjectPoolManager(this.engine)) {\r\n this._myObjectPoolManager = new ObjectPoolManager();\r\n\r\n Globals.setObjectPoolManager(this._myObjectPoolManager, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myObjectPoolManager != null && Globals.getObjectPoolManager(this.engine) == this._myObjectPoolManager) {\r\n Globals.removeObjectPoolManager(this.engine);\r\n }\r\n }\r\n}", "export class ObjectPoolManager {\r\n\r\n constructor() {\r\n this._myPools = new Map();\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n addPool(poolID, pool) {\r\n if (!this._myPools.has(poolID)) {\r\n this._myPools.set(poolID, pool);\r\n } else {\r\n console.warn(\"Trying to add a Pool with an ID that has been already used:\", poolID);\r\n }\r\n }\r\n\r\n destroyPool(poolID) {\r\n let poolToRemove = this._myPools.get(poolID);\r\n if (poolToRemove != null) {\r\n this._myPools.delete(poolID);\r\n poolToRemove.destroy();\r\n }\r\n }\r\n\r\n getPool(poolID) {\r\n return this._myPools.get(poolID);\r\n }\r\n\r\n hasPool(poolID) {\r\n return this._myPools.has(poolID);\r\n }\r\n\r\n get(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).get();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n has(poolIDOrObject, object = undefined) {\r\n let hasObject = false;\r\n\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n if (pool.has(poolIDOrObject)) {\r\n hasObject = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n hasObject = this._myPools.get(poolIDOrObject).has(object);\r\n }\r\n\r\n return hasObject;\r\n }\r\n\r\n isBusy(poolIDOrObject, object = undefined) {\r\n let busy = false;\r\n\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n if (pool.isBusy(poolIDOrObject)) {\r\n busy = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n busy = this._myPools.get(poolIDOrObject).isBusy(object);\r\n }\r\n\r\n return busy;\r\n }\r\n\r\n isAvailable(poolIDOrObject, object = undefined) {\r\n let available = false;\r\n\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n if (pool.isAvailable(poolIDOrObject)) {\r\n available = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n available = this._myPools.get(poolIDOrObject).isAvailable(object);\r\n }\r\n\r\n return available;\r\n }\r\n\r\n release(poolIDOrObject, object = undefined) {\r\n if (object == null) {\r\n for (let pool of this._myPools.values()) {\r\n pool.release(poolIDOrObject);\r\n }\r\n } else {\r\n this._myPools.get(poolIDOrObject).release(object);\r\n }\r\n }\r\n\r\n releaseAll(poolID = undefined) {\r\n if (poolID == null) {\r\n for (let pool of this._myPools.values()) {\r\n pool.releaseAll();\r\n }\r\n } else {\r\n this._myPools.get(poolID).releaseAll();\r\n }\r\n }\r\n\r\n increase(poolID, amount) {\r\n let pool = this._myPools.get(poolID);\r\n if (pool) {\r\n pool.increase(amount);\r\n }\r\n }\r\n\r\n increasePercentage(poolID, percentage) {\r\n let pool = this._myPools.get(poolID);\r\n if (pool) {\r\n pool.increasePercentage(percentage);\r\n }\r\n }\r\n\r\n getSize(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).getSize();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getAvailableSize(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).getAvailableSize();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getBusySize(poolID) {\r\n if (this._myPools.has(poolID)) {\r\n return this._myPools.get(poolID).getBusySize();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let pool of this._myPools.values()) {\r\n pool.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualManager } from \"../visual_manager.js\";\r\nimport { VisualResources } from \"../visual_resources.js\";\r\n\r\nexport class VisualManagerComponent extends Component {\r\n static TypeName = \"pp-visual-manager\";\r\n\r\n init() {\r\n this._myVisualManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasVisualManager(this.engine)) {\r\n this._myVisualManager = new VisualManager(this.engine);\r\n\r\n Globals.setVisualManager(this._myVisualManager, this.engine);\r\n }\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasVisualResources(this.engine)) {\r\n this._myVisualResources = new VisualResources();\r\n\r\n Globals.setVisualResources(this._myVisualResources, this.engine);\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myVisualResources != null) {\r\n this._myVisualResources.myDefaultMaterials.myMesh = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n\r\n this._myVisualResources.myDefaultMaterials.myText = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n\r\n this._myVisualResources.myDefaultMaterials.myRight = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myRight.color = vec4_create(1, 0, 0, 1);\r\n this._myVisualResources.myDefaultMaterials.myUp = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myUp.color = vec4_create(0, 1, 0, 1);\r\n this._myVisualResources.myDefaultMaterials.myForward = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myForward.color = vec4_create(0, 0, 1, 1);\r\n\r\n this._myVisualResources.myDefaultMaterials.myRay = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myRay.color = vec4_create(0, 1, 0, 1);\r\n this._myVisualResources.myDefaultMaterials.myHitNormal = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n this._myVisualResources.myDefaultMaterials.myHitNormal.color = vec4_create(1, 0, 0, 1);\r\n }\r\n\r\n if (this.myVisualManager != null) {\r\n this.myVisualManager.start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this.myVisualManager != null) {\r\n this.myVisualManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myVisualManager != null && Globals.getVisualManager(this.engine) == this._myVisualManager) {\r\n Globals.removeVisualManager(this.engine);\r\n\r\n this._myVisualManager.destroy();\r\n }\r\n\r\n if (this._myVisualResources != null && Globals.getVisualResources(this.engine) == this._myVisualResources) {\r\n Globals.removeVisualResources(this.engine);\r\n }\r\n }\r\n}", "import { mat3 as gl_mat3, quat as gl_quat, type mat3 as gl_mat3_type, type quat as gl_quat_type } from \"gl-matrix\";\r\nimport { Matrix3, Quaternion, Vector3 } from \"../../type_definitions/array_type_definitions.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\nimport { Vec3Utils } from \"./vec3_utils.js\";\r\n\r\nexport function create(): Matrix3;\r\nexport function create(m00: number, m01: number, m02: number, m10: number, m11: number, m12: number, m20: number, m21: number, m22: number): Matrix3;\r\nexport function create(uniformValue: number): Matrix3;\r\nexport function create(\r\n m00?: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): Matrix3 {\r\n\r\n const out = gl_mat3.create() as unknown as Matrix3;\r\n\r\n if (m00 != null) {\r\n set(out,\r\n m00, m01!, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(matrix: T, m00: number, m01: number, m02: number, m10: number, m11: number, m12: number, m20: number, m21: number, m22: number): T;\r\nexport function set(matrix: T, uniformValue: number): T;\r\nexport function set(matrix: T,\r\n m00: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): T {\r\n\r\n if (m01 == null) {\r\n gl_mat3.set(matrix as unknown as gl_mat3_type,\r\n m00!, m00, m00,\r\n m00, m00, m00,\r\n m00, m00, m00);\r\n } else {\r\n gl_mat3.set(matrix as unknown as gl_mat3_type,\r\n m00, m01, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!);\r\n }\r\n\r\n return matrix;\r\n}\r\n\r\nexport function copy(from: Readonly, to: T): T {\r\n gl_mat3.copy(to as unknown as gl_mat3_type, from as unknown as gl_mat3_type);\r\n return to;\r\n}\r\n\r\n/** The overload where `T extends Vector2` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `T` when `Readonly` is used */\r\nexport function clone(matrix: Readonly): T;\r\nexport function clone(matrix: Readonly): number[];\r\nexport function clone(matrix: T): T;\r\nexport function clone(matrix: Readonly): T {\r\n return matrix.slice(0) as T;\r\n}\r\n\r\nexport const toDegrees = function () {\r\n const quat = quat_utils_create();\r\n\r\n function toDegrees(matrix: Readonly): Vector3;\r\n function toDegrees(matrix: Readonly, out: T): T;\r\n function toDegrees(matrix: Readonly, out: Vector3 | T = Vec3Utils.create()): Vector3 | T {\r\n Mat3Utils.toQuat(matrix, quat);\r\n QuatUtils.toDegrees(quat, out);\r\n return out;\r\n }\r\n\r\n return toDegrees;\r\n}();\r\n\r\nexport const toRadians = function () {\r\n const quat = quat_utils_create();\r\n\r\n function toRadians(matrix: Readonly): Vector3;\r\n function toRadians(matrix: Readonly, out: T): T;\r\n function toRadians(matrix: Readonly, out: Vector3 | T = Vec3Utils.create()): Vector3 | T {\r\n Mat3Utils.toQuat(matrix, quat);\r\n QuatUtils.toRadians(quat, out);\r\n return out;\r\n }\r\n\r\n return toRadians;\r\n}();\r\n\r\nexport function toQuat(matrix: Readonly): Quaternion;\r\nexport function toQuat(matrix: Readonly, out: T): T;\r\nexport function toQuat(matrix: Readonly, out: Quaternion | T = QuatUtils.create()): Quaternion | T {\r\n gl_quat.fromMat3(out as unknown as gl_quat_type, matrix as unknown as gl_mat3_type);\r\n return out;\r\n}\r\n\r\nexport function fromAxes(leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly): Matrix3;\r\nexport function fromAxes(leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly, out: T): T;\r\nexport function fromAxes(leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly, out: Matrix3 | T = Mat3Utils.create()): Matrix3 | T {\r\n Mat3Utils.set(out,\r\n leftAxis[0], leftAxis[1], leftAxis[2],\r\n upAxis[0], upAxis[1], upAxis[2],\r\n forwardAxis[0], forwardAxis[1], forwardAxis[2]);\r\n return out;\r\n}\r\n\r\nexport const Mat3Utils = {\r\n create,\r\n set,\r\n copy,\r\n clone,\r\n toDegrees,\r\n toRadians,\r\n toQuat,\r\n fromAxes\r\n} as const;", "import { mat3 as gl_mat3, quat as gl_quat } from \"gl-matrix\";\r\nimport { EasingFunction, MathUtils } from \"../math_utils.js\";\r\nimport { ArrayUtils } from \"./array_utils.js\";\r\nimport { Mat3Utils, create as mat3_utils_create } from \"./mat3_utils.js\";\r\nimport { Vec3Utils, create as vec3_utils_create } from \"./vec3_utils.js\";\r\n\r\n/**\r\n * TS type inference helper\r\n * \r\n * @return {any}\r\n */\r\nexport function create(x, y, z, w) {\r\n let out = gl_quat.create();\r\n\r\n if (x != null) {\r\n QuatUtils.set(out, x, y, z, w);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(quat, x, y, z, w) {\r\n if (y == null) {\r\n gl_quat.set(quat, x, x, x, x);\r\n } else {\r\n gl_quat.set(quat, x, y, z, w);\r\n }\r\n\r\n return quat;\r\n}\r\n\r\nexport function normalize(quat, out = QuatUtils.create()) {\r\n gl_quat.normalize(out, quat);\r\n return out;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_quat.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function clone(quat, out = QuatUtils.create()) {\r\n QuatUtils.copy(quat, out);\r\n return out;\r\n}\r\n\r\nexport function identity(quat) {\r\n gl_quat.identity(quat);\r\n return quat;\r\n}\r\n\r\nexport function length(quat) {\r\n return gl_quat.length(quat);\r\n}\r\n\r\nexport function lengthSquared(quat) {\r\n return gl_quat.squaredLength(quat);\r\n}\r\n\r\nexport function invert(quat, out = QuatUtils.create()) {\r\n gl_quat.invert(out, quat);\r\n return out;\r\n}\r\n\r\nexport function conjugate(quat, out = QuatUtils.create()) {\r\n gl_quat.conjugate(out, quat);\r\n return out;\r\n}\r\n\r\nexport function mul(first, second, out = QuatUtils.create()) {\r\n gl_quat.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport let getAxis = function () {\r\n let zero = vec3_utils_create(0, 0, 0);\r\n return function getAxis(quat, out = Vec3Utils.create()) {\r\n let angle = gl_quat.getAxisAngle(out, quat);\r\n if (angle <= MathUtils.EPSILON) {\r\n Vec3Utils.copy(zero, out);\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getAngle(quat) {\r\n return QuatUtils.getAngleDegrees(quat);\r\n}\r\n\r\nexport function getAngleDegrees(quat) {\r\n let angle = QuatUtils.getAngleRadians(quat);\r\n return MathUtils.toDegrees(angle);\r\n}\r\n\r\nexport let getAngleRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function getAngleRadians(quat) {\r\n let angle = gl_quat.getAxisAngle(vector, quat);\r\n return angle;\r\n };\r\n}();\r\n\r\nexport function getAxisScaled(quat, out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaledDegrees(quat, out);\r\n}\r\n\r\nexport function getAxisScaledDegrees(quat, out = Vec3Utils.create()) {\r\n QuatUtils.getAxis(quat, out);\r\n let angle = QuatUtils.getAngleDegrees(quat);\r\n Vec3Utils.scale(out, angle, out);\r\n return out;\r\n}\r\n\r\nexport let getAxisScaledRadians = function () {\r\n let zero = vec3_utils_create(0, 0, 0);\r\n return function getAxisScaledRadians(quat, out = Vec3Utils.create()) {\r\n QuatUtils.getAxis(quat, out);\r\n let angle = QuatUtils.getAngleRadians(quat);\r\n if (angle <= MathUtils.EPSILON) {\r\n Vec3Utils.copy(zero, out);\r\n } else {\r\n Vec3Utils.scale(out, angle, out);\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getAxes(quat, out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n QuatUtils.getLeft(quat, out[0]);\r\n QuatUtils.getUp(quat, out[1]);\r\n QuatUtils.getForward(quat, out[2]);\r\n return out;\r\n}\r\n\r\nexport let getForward = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getForward(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[6], rotationMatrix[7], rotationMatrix[8]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getBackward(quat, out) {\r\n out = QuatUtils.getForward(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getLeft = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getLeft(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[0], rotationMatrix[1], rotationMatrix[2]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getRight(quat, out) {\r\n out = QuatUtils.getLeft(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getUp = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getUp(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[3], rotationMatrix[4], rotationMatrix[5]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getDown(quat, out) {\r\n out = QuatUtils.getUp(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function setAxes(quat, left, up, forward) {\r\n if (forward != null) {\r\n return QuatUtils.setForward(quat, forward, up, left);\r\n } else if (up != null) {\r\n return QuatUtils.setUp(quat, up, forward, left);\r\n } else {\r\n return QuatUtils.setLeft(quat, left, up, forward);\r\n }\r\n}\r\n\r\nexport let setForward = function () {\r\n let axes = [null, null, null];\r\n let priority = [2, 1, 0];\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @param {any} up\r\n */\r\n return function setForward(quat, forward, up = null, left = null) {\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setBackward = function () {\r\n let forward = vec3_utils_create();\r\n\r\n let axes = [null, null, null];\r\n let priority = [2, 1, 0];\r\n return function setBackward(quat, backward, up = null, left = null) {\r\n Vec3Utils.negate(backward, forward);\r\n\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setUp = function () {\r\n let axes = [null, null, null];\r\n let priority = [1, 2, 0];\r\n return function setUp(quat, up, forward = null, left = null) {\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setDown = function () {\r\n let up = vec3_utils_create();\r\n\r\n let axes = [null, null, null];\r\n let priority = [1, 2, 0];\r\n return function setDown(quat, down, forward = null, left = null) {\r\n Vec3Utils.negate(down, up);\r\n\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setLeft = function () {\r\n let axes = [null, null, null];\r\n let priority = [0, 1, 2];\r\n return function setLeft(quat, left, up = null, forward = null) {\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport let setRight = function () {\r\n let left = vec3_utils_create();\r\n\r\n let axes = [null, null, null];\r\n let priority = [0, 1, 2];\r\n return function setRight(quat, right, up = null, forward = null) {\r\n Vec3Utils.negate(right, left);\r\n\r\n axes[0] = left;\r\n axes[1] = up;\r\n axes[2] = forward;\r\n\r\n let result = _setAxes(quat, axes, priority);\r\n\r\n axes[0] = null;\r\n axes[1] = null;\r\n axes[2] = null;\r\n\r\n return result;\r\n };\r\n}();\r\n\r\nexport function toWorld(quat, parentQuat, out = QuatUtils.create()) {\r\n QuatUtils.mul(parentQuat, quat, out);\r\n return out;\r\n}\r\n\r\nexport let toLocal = function () {\r\n let invertQuat = create();\r\n return function toLocal(quat, parentQuat, out = QuatUtils.create()) {\r\n QuatUtils.conjugate(parentQuat, invertQuat);\r\n QuatUtils.mul(invertQuat, quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function fromAxis(angle, axis, out = QuatUtils.create()) {\r\n return QuatUtils.fromAxisDegrees(angle, axis, out);\r\n}\r\n\r\nexport function fromAxisDegrees(angle, axis, out = QuatUtils.create()) {\r\n QuatUtils.fromAxisRadians(MathUtils.toRadians(angle), axis, out);\r\n return out;\r\n}\r\n\r\nexport function fromAxisRadians(angle, axis, out = QuatUtils.create()) {\r\n gl_quat.setAxisAngle(out, axis, angle);\r\n return out;\r\n}\r\n\r\nexport let fromAxes = function () {\r\n let matrix = mat3_utils_create();\r\n return function fromAxes(leftAxis, upAxis, forwardAxis, out = QuatUtils.create()) {\r\n Mat3Utils.fromAxes(leftAxis, upAxis, forwardAxis, matrix);\r\n return Mat3Utils.toQuat(matrix, out);\r\n };\r\n}();\r\n\r\nexport let fromRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function fromRadians(radiansRotation, out = QuatUtils.create()) {\r\n Vec3Utils.toDegrees(radiansRotation, vector);\r\n return QuatUtils.fromDegrees(vector, out);\r\n };\r\n}();\r\n\r\nexport function fromDegrees(degreesRotation, out = QuatUtils.create()) {\r\n gl_quat.fromEuler(out, degreesRotation[0], degreesRotation[1], degreesRotation[2]);\r\n return out;\r\n}\r\n\r\nexport let toRadians = function () {\r\n let matrix = mat3_utils_create();\r\n return function toRadians(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, matrix);\r\n\r\n // Rotation order is ZYX \r\n out[1] = Math.asin(-MathUtils.clamp(matrix[2], -1, 1));\r\n\r\n if (Math.abs(matrix[2]) < (1 - MathUtils.EPSILON)) {\r\n out[0] = Math.atan2(matrix[5], matrix[8]);\r\n out[2] = Math.atan2(matrix[1], matrix[0]);\r\n } else {\r\n out[0] = 0;\r\n out[2] = Math.atan2(-matrix[3], matrix[4]);\r\n }\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function toDegrees(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toRadians(quat, out);\r\n Vec3Utils.toDegrees(out, out);\r\n return out;\r\n}\r\n\r\nexport function isNormalized(quat, epsilon = MathUtils.EPSILON) {\r\n return Math.abs(QuatUtils.lengthSquared(quat) - 1) < epsilon;\r\n}\r\n\r\nexport function addRotation(first, second, out) {\r\n return QuatUtils.addRotationDegrees(first, second, out);\r\n}\r\n\r\nexport let addRotationDegrees = function () {\r\n let secondQuat = create();\r\n return function addRotationDegrees(first, second, out) {\r\n Vec3Utils.degreesToQuat(second, secondQuat);\r\n return QuatUtils.addRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let addRotationRadians = function () {\r\n let secondQuat = create();\r\n return function addRotationRadians(first, second, out) {\r\n Vec3Utils.radiansToQuat(second, secondQuat);\r\n return QuatUtils.addRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport function addRotationQuat(first, second, out = QuatUtils.create()) {\r\n QuatUtils.mul(second, first, out);\r\n return out;\r\n}\r\n\r\nexport function subRotation(first, second, out) {\r\n return QuatUtils.subRotationDegrees(first, second, out);\r\n}\r\n\r\nexport let subRotationDegrees = function () {\r\n let secondQuat = create();\r\n return function subRotationDegrees(first, second, out) {\r\n Vec3Utils.degreesToQuat(second, secondQuat);\r\n return QuatUtils.subRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let subRotationRadians = function () {\r\n let secondQuat = create();\r\n return function subRotationRadians(first, second, out) {\r\n Vec3Utils.radiansToQuat(second, secondQuat);\r\n return QuatUtils.subRotationQuat(first, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let subRotationQuat = function () {\r\n let inverse = create();\r\n return function subRotationQuat(first, second, out = QuatUtils.create()) {\r\n QuatUtils.invert(second, inverse);\r\n QuatUtils.mul(first, inverse, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function rotationTo(from, to, out) {\r\n return QuatUtils.rotationToDegrees(from, to, out);\r\n}\r\n\r\nexport let rotationToDegrees = function () {\r\n let toQuat = create();\r\n return function rotationToDegrees(from, to, out) {\r\n Vec3Utils.degreesToQuat(to, toQuat);\r\n return QuatUtils.rotationToQuat(from, toQuat, out);\r\n };\r\n}();\r\n\r\nexport let rotationToRadians = function () {\r\n let toQuat = create();\r\n return function rotationToRadians(from, to, out) {\r\n Vec3Utils.radiansToQuat(to, toQuat);\r\n return QuatUtils.rotationToQuat(from, toQuat, out);\r\n };\r\n}();\r\n\r\nexport function rotationToQuat(from, to, out) {\r\n return QuatUtils.normalize(QuatUtils.subRotationQuat(to, from, out), out);\r\n}\r\n\r\nexport function rotationAroundAxis(quat, axis, out) {\r\n return QuatUtils.rotationAroundAxisDegrees(quat, axis, out);\r\n}\r\n\r\nexport let rotationAroundAxisDegrees = function () {\r\n let rotationAroundQuat = create();\r\n return function rotationAroundAxisDegrees(quat, axis, out = Vec3Utils.create()) {\r\n QuatUtils.rotationAroundAxisQuat(quat, axis, rotationAroundQuat);\r\n return QuatUtils.toDegrees(rotationAroundQuat, out);\r\n };\r\n}();\r\n\r\nexport let rotationAroundAxisRadians = function () {\r\n let rotationAroundQuat = create();\r\n return function rotationAroundAxisRadians(quat, axis, out = Vec3Utils.create()) {\r\n QuatUtils.rotationAroundAxisQuat(quat, axis, rotationAroundQuat);\r\n return QuatUtils.toRadians(rotationAroundQuat, out);\r\n };\r\n}();\r\n\r\nexport function rotationAroundAxisQuat(quat, axis, out = QuatUtils.create()) {\r\n return QuatUtils.getTwist(quat, axis, out);\r\n}\r\n\r\nexport let getTwist = function () {\r\n let rotationAxis = vec3_utils_create();\r\n let projection = vec3_utils_create();\r\n let rotationAlongAxis = create();\r\n return function getTwist(quat, axis, out = QuatUtils.create()) {\r\n rotationAxis[0] = quat[0];\r\n rotationAxis[1] = quat[1];\r\n rotationAxis[2] = quat[2];\r\n\r\n let dotProd = Vec3Utils.dot(axis, rotationAxis);\r\n Vec3Utils.scale(axis, dotProd, projection);\r\n rotationAlongAxis[0] = projection[0];\r\n rotationAlongAxis[1] = projection[1];\r\n rotationAlongAxis[2] = projection[2];\r\n rotationAlongAxis[3] = quat[3];\r\n QuatUtils.normalize(rotationAlongAxis, rotationAlongAxis);\r\n if (dotProd < 0) {\r\n rotationAlongAxis[0] = -rotationAlongAxis[0];\r\n rotationAlongAxis[1] = -rotationAlongAxis[1];\r\n rotationAlongAxis[2] = -rotationAlongAxis[2];\r\n rotationAlongAxis[3] = -rotationAlongAxis[3];\r\n }\r\n\r\n return QuatUtils.copy(rotationAlongAxis, out);\r\n };\r\n}();\r\n\r\nexport let getSwing = function () {\r\n let twist = create();\r\n return function getSwing(quat, axis, out = QuatUtils.create()) {\r\n QuatUtils.getTwist(quat, axis, twist);\r\n QuatUtils.getSwingFromTwist(quat, twist, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getSwingFromTwist(quat, twist, out = QuatUtils.create()) {\r\n return QuatUtils.subRotationQuat(quat, twist, out);\r\n}\r\n\r\nexport let getTwistFromSwing = function () {\r\n let inverse = create();\r\n return function getTwistFromSwing(quat, swing, out = QuatUtils.create()) {\r\n QuatUtils.conjugate(swing, inverse);\r\n QuatUtils.addRotationQuat(quat, inverse, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function fromTwistSwing(twist, swing, out = QuatUtils.create()) {\r\n return QuatUtils.addRotationQuat(twist, swing, out);\r\n}\r\n\r\nexport function toMatrix(quat, out = Mat3Utils.create()) {\r\n gl_mat3.fromQuat(out, quat);\r\n return out;\r\n}\r\n\r\nexport function rotate(first, second, out) {\r\n return QuatUtils.rotateDegrees(first, second, out);\r\n}\r\n\r\nexport function rotateDegrees(first, second, out) {\r\n return QuatUtils.addRotationDegrees(first, second, out);\r\n}\r\n\r\nexport function rotateRadians(first, second, out) {\r\n return QuatUtils.addRotationRadians(first, second, out);\r\n}\r\n\r\nexport function rotateQuat(first, second, out) {\r\n return QuatUtils.addRotationQuat(first, second, out);\r\n}\r\n\r\nexport function rotateAxis(quat, angle, axis, out) {\r\n return QuatUtils.rotateAxisDegrees(quat, angle, axis, out);\r\n}\r\n\r\nexport let rotateAxisDegrees = function () {\r\n let secondQuat = create();\r\n return function rotateAxisDegrees(quat, angle, axis, out) {\r\n QuatUtils.fromAxisDegrees(angle, axis, secondQuat);\r\n return QuatUtils.rotateQuat(quat, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport let rotateAxisRadians = function () {\r\n let secondQuat = create();\r\n return function rotateAxisRadians(quat, angle, axis, out) {\r\n QuatUtils.fromAxisRadians(angle, axis, secondQuat);\r\n return QuatUtils.rotateQuat(quat, secondQuat, out);\r\n };\r\n}();\r\n\r\nexport function lerp(from, to, interpolationFactor, out = QuatUtils.create()) {\r\n if (interpolationFactor <= 0) {\r\n QuatUtils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n QuatUtils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_quat.lerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function interpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return QuatUtils.lerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport function slerp(from, to, interpolationFactor, out = QuatUtils.create()) {\r\n if (interpolationFactor <= 0) {\r\n QuatUtils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n QuatUtils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_quat.slerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function sinterpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return QuatUtils.slerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let QuatUtils = {\r\n create,\r\n set,\r\n normalize,\r\n copy,\r\n clone,\r\n identity,\r\n length,\r\n lengthSquared,\r\n invert,\r\n conjugate,\r\n mul,\r\n getAxis,\r\n getAngle,\r\n getAngleDegrees,\r\n getAngleRadians,\r\n getAxisScaled,\r\n getAxisScaledDegrees,\r\n getAxisScaledRadians,\r\n getAxes,\r\n getForward,\r\n getBackward,\r\n getLeft,\r\n getRight,\r\n getUp,\r\n getDown,\r\n setAxes,\r\n setForward,\r\n setBackward,\r\n setUp,\r\n setDown,\r\n setLeft,\r\n setRight,\r\n toWorld,\r\n toLocal,\r\n fromAxis,\r\n fromAxisDegrees,\r\n fromAxisRadians,\r\n fromAxes,\r\n fromRadians,\r\n fromDegrees,\r\n toRadians,\r\n toDegrees,\r\n isNormalized,\r\n addRotation,\r\n addRotationDegrees,\r\n addRotationRadians,\r\n addRotationQuat,\r\n subRotation,\r\n subRotationDegrees,\r\n subRotationRadians,\r\n subRotationQuat,\r\n rotationTo,\r\n rotationToDegrees,\r\n rotationToRadians,\r\n rotationToQuat,\r\n rotationAroundAxis,\r\n rotationAroundAxisDegrees,\r\n rotationAroundAxisRadians,\r\n rotationAroundAxisQuat,\r\n getTwist,\r\n getSwing,\r\n getSwingFromTwist,\r\n getTwistFromSwing,\r\n fromTwistSwing,\r\n toMatrix,\r\n rotate,\r\n rotateDegrees,\r\n rotateRadians,\r\n rotateQuat,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n lerp,\r\n interpolate,\r\n slerp,\r\n sinterpolate\r\n};\r\n\r\n\r\n\r\nlet _setAxes = function () {\r\n let fixedAxes = [vec3_utils_create(), vec3_utils_create(), vec3_utils_create()];\r\n\r\n let fixedAxesFixSignMap = [\r\n [1, -1, 1],\r\n [1, 1, -1],\r\n [-1, 1, -1]\r\n ];\r\n\r\n let fixedLeft = vec3_utils_create();\r\n let fixedUp = vec3_utils_create();\r\n let fixedForward = vec3_utils_create();\r\n\r\n let currentAxis = vec3_utils_create();\r\n\r\n let rotationAxis = vec3_utils_create();\r\n let rotationMat = mat3_utils_create();\r\n let rotationQuat = create();\r\n return function _setAxes(quat, axes, priority) {\r\n let firstAxis = axes[priority[0]];\r\n let secondAxis = axes[priority[1]];\r\n let thirdAxis = axes[priority[2]];\r\n\r\n if (firstAxis == null || Vec3Utils.isZero(firstAxis, MathUtils.EPSILON)) {\r\n return;\r\n }\r\n\r\n let secondAxisValid = false;\r\n if (secondAxis != null) {\r\n let angleBetween = Vec3Utils.angleRadians(firstAxis, secondAxis);\r\n if (angleBetween > MathUtils.EPSILON) {\r\n secondAxisValid = true;\r\n }\r\n }\r\n\r\n let thirdAxisValid = false;\r\n if (thirdAxis != null) {\r\n let angleBetween = Vec3Utils.angleRadians(firstAxis, thirdAxis);\r\n if (angleBetween > MathUtils.EPSILON) {\r\n thirdAxisValid = true;\r\n }\r\n }\r\n\r\n if (secondAxisValid || thirdAxisValid) {\r\n let crossAxis = null;\r\n let secondAxisIndex = null;\r\n let thirdAxisIndex = null;\r\n if (secondAxisValid) {\r\n crossAxis = secondAxis;\r\n secondAxisIndex = 1;\r\n thirdAxisIndex = 2;\r\n } else {\r\n crossAxis = thirdAxis;\r\n secondAxisIndex = 2;\r\n thirdAxisIndex = 1;\r\n }\r\n\r\n let fixSignMap = fixedAxesFixSignMap[priority[0]];\r\n\r\n Vec3Utils.cross(firstAxis, crossAxis, fixedAxes[thirdAxisIndex]);\r\n Vec3Utils.scale(fixedAxes[thirdAxisIndex], fixSignMap[priority[thirdAxisIndex]], fixedAxes[thirdAxisIndex]);\r\n\r\n Vec3Utils.cross(firstAxis, fixedAxes[thirdAxisIndex], fixedAxes[secondAxisIndex]);\r\n Vec3Utils.scale(fixedAxes[secondAxisIndex], fixSignMap[priority[secondAxisIndex]], fixedAxes[secondAxisIndex]);\r\n\r\n Vec3Utils.cross(fixedAxes[1], fixedAxes[2], fixedAxes[0]);\r\n Vec3Utils.scale(fixedAxes[0], fixSignMap[priority[0]], fixedAxes[0]);\r\n\r\n Vec3Utils.normalize(fixedAxes[ArrayUtils.findIndexEqual(priority, 0)], fixedLeft);\r\n Vec3Utils.normalize(fixedAxes[ArrayUtils.findIndexEqual(priority, 1)], fixedUp);\r\n Vec3Utils.normalize(fixedAxes[ArrayUtils.findIndexEqual(priority, 2)], fixedForward);\r\n\r\n Mat3Utils.set(rotationMat,\r\n fixedLeft[0], fixedLeft[1], fixedLeft[2],\r\n fixedUp[0], fixedUp[1], fixedUp[2],\r\n fixedForward[0], fixedForward[1], fixedForward[2]\r\n );\r\n\r\n Mat3Utils.toQuat(rotationMat, rotationQuat);\r\n\r\n QuatUtils.copy(rotationQuat, quat);\r\n } else {\r\n if (priority[0] == 0) {\r\n QuatUtils.getLeft(quat, currentAxis);\r\n } else if (priority[0] == 1) {\r\n QuatUtils.getUp(quat, currentAxis);\r\n } else {\r\n QuatUtils.getForward(quat, currentAxis);\r\n }\r\n\r\n let angleBetween = Vec3Utils.angleRadians(firstAxis, currentAxis);\r\n if (angleBetween > MathUtils.EPSILON) {\r\n Vec3Utils.cross(currentAxis, firstAxis, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n\r\n if (Vec3Utils.isZero(rotationAxis)) {\r\n Vec3Utils.perpendicularRandom(currentAxis, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n }\r\n\r\n QuatUtils.fromAxisRadians(angleBetween, rotationAxis, rotationQuat);\r\n QuatUtils.rotateQuat(quat, rotationQuat, quat);\r\n }\r\n }\r\n\r\n return quat;\r\n };\r\n}();", "\r\n\r\nexport type EasingFunction = (valueToEase: number) => number;\r\n/** #CREDITS https://easings.net */\r\nexport const EasingFunction = {\r\n linear: (valueToEase: number): number => valueToEase,\r\n\r\n easeInVeryWeak: (valueToEase: number): number => 1 - Math.cos((valueToEase * Math.PI) / 2),\r\n easeInWeak: (valueToEase: number): number => Math.pow(valueToEase, 2),\r\n easeIn: (valueToEase: number): number => Math.pow(valueToEase, 3),\r\n easeInStrong: (valueToEase: number): number => Math.pow(valueToEase, 4),\r\n easeInVeryStrong: (valueToEase: number): number => Math.pow(valueToEase, 5),\r\n\r\n easeOutVeryWeak: (valueToEase: number): number => Math.sin((valueToEase * Math.PI) / 2),\r\n easeOutWeak: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 2),\r\n easeOut: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 3),\r\n easeOutStrong: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 4),\r\n easeOutVeryStrong: (valueToEase: number): number => 1 - Math.pow(1 - valueToEase, 5),\r\n\r\n easeInOutVeryWeak: (valueToEase: number): number => -(Math.cos(valueToEase * Math.PI) - 1) / 2,\r\n easeInOutWeak: (valueToEase: number): number => valueToEase < 0.5 ? 2 * Math.pow(valueToEase, 2) : 1 - Math.pow(-2 * valueToEase + 2, 2) / 2,\r\n easeInOut: (valueToEase: number): number => valueToEase < 0.5 ? 4 * Math.pow(valueToEase, 3) : 1 - Math.pow(-2 * valueToEase + 2, 3) / 2,\r\n easeInOutStrong: (valueToEase: number): number => valueToEase < 0.5 ? 8 * Math.pow(valueToEase, 4) : 1 - Math.pow(-2 * valueToEase + 2, 4) / 2,\r\n easeInOutVeryStrong: (valueToEase: number): number => valueToEase < 0.5 ? 16 * Math.pow(valueToEase, 5) : 1 - Math.pow(-2 * valueToEase + 2, 5) / 2\r\n} as const;\r\n\r\nexport type EasingSupportFunction = (inputValue: number) => number;\r\nexport const EasingSupportFunction = {\r\n triangleWave: (inputValue: number): number => (2 / Math.PI) * Math.asin(Math.sin((Math.PI / 2) * inputValue)),\r\n positiveTriangleWave: (inputValue: number): number => 1 - Math.abs((Math.abs(inputValue) % 2) - 1)\r\n} as const;\r\n\r\nexport const EPSILON: number = 0.000001;\r\nexport const EPSILON_SQUARED: number = EPSILON * EPSILON;\r\nexport const EPSILON_DEGREES: number = 0.00001;\r\n\r\nexport function clamp(value: number, start: number, end: number): number {\r\n const fixedStart = (start != null) ? start : -Number.MAX_VALUE;\r\n const fixedEnd = (end != null) ? end : Number.MAX_VALUE;\r\n\r\n const min = Math.min(fixedStart, fixedEnd);\r\n const max = Math.max(fixedStart, fixedEnd);\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nexport function sign(value: number, zeroSign: number = 1): number {\r\n let sign = Math.sign(value);\r\n if (sign == 0) {\r\n sign = Math.sign(zeroSign);\r\n }\r\n return sign;\r\n}\r\n\r\nexport function toDegrees(angle: number): number {\r\n return angle * (180 / Math.PI);\r\n}\r\n\r\nexport function toRadians(angle: number): number {\r\n return angle * (Math.PI / 180);\r\n}\r\n\r\nexport function roundDecimal(number: number, decimalPlaces: number): number {\r\n const factor = Math.pow(10, decimalPlaces);\r\n number = Math.round(number * factor) / factor;\r\n\r\n return number;\r\n}\r\n\r\n/** Start range value doesn't need to be lower than the end one, so you can map from `[0, 1]` to `[3, 2]`, where `3` is greater than `2` */\r\nexport function mapToRange(value: number, originRangeStart: number, originRangeEnd: number, newRangeStart: number, newRangeEnd: number): number {\r\n if (originRangeStart == originRangeEnd) {\r\n return newRangeStart;\r\n }\r\n\r\n const clampedValue = MathUtils.clamp(value, originRangeStart, originRangeEnd);\r\n\r\n if (clampedValue == originRangeStart) {\r\n return newRangeStart;\r\n } else if (clampedValue == originRangeEnd) {\r\n return newRangeEnd;\r\n }\r\n\r\n const newValue = newRangeStart + ((newRangeEnd - newRangeStart) / (originRangeEnd - originRangeStart)) * (clampedValue - originRangeStart);\r\n const clampedNewValue = MathUtils.clamp(newValue, newRangeStart, newRangeEnd);\r\n return clampedNewValue;\r\n}\r\n\r\n/** Range is `[start, end)` */\r\nexport function random(start = 0, end = 1): number {\r\n return Math.random() * (end - start) + start;\r\n}\r\n\r\n/** Range is `[start, end]` */\r\nexport function randomInt(start: number, end: number): number {\r\n const min = Math.min(start, end);\r\n const max = Math.max(start, end);\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n}\r\n\r\nexport function randomBool(): boolean {\r\n return MathUtils.randomInt(0, 1) == 0;\r\n}\r\n\r\n/** Return `1` or `-1` */\r\nexport function randomSign(): number {\r\n return (Math.random() < 0.5) ? 1 : -1;\r\n}\r\n\r\n/** You give it a list of parameters and returns a random one */\r\nexport function randomPick(...args: T[]): T | null {\r\n let random: T | null = null;\r\n\r\n if (args.length > 0) {\r\n if (args.length == 1 && (args[0] as T[]).length != null) {\r\n const arrayArg0 = args[0] as T[];\r\n if (arrayArg0.length > 0) {\r\n const randomIndex = MathUtils.randomInt(0, arrayArg0.length - 1);\r\n random = arrayArg0[randomIndex];\r\n }\r\n } else {\r\n const randomIndex = MathUtils.randomInt(0, args.length - 1);\r\n random = args[randomIndex];\r\n }\r\n }\r\n\r\n return random;\r\n}\r\n\r\nexport const randomUUID = function () {\r\n const uuidRandomValues = new Uint8Array(1);\r\n const uuidSkeleton = (1e7 + \"-\" + 1e3 + \"-\" + 4e3 + \"-\" + 8e3 + \"-\" + 1e11);\r\n const replaceUUIDSkeletonRegex = new RegExp(\"[018]\", \"g\");\r\n const replaceUUIDSkeletonCallback = function (charString: string): string {\r\n const digit = parseInt(charString.charAt(0));\r\n return (digit ^ ((crypto.getRandomValues(uuidRandomValues)[0] & 15)) >> (digit / 4)).toString(16);\r\n };\r\n return function randomUUID(): string {\r\n let uuid = \"\";\r\n\r\n if (crypto.randomUUID != null) {\r\n uuid = crypto.randomUUID();\r\n } else {\r\n uuid = uuidSkeleton.replace(replaceUUIDSkeletonRegex, replaceUUIDSkeletonCallback);\r\n }\r\n\r\n return uuid;\r\n };\r\n}();\r\n\r\n/** `[from, to]` range is mapped to an `interpolationFactor` in the range `[0, 1]` */\r\nexport function lerp(from: number, to: number, interpolationFactor: number): number {\r\n if (interpolationFactor <= 0) {\r\n return from;\r\n } else if (interpolationFactor >= 1) {\r\n return to;\r\n }\r\n\r\n return interpolationFactor * (to - from) + from;\r\n}\r\n\r\n/** `[from, to]` range is mapped to an `interpolationFactor` in the range `[0, 1]` */\r\nexport function interpolate(from: number, to: number, interpolationFactor: number, easingFunction: EasingFunction = EasingFunction.linear): number {\r\n const lerpFactor = easingFunction(interpolationFactor);\r\n return MathUtils.lerp(from, to, lerpFactor);\r\n}\r\n\r\n/** `[from, to]` range is mapped to an `interpolationFactor` in the range `[0, 1]` \r\n `interpolationFactor` can go outside the `[0, 1]` range, periodically repeating the interpolation in the given range */\r\nexport function interpolatePeriodic(from: number, to: number, interpolationFactor: number, easingFunction: EasingFunction = EasingFunction.linear): number {\r\n const adjustedInterpolationFactor = EasingSupportFunction.positiveTriangleWave(interpolationFactor);\r\n return MathUtils.interpolate(from, to, adjustedInterpolationFactor, easingFunction);\r\n}\r\n\r\nexport function angleDistance(from: number, to: number): number {\r\n return MathUtils.angleDistanceDegrees(from, to);\r\n}\r\n\r\nexport function angleDistanceDegrees(from: number, to: number): number {\r\n return Math.abs(MathUtils.angleDistanceSignedDegrees(from, to));\r\n}\r\n\r\nexport function angleDistanceRadians(from: number, to: number): number {\r\n return Math.abs(MathUtils.angleDistanceSignedRadians(from, to));\r\n}\r\n\r\nexport function angleDistanceSigned(from: number, to: number): number {\r\n return MathUtils.angleDistanceSignedDegrees(from, to);\r\n}\r\n\r\nexport function angleDistanceSignedDegrees(from: number, to: number): number {\r\n const clampedFrom = MathUtils.angleClampDegrees(from, true);\r\n const clampedTo = MathUtils.angleClampDegrees(to, true);\r\n\r\n let distance = clampedTo - clampedFrom;\r\n if (clampedTo - clampedFrom > 180) {\r\n distance = (clampedTo - clampedFrom) - 360;\r\n } else if (clampedTo - clampedFrom < -180) {\r\n distance = (clampedTo - clampedFrom) + 360;\r\n }\r\n\r\n return distance;\r\n}\r\n\r\nexport function angleDistanceSignedRadians(from: number, to: number): number {\r\n return MathUtils.toRadians(MathUtils.angleDistanceSignedDegrees(MathUtils.toDegrees(from), MathUtils.toDegrees(to)));\r\n}\r\n\r\n/** Clamp the angle to `-180 / +180`, so that, for example, `270` will be `-90` \r\n If `usePositiveRange` is `true`, the angle will be clamped to `0 / 360` */\r\nexport function angleClamp(angle: number, usePositiveRange = false): number {\r\n return MathUtils.angleClampDegrees(angle, usePositiveRange);\r\n}\r\n\r\n/** Clamp the angle to `-180 / +180`, so that, for example, `270` will be `-90` \r\n If `usePositiveRange` is `true`, the angle will be clamped to `0 / 360` */\r\nexport function angleClampDegrees(angle: number, usePositiveRange: boolean = false): number {\r\n let clampedAngle = angle % 360;\r\n\r\n if (clampedAngle < 0) {\r\n clampedAngle += 360;\r\n }\r\n\r\n if (!usePositiveRange) {\r\n if (clampedAngle > 180) {\r\n clampedAngle -= 360;\r\n }\r\n }\r\n\r\n return clampedAngle;\r\n}\r\n\r\n\r\n/** Clamp the angle to `-PI / +PI`, so that, for example, `1.5PI` will be `-0.5PI` \r\n If `usePositiveRange` is `true`, the angle will be clamped to `0 / 2PI` */\r\nexport function angleClampRadians(angle: number, usePositiveRange: boolean = false): number {\r\n return MathUtils.toRadians(MathUtils.angleClampDegrees(MathUtils.toDegrees(angle), usePositiveRange));\r\n}\r\n\r\n/** The range goes from `start` to `end` by going toward the positive direction (if `useShortestAngle` is `false`) \r\n `[20, 300]` is a `280` degrees range, `[300, 20]` is an `80` degrees range, \r\n `[-150, -170]` = `[210, 190]` is a `240` degrees range, \r\n `[0, -10]` = `[0, 350]` is a `350` degrees range */\r\nexport function isInsideAngleRange(angle: number, start: number, end: number, useShortestAngle: boolean = false): boolean {\r\n return MathUtils.isInsideAngleRangeDegrees(angle, start, end, useShortestAngle);\r\n}\r\n\r\nexport function isInsideAngleRangeDegrees(angle: number, start: number, end: number, useShortestAngle: boolean = false): boolean {\r\n let insideAngleRange = false;\r\n\r\n const anglePositive = MathUtils.angleClampDegrees(angle, true);\r\n let startPositive = MathUtils.angleClampDegrees(start, true);\r\n let endPositive = MathUtils.angleClampDegrees(end, true);\r\n\r\n if (useShortestAngle) {\r\n if (MathUtils.angleDistanceSignedDegrees(startPositive, endPositive) < 0) {\r\n const temp = startPositive;\r\n startPositive = endPositive;\r\n endPositive = temp;\r\n }\r\n }\r\n\r\n if (startPositive < endPositive) {\r\n insideAngleRange = anglePositive >= startPositive && anglePositive <= endPositive;\r\n } else {\r\n insideAngleRange = anglePositive >= startPositive || anglePositive <= endPositive;\r\n }\r\n\r\n return insideAngleRange;\r\n}\r\n\r\nexport function isInsideAngleRangeRadians(angle: number, start: number, end: number, useShortestAngle: boolean = false): boolean {\r\n return MathUtils.isInsideAngleRangeDegrees(MathUtils.toDegrees(angle), MathUtils.toDegrees(start), MathUtils.toDegrees(end), useShortestAngle);\r\n}\r\n\r\nexport const MathUtils = {\r\n EPSILON,\r\n EPSILON_SQUARED,\r\n EPSILON_DEGREES,\r\n clamp,\r\n sign,\r\n toDegrees,\r\n toRadians,\r\n roundDecimal,\r\n mapToRange,\r\n random,\r\n randomInt,\r\n randomBool,\r\n randomSign,\r\n randomPick,\r\n randomUUID,\r\n lerp,\r\n interpolate,\r\n interpolatePeriodic,\r\n angleDistance,\r\n angleDistanceDegrees,\r\n angleDistanceRadians,\r\n angleDistanceSigned,\r\n angleDistanceSignedDegrees,\r\n angleDistanceSignedRadians,\r\n angleClamp,\r\n angleClampDegrees,\r\n angleClampRadians,\r\n isInsideAngleRange,\r\n isInsideAngleRangeDegrees,\r\n isInsideAngleRangeRadians\r\n} as const;", "import { ArrayLike } from \"../../type_definitions/array_type_definitions.js\";\r\n\r\nexport function copy, T>(from: Readonly>, to: ArrayType, copyCallback?: (fromElement: T, toElement: T) => T): ArrayType {\r\n const _to = to as (ArrayType & { pop: () => T | undefined });\r\n if (_to.pop != null) {\r\n while (to.length > from.length) {\r\n _to.pop();\r\n }\r\n }\r\n\r\n for (let i = 0; i < from.length; i++) {\r\n if (copyCallback == null) {\r\n to[i] = from[i];\r\n } else {\r\n to[i] = copyCallback(from[i], to[i]);\r\n }\r\n }\r\n\r\n return to;\r\n}\r\n\r\n/** The overload where `ArrayType extends ArrayLike` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `ArrayType` when `Readonly` */\r\nexport function clone, T>(array: Readonly, cloneCallback?: (elementToClone: T) => T): ArrayType;\r\nexport function clone(array: Readonly, cloneCallback?: (elementToClone: T) => T): T[];\r\nexport function clone>(array: ArrayType, cloneCallback?: (elementToClone: number) => number): ArrayType;\r\nexport function clone, T>(array: Readonly, cloneCallback?: (elementToClone: T) => T): ArrayType {\r\n const clonedArray = array.slice(0) as ArrayType;\r\n\r\n if (cloneCallback != null) {\r\n for (let i = 0; i < array.length; i++) {\r\n clonedArray[i] = cloneCallback(array[i]);\r\n }\r\n }\r\n\r\n return clonedArray;\r\n}\r\n\r\nexport function equals(array: Readonly>, other: Readonly>, elementsEqualCallback?: (arrayElement: T, otherElement: T) => boolean): boolean {\r\n let equals = true;\r\n\r\n if (other != null && array.length == other.length) {\r\n for (let i = 0; i < array.length; i++) {\r\n if ((elementsEqualCallback != null && !elementsEqualCallback(array[i], other[i])) ||\r\n (elementsEqualCallback == null && array[i] != other[i])) {\r\n equals = false;\r\n break;\r\n }\r\n }\r\n } else {\r\n equals = false;\r\n }\r\n\r\n return equals;\r\n}\r\n\r\nexport function first(array: Readonly>): T | undefined {\r\n return array.length > 0 ? array[0] : undefined;\r\n}\r\n\r\nexport function last(array: Readonly>): T | undefined {\r\n return array.length > 0 ? array[array.length - 1] : undefined;\r\n}\r\n\r\nexport function has(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): boolean {\r\n return ArrayUtils.find(array, callback) != undefined;\r\n}\r\n\r\nexport function hasEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): boolean {\r\n return ArrayUtils.findEqual(array, elementToFind, elementsEqualCallback) != undefined;\r\n}\r\n\r\nexport function find(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n let elementFound = undefined;\r\n\r\n const index = ArrayUtils.findIndex(array, callback);\r\n if (index >= 0) {\r\n elementFound = array[index];\r\n }\r\n\r\n return elementFound;\r\n}\r\n\r\nexport function findIndex(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number {\r\n return array.findIndex(callback);\r\n}\r\n\r\nexport function findAll(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n const elementsFound = [];\r\n\r\n for (let i = 0; i < array.length; i++) {\r\n const element = array[i];\r\n if (callback(element, i)) {\r\n elementsFound.push(element);\r\n }\r\n }\r\n\r\n return elementsFound;\r\n}\r\n\r\nexport function findAllIndexes(array: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number[] {\r\n const indexes = [];\r\n\r\n for (let i = 0; i < array.length; i++) {\r\n const element = array[i];\r\n if (callback(element, i)) {\r\n indexes.push(i);\r\n }\r\n }\r\n\r\n return indexes;\r\n}\r\n\r\nexport function findEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T | undefined {\r\n if (elementsEqualCallback == null) {\r\n const index = ArrayUtils.findIndexEqual(array, elementToFind);\r\n return index < 0 ? undefined : array[index];\r\n }\r\n\r\n let elementFound = undefined;\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n elementFound = currentElement;\r\n break;\r\n }\r\n }\r\n\r\n return elementFound;\r\n}\r\n\r\nexport function findAllEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T[] {\r\n if (elementsEqualCallback == null) {\r\n return _findAllEqualOptimized(array, elementToFind);\r\n }\r\n\r\n const elementsFound = [];\r\n\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n elementsFound.push(currentElement);\r\n }\r\n }\r\n\r\n return elementsFound;\r\n}\r\n\r\nexport function findIndexEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number {\r\n if (elementsEqualCallback == null) {\r\n return array.indexOf(elementToFind);\r\n }\r\n\r\n let indexFound = -1;\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n indexFound = i;\r\n break;\r\n }\r\n }\r\n\r\n return indexFound;\r\n}\r\n\r\nexport function findAllIndexesEqual(array: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number[] {\r\n if (elementsEqualCallback == null) {\r\n return _findAllIndexesEqualOptimized(array, elementToFind);\r\n }\r\n\r\n const indexesFound = [];\r\n for (let i = 0; i < array.length; i++) {\r\n const currentElement = array[i];\r\n if (elementsEqualCallback(currentElement, elementToFind)) {\r\n indexesFound.push(i);\r\n }\r\n }\r\n return indexesFound;\r\n}\r\n\r\nexport function remove(array: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n let elementRemoved = undefined;\r\n\r\n const index = array.findIndex(callback);\r\n if (index >= 0) {\r\n elementRemoved = ArrayUtils.removeIndex(array, index);\r\n }\r\n\r\n return elementRemoved;\r\n}\r\n\r\nexport function removeIndex(array: T[], index: number): T | undefined {\r\n let elementRemoved = undefined;\r\n\r\n if (index >= 0 && index < array.length) {\r\n const arrayRemoved = array.splice(index, 1);\r\n if (arrayRemoved.length == 1) {\r\n elementRemoved = arrayRemoved[0];\r\n }\r\n }\r\n\r\n return elementRemoved;\r\n}\r\n\r\nexport function removeAll(array: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n const elementsRemoved = [];\r\n\r\n let currentElement = undefined;\r\n do {\r\n currentElement = ArrayUtils.remove(array, callback);\r\n if (currentElement !== undefined) {\r\n elementsRemoved.push(currentElement);\r\n }\r\n } while (currentElement !== undefined);\r\n\r\n return elementsRemoved;\r\n}\r\n\r\nexport function removeAllIndexes(array: T[], indexes: number[]): T[] {\r\n const elementsRemoved = [];\r\n\r\n for (const index of indexes) {\r\n const elementRemoved = ArrayUtils.removeIndex(array, index);\r\n if (elementRemoved !== undefined) {\r\n elementsRemoved.push(elementRemoved);\r\n }\r\n }\r\n\r\n return elementsRemoved;\r\n}\r\n\r\nexport function removeEqual(array: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T | undefined {\r\n return ArrayUtils.removeIndex(array, ArrayUtils.findIndexEqual(array, elementToRemove, elementsEqualCallback));\r\n}\r\n\r\nexport function removeAllEqual(array: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T[] {\r\n return ArrayUtils.removeAllIndexes(array, ArrayUtils.findAllIndexesEqual(array, elementToRemove, elementsEqualCallback));\r\n}\r\n\r\nexport function clear(array: T[]): T[] {\r\n array.length = 0;\r\n\r\n return array;\r\n}\r\n\r\nexport function pushUnique(array: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n let length = array.length;\r\n\r\n const hasElement = ArrayUtils.hasEqual(array, elementToAdd, elementsEqualCallback);\r\n\r\n if (!hasElement) {\r\n length = array.push(elementToAdd);\r\n }\r\n\r\n return length;\r\n}\r\n\r\nexport function unshiftUnique(array: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n let length = array.length;\r\n\r\n const hasElement = ArrayUtils.hasEqual(array, elementToAdd, elementsEqualCallback);\r\n\r\n if (!hasElement) {\r\n length = array.unshift(elementToAdd);\r\n }\r\n\r\n return length;\r\n}\r\n\r\nexport const ArrayUtils = {\r\n copy,\r\n clone,\r\n equals,\r\n first,\r\n last,\r\n has,\r\n hasEqual,\r\n find,\r\n findIndex,\r\n findAll,\r\n findAllIndexes,\r\n findEqual,\r\n findAllEqual,\r\n findIndexEqual,\r\n findAllIndexesEqual,\r\n remove,\r\n removeIndex,\r\n removeAll,\r\n removeAllIndexes,\r\n removeEqual,\r\n removeAllEqual,\r\n clear,\r\n pushUnique,\r\n unshiftUnique\r\n} as const;\r\n\r\n\r\n\r\nfunction _findAllEqualOptimized(array: Readonly>, elementToFind: T): T[] {\r\n // Adapted from: https:// stackoverflow.com/a/20798567\r\n\r\n const elementsFound = [];\r\n\r\n let index = -1;\r\n while ((index = array.indexOf(elementToFind, index + 1)) >= 0) {\r\n elementsFound.push(array[index]);\r\n }\r\n\r\n return elementsFound;\r\n}\r\n\r\nfunction _findAllIndexesEqualOptimized(array: Readonly>, elementToFind: T): number[] {\r\n // Adapted from: https:// stackoverflow.com/a/20798567\r\n\r\n const elementsFound = [];\r\n\r\n let index = -1;\r\n while ((index = array.indexOf(elementToFind, index + 1)) >= 0) {\r\n elementsFound.push(index);\r\n }\r\n\r\n return elementsFound;\r\n}", "import { vec3 as gl_vec3 } from \"gl-matrix\";\r\nimport { EasingFunction, MathUtils } from \"../math_utils.js\";\r\nimport { Mat3Utils } from \"./mat3_utils.js\";\r\nimport { Mat4Utils, create as mat4_utils_create } from \"./mat4_utils.js\";\r\nimport { Quat2Utils } from \"./quat2_utils.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\n\r\nexport function create(x, y, z) {\r\n let out = gl_vec3.create();\r\n\r\n if (x != null) {\r\n set(out, x, y, z);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(vector, x, y, z) {\r\n if (y == null) {\r\n gl_vec3.set(vector, x, x, x);\r\n } else {\r\n gl_vec3.set(vector, x, y, z);\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function normalize(vector, out = Vec3Utils.create()) {\r\n gl_vec3.normalize(out, vector);\r\n return out;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_vec3.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function clone(vector, out = Vec3Utils.create()) {\r\n Vec3Utils.copy(vector, out);\r\n return out;\r\n}\r\n\r\nexport function zero(vector) {\r\n gl_vec3.zero(vector);\r\n return vector;\r\n}\r\n\r\nexport function angle(first, second) {\r\n return Vec3Utils.angleDegrees(first, second);\r\n}\r\n\r\nexport function angleDegrees(first, second) {\r\n return MathUtils.toDegrees(Vec3Utils.angleRadians(first, second));\r\n}\r\n\r\nexport function angleRadians(first, second) {\r\n let firstX = first[0];\r\n let firstY = first[1];\r\n let firstZ = first[2];\r\n\r\n let secondX = second[0];\r\n let secondY = second[1];\r\n let secondZ = second[2];\r\n\r\n let firstLengthSquared = (firstX * firstX + firstY * firstY + firstZ * firstZ);\r\n let secondLengthSquared = (secondX * secondX + secondY * secondY + secondZ * secondZ);\r\n\r\n let lengthSquared = firstLengthSquared * secondLengthSquared;\r\n\r\n let angle = 0;\r\n if (lengthSquared > MathUtils.EPSILON_SQUARED) {\r\n let length = Math.sqrt(lengthSquared);\r\n\r\n let cos = Vec3Utils.dot(first, second) / length;\r\n angle = Math.acos(MathUtils.clamp(cos, -1, 1));\r\n }\r\n\r\n return angle;\r\n}\r\n\r\nexport function equals(first, second, epsilon = 0) {\r\n let equals = first.length == second.length;\r\n\r\n if (equals) {\r\n equals &&= (Math.abs(first[0] - second[0]) <= epsilon);\r\n equals &&= (Math.abs(first[1] - second[1]) <= epsilon);\r\n equals &&= (Math.abs(first[2] - second[2]) <= epsilon);\r\n }\r\n\r\n return equals;\r\n}\r\n\r\nexport function length(vector) {\r\n return gl_vec3.length(vector);\r\n}\r\n\r\nexport function lengthSquared(vector) {\r\n return gl_vec3.squaredLength(vector);\r\n}\r\n\r\nexport function distance(first, second) {\r\n return gl_vec3.dist(first, second);\r\n}\r\n\r\nexport function distanceSquared(first, second) {\r\n return gl_vec3.squaredDistance(first, second);\r\n}\r\n\r\nexport function add(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.add(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function sub(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.sub(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function mul(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function div(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.div(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function scale(vector, value, out = Vec3Utils.create()) {\r\n gl_vec3.scale(out, vector, value);\r\n return out;\r\n}\r\n\r\nexport function dot(first, second) {\r\n return gl_vec3.dot(first, second);\r\n}\r\n\r\nexport function negate(vector, out = Vec3Utils.create()) {\r\n gl_vec3.negate(out, vector);\r\n return out;\r\n}\r\n\r\nexport function cross(first, second, out = Vec3Utils.create()) {\r\n gl_vec3.cross(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function transformQuat(vector, quat, out = Vec3Utils.create()) {\r\n gl_vec3.transformQuat(out, vector, quat);\r\n return out;\r\n}\r\n\r\nexport function transformMat3(vector, matrix, out = Vec3Utils.create()) {\r\n gl_vec3.transformMat3(out, vector, matrix);\r\n return out;\r\n}\r\n\r\nexport function transformMat4(vector, mat4, out = Vec3Utils.create()) {\r\n gl_vec3.transformMat4(out, vector, mat4);\r\n return out;\r\n}\r\n\r\nexport function lengthSigned(vector, positiveDirection) {\r\n let signedLength = Vec3Utils.length(vector);\r\n if (!Vec3Utils.isConcordant(vector, positiveDirection)) {\r\n signedLength *= -1;\r\n }\r\n\r\n return signedLength;\r\n}\r\n\r\nexport function angleSigned(first, second, referenceAxis) {\r\n return Vec3Utils.angleSignedDegrees(first, second, referenceAxis);\r\n}\r\n\r\nexport function angleSignedDegrees(first, second, referenceAxis) {\r\n return MathUtils.toDegrees(Vec3Utils.angleSignedRadians(first, second, referenceAxis));\r\n}\r\n\r\nexport let angleSignedRadians = function () {\r\n let crossAxis = create();\r\n return function angleSignedRadians(first, second, referenceAxis) {\r\n Vec3Utils.cross(first, second, crossAxis);\r\n let angle = Vec3Utils.angleRadians(first, second);\r\n if (!Vec3Utils.isConcordant(crossAxis, referenceAxis)) {\r\n angle = -angle;\r\n }\r\n\r\n return angle;\r\n };\r\n}();\r\n\r\nexport function anglePivoted(first, second, referenceAxis) {\r\n return Vec3Utils.anglePivotedDegrees(first, second, referenceAxis);\r\n}\r\n\r\nexport function anglePivotedDegrees(first, second, referenceAxis) {\r\n return MathUtils.toDegrees(Vec3Utils.anglePivotedRadians(first, second, referenceAxis));\r\n}\r\n\r\nexport let anglePivotedRadians = function () {\r\n let flatFirst = create();\r\n let flatSecond = create();\r\n return function anglePivotedRadians(first, second, referenceAxis) {\r\n Vec3Utils.removeComponentAlongAxis(first, referenceAxis, flatFirst);\r\n Vec3Utils.removeComponentAlongAxis(second, referenceAxis, flatSecond);\r\n\r\n return Vec3Utils.angleRadians(flatFirst, flatSecond);\r\n };\r\n}();\r\n\r\nexport function anglePivotedSigned(first, second, referenceAxis) {\r\n return Vec3Utils.anglePivotedSignedDegrees(first, second, referenceAxis);\r\n}\r\n\r\nexport function anglePivotedSignedDegrees(first, second, referenceAxis) {\r\n return MathUtils.toDegrees(Vec3Utils.anglePivotedSignedRadians(first, second, referenceAxis));\r\n}\r\n\r\nexport let anglePivotedSignedRadians = function () {\r\n let flatFirst = create();\r\n let flatSecond = create();\r\n return function anglePivotedSignedRadians(first, second, referenceAxis) {\r\n Vec3Utils.removeComponentAlongAxis(first, referenceAxis, flatFirst);\r\n Vec3Utils.removeComponentAlongAxis(second, referenceAxis, flatSecond);\r\n\r\n return Vec3Utils.angleSignedRadians(flatFirst, flatSecond, referenceAxis);\r\n };\r\n}();\r\n\r\nexport function toRadians(vector, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, MathUtils.toRadians(vector[0]), MathUtils.toRadians(vector[1]), MathUtils.toRadians(vector[2]));\r\n return out;\r\n}\r\n\r\nexport function toDegrees(vector, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, MathUtils.toDegrees(vector[0]), MathUtils.toDegrees(vector[1]), MathUtils.toDegrees(vector[2]));\r\n return out;\r\n}\r\n\r\nexport function toQuat(vector, out) {\r\n return Vec3Utils.degreesToQuat(vector, out);\r\n}\r\n\r\nexport function radiansToQuat(vector, out = QuatUtils.create()) {\r\n QuatUtils.fromRadians(vector, out);\r\n return out;\r\n}\r\n\r\nexport function degreesToQuat(vector, out = QuatUtils.create()) {\r\n QuatUtils.fromDegrees(vector, out);\r\n return out;\r\n}\r\n\r\nexport function isNormalized(vector, epsilon = MathUtils.EPSILON) {\r\n return Math.abs(Vec3Utils.lengthSquared(vector) - 1) < epsilon;\r\n}\r\n\r\nexport function isZero(vector, epsilon = 0) {\r\n return Vec3Utils.lengthSquared(vector) <= (epsilon * epsilon);\r\n}\r\n\r\nexport function valueAlongAxis(vector, axis) {\r\n let valueAlongAxis = Vec3Utils.dot(vector, axis);\r\n return valueAlongAxis;\r\n}\r\n\r\nexport let valueAlongPlane = function () {\r\n let componentAlong = create();\r\n return function valueAlongPlane(vector, planeNormal) {\r\n Vec3Utils.removeComponentAlongAxis(vector, planeNormal, componentAlong);\r\n return Vec3Utils.length(componentAlong);\r\n };\r\n}();\r\n\r\nexport function componentAlongAxis(vector, axis, out = Vec3Utils.create()) {\r\n let valueAlongAxis = Vec3Utils.valueAlongAxis(vector, axis);\r\n\r\n Vec3Utils.copy(axis, out);\r\n Vec3Utils.scale(out, valueAlongAxis, out);\r\n return out;\r\n}\r\n\r\nexport let removeComponentAlongAxis = function () {\r\n let componentAlong = create();\r\n return function removeComponentAlongAxis(vector, axis, out = Vec3Utils.create()) {\r\n Vec3Utils.componentAlongAxis(vector, axis, componentAlong);\r\n Vec3Utils.sub(vector, componentAlong, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let copyComponentAlongAxis = function () {\r\n let componentAlong = create();\r\n return function copyComponentAlongAxis(from, to, axis, out = Vec3Utils.create()) {\r\n Vec3Utils.removeComponentAlongAxis(to, axis, out);\r\n Vec3Utils.componentAlongAxis(from, axis, componentAlong);\r\n Vec3Utils.add(out, componentAlong, out);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function isConcordant(first, second) {\r\n return Vec3Utils.dot(first, second) >= 0;\r\n}\r\n\r\nexport function isFartherAlongAxis(first, second, axis) {\r\n return Vec3Utils.valueAlongAxis(first, axis) > Vec3Utils.valueAlongAxis(second, axis);\r\n}\r\n\r\nexport function isToTheRight(first, second, referenceAxis) {\r\n return Vec3Utils.signTo(first, second, referenceAxis) >= 0;\r\n}\r\n\r\nexport let signTo = function () {\r\n let componentAlongThis = create();\r\n let componentAlongVector = create();\r\n return function signTo(first, second, referenceAxis, zeroSign = 1) {\r\n Vec3Utils.removeComponentAlongAxis(first, referenceAxis, componentAlongThis);\r\n Vec3Utils.removeComponentAlongAxis(second, referenceAxis, componentAlongVector);\r\n\r\n let angleSignedResult = Vec3Utils.angleSigned(first, second, referenceAxis);\r\n return angleSignedResult > 0 ? 1 : (angleSignedResult == 0 ? zeroSign : -1);\r\n };\r\n}();\r\n\r\nexport function projectOnAxis(vector, axis, out = Vec3Utils.create()) {\r\n Vec3Utils.componentAlongAxis(vector, axis, out);\r\n return out;\r\n}\r\n\r\n// The result can easily be not 100% exact due to precision errors\r\nexport let projectOnAxisAlongAxis = function () {\r\n let up = create();\r\n let vectorProjectedToAxis = create();\r\n let fixedProjectAlongAxis = create();\r\n return function projectOnAxisAlongAxis(vector, axis, projectAlongAxis, out = Vec3Utils.create()) {\r\n\r\n if (Vec3Utils.isOnAxis(vector, axis) || Vec3Utils.isOnAxis(projectAlongAxis, axis)) {\r\n Vec3Utils.copy(vector, out);\r\n } else {\r\n Vec3Utils.cross(projectAlongAxis, axis, up);\r\n Vec3Utils.normalize(up, up);\r\n\r\n if (Vec3Utils.isZero(up)) {\r\n Vec3Utils.perpendicularRandom(projectAlongAxis, up);\r\n Vec3Utils.normalize(up, up);\r\n }\r\n\r\n Vec3Utils.removeComponentAlongAxis(vector, up, out);\r\n if (!Vec3Utils.isOnAxis(out, axis)) {\r\n Vec3Utils.projectOnAxis(out, axis, vectorProjectedToAxis);\r\n Vec3Utils.sub(vectorProjectedToAxis, out, vectorProjectedToAxis);\r\n\r\n if (Vec3Utils.isConcordant(vectorProjectedToAxis, projectAlongAxis)) {\r\n Vec3Utils.copy(projectAlongAxis, fixedProjectAlongAxis);\r\n } else {\r\n Vec3Utils.negate(projectAlongAxis, fixedProjectAlongAxis);\r\n }\r\n\r\n let angleWithAlongAxis = Vec3Utils.angleRadians(fixedProjectAlongAxis, vectorProjectedToAxis);\r\n let lengthToRemove = Vec3Utils.length(vectorProjectedToAxis) / Math.cos(angleWithAlongAxis);\r\n\r\n Vec3Utils.scale(fixedProjectAlongAxis, lengthToRemove, fixedProjectAlongAxis);\r\n Vec3Utils.add(out, fixedProjectAlongAxis, out);\r\n\r\n Vec3Utils.projectOnAxis(out, axis, out); // Snap on the axis, due to float precision error\r\n }\r\n }\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function projectOnPlane(vector, planeNormal, out = Vec3Utils.create()) {\r\n Vec3Utils.removeComponentAlongAxis(vector, planeNormal, out);\r\n return out;\r\n}\r\n\r\n// The result can easily be not 100% exact due to precision errors\r\nexport let projectOnPlaneAlongAxis = function () {\r\n let vectorProjectedToPlane = create();\r\n let fixedProjectAlongAxis = create();\r\n return function projectOnPlaneAlongAxis(vector, planeNormal, projectAlongAxis, out = Vec3Utils.create()) {\r\n if (Vec3Utils.isOnPlane(vector, planeNormal) || Vec3Utils.isOnPlane(projectAlongAxis, planeNormal)) {\r\n Vec3Utils.copy(vector, out);\r\n } else {\r\n Vec3Utils.copy(vector, out);\r\n\r\n Vec3Utils.projectOnPlane(out, planeNormal, vectorProjectedToPlane);\r\n Vec3Utils.sub(vectorProjectedToPlane, out, vectorProjectedToPlane);\r\n\r\n if (Vec3Utils.isConcordant(vectorProjectedToPlane, projectAlongAxis)) {\r\n Vec3Utils.copy(projectAlongAxis, fixedProjectAlongAxis);\r\n } else {\r\n Vec3Utils.negate(projectAlongAxis, fixedProjectAlongAxis);\r\n }\r\n\r\n let angleWithAlongAxis = Vec3Utils.angleRadians(fixedProjectAlongAxis, vectorProjectedToPlane);\r\n let lengthToRemove = Vec3Utils.length(vectorProjectedToPlane) / Math.cos(angleWithAlongAxis);\r\n\r\n Vec3Utils.scale(fixedProjectAlongAxis, lengthToRemove, fixedProjectAlongAxis);\r\n Vec3Utils.add(out, fixedProjectAlongAxis, out);\r\n\r\n Vec3Utils.projectOnPlane(out, planeNormal, out); // Snap on the axis, due to float precision error\r\n }\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function isOnAxis(vector, axis) {\r\n let angleResult = Vec3Utils.angle(vector, axis);\r\n return Math.abs(angleResult) < MathUtils.EPSILON_DEGREES || Math.abs(angleResult - 180) < MathUtils.EPSILON_DEGREES;\r\n}\r\n\r\nexport function isOnPlane(vector, planeNormal) {\r\n let angleResult = Vec3Utils.angle(vector, planeNormal);\r\n return Math.abs(angleResult - 90) < MathUtils.EPSILON_DEGREES;\r\n}\r\n\r\nexport function rotate(vector, rotation, out) {\r\n return Vec3Utils.rotateDegrees(vector, rotation, out);\r\n}\r\n\r\nexport let rotateDegrees = function () {\r\n let zero = create();\r\n return function rotateDegrees(vector, rotation, out) {\r\n return Vec3Utils.rotateAroundDegrees(vector, rotation, zero, out);\r\n };\r\n}();\r\n\r\nexport let rotateRadians = function () {\r\n let zero = create();\r\n return function rotateRadians(vector, rotation, out) {\r\n return Vec3Utils.rotateAroundRadians(vector, rotation, zero, out);\r\n };\r\n}();\r\n\r\nexport let rotateQuat = function () {\r\n let zero = create();\r\n return function rotateQuat(vector, rotation, out) {\r\n return Vec3Utils.rotateAroundQuat(vector, rotation, zero, out);\r\n };\r\n}();\r\n\r\nexport function rotateAxis(vector, angle, axis, out) {\r\n return Vec3Utils.rotateAxisDegrees(vector, angle, axis, out);\r\n}\r\n\r\nexport let rotateAxisDegrees = function () {\r\n let zero = create();\r\n return function rotateAxisDegrees(vector, angle, axis, out) {\r\n return Vec3Utils.rotateAroundAxisDegrees(vector, angle, axis, zero, out);\r\n };\r\n}();\r\n\r\nexport let rotateAxisRadians = function () {\r\n let zero = create();\r\n return function rotateAxisRadians(vector, angle, axis, out) {\r\n return Vec3Utils.rotateAroundAxisRadians(vector, angle, axis, zero, out);\r\n };\r\n}();\r\n\r\nexport function rotateAround(vector, rotation, origin, out) {\r\n return Vec3Utils.rotateAroundDegrees(vector, rotation, origin, out);\r\n}\r\n\r\nexport let rotateAroundDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function rotateAroundDegrees(vector, rotation, origin, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(rotation, quat);\r\n return Vec3Utils.rotateAroundQuat(vector, quat, origin, out);\r\n };\r\n}();\r\n\r\nexport let rotateAroundRadians = function () {\r\n let quat = quat_utils_create();\r\n return function rotateAroundRadians(vector, rotation, origin, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(rotation, quat);\r\n return Vec3Utils.rotateAroundQuat(vector, quat, origin, out);\r\n };\r\n}();\r\n\r\nexport function rotateAroundQuat(vector, rotation, origin, out = Vec3Utils.create()) {\r\n Vec3Utils.sub(vector, origin, out);\r\n Vec3Utils.transformQuat(out, rotation, out);\r\n Vec3Utils.add(out, origin, out);\r\n return out;\r\n}\r\n\r\nexport function rotateAroundAxis(vector, angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxisDegrees(vector, angle, axis, origin, out);\r\n}\r\n\r\nexport function rotateAroundAxisDegrees(vector, angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxisRadians(vector, MathUtils.toRadians(angle), axis, origin, out);\r\n}\r\n\r\nexport let rotateAroundAxisRadians = function () {\r\n let quat = quat_utils_create();\r\n return function rotateAroundAxisRadians(vector, angle, axis, origin, out = Vec3Utils.create()) {\r\n QuatUtils.fromAxisRadians(angle, axis, quat);\r\n return Vec3Utils.rotateAroundQuat(vector, quat, origin, out);\r\n };\r\n}();\r\n\r\nexport function convertPositionToWorld(vector, parentTransform, out) {\r\n return Vec3Utils.convertPositionToWorldMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport function convertPositionToLocal(vector, parentTransform, out) {\r\n return Vec3Utils.convertPositionToLocalMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport function convertPositionToWorldMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Vec3Utils.transformMat4(vector, parentTransform, out);\r\n return out;\r\n}\r\n\r\nexport let convertPositionToLocalMatrix = function () {\r\n let inverse = mat4_utils_create();\r\n return function convertPositionToLocalMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Mat4Utils.invert(parentTransform, inverse);\r\n Vec3Utils.transformMat4(vector, inverse, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let convertPositionToWorldQuat = function () {\r\n let parentTransformMatrix = mat4_utils_create();\r\n let position = create();\r\n let rotation = quat_utils_create();\r\n let one = create();\r\n set(one, 1, 1, 1);\r\n return function convertPositionToWorldQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getPosition(parentTransform, position);\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n Mat4Utils.setPositionRotationQuatScale(parentTransformMatrix, position, rotation, one);\r\n return Vec3Utils.convertPositionToWorldMatrix(vector, parentTransformMatrix, out);\r\n };\r\n}();\r\n\r\nexport let convertPositionToLocalQuat = function () {\r\n let parentTransformMatrix = mat4_utils_create();\r\n let position = create();\r\n let rotation = quat_utils_create();\r\n let one = create();\r\n set(one, 1, 1, 1);\r\n return function convertPositionToLocalQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getPosition(parentTransform, position);\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n Mat4Utils.setPositionRotationQuatScale(parentTransformMatrix, position, rotation, one);\r\n return Vec3Utils.convertPositionToLocalMatrix(vector, parentTransformMatrix, out);\r\n };\r\n}();\r\n\r\nexport function convertDirectionToWorld(vector, parentTransform, out) {\r\n return Vec3Utils.convertDirectionToWorldMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport function convertDirectionToLocal(vector, parentTransform, out) {\r\n return Vec3Utils.convertDirectionToLocalMatrix(vector, parentTransform, out);\r\n}\r\n\r\nexport let convertDirectionToWorldMatrix = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToWorldMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(parentTransform, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let convertDirectionToLocalMatrix = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToLocalMatrix(vector, parentTransform, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(parentTransform, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\n\r\nexport let convertDirectionToWorldQuat = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToWorldQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let convertDirectionToLocalQuat = function () {\r\n let rotation = quat_utils_create();\r\n return function convertDirectionToLocalQuat(vector, parentTransform, out = Vec3Utils.create()) {\r\n Quat2Utils.getRotationQuat(parentTransform, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n Vec3Utils.transformQuat(vector, rotation, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function addRotation(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotation(vector, rotation, out);\r\n}\r\n\r\nexport function addRotationDegrees(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationDegrees(vector, rotation, out);\r\n}\r\n\r\nexport function addRotationRadians(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationRadians(vector, rotation, out);\r\n}\r\n\r\nexport function addRotationQuat(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationQuat(vector, rotation, out);\r\n}\r\n\r\nexport function degreesAddRotation(vector, rotation, out) {\r\n return Vec3Utils.degreesAddRotationDegrees(vector, rotation, out);\r\n}\r\n\r\nexport let degreesAddRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function degreesAddRotationDegrees(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toDegrees(QuatUtils.addRotationDegrees(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let degreesAddRotationRadians = function () {\r\n let quat = quat_utils_create();\r\n return function degreesAddRotationRadians(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toDegrees(QuatUtils.addRotationRadians(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let degreesAddRotationQuat = function () {\r\n let quat = quat_utils_create();\r\n return function degreesAddRotationQuat(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toDegrees(QuatUtils.addRotationQuat(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport function radiansAddRotation(vector, rotation, out) {\r\n return Vec3Utils.radiansAddRotationDegrees(vector, rotation, out);\r\n}\r\n\r\nexport let radiansAddRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function radiansAddRotationDegrees(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toRadians(QuatUtils.addRotationDegrees(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let radiansAddRotationRadians = function () {\r\n let quat = quat_utils_create();\r\n return function radiansAddRotationRadians(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toRadians(QuatUtils.addRotationRadians(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport let radiansAddRotationQuat = function () {\r\n let quat = quat_utils_create();\r\n return function radiansAddRotationQuat(vector, rotation, out = Vec3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toRadians(QuatUtils.addRotationQuat(quat, rotation, quat), out);\r\n };\r\n}();\r\n\r\nexport function toMatrix(vector, out = Mat3Utils.create()) {\r\n return Vec3Utils.degreesToMatrix(vector, out);\r\n}\r\n\r\nexport let degreesToMatrix = function () {\r\n let quat = quat_utils_create();\r\n return function degreesToMatrix(vector, out = Mat3Utils.create()) {\r\n Vec3Utils.degreesToQuat(vector, quat);\r\n return QuatUtils.toMatrix(quat, out);\r\n };\r\n}();\r\n\r\nexport let radiansToMatrix = function () {\r\n let quat = quat_utils_create();\r\n return function radiansToMatrix(vector, out = Mat3Utils.create()) {\r\n Vec3Utils.radiansToQuat(vector, quat);\r\n return QuatUtils.toMatrix(quat, out);\r\n };\r\n}();\r\n\r\nexport function rotationTo(from, to, out) {\r\n return Vec3Utils.rotationToDegrees(from, to, out);\r\n}\r\n\r\nexport let rotationToDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToDegrees(from, to, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToQuat(from, to, rotationQuat);\r\n QuatUtils.toDegrees(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToRadians(from, to, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToQuat(from, to, rotationQuat);\r\n QuatUtils.toRadians(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToQuat = function () {\r\n let rotationAxis = create();\r\n return function rotationToQuat(from, to, out = QuatUtils.create()) {\r\n Vec3Utils.cross(from, to, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n\r\n if (Vec3Utils.isZero(rotationAxis)) {\r\n Vec3Utils.perpendicularRandom(from, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n }\r\n\r\n let signedAngle = Vec3Utils.angleSigned(from, to, rotationAxis);\r\n QuatUtils.fromAxisRadians(signedAngle, rotationAxis, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function rotationToPivoted(from, to, pivotAxis, out) {\r\n return Vec3Utils.rotationToPivotedDegrees(from, to, pivotAxis, out);\r\n}\r\n\r\nexport let rotationToPivotedDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToPivotedDegrees(from, to, pivotAxis, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToPivotedQuat(from, to, pivotAxis, rotationQuat);\r\n QuatUtils.toDegrees(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToPivotedRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotationToPivotedRadians(from, to, pivotAxis, out = Vec3Utils.create()) {\r\n Vec3Utils.rotationToPivotedQuat(from, to, pivotAxis, rotationQuat);\r\n QuatUtils.toRadians(rotationQuat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let rotationToPivotedQuat = function () {\r\n let fromFlat = create();\r\n let toFlat = create();\r\n let rotationAxis = create();\r\n return function rotationToPivotedQuat(from, to, pivotAxis, out = QuatUtils.create()) {\r\n Vec3Utils.removeComponentAlongAxis(from, pivotAxis, fromFlat);\r\n Vec3Utils.removeComponentAlongAxis(to, pivotAxis, toFlat);\r\n\r\n Vec3Utils.cross(fromFlat, toFlat, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n\r\n if (Vec3Utils.isZero(rotationAxis)) {\r\n Vec3Utils.perpendicularRandom(fromFlat, rotationAxis);\r\n Vec3Utils.normalize(rotationAxis, rotationAxis);\r\n }\r\n\r\n let signedAngle = Vec3Utils.angleSignedRadians(fromFlat, toFlat, rotationAxis);\r\n QuatUtils.fromAxisRadians(signedAngle, rotationAxis, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function lerp(from, to, interpolationFactor, out = Vec3Utils.create()) {\r\n if (interpolationFactor <= 0) {\r\n Vec3Utils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n Vec3Utils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_vec3.lerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function interpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = Vec3Utils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return Vec3Utils.lerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let perpendicularRandom = function () {\r\n let notVector = create();\r\n return function perpendicularRandom(vector, out = Vec3Utils.create()) {\r\n if (Vec3Utils.isZero(vector)) {\r\n return Vec3Utils.zero(out);\r\n }\r\n\r\n Vec3Utils.copy(vector, notVector);\r\n\r\n let zeroAmount = false;\r\n for (let i = 0; i < 3; i++) {\r\n if (vector[i] == 0) {\r\n zeroAmount++;\r\n }\r\n }\r\n\r\n if (zeroAmount == 2) {\r\n if (notVector[0] == 0) {\r\n notVector[0] = 1;\r\n } else if (notVector[1] == 0) {\r\n notVector[1] = 1;\r\n } else if (notVector[2] == 0) {\r\n notVector[2] = 1;\r\n }\r\n } else {\r\n if (notVector[0] != 0) {\r\n notVector[0] = -notVector[0];\r\n } else if (notVector[1] != 0) {\r\n notVector[1] = -notVector[1];\r\n } else if (notVector[2] != 0) {\r\n notVector[2] = -notVector[2];\r\n }\r\n }\r\n\r\n Vec3Utils.cross(notVector, vector, out);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport let Vec3Utils = {\r\n create,\r\n set,\r\n normalize,\r\n copy,\r\n clone,\r\n zero,\r\n angle,\r\n angleDegrees,\r\n angleRadians,\r\n equals,\r\n length,\r\n lengthSquared,\r\n distance,\r\n distanceSquared,\r\n add,\r\n sub,\r\n mul,\r\n div,\r\n scale,\r\n dot,\r\n negate,\r\n cross,\r\n transformQuat,\r\n transformMat3,\r\n transformMat4,\r\n lengthSigned,\r\n angleSigned,\r\n angleSignedDegrees,\r\n angleSignedRadians,\r\n anglePivoted,\r\n anglePivotedDegrees,\r\n anglePivotedRadians,\r\n anglePivotedSigned,\r\n anglePivotedSignedDegrees,\r\n anglePivotedSignedRadians,\r\n toRadians,\r\n toDegrees,\r\n toQuat,\r\n radiansToQuat,\r\n degreesToQuat,\r\n isNormalized,\r\n isZero,\r\n valueAlongAxis,\r\n valueAlongPlane,\r\n componentAlongAxis,\r\n removeComponentAlongAxis,\r\n copyComponentAlongAxis,\r\n isConcordant,\r\n isFartherAlongAxis,\r\n isToTheRight,\r\n signTo,\r\n projectOnAxis,\r\n projectOnAxisAlongAxis,\r\n projectOnPlane,\r\n projectOnPlaneAlongAxis,\r\n isOnAxis,\r\n isOnPlane,\r\n rotate,\r\n rotateDegrees,\r\n rotateRadians,\r\n rotateQuat,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n rotateAround,\r\n rotateAroundDegrees,\r\n rotateAroundRadians,\r\n rotateAroundQuat,\r\n rotateAroundAxis,\r\n rotateAroundAxisDegrees,\r\n rotateAroundAxisRadians,\r\n convertPositionToWorld,\r\n convertPositionToLocal,\r\n convertPositionToWorldMatrix,\r\n convertPositionToLocalMatrix,\r\n convertPositionToWorldQuat,\r\n convertPositionToLocalQuat,\r\n convertDirectionToWorld,\r\n convertDirectionToLocal,\r\n convertDirectionToWorldMatrix,\r\n convertDirectionToLocalMatrix,\r\n convertDirectionToWorldQuat,\r\n convertDirectionToLocalQuat,\r\n addRotation,\r\n addRotationDegrees,\r\n addRotationRadians,\r\n addRotationQuat,\r\n degreesAddRotation,\r\n degreesAddRotationDegrees,\r\n degreesAddRotationRadians,\r\n degreesAddRotationQuat,\r\n radiansAddRotation,\r\n radiansAddRotationDegrees,\r\n radiansAddRotationRadians,\r\n radiansAddRotationQuat,\r\n toMatrix,\r\n degreesToMatrix,\r\n radiansToMatrix,\r\n rotationTo,\r\n rotationToDegrees,\r\n rotationToRadians,\r\n rotationToQuat,\r\n rotationToPivoted,\r\n rotationToPivotedDegrees,\r\n rotationToPivotedRadians,\r\n rotationToPivotedQuat,\r\n lerp,\r\n interpolate,\r\n perpendicularRandom\r\n};", "\r\nimport { mat4 as gl_mat4 } from \"gl-matrix\";\r\nimport { MathUtils } from \"../math_utils.js\";\r\nimport { Quat2Utils } from \"./quat2_utils.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\nimport { Vec3Utils, create as vec3_utils_create, set as vec3_utils_set } from \"./vec3_utils.js\";\r\n\r\nexport function create(\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33) {\r\n let out = gl_mat4.create();\r\n if (m00 != null) {\r\n set(\r\n out,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33);\r\n }\r\n return out;\r\n}\r\n\r\nexport function set(matrix,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33) {\r\n if (m01 == null) {\r\n gl_mat4.set(matrix,\r\n m00, m00, m00, m00,\r\n m00, m00, m00, m00,\r\n m00, m00, m00, m00,\r\n m00, m00, m00, m00);\r\n } else {\r\n gl_mat4.set(matrix,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33);\r\n }\r\n return matrix;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_mat4.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function identity(matrix) {\r\n gl_mat4.identity(matrix);\r\n return matrix;\r\n}\r\n\r\nexport function invert(matrix, out = Mat4Utils.create()) {\r\n gl_mat4.invert(out, matrix);\r\n return out;\r\n}\r\n\r\nexport function mul(first, second, out = Mat4Utils.create()) {\r\n gl_mat4.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function scale(matrix, vector, out = Mat4Utils.create()) {\r\n gl_mat4.scale(out, matrix, vector);\r\n return out;\r\n}\r\n\r\nexport function clone(matrix, out = Mat4Utils.create()) {\r\n Mat4Utils.copy(matrix, out);\r\n return out;\r\n}\r\n\r\nexport function getPosition(matrix, out = Vec3Utils.create()) {\r\n gl_mat4.getTranslation(out, matrix);\r\n return out;\r\n}\r\n\r\nexport function getRotation(matrix, out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotationDegrees(matrix, out);\r\n}\r\n\r\nexport let getRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function getRotationDegrees(matrix, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(matrix, quat);\r\n QuatUtils.toDegrees(quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let getRotationRadians = function () {\r\n let quat = quat_utils_create();\r\n return function getRotationRadians(matrix, out = Vec3Utils.create()) {\r\n Mat4Utils.getRotationQuat(matrix, quat);\r\n QuatUtils.toRadians(quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let getRotationQuat = function () {\r\n let tempScale = vec3_utils_create();\r\n let transformMatrixNoScale = create();\r\n let inverseScale = vec3_utils_create();\r\n let one = vec3_utils_create();\r\n vec3_utils_set(one, 1, 1, 1);\r\n return function getRotationQuat(matrix, out = QuatUtils.create()) {\r\n Mat4Utils.getScale(matrix, tempScale);\r\n Vec3Utils.div(one, tempScale, inverseScale);\r\n Mat4Utils.scale(matrix, inverseScale, transformMatrixNoScale);\r\n _customGLMatrixGetRotation(out, transformMatrixNoScale);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getScale(matrix, out = Vec3Utils.create()) {\r\n gl_mat4.getScaling(out, matrix);\r\n return out;\r\n}\r\n\r\nexport function setPosition(matrix, position) {\r\n matrix[12] = position[0];\r\n matrix[13] = position[1];\r\n matrix[14] = position[2];\r\n return matrix;\r\n}\r\n\r\nexport function setRotation(matrix, rotation) {\r\n Mat4Utils.setRotationDegrees(matrix, rotation);\r\n return matrix;\r\n}\r\n\r\nexport let setRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function setRotationDegrees(matrix, rotation) {\r\n Mat4Utils.setRotationQuat(matrix, Vec3Utils.degreesToQuat(rotation, quat));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setRotationRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function setRotationRadians(matrix, rotation) {\r\n Mat4Utils.setRotationDegrees(matrix, Vec3Utils.toDegrees(rotation, vector));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setRotationQuat = function () {\r\n let position = vec3_utils_create();\r\n let scale = vec3_utils_create();\r\n return function setRotationQuat(matrix, rotation) {\r\n Mat4Utils.getPosition(matrix, position);\r\n Mat4Utils.getScale(matrix, scale);\r\n Mat4Utils.setPositionRotationQuatScale(matrix, position, rotation, scale);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setScale = function () {\r\n let tempScale = vec3_utils_create();\r\n return function setScale(matrix, scaleToSet) {\r\n Mat4Utils.getScale(matrix, tempScale);\r\n Vec3Utils.div(scaleToSet, tempScale, tempScale);\r\n Mat4Utils.scale(matrix, tempScale, matrix);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationScale(matrix, position, rotation, scale) {\r\n Mat4Utils.setPositionRotationDegreesScale(matrix, position, rotation, scale);\r\n return matrix;\r\n}\r\n\r\nexport let setPositionRotationDegreesScale = function () {\r\n let quat = quat_utils_create();\r\n return function setPositionRotationDegreesScale(matrix, position, rotation, scale) {\r\n Mat4Utils.setPositionRotationQuatScale(matrix, position, Vec3Utils.degreesToQuat(rotation, quat), scale);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setPositionRotationRadiansScale = function () {\r\n let vector = vec3_utils_create();\r\n return function setPositionRotationRadiansScale(matrix, position, rotation, scale) {\r\n Mat4Utils.setPositionRotationDegreesScale(matrix, position, Vec3Utils.toDegrees(rotation, vector), scale);\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationQuatScale(matrix, position, rotation, scale) {\r\n gl_mat4.fromRotationTranslationScale(matrix, rotation, position, scale);\r\n return matrix;\r\n}\r\n\r\nexport function setPositionRotation(matrix, position, rotation) {\r\n Mat4Utils.setPositionRotationDegrees(matrix, position, rotation);\r\n return matrix;\r\n}\r\n\r\nexport let setPositionRotationDegrees = function () {\r\n let quat = quat_utils_create();\r\n return function setPositionRotationDegrees(matrix, position, rotation) {\r\n Mat4Utils.setPositionRotationQuat(matrix, position, Vec3Utils.degreesToQuat(rotation, quat));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport let setPositionRotationRadians = function () {\r\n let vector = vec3_utils_create();\r\n return function setPositionRotationRadians(matrix, position, rotation) {\r\n Mat4Utils.setPositionRotationDegrees(matrix, position, Vec3Utils.toDegrees(rotation, vector));\r\n return matrix;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationQuat(matrix, position, rotation) {\r\n gl_mat4.fromRotationTranslation(matrix, rotation, position);\r\n return matrix;\r\n}\r\n\r\nexport function getAxes(matrix, out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n Mat4Utils.getLeft(matrix, out[0]);\r\n Mat4Utils.getUp(matrix, out[1]);\r\n Mat4Utils.getForward(matrix, out[2]);\r\n\r\n return out;\r\n}\r\n\r\nexport function getForward(matrix, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, matrix[8], matrix[9], matrix[10]);\r\n Vec3Utils.normalize(out, out);\r\n return out;\r\n}\r\n\r\nexport function getBackward(matrix, out) {\r\n out = Mat4Utils.getForward(matrix, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function getLeft(matrix, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, matrix[0], matrix[1], matrix[2]);\r\n Vec3Utils.normalize(out, out);\r\n return out;\r\n}\r\n\r\nexport function getRight(matrix, out) {\r\n out = Mat4Utils.getLeft(matrix, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function getUp(matrix, out = Vec3Utils.create()) {\r\n Vec3Utils.set(out, matrix[4], matrix[5], matrix[6]);\r\n Vec3Utils.normalize(out, out);\r\n return out;\r\n}\r\n\r\nexport function getDown(matrix, out) {\r\n out = Mat4Utils.getUp(matrix, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let toWorld = function () {\r\n let convertTransform = create();\r\n let position = vec3_utils_create();\r\n let tempScale = vec3_utils_create();\r\n let inverseScale = vec3_utils_create();\r\n let one = vec3_utils_create();\r\n vec3_utils_set(one, 1, 1, 1);\r\n return function toWorld(matrix, parentTransformMatrix, out = Mat4Utils.create()) {\r\n if (Mat4Utils.hasUniformScale(parentTransformMatrix)) {\r\n Mat4Utils.mul(parentTransformMatrix, matrix, out);\r\n } else {\r\n Vec3Utils.set(position, matrix[12], matrix[13], matrix[14]);\r\n Vec3Utils.convertPositionToWorldMatrix(position, parentTransformMatrix, position);\r\n\r\n Mat4Utils.getScale(parentTransformMatrix, tempScale);\r\n Vec3Utils.div(one, tempScale, inverseScale);\r\n Mat4Utils.scale(parentTransformMatrix, inverseScale, convertTransform);\r\n\r\n Mat4Utils.mul(convertTransform, matrix, out);\r\n Mat4Utils.scale(out, tempScale, out);\r\n\r\n out[12] = position[0];\r\n out[13] = position[1];\r\n out[14] = position[2];\r\n out[15] = 1;\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport let toLocal = function () {\r\n let convertTransform = create();\r\n let position = vec3_utils_create();\r\n let tempScale = vec3_utils_create();\r\n let inverseScale = vec3_utils_create();\r\n let one = vec3_utils_create();\r\n vec3_utils_set(one, 1, 1, 1);\r\n return function toLocal(matrix, parentTransformMatrix, out = Mat4Utils.create()) {\r\n if (Mat4Utils.hasUniformScale(parentTransformMatrix)) {\r\n Mat4Utils.invert(parentTransformMatrix, convertTransform);\r\n Mat4Utils.mul(convertTransform, matrix, out);\r\n } else {\r\n Vec3Utils.set(position, matrix[12], matrix[13], matrix[14]);\r\n Vec3Utils.convertPositionToLocalMatrix(position, parentTransformMatrix, position);\r\n\r\n Mat4Utils.getScale(parentTransformMatrix, tempScale);\r\n Vec3Utils.div(one, tempScale, inverseScale);\r\n Mat4Utils.scale(parentTransformMatrix, inverseScale, convertTransform);\r\n\r\n Mat4Utils.invert(convertTransform, convertTransform);\r\n Mat4Utils.mul(convertTransform, matrix, out);\r\n Mat4Utils.scale(out, inverseScale, out);\r\n\r\n out[12] = position[0];\r\n out[13] = position[1];\r\n out[14] = position[2];\r\n out[15] = 1;\r\n }\r\n return out;\r\n };\r\n}();\r\n\r\nexport let hasUniformScale = function () {\r\n let scale = vec3_utils_create();\r\n return function hasUniformScale(matrix) {\r\n Mat4Utils.getScale(matrix, scale);\r\n return Math.abs(scale[0] - scale[1]) < MathUtils.EPSILON && Math.abs(scale[1] - scale[2]) < MathUtils.EPSILON && Math.abs(scale[0] - scale[2]) < MathUtils.EPSILON;\r\n };\r\n}();\r\n\r\nexport let toQuat = function () {\r\n let position = vec3_utils_create();\r\n let rotation = quat_utils_create();\r\n return function toQuat(matrix, out = Quat2Utils.create()) {\r\n Mat4Utils.getPosition(matrix, position);\r\n Mat4Utils.getRotationQuat(matrix, rotation);\r\n Quat2Utils.setPositionRotationQuat(out, position, rotation);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function fromQuat(quat, out = Mat4Utils.create()) {\r\n Quat2Utils.toMatrix(quat, out);\r\n return out;\r\n}\r\n\r\nexport let Mat4Utils = {\r\n create,\r\n set,\r\n copy,\r\n identity,\r\n invert,\r\n mul,\r\n scale,\r\n clone,\r\n getPosition,\r\n getRotation,\r\n getRotationDegrees,\r\n getRotationRadians,\r\n getRotationQuat,\r\n getScale,\r\n setPosition,\r\n setRotation,\r\n setRotationDegrees,\r\n setRotationRadians,\r\n setRotationQuat,\r\n setScale,\r\n setPositionRotationScale,\r\n setPositionRotationDegreesScale,\r\n setPositionRotationRadiansScale,\r\n setPositionRotationQuatScale,\r\n setPositionRotation,\r\n setPositionRotationDegrees,\r\n setPositionRotationRadians,\r\n setPositionRotationQuat,\r\n getAxes,\r\n getForward,\r\n getBackward,\r\n getLeft,\r\n getRight,\r\n getUp,\r\n getDown,\r\n toWorld,\r\n toLocal,\r\n hasUniformScale,\r\n toQuat,\r\n fromQuat\r\n};\r\n\r\n\r\n\r\n\r\n// This is used in place of the glMatrix one to avoid the array allocation\r\nlet _customGLMatrixGetRotation = function () {\r\n let scaling = vec3_utils_create();\r\n return function _customGLMatrixGetRotation(out, mat) {\r\n gl_mat4.getScaling(scaling, mat);\r\n\r\n let is1 = 1 / scaling[0];\r\n let is2 = 1 / scaling[1];\r\n let is3 = 1 / scaling[2];\r\n\r\n let sm11 = mat[0] * is1;\r\n let sm12 = mat[1] * is2;\r\n let sm13 = mat[2] * is3;\r\n let sm21 = mat[4] * is1;\r\n let sm22 = mat[5] * is2;\r\n let sm23 = mat[6] * is3;\r\n let sm31 = mat[8] * is1;\r\n let sm32 = mat[9] * is2;\r\n let sm33 = mat[10] * is3;\r\n\r\n let trace = sm11 + sm22 + sm33;\r\n\r\n if (trace > 0) {\r\n let s = Math.sqrt(trace + 1.0) * 2;\r\n out[3] = 0.25 * s;\r\n out[0] = (sm23 - sm32) / s;\r\n out[1] = (sm31 - sm13) / s;\r\n out[2] = (sm12 - sm21) / s;\r\n } else if (sm11 > sm22 && sm11 > sm33) {\r\n let s = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\r\n out[3] = (sm23 - sm32) / s;\r\n out[0] = 0.25 * s;\r\n out[1] = (sm12 + sm21) / s;\r\n out[2] = (sm31 + sm13) / s;\r\n } else if (sm22 > sm33) {\r\n let s = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\r\n out[3] = (sm31 - sm13) / s;\r\n out[0] = (sm12 + sm21) / s;\r\n out[1] = 0.25 * s;\r\n out[2] = (sm23 + sm32) / s;\r\n } else {\r\n let s = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\r\n out[3] = (sm12 - sm21) / s;\r\n out[0] = (sm31 + sm13) / s;\r\n out[1] = (sm23 + sm32) / s;\r\n out[2] = 0.25 * s;\r\n }\r\n\r\n return out;\r\n };\r\n}();", "import { mat4 as gl_mat4, quat2 as gl_quat2 } from \"gl-matrix\";\r\nimport { EasingFunction, MathUtils } from \"../math_utils.js\";\r\nimport { create as mat3_utils_create } from \"./mat3_utils.js\";\r\nimport { Mat4Utils } from \"./mat4_utils.js\";\r\nimport { QuatUtils, create as quat_utils_create } from \"./quat_utils.js\";\r\nimport { Vec3Utils, create as vec3_utils_create } from \"./vec3_utils.js\";\r\n\r\nexport function create(x1, y1, z1, w1, x2, y2, z2, w2) {\r\n let out = gl_quat2.create();\r\n if (x1 != null) {\r\n set(out, x1, y1, z1, w1, x2, y2, z2, w2);\r\n }\r\n return out;\r\n}\r\n\r\nexport function set(quat, x1, y1, z1, w1, x2, y2, z2, w2) {\r\n if (y1 == null) {\r\n gl_quat2.set(quat, x1, x1, x1, x1, x1, x1, x1, x1);\r\n } else {\r\n gl_quat2.set(quat, x1, y1, z1, w1, x2, y2, z2, w2);\r\n }\r\n\r\n return quat;\r\n}\r\n\r\nexport function normalize(quat, out = Quat2Utils.create()) {\r\n gl_quat2.normalize(out, quat);\r\n return out;\r\n}\r\n\r\nexport function invert(quat, out = Quat2Utils.create()) {\r\n gl_quat2.invert(out, quat);\r\n return out;\r\n}\r\n\r\nexport function conjugate(quat, out = Quat2Utils.create()) {\r\n gl_quat2.conjugate(out, quat);\r\n return out;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_quat2.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function identity(quat) {\r\n gl_quat2.identity(quat);\r\n return quat;\r\n}\r\n\r\nexport function getPosition(quat, out = Vec3Utils.create()) {\r\n gl_quat2.getTranslation(out, quat);\r\n return out;\r\n}\r\n\r\nexport function getRotation(quat, out) {\r\n return Quat2Utils.getRotationDegrees(quat, out);\r\n}\r\n\r\nexport let getRotationDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function getRotationDegrees(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toDegrees(Quat2Utils.getRotationQuat(quat, rotationQuat), out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport let getRotationRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function getRotationRadians(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toRadians(Quat2Utils.getRotationQuat(quat, rotationQuat), out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getRotationQuat(quat, out = QuatUtils.create()) {\r\n QuatUtils.copy(quat, out);\r\n return out;\r\n}\r\n\r\nexport let setPosition = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function setPosition(quat, position) {\r\n Quat2Utils.getRotationQuat(quat, rotationQuat);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotationQuat);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport function setRotation(quat, rotation) {\r\n return Quat2Utils.setRotationDegrees(quat, rotation);\r\n}\r\n\r\nexport let setRotationDegrees = function () {\r\n let position = vec3_utils_create();\r\n return function setRotationDegrees(quat, rotation) {\r\n Quat2Utils.getPosition(quat, position);\r\n Quat2Utils.setPositionRotationDegrees(quat, position, rotation);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport let setRotationRadians = function () {\r\n let position = vec3_utils_create();\r\n return function setRotationRadians(quat, rotation) {\r\n Quat2Utils.getPosition(quat, position);\r\n Quat2Utils.setPositionRotationRadians(quat, position, rotation);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport let setRotationQuat = function () {\r\n let position = vec3_utils_create();\r\n return function setRotationQuat(quat, rotation) {\r\n Quat2Utils.getPosition(quat, position);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotation);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport function setPositionRotation(quat, position, rotation) {\r\n return Quat2Utils.setPositionRotationDegrees(quat, position, rotation);\r\n}\r\n\r\nexport let setPositionRotationDegrees = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function setPositionRotationDegrees(quat, position, rotation) {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotationQuat);\r\n\r\n return quat;\r\n };\r\n}();\r\n\r\nexport let setPositionRotationRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function setPositionRotationRadians(quat, position, rotation) {\r\n Vec3Utils.radiansToQuat(rotation, rotationQuat);\r\n Quat2Utils.setPositionRotationQuat(quat, position, rotationQuat);\r\n return quat;\r\n };\r\n}();\r\n\r\nexport function setPositionRotationQuat(quat, position, rotation) {\r\n gl_quat2.fromRotationTranslation(quat, rotation, position);\r\n return quat;\r\n}\r\n\r\nexport function isNormalized(quat, epsilon = MathUtils.EPSILON) {\r\n return Math.abs(Quat2Utils.lengthSquared(quat) - 1) < epsilon;\r\n}\r\n\r\nexport function length(quat) {\r\n return gl_quat2.length(quat);\r\n}\r\n\r\nexport function lengthSquared(quat) {\r\n return gl_quat2.squaredLength(quat);\r\n}\r\n\r\nexport function mul(first, second, out = Quat2Utils.create()) {\r\n gl_quat2.mul(out, first, second);\r\n return out;\r\n}\r\n\r\nexport function getAxes(quat, out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n Quat2Utils.getLeft(quat, out[0]);\r\n Quat2Utils.getUp(quat, out[1]);\r\n Quat2Utils.getForward(quat, out[2]);\r\n return out;\r\n}\r\n\r\nexport let getForward = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getForward(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[6], rotationMatrix[7], rotationMatrix[8]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getBackward(quat, out) {\r\n out = Quat2Utils.getForward(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getLeft = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getLeft(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[0], rotationMatrix[1], rotationMatrix[2]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getRight(quat, out) {\r\n out = Quat2Utils.getLeft(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport let getUp = function () {\r\n let rotationMatrix = mat3_utils_create();\r\n return function getUp(quat, out = Vec3Utils.create()) {\r\n QuatUtils.toMatrix(quat, rotationMatrix);\r\n\r\n Vec3Utils.set(out, rotationMatrix[3], rotationMatrix[4], rotationMatrix[5]);\r\n\r\n return out;\r\n };\r\n}();\r\n\r\nexport function getDown(quat, out) {\r\n out = Quat2Utils.getUp(quat, out);\r\n Vec3Utils.negate(out, out);\r\n return out;\r\n}\r\n\r\nexport function toWorld(quat, parentTransformQuat, out = Quat2Utils.create()) {\r\n Quat2Utils.mul(parentTransformQuat, quat, out);\r\n return out;\r\n}\r\n\r\nexport let toLocal = function () {\r\n let invertQuat = create();\r\n return function toLocal(quat, parentTransformQuat, out = Quat2Utils.create()) {\r\n Quat2Utils.conjugate(parentTransformQuat, invertQuat);\r\n Quat2Utils.mul(invertQuat, quat, out);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function rotateAxis(quat, angle, axis, out) {\r\n return Quat2Utils.rotateAxisDegrees(quat, angle, axis, out);\r\n}\r\n\r\nexport function rotateAxisDegrees(quat, angle, axis, out) {\r\n return Quat2Utils.rotateAxisRadians(quat, MathUtils.toRadians(angle), axis, out);\r\n}\r\n\r\nexport let rotateAxisRadians = function () {\r\n let rotationQuat = quat_utils_create();\r\n return function rotateAxisRadians(quat, angle, axis, out = Quat2Utils.create()) {\r\n Quat2Utils.getRotationQuat(quat, rotationQuat);\r\n QuatUtils.rotateAxisRadians(rotationQuat, angle, axis, rotationQuat);\r\n Quat2Utils.copy(quat, out);\r\n Quat2Utils.setRotationQuat(out, rotationQuat);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function toMatrix(quat, out = Mat4Utils.create()) {\r\n _customGLMatrixFromQuat2(out, quat);\r\n return out;\r\n}\r\n\r\nexport function fromMatrix(matrix, out = Quat2Utils.create()) {\r\n Mat4Utils.toQuat(matrix, out);\r\n return out;\r\n}\r\n\r\nexport function lerp(from, to, interpolationFactor, out = Quat2Utils.create()) {\r\n if (interpolationFactor <= 0) {\r\n Quat2Utils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n Quat2Utils.copy(to, out);\r\n return out;\r\n }\r\n\r\n gl_quat2.lerp(out, from, to, interpolationFactor);\r\n return out;\r\n}\r\n\r\nexport function interpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return Quat2Utils.lerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let slerp = function () {\r\n let fromPosition = vec3_utils_create();\r\n let toPosition = vec3_utils_create();\r\n let interpolatedPosition = vec3_utils_create();\r\n let fromRotationQuat = quat_utils_create();\r\n let toRotationQuat = quat_utils_create();\r\n let interpolatedRotationQuat = quat_utils_create();\r\n return function slerp(from, to, interpolationFactor, out = Quat2Utils.create()) {\r\n if (interpolationFactor <= 0) {\r\n Quat2Utils.copy(from, out);\r\n return out;\r\n } else if (interpolationFactor >= 1) {\r\n Quat2Utils.copy(to, out);\r\n return out;\r\n }\r\n\r\n Quat2Utils.getPosition(from, fromPosition);\r\n Quat2Utils.getPosition(to, toPosition);\r\n\r\n Quat2Utils.getRotationQuat(from, fromRotationQuat);\r\n Quat2Utils.getRotationQuat(to, toRotationQuat);\r\n\r\n Vec3Utils.lerp(fromPosition, toPosition, interpolationFactor, interpolatedPosition);\r\n QuatUtils.slerp(fromRotationQuat, toRotationQuat, interpolationFactor, interpolatedRotationQuat);\r\n\r\n Quat2Utils.setPositionRotationQuat(out, interpolatedPosition, interpolatedRotationQuat);\r\n return out;\r\n };\r\n}();\r\n\r\nexport function sinterpolate(from, to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n let lerpFactor = easingFunction(interpolationFactor);\r\n return Quat2Utils.slerp(from, to, lerpFactor, out);\r\n}\r\n\r\nexport let Quat2Utils = {\r\n create,\r\n set,\r\n normalize,\r\n invert,\r\n conjugate,\r\n copy,\r\n identity,\r\n getPosition,\r\n getRotation,\r\n getRotationDegrees,\r\n getRotationRadians,\r\n getRotationQuat,\r\n setPosition,\r\n setRotation,\r\n setRotationDegrees,\r\n setRotationRadians,\r\n setRotationQuat,\r\n setPositionRotation,\r\n setPositionRotationDegrees,\r\n setPositionRotationRadians,\r\n setPositionRotationQuat,\r\n isNormalized,\r\n length,\r\n lengthSquared,\r\n mul,\r\n getAxes,\r\n getForward,\r\n getBackward,\r\n getLeft,\r\n getRight,\r\n getUp,\r\n getDown,\r\n toWorld,\r\n toLocal,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n toMatrix,\r\n fromMatrix,\r\n lerp,\r\n interpolate,\r\n slerp,\r\n sinterpolate\r\n};\r\n\r\n\r\n\r\n\r\n// This is used in place of the glMatrix one to avoid the array allocation\r\nlet _customGLMatrixFromQuat2 = function () {\r\n let translation = vec3_utils_create();\r\n return function _customGLMatrixFromQuat2(out, a) {\r\n let bx = -a[0],\r\n by = -a[1],\r\n bz = -a[2],\r\n bw = a[3],\r\n ax = a[4],\r\n ay = a[5],\r\n az = a[6],\r\n aw = a[7];\r\n\r\n let magnitude = bx * bx + by * by + bz * bz + bw * bw;\r\n //Only scale if it makes sense\r\n if (magnitude > 0) {\r\n translation[0] = ((ax * bw + aw * bx + ay * bz - az * by) * 2) / magnitude;\r\n translation[1] = ((ay * bw + aw * by + az * bx - ax * bz) * 2) / magnitude;\r\n translation[2] = ((az * bw + aw * bz + ax * by - ay * bx) * 2) / magnitude;\r\n } else {\r\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\r\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\r\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\r\n }\r\n gl_mat4.fromRotationTranslation(out, a, translation);\r\n return out;\r\n };\r\n}();", "import { vec2 as gl_vec2, type vec2 as gl_vec2_type } from \"gl-matrix\";\r\nimport { Vector2 } from \"../../type_definitions/array_type_definitions.js\";\r\n\r\nexport function create(): Vector2;\r\nexport function create(x: number, y: number): Vector2;\r\nexport function create(uniformValue: number): Vector2;\r\nexport function create(x?: number, y?: number): Vector2 {\r\n const out = gl_vec2.create() as unknown as Vector2;\r\n\r\n if (x != null) {\r\n set(out, x, y!);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(vector: T, x: number, y: number): T;\r\nexport function set(vector: T, uniformValue: number): T;\r\nexport function set(vector: T, x: number, y?: number): T {\r\n if (y == null) {\r\n gl_vec2.set(vector as unknown as gl_vec2_type, x, x);\r\n } else {\r\n gl_vec2.set(vector as unknown as gl_vec2_type, x, y);\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function copy(from: Readonly, to: T): T {\r\n gl_vec2.copy(to as unknown as gl_vec2_type, from as unknown as gl_vec2_type);\r\n return to;\r\n}\r\n\r\n/** The overload where `T extends Vector2` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `T` when `Readonly` is used */\r\nexport function clone(vector: Readonly): T;\r\nexport function clone(vector: Readonly): number[];\r\nexport function clone(vector: T): T;\r\nexport function clone(vector: Readonly): T {\r\n return vector.slice(0) as T;\r\n}\r\n\r\nexport function length(vector: Readonly): number {\r\n return gl_vec2.length(vector as unknown as gl_vec2_type);\r\n}\r\n\r\nexport function normalize(vector: Readonly): T;\r\nexport function normalize(vector: Readonly, out: S): S;\r\nexport function normalize(vector: Readonly, out: T | S = Vec2Utils.clone(vector)): T | S {\r\n gl_vec2.normalize(out as unknown as gl_vec2_type, vector as unknown as gl_vec2_type);\r\n return out;\r\n}\r\n\r\nexport function zero(vector: T): T {\r\n gl_vec2.zero(vector as unknown as gl_vec2_type);\r\n return vector;\r\n}\r\n\r\nexport function isZero(vector: Readonly, epsilon: number = 0): boolean {\r\n return Vec2Utils.length(vector) <= epsilon;\r\n}\r\n\r\nexport const Vec2Utils = {\r\n create,\r\n set,\r\n copy,\r\n clone,\r\n length,\r\n normalize,\r\n zero,\r\n isZero\r\n} as const;", "import { vec4 as gl_vec4 } from \"gl-matrix\";\r\n\r\nexport function create(x, y, z, w) {\r\n let out = gl_vec4.create();\r\n\r\n if (x != null) {\r\n set(out, x, y, z, w);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function set(vector, x, y, z, w) {\r\n if (y == null) {\r\n gl_vec4.set(vector, x, x, x, x);\r\n } else {\r\n gl_vec4.set(vector, x, y, z, w);\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function copy(from, to) {\r\n gl_vec4.copy(to, from);\r\n return to;\r\n}\r\n\r\nexport function clone(vector, out = create()) {\r\n Vec4Utils.copy(vector, out);\r\n return out;\r\n}\r\n\r\nexport let Vec4Utils = {\r\n create,\r\n set,\r\n copy,\r\n clone\r\n};", "import { Matrix3, Matrix4, Quaternion, Quaternion2, Vector2, Vector3, Vector4 } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../../../cauldron/utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../../../cauldron/utils/array/quat_utils.js\";\r\nimport { Vec2Utils } from \"../../../../cauldron/utils/array/vec2_utils.js\";\r\nimport { Vec3Utils } from \"../../../../cauldron/utils/array/vec3_utils.js\";\r\nimport { Vec4Utils } from \"../../../../cauldron/utils/array/vec4_utils.js\";\r\n\r\nexport function vec2_create(): Vector2;\r\nexport function vec2_create(x: number, y: number): Vector2;\r\nexport function vec2_create(uniformValue: number): Vector2;\r\nexport function vec2_create(x?: number, y?: number): Vector2 {\r\n return Vec2Utils.create(x!, y!);\r\n}\r\n\r\nexport function vec3_create(): Vector3;\r\nexport function vec3_create(x: number, y: number, z: number): Vector3;\r\nexport function vec3_create(uniformValue: number): Vector3;\r\nexport function vec3_create(x?: number, y?: number, z?: number): Vector3 {\r\n return Vec3Utils.create(x, y, z);\r\n}\r\n\r\nexport function vec4_create(): Vector4;\r\nexport function vec4_create(x: number, y: number, z: number, w: number): Vector4;\r\nexport function vec4_create(uniformValue: number): Vector4;\r\nexport function vec4_create(x?: number, y?: number, z?: number, w?: number): Vector4 {\r\n return Vec4Utils.create(x, y, z, w);\r\n}\r\n\r\nexport function quat_create(): Quaternion;\r\nexport function quat_create(x: number, y: number, z: number, w: number): Quaternion;\r\nexport function quat_create(uniformValue: number): Quaternion;\r\nexport function quat_create(x?: number, y?: number, z?: number, w?: number): Quaternion {\r\n return QuatUtils.create(x, y, z, w);\r\n}\r\n\r\nexport function quat2_create(): Quaternion2;\r\nexport function quat2_create(x1: number, y1: number, z1: number, w1: number, x2: number, y2: number, z2: number, w2: number): Quaternion2;\r\nexport function quat2_create(uniformValue: number): Quaternion2;\r\nexport function quat2_create(x1?: number, y1?: number, z1?: number, w1?: number, x2?: number, y2?: number, z2?: number, w2?: number): Quaternion2 {\r\n return Quat2Utils.create(x1, y1, z1, w1, x2, y2, z2, w2);\r\n}\r\n\r\nexport function mat3_create(): Matrix3;\r\nexport function mat3_create(\r\n m00: number, m01: number, m02: number,\r\n m10: number, m11: number, m12: number,\r\n m20: number, m21: number, m22: number): Matrix3;\r\nexport function mat3_create(uniformValue: number): Matrix3;\r\nexport function mat3_create(\r\n m00?: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): Matrix3 {\r\n return Mat3Utils.create(\r\n m00!, m01!, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!\r\n );\r\n}\r\n\r\nexport function mat4_create(): Matrix4;\r\nexport function mat4_create(\r\n m00: number, m01: number, m02: number, m03: number,\r\n m10: number, m11: number, m12: number, m13: number,\r\n m20: number, m21: number, m22: number, m23: number,\r\n m30: number, m31: number, m32: number, m33: number): Matrix4;\r\nexport function mat4_create(uniformValue: number): Matrix4;\r\nexport function mat4_create(\r\n m00?: number, m01?: number, m02?: number, m03?: number,\r\n m10?: number, m11?: number, m12?: number, m13?: number,\r\n m20?: number, m21?: number, m22?: number, m23?: number,\r\n m30?: number, m31?: number, m32?: number, m33?: number): Matrix4 {\r\n return Mat4Utils.create(\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33\r\n );\r\n}", "export class ObjectPoolParams {\r\n\r\n constructor() {\r\n this.myInitialPoolSize = 0;\r\n this.myAmountToAddWhenEmpty = 0; // If all the objects are busy, this amount will be added to the pool\r\n this.myPercentageToAddWhenEmpty = 0; // If all the objects are busy, this percentage of the current pool size will be added to the pool \r\n\r\n this.myCloneParams = undefined;\r\n\r\n this.myOptimizeObjectsAllocation = true; // If true it will pre-allocate the memory before adding new objects to the pool\r\n\r\n // These extra functions can be used if u want to use the pool with objects that are not from WL (WL Object)\r\n this.myCloneCallback = null; // Signature: callback(object, cloneParams) -> clonedObject\r\n this.mySetActiveCallback = null; // Signature: callback(object, active)\r\n this.myEqualCallback = null; // Signature: callback(firstObject, secondObject) -> bool\r\n this.myDestroyCallback = null; // Signature: callback(object)\r\n this.myOptimizeObjectsAllocationCallback = null; // Signature: callback(object, numberOfObjectsToAllocate)\r\n\r\n this.myLogEnabled = false;\r\n }\r\n}\r\n\r\nexport class ObjectPool {\r\n\r\n constructor(objectPrototype, objectPoolParams) {\r\n this._myObjectPoolParams = objectPoolParams;\r\n\r\n this._myObjectPrototype = objectPrototype;\r\n\r\n this._myAvailableObjects = [];\r\n this._myBusyObjects = [];\r\n\r\n this._addToPool(objectPoolParams.myInitialPoolSize, false);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n get() {\r\n let object = this._myAvailableObjects.shift();\r\n\r\n if (object == null) {\r\n let amountToAdd = Math.ceil(this._myBusyObjects.length * this._myObjectPoolParams.myPercentageToAddWhenEmpty);\r\n amountToAdd += this._myObjectPoolParams.myAmountToAddWhenEmpty;\r\n this._addToPool(amountToAdd, this._myObjectPoolParams.myLogEnabled);\r\n object = this._myAvailableObjects.shift();\r\n }\r\n\r\n // Object could still be null if the amountToAdd is 0\r\n if (object != null) {\r\n this._myBusyObjects.push(object);\r\n }\r\n\r\n return object;\r\n }\r\n\r\n has(object) {\r\n let hasObject = false;\r\n\r\n if (this.isBusy(object) || this.isAvailable(object)) {\r\n hasObject = true;\r\n }\r\n\r\n return hasObject;\r\n }\r\n\r\n isBusy(object) {\r\n return this._myBusyObjects.pp_has(this._equals.bind(this, object));\r\n }\r\n\r\n isAvailable(object) {\r\n return this._myAvailableObjects.pp_has(this._equals.bind(this, object));\r\n }\r\n\r\n release(object) {\r\n let released = this._myBusyObjects.pp_remove(this._equals.bind(this, object));\r\n if (released != null) {\r\n this._setActive(released, false);\r\n this._myAvailableObjects.push(released);\r\n }\r\n }\r\n\r\n releaseAll() {\r\n for (let busyObject of this._myBusyObjects) {\r\n this._setActive(busyObject, false);\r\n this._myAvailableObjects.push(busyObject);\r\n }\r\n }\r\n\r\n increase(amount) {\r\n this._addToPool(amount, false);\r\n }\r\n\r\n increasePercentage(percentage) {\r\n let amount = Math.ceil((this.getSize()) * percentage);\r\n this._addToPool(amount, false);\r\n }\r\n\r\n getObjects() {\r\n let objects = [];\r\n objects.push(...this._myAvailableObjects);\r\n objects.push(...this._myBusyObjects);\r\n\r\n return objects;\r\n }\r\n\r\n getSize() {\r\n return this._myBusyObjects.length + this._myAvailableObjects.length;\r\n }\r\n\r\n getAvailableObjects() {\r\n return this._myAvailableObjects;\r\n }\r\n\r\n getAvailableSize() {\r\n return this._myAvailableObjects.length;\r\n }\r\n\r\n getBusyObjects() {\r\n return this._myBusyObjects;\r\n }\r\n\r\n getBusySize() {\r\n return this._myBusyObjects.length;\r\n }\r\n\r\n _addToPool(size, logEnabled) {\r\n if (size <= 0) {\r\n return;\r\n }\r\n\r\n if (this._myObjectPoolParams.myOptimizeObjectsAllocation) {\r\n if (this._myObjectPoolParams.myOptimizeObjectsAllocationCallback != null) {\r\n this._myObjectPoolParams.myOptimizeObjectsAllocationCallback(this._myObjectPrototype, size);\r\n } else if (this._myObjectPrototype.pp_reserveObjects != null) {\r\n this._myObjectPrototype.pp_reserveObjects(size);\r\n }\r\n }\r\n\r\n for (let i = 0; i < size; i++) {\r\n this._myAvailableObjects.push(this._clone(this._myObjectPrototype));\r\n }\r\n\r\n if (logEnabled) {\r\n console.warn(\"Added new elements to the pool:\", size);\r\n }\r\n }\r\n\r\n _clone(object) {\r\n let clone = null;\r\n\r\n if (this._myObjectPoolParams.myCloneCallback != null) {\r\n clone = this._myObjectPoolParams.myCloneCallback(object, this._myObjectPoolParams.myCloneParams);\r\n } else if (object.pp_clone != null) {\r\n clone = object.pp_clone(this._myObjectPoolParams.myCloneParams);\r\n } else if (object.clone != null) {\r\n clone = object.clone(this._myObjectPoolParams.myCloneParams);\r\n }\r\n\r\n if (clone == null) {\r\n console.error(\"Object not cloneable, pool will return null\");\r\n } else {\r\n this._setActive(clone, false);\r\n }\r\n\r\n return clone;\r\n }\r\n\r\n _setActive(object, active) {\r\n if (this._myObjectPoolParams.mySetActiveCallback != null) {\r\n this._myObjectPoolParams.mySetActiveCallback(object, active);\r\n } else if (object.pp_setActive != null) {\r\n object.pp_setActive(active);\r\n } else if (object.setActive != null) {\r\n object.setActive(active);\r\n }\r\n }\r\n\r\n _equals(first, second) {\r\n let equals = false;\r\n\r\n if (this._myObjectPoolParams.myEqualCallback != null) {\r\n equals = this._myObjectPoolParams.myEqualCallback(first, second);\r\n } else if (first.pp_equals != null) {\r\n equals = first.pp_equals(second);\r\n } else if (first.equals != null) {\r\n equals = first.equals(second);\r\n } else {\r\n equals = first == second;\r\n }\r\n\r\n return equals;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let object of this._myAvailableObjects) {\r\n this._destroyObject(object);\r\n }\r\n\r\n for (let object of this._myBusyObjects) {\r\n this._destroyObject(object);\r\n }\r\n\r\n this._destroyObject(this._myObjectPrototype);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n\r\n _destroyObject(object) {\r\n if (this._myObjectPoolParams.myDestroyCallback != null) {\r\n this._myObjectPoolParams.myDestroyCallback(object);\r\n } else if (object.pp_destroy != null) {\r\n object.pp_destroy();\r\n } else if (object.destroy != null) {\r\n object.destroy();\r\n }\r\n }\r\n}", "/*\r\nlet visualParams = new VisualArrowParams();\r\nvisualParams.myStart.vec3_copy(start);\r\nvisualParams.myDirection.vec3_copy(direction);\r\nvisualParams.myLength = 0.2;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualArrow = new VisualArrow(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\nimport { VisualLine, VisualLineParams } from \"./visual_line.js\";\r\n\r\nexport class VisualArrowParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myStart = vec3_create();\r\n this.myDirection = vec3_create(0, 0, 1);\r\n this.myLength = 0;\r\n\r\n this.myThickness = 0.005;\r\n\r\n this.myArrowThickness = null; // null means this.myThickness * 1.5 will be used\r\n this.myArrowLength = null; // null means this.myThickness * 3.5 will be used\r\n\r\n this.myShareArrowLengthWithLineWhenArrowLongerThanLength = true;\r\n\r\n this.myLineMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCylinder\r\n this.myArrowMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCone\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.ARROW;\r\n }\r\n\r\n setStartEnd(start, end) {\r\n end.vec3_sub(start, this.myDirection);\r\n this.myLength = this.myDirection.vec3_length();\r\n this.myDirection.vec3_normalize(this.myDirection);\r\n this.myStart.vec3_copy(start);\r\n\r\n return this;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualArrow {\r\n\r\n constructor(params = new VisualArrowParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myVisualLine = new VisualLine(new VisualLineParams(this._myParams.myParent.pp_getEngine()));\r\n this._myVisualLine.setAutoRefresh(false);\r\n\r\n this._myArrowParentObject = null;\r\n this._myArrowObject = null;\r\n this._myArrowMeshComponent = null;\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myVisualLine.setVisible(visible);\r\n this._myArrowParentObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n this._myVisualLine.forceRefresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n this._myDirty = false;\r\n }\r\n\r\n this._myVisualLine.update(dt);\r\n }\r\n\r\n _build() {\r\n this._myArrowParentObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n this._myArrowObject = this._myArrowParentObject.pp_addObject();\r\n\r\n this._myArrowMeshComponent = this._myArrowObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualArrowParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualArrow(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualLine.destroy();\r\n this._myArrowParentObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualArrow.prototype._refresh = function () {\r\n let arrowPosition = vec3_create();\r\n let parentTranslate = vec3_create();\r\n let arrowScale = vec3_create();\r\n\r\n let forward = vec3_create(0, 1, 0);\r\n return function _refresh() {\r\n this._myArrowParentObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n let arrowThickness = (this._myParams.myArrowThickness != null) ? this._myParams.myArrowThickness : this._myParams.myThickness * 1.5;\r\n let arrowLength = (this._myParams.myArrowLength != null) ? this._myParams.myArrowLength : this._myParams.myThickness * 3.5;\r\n\r\n if (this._myParams.myShareArrowLengthWithLineWhenArrowLongerThanLength && arrowLength > this._myParams.myLength / 2) {\r\n arrowLength = this._myParams.myLength / 2;\r\n }\r\n\r\n arrowLength = Math.min(arrowLength, this._myParams.myLength);\r\n\r\n arrowScale.vec3_set(arrowThickness, arrowLength / 2, arrowThickness);\r\n\r\n let lineLength = this._myParams.myLength - arrowLength;\r\n\r\n this._myParams.myDirection.vec3_scale(lineLength, arrowPosition);\r\n arrowPosition.vec3_add(this._myParams.myStart, arrowPosition);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myArrowParentObject.pp_setPositionLocal(arrowPosition);\r\n this._myArrowParentObject.pp_setUpLocal(this._myParams.myDirection, forward);\r\n } else {\r\n this._myArrowParentObject.pp_setPosition(arrowPosition);\r\n this._myArrowParentObject.pp_setUp(this._myParams.myDirection, forward);\r\n }\r\n\r\n parentTranslate.vec3_set(0, (arrowLength / 2) - 0.00001, 0);\r\n this._myArrowParentObject.pp_translateObject(parentTranslate);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myArrowObject.pp_setScaleLocal(arrowScale);\r\n } else {\r\n this._myArrowObject.pp_setScale(arrowScale);\r\n }\r\n\r\n if (this._myParams.myArrowMesh != null) {\r\n this._myArrowMeshComponent.mesh = this._myParams.myArrowMesh;\r\n } else {\r\n this._myArrowMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).myCone;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myArrowMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n this._myArrowMeshComponent.material = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myArrowMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n\r\n let visualLineParams = this._myVisualLine.getParams();\r\n visualLineParams.myStart.vec3_copy(this._myParams.myStart);\r\n visualLineParams.myDirection.vec3_copy(this._myParams.myDirection);\r\n visualLineParams.myLength = lineLength;\r\n visualLineParams.myThickness = this._myParams.myThickness;\r\n visualLineParams.myMesh = this._myParams.myLineMesh;\r\n\r\n visualLineParams.myMaterial = this._myArrowMeshComponent.material;\r\n\r\n visualLineParams.myParent = this._myParams.myParent;\r\n visualLineParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualLine.paramsUpdated();\r\n };\r\n}();\r\n\r\nVisualArrowParams.prototype.copy = function copy(other) {\r\n this.myStart.vec3_copy(other.myStart);\r\n this.myDirection.vec3_copy(other.myDirection);\r\n this.myLength = other.myLength;\r\n this.myThickness = other.myThickness;\r\n\r\n this.myArrowThickness = other.myArrowThickness;\r\n this.myArrowLength = other.myArrowLength;\r\n\r\n this.myShareArrowLengthWithLineWhenArrowLongerThanLength = other.myShareArrowLengthWithLineWhenArrowLongerThanLength;\r\n\r\n this.myArrowMesh = other.myArrowMesh;\r\n this.myLineMesh = other.myLineMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "export let VisualElementType = {\r\n MESH: 0,\r\n LINE: 1,\r\n POINT: 2,\r\n TEXT: 3,\r\n ARROW: 4,\r\n TRANSFORM: 5,\r\n RAYCAST: 6,\r\n TORUS: 7\r\n};", "/*\r\nlet visualParams = new VisualLineParams();\r\nvisualParams.myStart.vec3_copy(start);\r\nvisualParams.myDirection.vec3_copy(direction);\r\nvisualParams.myLength = 0.2;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualLine = new VisualLine(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualLineParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myStart = vec3_create();\r\n this.myDirection = vec3_create(0, 0, 1);\r\n this.myLength = 0;\r\n\r\n this.myThickness = 0.005;\r\n\r\n this.myMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCylinder\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.LINE;\r\n }\r\n\r\n setStartEnd(start, end) {\r\n end.vec3_sub(start, this.myDirection);\r\n this.myLength = this.myDirection.vec3_length();\r\n this.myDirection.vec3_normalize(this.myDirection);\r\n this.myStart.vec3_copy(start);\r\n\r\n return this;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualLine {\r\n\r\n constructor(params = new VisualLineParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myLineParentObject = null;\r\n this._myLineObject = null;\r\n this._myLineMeshComponent = null;\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myLineParentObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _build() {\r\n this._myLineParentObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n this._myLineObject = this._myLineParentObject.pp_addObject();\r\n\r\n this._myLineMeshComponent = this._myLineObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualLineParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualLine(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myLineParentObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualLine.prototype._refresh = function () {\r\n let scaleLine = vec3_create();\r\n let translateLine = vec3_create();\r\n\r\n let forward = vec3_create(0, 1, 0);\r\n return function _refresh() {\r\n this._myLineParentObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myLineParentObject.pp_setPositionLocal(this._myParams.myStart);\r\n } else {\r\n this._myLineParentObject.pp_setPosition(this._myParams.myStart);\r\n }\r\n\r\n scaleLine.vec3_set(this._myParams.myThickness / 2, this._myParams.myLength / 2, this._myParams.myThickness / 2);\r\n if (this._myParams.myLocal) {\r\n this._myLineObject.pp_setScaleLocal(scaleLine);\r\n } else {\r\n this._myLineObject.pp_setScale(scaleLine);\r\n }\r\n\r\n if (this._myParams.myLocal) {\r\n this._myLineObject.pp_setUpLocal(this._myParams.myDirection, forward);\r\n } else {\r\n this._myLineObject.pp_setUp(this._myParams.myDirection, forward);\r\n }\r\n\r\n this._myLineObject.pp_resetPositionLocal();\r\n translateLine.vec3_set(0, this._myParams.myLength / 2, 0);\r\n this._myLineObject.pp_translateObject(translateLine);\r\n\r\n if (this._myParams.myMesh != null) {\r\n this._myLineMeshComponent.mesh = this._myParams.myMesh;\r\n } else {\r\n this._myLineMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).myCylinder;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myLineMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n this._myLineMeshComponent.material = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myLineMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n };\r\n}();\r\n\r\nVisualLineParams.prototype.copy = function copy(other) {\r\n this.myStart.vec3_copy(other.myStart);\r\n this.myDirection.vec3_copy(other.myDirection);\r\n this.myLength = other.myLength;\r\n this.myThickness = other.myThickness;\r\n\r\n this.myMesh = other.myMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualMeshParams();\r\nvisualParams.myTransform = transform;\r\nvisualParams.myMesh = myDefaultResources.myMeshes.mySphere;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualMesh = new VisualMesh(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { mat4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualMeshParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myTransform = mat4_create();\r\n\r\n this.myMesh = null;\r\n this.myMaterial = null;\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.MESH;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualMesh {\r\n\r\n constructor(params = new VisualMeshParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myMeshObject = null;\r\n this._myMeshComponent = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myMeshObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _refresh() {\r\n this._myMeshObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myMeshObject.pp_setTransformLocal(this._myParams.myTransform);\r\n } else {\r\n this._myMeshObject.pp_setTransform(this._myParams.myTransform);\r\n }\r\n\r\n if (this._myParams.myMesh == null) {\r\n this._myMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).mySphere;\r\n } else {\r\n this._myMeshComponent.mesh = this._myParams.myMesh;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n this._myMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n this._myMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n }\r\n\r\n _build() {\r\n this._myMeshObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n\r\n this._myMeshComponent = this._myMeshObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualMeshParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualMesh(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myMeshObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualMeshParams.prototype.copy = function copy(other) {\r\n this.myTransform.pp_copy(other.myTransform);\r\n\r\n if (other.myMesh != null) {\r\n this.myMesh = other.myMesh;\r\n } else {\r\n this.myMesh = null;\r\n }\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualPointParams();\r\nvisualParams.myPosition.vec3_copy(position);\r\nvisualParams.myRadius = 0.005;\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualPoint = new VisualPoint(visualParams);\r\n*/\r\n\r\nimport { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualPointParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPosition = vec3_create();\r\n this.myRadius = 0.005;\r\n\r\n this.myMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.mySphere\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.POINT;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualPoint {\r\n\r\n constructor(params = new VisualPointParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myPointObject = null;\r\n this._myPointMeshComponent = null;\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myPointObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _build() {\r\n this._myPointObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n\r\n this._myPointMeshComponent = this._myPointObject.pp_addComponent(MeshComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualPointParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualPoint(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myPointObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualPoint.prototype._refresh = function () {\r\n let rotation = vec3_create(0, 0, 0);\r\n return function _refresh() {\r\n this._myPointObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myPointObject.pp_setPositionLocal(this._myParams.myPosition);\r\n this._myPointObject.pp_setRotationLocal(rotation);\r\n this._myPointObject.pp_setScaleLocal(this._myParams.myRadius);\r\n } else {\r\n this._myPointObject.pp_setPosition(this._myParams.myPosition);\r\n this._myPointObject.pp_setRotation(rotation);\r\n this._myPointObject.pp_setScale(this._myParams.myRadius);\r\n }\r\n\r\n if (this._myParams.myMesh != null) {\r\n this._myPointMeshComponent.mesh = this._myParams.myMesh;\r\n } else {\r\n this._myPointMeshComponent.mesh = Globals.getDefaultMeshes(this._myParams.myParent.pp_getEngine()).mySphere;\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myPointMeshComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n this._myPointMeshComponent.material = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myPointMeshComponent.material = this._myParams.myMaterial;\r\n }\r\n };\r\n}();\r\n\r\nVisualPointParams.prototype.copy = function copy(other) {\r\n this.myPosition.vec3_copy(other.myPosition);\r\n this.myRadius = other.myRadius;\r\n\r\n this.myMesh = other.myMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "import { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { RaycastHit, RaycastParams, RaycastResults } from \"./physics_raycast_params.js\";\r\n\r\nlet _myLayerFlagsNames = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\r\n\r\nlet _myRaycastCount = new WeakMap();\r\nlet _myRaycastVisualDebugEnabled = new WeakMap();\r\n\r\nexport function setLayerFlagsNames(layerFlagsNames) {\r\n _myLayerFlagsNames = layerFlagsNames;\r\n}\r\n\r\nexport function getLayerFlagsNames() {\r\n return _myLayerFlagsNames;\r\n}\r\n\r\nexport function getRaycastCount(physics = Globals.getPhysics()) {\r\n let raycastCount = _myRaycastCount.get(physics);\r\n return raycastCount != null ? raycastCount : 0;\r\n}\r\n\r\nexport function resetRaycastCount(physics = Globals.getPhysics()) {\r\n _myRaycastCount.set(physics, 0);\r\n}\r\n\r\nexport function isRaycastVisualDebugEnabled(physics = Globals.getPhysics()) {\r\n return _myRaycastVisualDebugEnabled.get(physics);\r\n}\r\n\r\nexport function setRaycastVisualDebugEnabled(visualDebugEnabled, physics = Globals.getPhysics()) {\r\n _myRaycastVisualDebugEnabled.set(physics, visualDebugEnabled);\r\n}\r\n\r\nexport let raycast = function () {\r\n // These initializations assume that there can't be more than @maxHitCount hits within a single rayCast call\r\n // if the hitCount is greater, these arrays will be allocated again\r\n let maxHitCount = 20;\r\n let objects = new Array(maxHitCount);\r\n let distances = new Float32Array(maxHitCount);\r\n let locations = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n let normals = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n\r\n let insideCheckSubVector = vec3_create();\r\n let invertedRaycastDirection = vec3_create();\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function raycast(raycastParams, raycastResults = new RaycastResults()) {\r\n let internalRaycastResults = raycastParams.myPhysics.rayCast(raycastParams.myOrigin, raycastParams.myDirection, raycastParams.myBlockLayerFlags.getMask(), raycastParams.myDistance);\r\n\r\n if (raycastResults.myRaycastParams == null) {\r\n raycastResults.myRaycastParams = new RaycastParams(raycastParams.myPhysics);\r\n }\r\n\r\n raycastResults.myRaycastParams.copy(raycastParams);\r\n\r\n let currentValidHitIndex = 0;\r\n let validHitsCount = 0;\r\n\r\n let hitCount = internalRaycastResults.hitCount;\r\n if (hitCount != 0) {\r\n if (hitCount > maxHitCount) {\r\n console.warn(\"Raycast hitcount is more than the expected one: \" + hitCount + \" - Allocation of needed resources performed\");\r\n\r\n maxHitCount = Math.ceil(hitCount + hitCount * 0.5);\r\n objects = new Array(maxHitCount);\r\n distances = new Float32Array(maxHitCount);\r\n locations = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n normals = Array.from({ length: maxHitCount }, () => new Float32Array(3));\r\n }\r\n\r\n let objectsAlreadyGet = false;\r\n let distancesAlreadyGet = false;\r\n let locationsAlreadyGet = false;\r\n let normalsAlreadyGet = false;\r\n\r\n invertedRaycastDirection = raycastParams.myDirection.vec3_negate(invertedRaycastDirection);\r\n\r\n for (let i = 0; i < hitCount; i++) {\r\n if (raycastParams.myObjectsToIgnore.length != 0) {\r\n if (!objectsAlreadyGet) {\r\n objectsAlreadyGet = true;\r\n internalRaycastResults.pp_getObjects(objects);\r\n }\r\n\r\n if (raycastParams.myObjectsToIgnore.pp_hasEqual(objects[i], objectsEqualCallback)) {\r\n continue;\r\n }\r\n }\r\n\r\n if (!distancesAlreadyGet) {\r\n distancesAlreadyGet = true;\r\n internalRaycastResults.pp_getDistances(distances);\r\n }\r\n\r\n let hitInsideCollision = distances[i] == 0;\r\n if (hitInsideCollision) {\r\n if (!locationsAlreadyGet) {\r\n locationsAlreadyGet = true;\r\n internalRaycastResults.pp_getLocations(locations);\r\n }\r\n\r\n hitInsideCollision &&= raycastParams.myOrigin.vec3_sub(locations[i], insideCheckSubVector).vec3_isZero(Math.PP_EPSILON);\r\n\r\n if (hitInsideCollision) {\r\n if (!normalsAlreadyGet) {\r\n normalsAlreadyGet = true;\r\n internalRaycastResults.pp_getNormals(normals);\r\n }\r\n\r\n hitInsideCollision &&= invertedRaycastDirection.vec3_equals(normals[i], Math.PP_EPSILON_DEGREES);\r\n }\r\n }\r\n\r\n if (!raycastParams.myIgnoreHitsInsideCollision || !hitInsideCollision) {\r\n let hit = null;\r\n\r\n if (currentValidHitIndex < raycastResults.myHits.length) {\r\n hit = raycastResults.myHits[currentValidHitIndex];\r\n } else if (raycastResults._myUnusedHits != null && raycastResults._myUnusedHits.length > 0) {\r\n hit = raycastResults._myUnusedHits.pop();\r\n raycastResults.myHits.push(hit);\r\n } else {\r\n hit = new RaycastHit();\r\n raycastResults.myHits.push(hit);\r\n }\r\n\r\n if (!objectsAlreadyGet) {\r\n objectsAlreadyGet = true;\r\n internalRaycastResults.pp_getObjects(objects);\r\n }\r\n\r\n if (!locationsAlreadyGet) {\r\n locationsAlreadyGet = true;\r\n internalRaycastResults.pp_getLocations(locations);\r\n }\r\n\r\n if (!normalsAlreadyGet) {\r\n normalsAlreadyGet = true;\r\n internalRaycastResults.pp_getNormals(normals);\r\n }\r\n\r\n hit.myPosition.vec3_copy(locations[i]);\r\n hit.myNormal.vec3_copy(normals[i]);\r\n hit.myDistance = distances[i];\r\n hit.myObject = objects[i];\r\n hit.myInsideCollision = hitInsideCollision;\r\n\r\n validHitsCount++;\r\n currentValidHitIndex++;\r\n }\r\n }\r\n }\r\n\r\n if (raycastResults.myHits.length > validHitsCount) {\r\n if (raycastResults._myUnusedHits == null) {\r\n raycastResults._myUnusedHits = [];\r\n }\r\n\r\n let hitsToRemove = raycastResults.myHits.length - validHitsCount;\r\n for (let i = 0; i < hitsToRemove; i++) {\r\n raycastResults._myUnusedHits.push(raycastResults.myHits.pop());\r\n }\r\n }\r\n\r\n if (Globals.isDebugEnabled(raycastParams.myPhysics.pp_getEngine())) {\r\n if (PhysicsUtils.isRaycastVisualDebugEnabled(raycastParams.myPhysics)) {\r\n Globals.getDebugVisualManager(raycastParams.myPhysics.pp_getEngine()).drawRaycast(0, raycastResults);\r\n }\r\n\r\n _increaseRaycastCount(raycastParams.myPhysics);\r\n }\r\n\r\n return raycastResults;\r\n };\r\n}();\r\n\r\nexport let PhysicsUtils = {\r\n setLayerFlagsNames,\r\n getLayerFlagsNames,\r\n getRaycastCount,\r\n resetRaycastCount,\r\n isRaycastVisualDebugEnabled,\r\n setRaycastVisualDebugEnabled,\r\n raycast\r\n};\r\n\r\n\r\n\r\nfunction _increaseRaycastCount(physics = Globals.getPhysics()) {\r\n let raycastCount = _myRaycastCount.get(physics);\r\n\r\n if (raycastCount == null) {\r\n _myRaycastCount.set(physics, 1);\r\n } else {\r\n _myRaycastCount.set(physics, raycastCount + 1);\r\n }\r\n}", "import { PhysicsUtils } from \"./physics_utils.js\";\r\n\r\nexport class PhysicsLayerFlags {\r\n\r\n constructor() {\r\n this._myLayerMask = 0;\r\n }\r\n\r\n setFlagActive(indexOrName, active) {\r\n let index = indexOrName;\r\n if (isNaN(indexOrName)) {\r\n index = PhysicsUtils.getLayerFlagsNames().pp_findIndexEqual(indexOrName);\r\n }\r\n\r\n if (index >= 0 && index < PhysicsUtils.getLayerFlagsNames().length) {\r\n let mask = 1 << index;\r\n\r\n if (active) {\r\n this._myLayerMask = this._myLayerMask | mask;\r\n } else {\r\n this._myLayerMask = this._myLayerMask & ~mask;\r\n }\r\n }\r\n }\r\n\r\n isFlagActive(indexOrName) {\r\n let index = indexOrName;\r\n if (isNaN(indexOrName)) {\r\n index = PhysicsUtils.getLayerFlagsNames().pp_findIndexEqual(indexOrName);\r\n }\r\n\r\n let active = false;\r\n\r\n if (index >= 0 && index < PhysicsUtils.getLayerFlagsNames().length) {\r\n let mask = 1 << index;\r\n active = !!(this._myLayerMask & mask);\r\n }\r\n\r\n return active;\r\n }\r\n\r\n setAllFlagsActive(active) {\r\n if (!active) {\r\n this._myLayerMask = 0;\r\n } else {\r\n this._myLayerMask = Math.pow(2, PhysicsUtils.getLayerFlagsNames().length) - 1;\r\n }\r\n }\r\n\r\n add(layerFlags) {\r\n this._myLayerMask = this._myLayerMask | layerFlags.getMask();\r\n }\r\n\r\n remove(layerFlags) {\r\n this._myLayerMask = this._myLayerMask & ~(layerFlags.getMask());\r\n }\r\n\r\n intersect(layerFlags) {\r\n this._myLayerMask = this._myLayerMask & layerFlags.getMask();\r\n }\r\n\r\n copy(layerFlags) {\r\n this._myLayerMask = layerFlags._myLayerMask;\r\n }\r\n\r\n getMask() {\r\n return this._myLayerMask;\r\n }\r\n\r\n setMask(layerMask) {\r\n this._myLayerMask = layerMask;\r\n }\r\n}", "/*\r\nlet raycastParams = new RaycastParams();\r\n\r\nraycastParams.myOrigin.vec3_copy(origin);\r\nraycastParams.myDirection.vec3_copy(direction);\r\nraycastParams.myDistance = distance;\r\nraycastParams.myBlockLayerFlags.setMask(flags);\r\nraycastParams.myObjectsToIgnore.pp_clear();\r\nraycastParams.myIgnoreHitsInsideCollision = false;\r\n\r\nlet raycastResults = PhysicsUtils.raycast(raycastParams);\r\n*/\r\n\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { PhysicsLayerFlags } from \"./physics_layer_flags.js\";\r\n\r\nexport class RaycastParams {\r\n\r\n constructor(physics = Globals.getPhysics()) {\r\n this.myOrigin = vec3_create();\r\n this.myDirection = vec3_create();\r\n this.myDistance = 0;\r\n\r\n this.myBlockLayerFlags = new PhysicsLayerFlags();\r\n\r\n this.myObjectsToIgnore = [];\r\n this.myIgnoreHitsInsideCollision = false;\r\n\r\n this.myPhysics = physics;\r\n }\r\n\r\n copy(other) {\r\n this.myOrigin.vec3_copy(other.myOrigin);\r\n this.myDirection.vec3_copy(other.myDirection);\r\n this.myDistance = other.myDistance;\r\n\r\n this.myBlockLayerFlags.copy(other.myBlockLayerFlags);\r\n\r\n this.myObjectsToIgnore.pp_copy(other.myObjectsToIgnore);\r\n this.myIgnoreHitsInsideCollision = other.myIgnoreHitsInsideCollision;\r\n\r\n this.myPhysics = other.myPhysics;\r\n }\r\n\r\n reset() {\r\n this.myOrigin.vec3_zero();\r\n this.myDirection.vec3_zero();\r\n this.myDistance = 0;\r\n\r\n this.myBlockLayerFlags.setAllFlagsActive(false);\r\n\r\n this.myObjectsToIgnore.pp_clear();\r\n this.myIgnoreHitsInsideCollision = false;\r\n }\r\n}\r\n\r\nexport class RaycastResults {\r\n\r\n constructor() {\r\n this.myRaycastParams = null;\r\n this.myHits = [];\r\n\r\n this._myUnusedHits = null;\r\n }\r\n\r\n isColliding(ignoreHitsInsideCollision = false) {\r\n return ignoreHitsInsideCollision ? this.getFirstHitOutsideCollision() != null : this.myHits.length > 0;\r\n }\r\n\r\n getFirstHitInsideCollision() {\r\n let firstHit = null;\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (hit.myInsideCollision) {\r\n firstHit = hit;\r\n break;\r\n }\r\n }\r\n\r\n return firstHit;\r\n }\r\n\r\n getFirstHitOutsideCollision() {\r\n let firstHit = null;\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (!hit.myInsideCollision) {\r\n firstHit = hit;\r\n break;\r\n }\r\n }\r\n\r\n return firstHit;\r\n }\r\n\r\n getHitsInsideCollision() {\r\n let hits = [];\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (hit.myInsideCollision) {\r\n hits.push(hit);\r\n }\r\n }\r\n\r\n return hits;\r\n }\r\n\r\n getHitsOutsideCollision() {\r\n let hits = [];\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n let hit = this.myHits[i];\r\n if (!hit.myInsideCollision) {\r\n hits.push(hit);\r\n }\r\n }\r\n\r\n return hits;\r\n }\r\n\r\n removeHit(hitIndex) {\r\n let removedHit = this.myHits.pp_removeIndex(hitIndex);\r\n\r\n if (removedHit != null) {\r\n if (this._myUnusedHits == null) {\r\n this._myUnusedHits = [];\r\n }\r\n\r\n this._myUnusedHits.push(removedHit);\r\n }\r\n\r\n return removedHit;\r\n }\r\n\r\n removeAllHits() {\r\n if (this._myUnusedHits == null) {\r\n this._myUnusedHits = [];\r\n }\r\n\r\n for (let i = 0; i < this.myHits.length; i++) {\r\n this._myUnusedHits.push(this.myHits[i]);\r\n }\r\n\r\n this.myHits.pp_clear();\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n\r\n reset() {\r\n if (this.myRaycastParams != null) {\r\n this.myRaycastParams.reset();\r\n }\r\n\r\n this.removeAllHits();\r\n }\r\n}\r\n\r\nexport class RaycastHit {\r\n\r\n constructor() {\r\n this.myPosition = vec3_create();\r\n this.myNormal = vec3_create();\r\n this.myDistance = 0;\r\n this.myObject = null;\r\n\r\n this.myInsideCollision = false;\r\n }\r\n\r\n isValid() {\r\n return this.myObject != null;\r\n }\r\n\r\n copy(other) {\r\n this.myPosition.vec3_copy(other.myPosition);\r\n this.myNormal.vec3_copy(other.myNormal);\r\n this.myDistance = other.myDistance;\r\n this.myObject = other.myObject;\r\n this.myInsideCollision = other.myInsideCollision;\r\n }\r\n\r\n reset() {\r\n this.myPosition.vec3_zero();\r\n this.myNormal.vec3_zero();\r\n this.myDistance = 0;\r\n this.myObject = null;\r\n this.myInsideCollision = false;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nRaycastResults.prototype.copy = function () {\r\n let copyHitCallback = function (elementToCopy, currentElement) {\r\n if (currentElement == null) {\r\n currentElement = new RaycastHit();\r\n }\r\n\r\n currentElement.copy(elementToCopy);\r\n\r\n return currentElement;\r\n };\r\n\r\n return function copy(other) {\r\n if (other.myRaycastParams == null) {\r\n this.myRaycastParams = null;\r\n } else {\r\n if (this.myRaycastParams == null) {\r\n this.myRaycastParams = new RaycastParams(other.myRaycastParams.myPhysics);\r\n }\r\n\r\n this.myRaycastParams.copy(other.myRaycastParams);\r\n }\r\n\r\n if (this.myHits.length > other.myHits.length) {\r\n if (this._myUnusedHits == null) {\r\n this._myUnusedHits = [];\r\n }\r\n\r\n for (let i = 0; i < this.myHits.length - other.myHits.length; i++) {\r\n this._myUnusedHits.push(this.myHits.pop());\r\n }\r\n } else if (this.myHits.length < other.myHits.length) {\r\n if (this._myUnusedHits != null) {\r\n let length = Math.min(this._myUnusedHits.length, other.myHits.length - this.myHits.length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n this.myHits.push(this._myUnusedHits.pop());\r\n }\r\n }\r\n }\r\n\r\n this.myHits.pp_copy(other.myHits, copyHitCallback);\r\n };\r\n}();", "/*\r\nlet visualParams = new VisualRaycastParams();\r\nvisualParams.myRaycastResults = raycastResults;\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualRaycast = new VisualRaycast(visualParams);\r\n*/\r\n\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { RaycastResults } from \"../../physics/physics_raycast_params.js\";\r\nimport { VisualArrow, VisualArrowParams } from \"./visual_arrow.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualRaycastParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myRaycastResults = new RaycastResults();\r\n\r\n this.myHitNormalLength = 0.2;\r\n this.myThickness = 0.005;\r\n\r\n this.myShowOnlyFirstHit = true;\r\n\r\n this.myRayMaterial = null;\r\n this.myHitNormalMaterial = null;\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.RAYCAST;\r\n }\r\n\r\n get myRaycastResults() {\r\n return this._myRaycastResults;\r\n }\r\n\r\n set myRaycastResults(result) {\r\n this._myRaycastResults.copy(result);\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualRaycast {\r\n\r\n constructor(params = new VisualRaycastParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myVisualRaycast = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n this._myVisualRaycast.setAutoRefresh(false);\r\n\r\n this._myVisualRaycastHitList = [];\r\n\r\n this._myDestroyed = false;\r\n\r\n this._addVisualRaycastHit();\r\n\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myVisible) {\r\n if (this._myParams.myRaycastResults.myRaycastParams != null) {\r\n this._myVisualRaycast.setVisible(true);\r\n }\r\n\r\n if (this._myParams.myRaycastResults.myHits.length > 0) {\r\n let hitsToShow = Math.min(this._myParams.myRaycastResults.myHits.length, this._myVisualRaycastHitList.length);\r\n\r\n for (let i = 0; i < hitsToShow; i++) {\r\n let visualRaycastHit = this._myVisualRaycastHitList[i];\r\n visualRaycastHit.setVisible(true);\r\n }\r\n }\r\n } else {\r\n this._myVisualRaycast.setVisible(false);\r\n\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.setVisible(false);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n this._myVisualRaycast.forceRefresh();\r\n\r\n if (this._myParams.myRaycastResults.myHits.length > 0) {\r\n let hitsToRefresh = Math.min(this._myParams.myRaycastResults.myHits.length, this._myVisualRaycastHitList.length);\r\n\r\n for (let i = 0; i < hitsToRefresh; i++) {\r\n let visualRaycastHit = this._myVisualRaycastHitList[i];\r\n visualRaycastHit.forceRefresh();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n this._myDirty = false;\r\n }\r\n\r\n this._myVisualRaycast.update(dt);\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.update(dt);\r\n }\r\n }\r\n\r\n _refresh() {\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.setVisible(false);\r\n }\r\n\r\n if (this._myParams.myRaycastResults.myHits.length > 0) {\r\n let raycastDistance = this._myParams.myShowOnlyFirstHit ?\r\n this._myParams.myRaycastResults.myHits.pp_first().myDistance :\r\n this._myParams.myRaycastResults.myHits.pp_last().myDistance;\r\n\r\n {\r\n let visualRaycastParams = this._myVisualRaycast.getParams();\r\n visualRaycastParams.myStart.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myOrigin);\r\n visualRaycastParams.myDirection.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myDirection);\r\n visualRaycastParams.myLength = raycastDistance;\r\n visualRaycastParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myRayMaterial == null) {\r\n visualRaycastParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myRay;\r\n } else {\r\n visualRaycastParams.myMaterial = this._myParams.myRayMaterial;\r\n }\r\n\r\n visualRaycastParams.myParent = this._myParams.myParent;\r\n visualRaycastParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualRaycast.paramsUpdated();\r\n\r\n this._myVisualRaycast.setVisible(this._myVisible);\r\n }\r\n\r\n let hitsToShow = this._myParams.myShowOnlyFirstHit ? 1 : this._myParams.myRaycastResults.myHits.length;\r\n while (hitsToShow > this._myVisualRaycastHitList.length) {\r\n this._addVisualRaycastHit();\r\n }\r\n\r\n for (let i = 0; i < hitsToShow; i++) {\r\n let visualRaycastHit = this._myVisualRaycastHitList[i];\r\n\r\n {\r\n let visualRaycastHitParams = visualRaycastHit.getParams();\r\n visualRaycastHitParams.myStart.vec3_copy(this._myParams.myRaycastResults.myHits[i].myPosition);\r\n visualRaycastHitParams.myDirection.vec3_copy(this._myParams.myRaycastResults.myHits[i].myNormal);\r\n visualRaycastHitParams.myLength = this._myParams.myHitNormalLength;\r\n visualRaycastHitParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myHitNormalMaterial == null) {\r\n visualRaycastHitParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myHitNormal;\r\n } else {\r\n visualRaycastHitParams.myMaterial = this._myParams.myHitNormalMaterial;\r\n }\r\n\r\n visualRaycastHitParams.myParent = this._myParams.myParent;\r\n visualRaycastHitParams.myLocal = this._myParams.myLocal;\r\n\r\n visualRaycastHit.paramsUpdated();\r\n\r\n visualRaycastHit.setVisible(this._myVisible);\r\n }\r\n }\r\n\r\n } else if (this._myParams.myRaycastResults.myRaycastParams != null) {\r\n {\r\n let visualRaycastParams = this._myVisualRaycast.getParams();\r\n visualRaycastParams.myStart.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myOrigin);\r\n visualRaycastParams.myDirection.vec3_copy(this._myParams.myRaycastResults.myRaycastParams.myDirection);\r\n visualRaycastParams.myLength = this._myParams.myRaycastResults.myRaycastParams.myDistance;\r\n visualRaycastParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myRayMaterial == null) {\r\n visualRaycastParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myRay;\r\n } else {\r\n visualRaycastParams.myMaterial = this._myParams.myRayMaterial;\r\n }\r\n\r\n visualRaycastParams.myParent = this._myParams.myParent;\r\n visualRaycastParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualRaycast.paramsUpdated();\r\n\r\n this._myVisualRaycast.setVisible(this._myVisible);\r\n }\r\n } else {\r\n this._myVisualRaycast.setVisible(false);\r\n }\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualRaycastParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualRaycast(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _addVisualRaycastHit() {\r\n let visualRaycastHit = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n visualRaycastHit.setAutoRefresh(false);\r\n visualRaycastHit.setVisible(false);\r\n\r\n this._myVisualRaycastHitList.push(visualRaycastHit);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualRaycast.destroy();\r\n for (let visualRaycastHit of this._myVisualRaycastHitList) {\r\n visualRaycastHit.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualRaycastParams.prototype.copy = function copy(other) {\r\n this.myRaycastResults = other.myRaycastResults;\r\n this.myHitNormalLength = other.myHitNormalLength;\r\n this.myThickness = other.myThickness;\r\n this.myShowOnlyFirstHit = other.myShowOnlyFirstHit;\r\n\r\n if (other.myRayMaterial != null) {\r\n this.myRayMaterial = other.myRayMaterial.clone();\r\n } else {\r\n this.myRayMaterial = null;\r\n }\r\n\r\n if (other.myHitNormalMaterial != null) {\r\n this.myHitNormalMaterial = other.myHitNormalMaterial.clone();\r\n } else {\r\n this.myHitNormalMaterial = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualTextParams();\r\nvisualParams.myText = text;\r\nvisualParams.myTransform.mat4_copy(transform);\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myText.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualText = new VisualText(visualParams);\r\n*/\r\n\r\nimport { Alignment, Justification, TextComponent } from \"@wonderlandengine/api\";\r\nimport { mat4_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualTextParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myText = \"\";\r\n this.myAlignment = Alignment.Center;\r\n this.myJustification = Justification.Middle;\r\n\r\n this.myTransform = mat4_create();\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myDefaultTextMaterial\r\n\r\n this.myColor = null; // If this is set and material is null, it will use the default text material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myLookAtObject = null;\r\n\r\n this.myType = VisualElementType.TEXT;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualText {\r\n\r\n constructor(params = new VisualTextParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myTextObject = null;\r\n this._myTextComponent = null;\r\n\r\n this._myTextMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myTextObject.pp_setActive(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty || this._myParams.myLookAtObject != null) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _build() {\r\n this._myTextObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n this._myTextComponent = this._myTextObject.pp_addComponent(TextComponent);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualTextParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualText(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myTextObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualTextParams.prototype.copy = function copy(other) {\r\n this.myText = other.myText;\r\n this.myAlignment = other.myAlignment;\r\n this.myJustification = other.myJustification;\r\n\r\n this.myTransform.mat4_copy(other.myTransform);\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myLookAtObject = other.myLookAtObject;\r\n\r\n this.myType = other.myType;\r\n};\r\n\r\nVisualText.prototype._refresh = function () {\r\n let lookAtPosition = vec3_create();\r\n return function _refresh() {\r\n this._myTextObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myTextObject.pp_setTransformLocal(this._myParams.myTransform);\r\n } else {\r\n this._myTextObject.pp_setTransform(this._myParams.myTransform);\r\n }\r\n\r\n if (this._myParams.myLookAtObject != null) {\r\n this._myParams.myLookAtObject.pp_getPosition(lookAtPosition);\r\n this._myTextObject.pp_lookAt(lookAtPosition);\r\n }\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n this._myTextComponent.material = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myText;\r\n } else {\r\n if (this._myTextMaterial == null) {\r\n this._myTextMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myText.clone();\r\n }\r\n this._myTextComponent.material = this._myTextMaterial;\r\n this._myTextMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n this._myTextComponent.material = this._myParams.myMaterial;\r\n }\r\n\r\n this._myTextComponent.text = this._myParams.myText;\r\n this._myTextComponent.alignment = this._myParams.myAlignment;\r\n this._myTextComponent.justification = this._myParams.myJustification;\r\n\r\n this._myDirty = false;\r\n };\r\n}();", "/*\r\nlet visualParams = new VisualTorusParams();\r\nvisualParams.myRadius = 1;\r\nvisualParams.mySegmentsAmount = 12;\r\nvisualParams.mySegmentThickness = 0.05;\r\nvisualParams.myTransform.mat4_copy(transform);\r\nvisualParams.myMaterial = myDefaultResources.myMaterials.myFlatOpaque.clone();\r\nvisualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualTorus = new VisualTorus(visualParams);\r\n*/\r\n\r\nimport { mat4_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\nimport { VisualLine, VisualLineParams } from \"./visual_line.js\";\r\n\r\nexport class VisualTorusParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myTransform = mat4_create();\r\n this.myRadius = 0;\r\n\r\n this.mySegmentsAmount = 12;\r\n this.mySegmentThickness = 0.05;\r\n\r\n this.mySegmentMesh = null; // The mesh is scaled along up axis, null means it will default on myDefaultResources.myMeshes.myCylinder\r\n\r\n this.myMaterial = null; // null means it will default on myDefaultResources.myMaterials.myFlatOpaque\r\n this.myColor = null; // If this is set and material is null, it will use the default flat opaque material with this color\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.TORUS;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualTorus {\r\n\r\n constructor(params = new VisualTorusParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myTorusParentObject = null;\r\n\r\n this._myVisualSegmentList = [];\r\n\r\n this._myFlatOpaqueMaterial = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build();\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myVisible) {\r\n let segmentToShow = Math.min(this._myParams.mySegmentsAmount, this._myVisualSegmentList.length);\r\n\r\n for (let i = 0; i < segmentToShow; i++) {\r\n let visualSegment = this._myVisualSegmentList[i];\r\n visualSegment.setVisible(true);\r\n }\r\n } else {\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.setVisible(false);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n let segmentToRefresh = Math.min(this._myParams.mySegmentsAmount, this._myVisualSegmentList.length);\r\n\r\n for (let i = 0; i < segmentToRefresh; i++) {\r\n let visualSegment = this._myVisualSegmentList[i];\r\n visualSegment.forceRefresh();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.update(dt);\r\n }\r\n }\r\n\r\n _build() {\r\n this._myTorusParentObject = Globals.getSceneObjects(this._myParams.myParent.pp_getEngine()).myVisualElements.pp_addObject();\r\n\r\n this._fillSegmentList();\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n _fillSegmentList() {\r\n while (this._myVisualSegmentList.length < this._myParams.mySegmentsAmount) {\r\n let visualSegment = new VisualLine(new VisualLineParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n visualSegment.setAutoRefresh(false);\r\n visualSegment.setVisible(false);\r\n\r\n visualSegment.getParams().myParent = this._myTorusParentObject;\r\n visualSegment.getParams().myLocal = true;\r\n\r\n this._myVisualSegmentList.push(visualSegment);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualTorusParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualTorus(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.destroy();\r\n }\r\n this._myTorusParentObject.pp_destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualTorus.prototype._refresh = function () {\r\n let segmentStart = vec3_create();\r\n let segmentEnd = vec3_create();\r\n\r\n let segmentDirection = vec3_create();\r\n\r\n let fixedSegmentStart = vec3_create();\r\n let fixedSegmentEnd = vec3_create();\r\n\r\n let up = vec3_create(0, 1, 0);\r\n return function _refresh() {\r\n this._fillSegmentList();\r\n\r\n for (let visualSegment of this._myVisualSegmentList) {\r\n visualSegment.setVisible(false);\r\n }\r\n\r\n this._myTorusParentObject.pp_setParent(this._myParams.myParent, false);\r\n\r\n if (this._myParams.myLocal) {\r\n this._myTorusParentObject.pp_setTransformLocal(this._myParams.myTransform);\r\n } else {\r\n this._myTorusParentObject.pp_setTransform(this._myParams.myTransform);\r\n }\r\n\r\n let sliceAngle = 2 * Math.PI / this._myParams.mySegmentsAmount;\r\n segmentStart.vec3_set(this._myParams.myRadius, 0, 0);\r\n for (let i = 0; i < this._myParams.mySegmentsAmount; i++) {\r\n segmentEnd = segmentStart.vec3_rotateAxisRadians(sliceAngle, up, segmentEnd);\r\n\r\n segmentDirection = segmentEnd.vec3_sub(segmentStart, segmentDirection).vec3_normalize(segmentDirection);\r\n\r\n let extraLength = Math.tan(sliceAngle / 2) * this._myParams.mySegmentThickness / 2;\r\n\r\n fixedSegmentStart = segmentStart.vec3_sub(segmentDirection.vec3_scale(extraLength, fixedSegmentStart), fixedSegmentStart);\r\n fixedSegmentEnd = segmentEnd.vec3_add(segmentDirection.vec3_scale(extraLength, fixedSegmentEnd), fixedSegmentEnd);\r\n\r\n let visualSegment = this._myVisualSegmentList[i];\r\n\r\n let visualSegmentParams = visualSegment.getParams();\r\n visualSegmentParams.setStartEnd(fixedSegmentStart, fixedSegmentEnd);\r\n visualSegmentParams.myThickness = this._myParams.mySegmentThickness;\r\n\r\n visualSegmentParams.myMesh = this._myParams.mySegmentMesh;\r\n\r\n if (this._myParams.myMaterial == null) {\r\n if (this._myParams.myColor == null) {\r\n visualSegmentParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myMesh;\r\n } else {\r\n if (this._myFlatOpaqueMaterial == null) {\r\n this._myFlatOpaqueMaterial = Globals.getDefaultMaterials(this._myParams.myParent.pp_getEngine()).myFlatOpaque.clone();\r\n }\r\n visualSegmentParams.myMaterial = this._myFlatOpaqueMaterial;\r\n this._myFlatOpaqueMaterial.color = this._myParams.myColor;\r\n }\r\n } else {\r\n visualSegmentParams.myMaterial = this._myParams.myMaterial;\r\n }\r\n\r\n visualSegment.paramsUpdated();\r\n\r\n visualSegment.setVisible(this._myVisible);\r\n\r\n segmentStart.vec3_copy(segmentEnd);\r\n }\r\n };\r\n}();\r\n\r\nVisualTorusParams.prototype.copy = function copy(other) {\r\n this.myRadius = other.myRadius;\r\n this.mySegmentsAmount = other.mySegmentsAmount;\r\n this.mySegmentThickness = other.mySegmentThickness;\r\n\r\n this.myTransform.mat4_copy(other.myTransform);\r\n\r\n this.mySegmentMesh = other.mySegmentMesh;\r\n\r\n if (other.myMaterial != null) {\r\n this.myMaterial = other.myMaterial.clone();\r\n } else {\r\n this.myMaterial = null;\r\n }\r\n\r\n if (other.myColor != null) {\r\n if (this.myColor != null) {\r\n this.myColor.vec4_copy(other.myColor);\r\n } else {\r\n this.myColor = other.myColor.vec4_clone();\r\n }\r\n } else {\r\n this.myColor = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "/*\r\nlet visualParams = new VisualTransformParams();\r\nvisualParams.myTransform.mat4_copy(transform);\r\nvisualParams.myLength = 0.2;\r\nGlobals.getVisualManager().draw(visualParams);\r\n\r\nor\r\n\r\nlet visualTransform = new VisualTransform(visualParams);\r\n*/\r\n\r\nimport { mat4_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { VisualArrow, VisualArrowParams } from \"./visual_arrow.js\";\r\nimport { VisualElementType } from \"./visual_element_types.js\";\r\n\r\nexport class VisualTransformParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myTransform = mat4_create();\r\n this.myLength = 0.2;\r\n this.myThickness = 0.005;\r\n\r\n this.myForwardMaterial = null;\r\n this.myUpMaterial = null;\r\n this.myRightMaterial = null;\r\n\r\n this.myParent = Globals.getSceneObjects(engine).myVisualElements;\r\n this.myLocal = false;\r\n\r\n this.myType = VisualElementType.TRANSFORM;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class VisualTransform {\r\n\r\n constructor(params = new VisualTransformParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = false;\r\n this._myAutoRefresh = true;\r\n\r\n this._myDirty = false;\r\n\r\n this._myVisualRight = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n this._myVisualUp = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n this._myVisualForward = new VisualArrow(new VisualArrowParams(this._myParams.myParent.pp_getEngine()));\r\n\r\n this._myVisualRight.setAutoRefresh(false);\r\n this._myVisualUp.setAutoRefresh(false);\r\n this._myVisualForward.setAutoRefresh(false);\r\n\r\n this._myDestroyed = false;\r\n\r\n this.forceRefresh();\r\n\r\n this.setVisible(true);\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n this._myVisualRight.setVisible(visible);\r\n this._myVisualUp.setVisible(visible);\r\n this._myVisualForward.setVisible(visible);\r\n }\r\n }\r\n\r\n setAutoRefresh(autoRefresh) {\r\n this._myAutoRefresh = autoRefresh;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setParams(params) {\r\n this._myParams = params;\r\n this._markDirty();\r\n }\r\n\r\n copyParams(params) {\r\n this._myParams.copy(params);\r\n this._markDirty();\r\n }\r\n\r\n paramsUpdated() {\r\n this._markDirty();\r\n }\r\n\r\n refresh() {\r\n this.update(0);\r\n }\r\n\r\n forceRefresh() {\r\n this._refresh();\r\n\r\n this._myVisualRight.forceRefresh();\r\n this._myVisualUp.forceRefresh();\r\n this._myVisualForward.forceRefresh();\r\n }\r\n\r\n update(dt) {\r\n if (this._myDirty) {\r\n this._refresh();\r\n\r\n this._myDirty = false;\r\n }\r\n\r\n this._myVisualRight.update(dt);\r\n this._myVisualUp.update(dt);\r\n this._myVisualForward.update(dt);\r\n }\r\n\r\n _markDirty() {\r\n this._myDirty = true;\r\n\r\n if (this._myAutoRefresh) {\r\n this.update(0);\r\n }\r\n }\r\n\r\n clone() {\r\n let clonedParams = new VisualTransformParams(this._myParams.myParent.pp_getEngine());\r\n clonedParams.copy(this._myParams);\r\n\r\n let clone = new VisualTransform(clonedParams);\r\n clone.setAutoRefresh(this._myAutoRefresh);\r\n clone.setVisible(this._myVisible);\r\n clone._myDirty = this._myDirty;\r\n\r\n return clone;\r\n }\r\n\r\n _refresh() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualRight.destroy();\r\n this._myVisualUp.destroy();\r\n this._myVisualForward.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nVisualTransform.prototype._refresh = function () {\r\n let axes = [vec3_create(), vec3_create(), vec3_create()];\r\n let scale = vec3_create();\r\n let position = vec3_create();\r\n return function _refresh() {\r\n axes = this._myParams.myTransform.mat4_getAxes(axes);\r\n scale = this._myParams.myTransform.mat4_getScale(scale);\r\n let maxValue = 0;\r\n for (let value of scale) {\r\n maxValue = Math.max(value, maxValue);\r\n }\r\n\r\n if (maxValue == 0) {\r\n scale[0] = 1;\r\n scale[1] = 1;\r\n scale[2] = 1;\r\n } else {\r\n scale[0] = scale[0] / maxValue;\r\n scale[1] = scale[1] / maxValue;\r\n scale[2] = scale[2] / maxValue;\r\n }\r\n\r\n position = this._myParams.myTransform.mat4_getPosition(position);\r\n\r\n {\r\n let visualArrowParams = this._myVisualRight.getParams();\r\n visualArrowParams.myStart.vec3_copy(position);\r\n visualArrowParams.myDirection = axes[0].vec3_negate(visualArrowParams.myDirection).vec3_normalize(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = Math.max(this._myParams.myLength * scale[0], 0.001);\r\n visualArrowParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myRightMaterial == null) {\r\n visualArrowParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myRight;\r\n } else {\r\n visualArrowParams.myMaterial = this._myParams.myRightMaterial;\r\n }\r\n\r\n visualArrowParams.myParent = this._myParams.myParent;\r\n visualArrowParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualRight.paramsUpdated();\r\n }\r\n\r\n {\r\n let visualArrowParams = this._myVisualUp.getParams();\r\n visualArrowParams.myStart.vec3_copy(position);\r\n visualArrowParams.myDirection = axes[1].vec3_normalize(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = Math.max(this._myParams.myLength * scale[1], 0.001);\r\n visualArrowParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myUpMaterial == null) {\r\n visualArrowParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myUp;\r\n } else {\r\n visualArrowParams.myMaterial = this._myParams.myUpMaterial;\r\n }\r\n\r\n visualArrowParams.myParent = this._myParams.myParent;\r\n visualArrowParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualUp.paramsUpdated();\r\n }\r\n\r\n {\r\n let visualArrowParams = this._myVisualForward.getParams();\r\n visualArrowParams.myStart.vec3_copy(position);\r\n visualArrowParams.myDirection = axes[2].vec3_normalize(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = Math.max(this._myParams.myLength * scale[2], 0.001);\r\n visualArrowParams.myThickness = this._myParams.myThickness;\r\n\r\n if (this._myParams.myForwardMaterial == null) {\r\n visualArrowParams.myMaterial = Globals.getVisualResources(this._myParams.myParent.pp_getEngine()).myDefaultMaterials.myForward;\r\n } else {\r\n visualArrowParams.myMaterial = this._myParams.myForwardMaterial;\r\n }\r\n\r\n visualArrowParams.myParent = this._myParams.myParent;\r\n visualArrowParams.myLocal = this._myParams.myLocal;\r\n\r\n this._myVisualForward.paramsUpdated();\r\n }\r\n };\r\n}();\r\n\r\nVisualTransformParams.prototype.copy = function copy(other) {\r\n this.myTransform.mat4_copy(other.myTransform);\r\n this.myLength = other.myLength;\r\n this.myThickness = other.myThickness;\r\n\r\n if (other.myRightMaterial != null) {\r\n this.myRightMaterial = other.myRightMaterial.clone();\r\n } else {\r\n this.myRightMaterial = null;\r\n }\r\n\r\n if (other.myUpMaterial != null) {\r\n this.myUpMaterial = other.myUpMaterial.clone();\r\n } else {\r\n this.myUpMaterial = null;\r\n }\r\n\r\n if (other.myForwardMaterial != null) {\r\n this.myForwardMaterial = other.myForwardMaterial.clone();\r\n } else {\r\n this.myForwardMaterial = null;\r\n }\r\n\r\n this.myParent = other.myParent;\r\n this.myLocal = other.myLocal;\r\n\r\n this.myType = other.myType;\r\n};", "import { Globals } from \"../../pp/globals.js\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\nimport { ObjectPool, ObjectPoolParams } from \"../object_pool/object_pool.js\";\r\nimport { VisualArrow, VisualArrowParams } from \"./elements/visual_arrow.js\";\r\nimport { VisualElementType } from \"./elements/visual_element_types.js\";\r\nimport { VisualLine, VisualLineParams } from \"./elements/visual_line.js\";\r\nimport { VisualMesh, VisualMeshParams } from \"./elements/visual_mesh.js\";\r\nimport { VisualPoint, VisualPointParams } from \"./elements/visual_point.js\";\r\nimport { VisualRaycast, VisualRaycastParams } from \"./elements/visual_raycast.js\";\r\nimport { VisualText, VisualTextParams } from \"./elements/visual_text.js\";\r\nimport { VisualTorus, VisualTorusParams } from \"./elements/visual_torus.js\";\r\nimport { VisualTransform, VisualTransformParams } from \"./elements/visual_transform.js\";\r\n\r\nexport class VisualManager {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myVisualElementPrototypeCreationCallbacks = new Map();\r\n\r\n this._myVisualElementsTypeMap = new Map();\r\n this._myVisualElementLastID = 0;\r\n this._myVisualElementsToShow = [];\r\n\r\n this._myActive = true;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._myObjectPoolManagerPrefix = this._getClassName() + \"_\" + Math.pp_randomUUID() + \"_visual_element_type_\";\r\n this._myTypePoolIDs = new Map();\r\n\r\n this._addStandardVisualElementTypes();\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this._myActive = active;\r\n }\r\n }\r\n\r\n isActive() {\r\n return this._myActive;\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n update(dt) {\r\n if (this._myActive) {\r\n this._updateDraw(dt);\r\n }\r\n }\r\n\r\n // lifetimeSeconds can be null, in that case the element will be drawn until cleared\r\n draw(visualElementParams, lifetimeSeconds = 0, idToReuse = null) {\r\n if (!this._myActive) {\r\n return null;\r\n }\r\n\r\n let visualElement = null;\r\n let idReused = false;\r\n if (idToReuse != null) {\r\n if (this._myVisualElementsTypeMap.has(visualElementParams.myType)) {\r\n let visualElements = this._myVisualElementsTypeMap.get(visualElementParams.myType);\r\n if (visualElements.has(idToReuse)) {\r\n visualElement = visualElements.get(idToReuse)[0];\r\n visualElement.copyParams(visualElementParams);\r\n visualElement.setVisible(false);\r\n idReused = true;\r\n }\r\n }\r\n }\r\n\r\n if (visualElement == null) {\r\n visualElement = this._getVisualElementFromPool(visualElementParams);\r\n }\r\n\r\n if (visualElement == null) {\r\n console.error(\"Couldn't create the requested visual element\");\r\n return null;\r\n }\r\n\r\n if (!this._myVisualElementsTypeMap.has(visualElementParams.myType)) {\r\n this._myVisualElementsTypeMap.set(visualElementParams.myType, new Map());\r\n }\r\n let visualElements = this._myVisualElementsTypeMap.get(visualElementParams.myType);\r\n\r\n let elementID = null;\r\n if (!idReused) {\r\n elementID = this._myVisualElementLastID + 1;\r\n this._myVisualElementLastID = elementID;\r\n\r\n visualElements.set(elementID, [visualElement, new Timer(lifetimeSeconds, lifetimeSeconds != null)]);\r\n } else {\r\n elementID = idToReuse;\r\n let visualElementPair = visualElements.get(elementID);\r\n visualElementPair[0] = visualElement;\r\n visualElementPair[1].reset(lifetimeSeconds);\r\n if (lifetimeSeconds != null) {\r\n visualElementPair[1].start();\r\n }\r\n }\r\n\r\n this._myVisualElementsToShow.push(visualElement);\r\n\r\n return elementID;\r\n }\r\n\r\n getVisualElement(elementID) {\r\n let visualElement = null;\r\n\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n if (visualElements.has(elementID)) {\r\n let visualElementPair = visualElements.get(elementID);\r\n visualElement = visualElementPair[0];\r\n break;\r\n }\r\n }\r\n\r\n return visualElement;\r\n }\r\n\r\n getVisualElementParams(elementID) {\r\n return this.getVisualElement(elementID).getParams();\r\n }\r\n\r\n getVisualElementID(visualElement) {\r\n let elementID = null;\r\n for (let currentVisualElements of this._myVisualElementsTypeMap.values()) {\r\n for (let [currentElementID, currentVisualElement] of currentVisualElements.entries()) {\r\n if (currentVisualElement[0] == visualElement) {\r\n elementID = currentElementID;\r\n break;\r\n }\r\n }\r\n\r\n if (elementID != null) {\r\n break;\r\n }\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n clearVisualElement(elementID = null) {\r\n if (elementID == null) {\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n for (let visualElement of visualElements.values()) {\r\n this._releaseElement(visualElement[0]);\r\n }\r\n }\r\n\r\n this._myVisualElementsToShow = [];\r\n this._myVisualElementsTypeMap = new Map();\r\n this._myVisualElementLastID = 0;\r\n } else {\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n if (visualElements.has(elementID)) {\r\n let visualElementPair = visualElements.get(elementID);\r\n this._releaseElement(visualElementPair[0]);\r\n visualElements.delete(elementID);\r\n\r\n this._myVisualElementsToShow.pp_removeEqual(visualElementPair[0]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n allocateVisualElementType(visualElementType, amount) {\r\n if (!Globals.getObjectPoolManager(this._myEngine).hasPool(this._getTypePoolID(visualElementType))) {\r\n this._addVisualElementTypeToPool(visualElementType);\r\n }\r\n\r\n let pool = Globals.getObjectPoolManager(this._myEngine).getPool(this._getTypePoolID(visualElementType));\r\n\r\n let difference = pool.getAvailableSize() - amount;\r\n if (difference < 0) {\r\n pool.increase(-difference);\r\n }\r\n }\r\n\r\n addVisualElementType(visualElementType, visuaElementPrototypeCreationCallback) {\r\n this._myVisualElementPrototypeCreationCallbacks.set(visualElementType, visuaElementPrototypeCreationCallback);\r\n }\r\n\r\n removeVisualElementType(visualElementType) {\r\n this._myVisualElementPrototypeCreationCallbacks.delete(visualElementType);\r\n }\r\n\r\n _updateDraw(dt) {\r\n for (let visualElement of this._myVisualElementsToShow) {\r\n visualElement.setVisible(true);\r\n }\r\n this._myVisualElementsToShow.pp_clear();\r\n\r\n for (let visualElements of this._myVisualElementsTypeMap.values()) {\r\n let idsToRemove = [];\r\n for (let visualElementsEntry of visualElements.entries()) {\r\n let visualElement = visualElementsEntry[1];\r\n if (visualElement[1].isDone()) {\r\n this._releaseElement(visualElement[0]);\r\n idsToRemove.push(visualElementsEntry[0]);\r\n } else {\r\n visualElement[0].update(dt);\r\n visualElement[1].update(dt);\r\n }\r\n }\r\n\r\n for (let id of idsToRemove) {\r\n visualElements.delete(id);\r\n }\r\n }\r\n }\r\n\r\n _getVisualElementFromPool(params) {\r\n let element = null;\r\n\r\n if (!Globals.getObjectPoolManager(this._myEngine).hasPool(this._getTypePoolID(params.myType))) {\r\n this._addVisualElementTypeToPool(params.myType);\r\n }\r\n\r\n element = Globals.getObjectPoolManager(this._myEngine).get(this._getTypePoolID(params.myType));\r\n\r\n if (element != null) {\r\n element.copyParams(params);\r\n }\r\n\r\n return element;\r\n }\r\n\r\n _addVisualElementTypeToPool(type) {\r\n let objectPoolParams = new ObjectPoolParams();\r\n objectPoolParams.myInitialPoolSize = 10;\r\n objectPoolParams.myAmountToAddWhenEmpty = 0;\r\n objectPoolParams.myPercentageToAddWhenEmpty = 0.5;\r\n objectPoolParams.mySetActiveCallback = function (object, active) {\r\n object.setVisible(active);\r\n };\r\n\r\n let visualElementPrototype = null;\r\n if (this._myVisualElementPrototypeCreationCallbacks.has(type)) {\r\n visualElementPrototype = this._myVisualElementPrototypeCreationCallbacks.get(type)();\r\n }\r\n\r\n if (visualElementPrototype != null) {\r\n visualElementPrototype.setVisible(false);\r\n visualElementPrototype.setAutoRefresh(true);\r\n\r\n Globals.getObjectPoolManager(this._myEngine).addPool(this._getTypePoolID(type), new ObjectPool(visualElementPrototype, objectPoolParams));\r\n } else {\r\n console.error(\"Visual element type not supported\");\r\n }\r\n }\r\n\r\n _addStandardVisualElementTypes() {\r\n this.addVisualElementType(VisualElementType.LINE, () => new VisualLine(new VisualLineParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.MESH, () => new VisualMesh(new VisualMeshParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.POINT, () => new VisualPoint(new VisualPointParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.ARROW, () => new VisualArrow(new VisualArrowParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.TEXT, () => new VisualText(new VisualTextParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.TRANSFORM, () => new VisualTransform(new VisualTransformParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.RAYCAST, () => new VisualRaycast(new VisualRaycastParams(this._myEngine)));\r\n this.addVisualElementType(VisualElementType.TORUS, () => new VisualTorus(new VisualTorusParams(this._myEngine)));\r\n }\r\n\r\n _getTypePoolID(type) {\r\n let typePoolID = this._myTypePoolIDs.get(type);\r\n\r\n if (typePoolID == null) {\r\n typePoolID = this._myObjectPoolManagerPrefix + type;\r\n this._myTypePoolIDs.set(type, typePoolID);\r\n }\r\n\r\n return typePoolID;\r\n }\r\n\r\n _releaseElement(visualElement) {\r\n let defaultElementsParent = Globals.getSceneObjects(this._myEngine).myVisualElements;\r\n if (visualElement.getParams().myParent != defaultElementsParent) {\r\n visualElement.getParams().myParent = defaultElementsParent;\r\n visualElement.forceRefresh(); // just used to trigger the parent change, I'm lazy\r\n }\r\n\r\n Globals.getObjectPoolManager(this._myEngine).release(this._getTypePoolID(visualElement.getParams().myType), visualElement);\r\n }\r\n\r\n _getClassName() {\r\n return \"visual_manager\";\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let poolID of this._myTypePoolIDs.values()) {\r\n Globals.getObjectPoolManager(this._myEngine)?.destroyPool(poolID);\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "export class VisualResources {\r\n\r\n constructor() {\r\n this.myDefaultMaterials = new VisualResourcesMaterials();\r\n }\r\n}\r\n\r\nexport class VisualResourcesMaterials {\r\n\r\n constructor() {\r\n this.myMesh = null;\r\n this.myText = null;\r\n this.myRight = null;\r\n this.myUp = null;\r\n this.myForward = null;\r\n this.myRay = null;\r\n this.myHitNormal = null;\r\n }\r\n}", "import * as WLAPI from \"@wonderlandengine/api\";\r\nimport { Component, Property } from \"@wonderlandengine/api\";\r\nimport * as WLComponents from \"@wonderlandengine/components\";\r\n\r\nexport class AddWLToWindowComponent extends Component {\r\n static TypeName = \"pp-add-wl-to-window\";\r\n static Properties = {\r\n _myAdd: Property.bool(true)\r\n };\r\n\r\n init() {\r\n if (this._myAdd) {\r\n window.WL = {};\r\n this._addProperties(WLAPI);\r\n this._addProperties(WLComponents);\r\n }\r\n }\r\n\r\n _addProperties(object) {\r\n let propertyNames = Object.getOwnPropertyNames(object);\r\n for (let propertyName of propertyNames) {\r\n if (object[propertyName] != undefined) {\r\n window.WL[propertyName] = object[propertyName];\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n window.WL = undefined;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { MeshUtils } from \"../../utils/mesh_utils.js\";\r\nimport { DefaultResources } from \"../default_resources.js\";\r\n\r\nexport class GetDefaultResourcesComponent extends Component {\r\n static TypeName = \"pp-get-default-resources\";\r\n static Properties = {\r\n _myPlane: Property.mesh(),\r\n _myCube: Property.mesh(),\r\n _mySphere: Property.mesh(),\r\n _myCone: Property.mesh(),\r\n _myCylinder: Property.mesh(),\r\n _myCircle: Property.mesh(),\r\n\r\n _myFlatOpaque: Property.material(),\r\n _myFlatTransparentNoDepth: Property.material(),\r\n _myPhongOpaque: Property.material(),\r\n _myText: Property.material()\r\n };\r\n\r\n init() {\r\n this._myDefaultResources = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasDefaultResources(this.engine)) {\r\n this._myDefaultResources = new DefaultResources();\r\n this._myDefaultResources.myMeshes.myPlane = MeshUtils.clone(this._myPlane);\r\n this._myDefaultResources.myMeshes.myCube = MeshUtils.clone(this._myCube);\r\n this._myDefaultResources.myMeshes.mySphere = MeshUtils.clone(this._mySphere);\r\n this._myDefaultResources.myMeshes.myCone = MeshUtils.clone(this._myCone);\r\n this._myDefaultResources.myMeshes.myCylinder = MeshUtils.clone(this._myCylinder);\r\n this._myDefaultResources.myMeshes.myCircle = MeshUtils.clone(this._myCircle);\r\n\r\n this._myDefaultResources.myMeshes.myInvertedCube = MeshUtils.invert(this._myCube);\r\n this._myDefaultResources.myMeshes.myInvertedSphere = MeshUtils.invert(this._mySphere);\r\n this._myDefaultResources.myMeshes.myInvertedCone = MeshUtils.invert(this._myCone);\r\n this._myDefaultResources.myMeshes.myInvertedCylinder = MeshUtils.invert(this._myCylinder);\r\n\r\n this._myDefaultResources.myMeshes.myDoubleSidedPlane = MeshUtils.makeDoubleSided(this._myPlane);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCube = MeshUtils.makeDoubleSided(this._myCube);\r\n this._myDefaultResources.myMeshes.myDoubleSidedSphere = MeshUtils.makeDoubleSided(this._mySphere);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCone = MeshUtils.makeDoubleSided(this._myCone);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCylinder = MeshUtils.makeDoubleSided(this._myCylinder);\r\n this._myDefaultResources.myMeshes.myDoubleSidedCircle = MeshUtils.makeDoubleSided(this._myCircle);\r\n\r\n if (this._myFlatOpaque != null) {\r\n this._myDefaultResources.myMaterials.myFlatOpaque = this._myFlatOpaque.clone();\r\n }\r\n\r\n if (this._myFlatTransparentNoDepth != null) {\r\n this._myDefaultResources.myMaterials.myFlatTransparentNoDepth = this._myFlatTransparentNoDepth.clone();\r\n }\r\n\r\n if (this._myPhongOpaque != null) {\r\n this._myDefaultResources.myMaterials.myPhongOpaque = this._myPhongOpaque.clone();\r\n }\r\n\r\n if (this._myText != null) {\r\n this._myDefaultResources.myMaterials.myText = this._myText.clone();\r\n }\r\n\r\n Globals.setDefaultResources(this._myDefaultResources, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myDefaultResources != null && Globals.getDefaultResources(this.engine) == this._myDefaultResources) {\r\n Globals.removeDefaultResources(this.engine);\r\n }\r\n }\r\n}", "import { Mesh, MeshAttribute, MeshIndexType } from \"@wonderlandengine/api\";\r\nimport { vec2_create, vec3_create, vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class MeshCreationVertexParams {\r\n\r\n constructor() {\r\n this.myPosition = null; // @Vec3\r\n this.myTextureCoordinates = null; // @Vec2\r\n this.myNormal = null; // @Vec3\r\n this.myColor = null; // @Vec4\r\n }\r\n}\r\n\r\nexport class MeshCreationTriangleParams {\r\n\r\n constructor() {\r\n this.myIndexes = new Uint32Array(3);\r\n }\r\n}\r\n\r\nexport class MeshCreationParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myVertexes = [];\r\n this.myTriangles = [];\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport function create(meshCreationParams) {\r\n let indexData = [];\r\n for (let triangle of meshCreationParams.myTriangles) {\r\n indexData.push(triangle.myIndexes[0]);\r\n indexData.push(triangle.myIndexes[1]);\r\n indexData.push(triangle.myIndexes[2]);\r\n }\r\n\r\n let indexDataUnsignedInt = new Uint32Array(indexData.length);\r\n indexDataUnsignedInt.pp_copy(indexData);\r\n\r\n let vertexCount = meshCreationParams.myVertexes.length;\r\n let mesh = new Mesh(meshCreationParams.myEngine, {\r\n vertexCount: vertexCount,\r\n indexData: indexDataUnsignedInt,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < meshCreationParams.myVertexes.length; i++) {\r\n let vertex = meshCreationParams.myVertexes[i];\r\n if (positionAttribute != null && vertex.myPosition) {\r\n positionAttribute.set(i, vertex.myPosition);\r\n }\r\n if (textureCoordinatesAttribute != null && vertex.myTextureCoordinates) {\r\n textureCoordinatesAttribute.set(i, vertex.myTextureCoordinates);\r\n }\r\n if (normalAttribute != null && vertex.myNormal) {\r\n normalAttribute.set(i, vertex.myNormal);\r\n }\r\n if (colorAttribute != null && vertex.myColor) {\r\n colorAttribute.set(i, vertex.myColor);\r\n }\r\n }\r\n\r\n return mesh;\r\n}\r\n\r\nexport let clone = function () {\r\n let position = vec3_create();\r\n let textureCoordinates = vec2_create();\r\n let normal = vec3_create();\r\n let color = vec4_create();\r\n\r\n return function clone(mesh) {\r\n if (mesh == null) {\r\n return null;\r\n }\r\n\r\n let clonedIndexData = mesh.indexData.pp_clone();\r\n\r\n let clonedMesh = new Mesh(mesh.engine, {\r\n vertexCount: mesh.vertexCount,\r\n indexData: clonedIndexData,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n let clonedPositionAttribute = null;\r\n let clonedTextureCoordinatesAttribute = null;\r\n let clonedNormalAttribute = null;\r\n let clonedColorAttribute = null;\r\n\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n clonedPositionAttribute = clonedMesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n clonedPositionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n clonedTextureCoordinatesAttribute = clonedMesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n clonedTextureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n clonedNormalAttribute = clonedMesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n clonedNormalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n clonedColorAttribute = clonedMesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n clonedColorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < mesh.vertexCount; i++) {\r\n if (positionAttribute != null && clonedPositionAttribute != null) {\r\n clonedPositionAttribute.set(i, positionAttribute.get(i, position));\r\n }\r\n if (textureCoordinatesAttribute != null && clonedTextureCoordinatesAttribute != null) {\r\n clonedTextureCoordinatesAttribute.set(i, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n }\r\n if (normalAttribute != null && clonedNormalAttribute != null) {\r\n clonedNormalAttribute.set(i, normalAttribute.get(i, normal));\r\n }\r\n if (colorAttribute != null && clonedColorAttribute != null) {\r\n clonedColorAttribute.set(i, colorAttribute.get(i, color));\r\n }\r\n }\r\n\r\n return clonedMesh;\r\n };\r\n}();\r\n\r\nexport let invert = function () {\r\n let position = vec3_create();\r\n let textureCoordinates = vec2_create();\r\n let normal = vec3_create();\r\n let color = vec4_create();\r\n\r\n return function invert(mesh) {\r\n if (mesh == null) {\r\n return null;\r\n }\r\n\r\n let invertedIndexData = new Uint32Array(mesh.indexData.length);\r\n for (let i = 0; i < mesh.indexData.length / 3; i++) {\r\n invertedIndexData[i * 3 + 0] = mesh.indexData[i * 3 + 2];\r\n invertedIndexData[i * 3 + 1] = mesh.indexData[i * 3 + 1];\r\n invertedIndexData[i * 3 + 2] = mesh.indexData[i * 3 + 0];\r\n }\r\n\r\n let invertedMesh = new Mesh(mesh.engine, {\r\n vertexCount: mesh.vertexCount,\r\n indexData: invertedIndexData,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n let invertedPositionAttribute = null;\r\n let invertedTextureCoordinatesAttribute = null;\r\n let invertedNormalAttribute = null;\r\n let invertedColorAttribute = null;\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n invertedPositionAttribute = invertedMesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n invertedPositionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n invertedTextureCoordinatesAttribute = invertedMesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n invertedTextureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n invertedNormalAttribute = invertedMesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n invertedNormalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n invertedColorAttribute = invertedMesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n invertedColorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < mesh.vertexCount; i++) {\r\n if (positionAttribute != null && invertedPositionAttribute != null) {\r\n invertedPositionAttribute.set(i, positionAttribute.get(i, position));\r\n }\r\n\r\n if (textureCoordinatesAttribute != null && invertedTextureCoordinatesAttribute != null) {\r\n invertedTextureCoordinatesAttribute.set(i, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n }\r\n\r\n if (normalAttribute != null && invertedNormalAttribute != null) {\r\n normalAttribute.get(i, normal);\r\n normal.vec3_negate(normal);\r\n invertedNormalAttribute.set(i, normal);\r\n }\r\n\r\n if (colorAttribute != null && invertedColorAttribute != null) {\r\n invertedColorAttribute.set(i, colorAttribute.get(i, color));\r\n }\r\n }\r\n\r\n return invertedMesh;\r\n };\r\n}();\r\n\r\nexport let makeDoubleSided = function () {\r\n let position = vec3_create();\r\n let textureCoordinates = vec2_create();\r\n let normal = vec3_create();\r\n let color = vec4_create();\r\n\r\n return function makeDoubleSided(mesh) {\r\n if (mesh == null) {\r\n return null;\r\n }\r\n\r\n let doubleSidedIndexData = new Uint32Array(mesh.indexData.length * 2);\r\n for (let i = 0; i < doubleSidedIndexData.length / 3; i++) {\r\n doubleSidedIndexData[i * 3 * 2 + 0] = mesh.indexData[i * 3 + 0] * 2;\r\n doubleSidedIndexData[i * 3 * 2 + 1] = mesh.indexData[i * 3 + 1] * 2;\r\n doubleSidedIndexData[i * 3 * 2 + 2] = mesh.indexData[i * 3 + 2] * 2;\r\n\r\n doubleSidedIndexData[i * 3 * 2 + 3] = mesh.indexData[i * 3 + 2] * 2 + 1;\r\n doubleSidedIndexData[i * 3 * 2 + 4] = mesh.indexData[i * 3 + 1] * 2 + 1;\r\n doubleSidedIndexData[i * 3 * 2 + 5] = mesh.indexData[i * 3 + 0] * 2 + 1;\r\n }\r\n\r\n let doubleSidedMesh = new Mesh(mesh.engine, {\r\n vertexCount: mesh.vertexCount * 2,\r\n indexData: doubleSidedIndexData,\r\n indexType: MeshIndexType.UnsignedInt,\r\n });\r\n\r\n let positionAttribute = null;\r\n let textureCoordinatesAttribute = null;\r\n let normalAttribute = null;\r\n let colorAttribute = null;\r\n\r\n let doubleSidedPositionAttribute = null;\r\n let doubleSidedTextureCoordinatesAttribute = null;\r\n let doubleSidedNormalAttribute = null;\r\n let doubleSidedColorAttribute = null;\r\n\r\n try {\r\n positionAttribute = mesh.attribute(MeshAttribute.Position);\r\n doubleSidedPositionAttribute = doubleSidedMesh.attribute(MeshAttribute.Position);\r\n } catch (error) {\r\n positionAttribute = null;\r\n doubleSidedPositionAttribute = null;\r\n }\r\n\r\n try {\r\n textureCoordinatesAttribute = mesh.attribute(MeshAttribute.TextureCoordinate);\r\n doubleSidedTextureCoordinatesAttribute = doubleSidedMesh.attribute(MeshAttribute.TextureCoordinate);\r\n } catch (error) {\r\n textureCoordinatesAttribute = null;\r\n doubleSidedTextureCoordinatesAttribute = null;\r\n }\r\n\r\n try {\r\n normalAttribute = mesh.attribute(MeshAttribute.Normal);\r\n doubleSidedNormalAttribute = doubleSidedMesh.attribute(MeshAttribute.Normal);\r\n } catch (error) {\r\n normalAttribute = null;\r\n doubleSidedNormalAttribute = null;\r\n }\r\n\r\n try {\r\n colorAttribute = mesh.attribute(MeshAttribute.Color);\r\n doubleSidedColorAttribute = doubleSidedMesh.attribute(MeshAttribute.Color);\r\n } catch (error) {\r\n colorAttribute = null;\r\n doubleSidedColorAttribute = null;\r\n }\r\n\r\n for (let i = 0; i < mesh.vertexCount; i++) {\r\n if (positionAttribute != null && doubleSidedPositionAttribute != null) {\r\n doubleSidedPositionAttribute.set(i * 2, positionAttribute.get(i, position));\r\n doubleSidedPositionAttribute.set(i * 2 + 1, positionAttribute.get(i, position));\r\n }\r\n\r\n if (textureCoordinatesAttribute != null && doubleSidedTextureCoordinatesAttribute != null) {\r\n doubleSidedTextureCoordinatesAttribute.set(i * 2, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n doubleSidedTextureCoordinatesAttribute.set(i * 2 + 1, textureCoordinatesAttribute.get(i, textureCoordinates));\r\n }\r\n\r\n if (normalAttribute != null && doubleSidedNormalAttribute != null) {\r\n normalAttribute.get(i, normal);\r\n doubleSidedNormalAttribute.set(i * 2, normal);\r\n\r\n let invertedNormal = normal.vec3_negate();\r\n doubleSidedNormalAttribute.set(i * 2 + 1, invertedNormal);\r\n }\r\n\r\n if (colorAttribute != null && doubleSidedColorAttribute != null) {\r\n doubleSidedColorAttribute.set(i * 2, colorAttribute.get(i, color));\r\n doubleSidedColorAttribute.set(i * 2 + 1, colorAttribute.get(i, color));\r\n }\r\n }\r\n\r\n return doubleSidedMesh;\r\n };\r\n}();\r\n\r\nexport function createPlane(engine = Globals.getMainEngine()) {\r\n let vertexCount = 4;\r\n\r\n let meshCreationParams = new MeshCreationParams(engine);\r\n\r\n for (let i = 0; i < vertexCount; ++i) {\r\n let vertexCreationParams = new MeshCreationVertexParams();\r\n\r\n vertexCreationParams.myPosition = new vec3_create();\r\n vertexCreationParams.myPosition[0] = -1 + (i & 1) * 2;\r\n vertexCreationParams.myPosition[1] = -1 + ((i & 2) >> 1) * 2; // This is a quick way to have positions (-1,-1) (1,-1) (1,-1) (1,1)\r\n vertexCreationParams.myPosition[2] = 0;\r\n\r\n vertexCreationParams.myTextureCoordinates = new vec2_create();\r\n vertexCreationParams.myTextureCoordinates[0] = (i & 1);\r\n vertexCreationParams.myTextureCoordinates[1] = ((i & 2) >> 1);\r\n\r\n vertexCreationParams.myNormal = new vec3_create();\r\n vertexCreationParams.myNormal[0] = 0;\r\n vertexCreationParams.myNormal[1] = 0;\r\n vertexCreationParams.myNormal[2] = 1;\r\n\r\n meshCreationParams.myVertexes.push(vertexCreationParams);\r\n }\r\n\r\n let firstTriangle = new MeshCreationTriangleParams();\r\n firstTriangle.myIndexes[0] = 0;\r\n firstTriangle.myIndexes[1] = 1;\r\n firstTriangle.myIndexes[2] = 2;\r\n\r\n let secondTriangle = new MeshCreationTriangleParams();\r\n secondTriangle.myIndexes[0] = 2;\r\n secondTriangle.myIndexes[1] = 1;\r\n secondTriangle.myIndexes[2] = 3;\r\n\r\n meshCreationParams.myTriangles.push(firstTriangle);\r\n meshCreationParams.myTriangles.push(secondTriangle);\r\n\r\n let mesh = MeshUtils.create(meshCreationParams);\r\n\r\n return mesh;\r\n}\r\n\r\nexport let MeshUtils = {\r\n create,\r\n clone,\r\n invert,\r\n makeDoubleSided,\r\n createPlane\r\n};", "import { Material, Mesh } from \"@wonderlandengine/api\";\r\n\r\nexport class DefaultResources {\r\n\r\n public myMeshes: DefaultResourcesMeshes = new DefaultResourcesMeshes();\r\n public myMaterials: DefaultResourcesMaterials = new DefaultResourcesMaterials();\r\n}\r\n\r\nexport class DefaultResourcesMeshes {\r\n\r\n public myPlane: Mesh | null = null;\r\n public myCube: Mesh | null = null;\r\n public mySphere: Mesh | null = null;\r\n public myCone: Mesh | null = null;\r\n public myCylinder: Mesh | null = null;\r\n public myCircle: Mesh | null = null;\r\n\r\n public myInvertedCube: Mesh | null = null;\r\n public myInvertedSphere: Mesh | null = null;\r\n public myInvertedCone: Mesh | null = null;\r\n public myInvertedCylinder: Mesh | null = null;\r\n\r\n public myDoubleSidedPlane: Mesh | null = null;\r\n public myDoubleSidedCube: Mesh | null = null;\r\n public myDoubleSidedSphere: Mesh | null = null;\r\n public myDoubleSidedCone: Mesh | null = null;\r\n public myDoubleSidedCylinder: Mesh | null = null;\r\n public myDoubleSidedCircle: Mesh | null = null;\r\n}\r\n\r\nexport class DefaultResourcesMaterials {\r\n\r\n public myFlatOpaque: Material | null = null;\r\n /** For now, the pipeline associated to this material needs to be the last one to make it work properly */\r\n public myFlatTransparentNoDepth: Material | null = null;\r\n public myPhongOpaque: Material | null = null;\r\n public myText: Material | null = null;\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Handedness } from \"../../../../input/cauldron/input_types.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { SceneObjects } from \"../scene_objects.js\";\r\n\r\nexport class GetSceneObjectsComponent extends Component {\r\n static TypeName = \"pp-get-scene-objects\";\r\n static Properties = {\r\n _myRoot: Property.object(),\r\n\r\n _myScene: Property.object(),\r\n\r\n _myPlayer: Property.object(),\r\n _myReferenceSpace: Property.object(), // If u don't have a pivot under the player you set this to null, by default will be the same as the player\r\n _myCameraNonXR: Property.object(),\r\n _myEyeLeft: Property.object(),\r\n _myEyeRight: Property.object(),\r\n _myHandLeft: Property.object(),\r\n _myHandRight: Property.object(),\r\n _myHead: Property.object()\r\n };\r\n\r\n init() {\r\n this._mySceneObjects = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasSceneObjects(this.engine)) {\r\n this._mySceneObjects = new SceneObjects();\r\n\r\n this._mySceneObjects.myRoot = this._myRoot;\r\n\r\n this._mySceneObjects.myScene = this._myScene;\r\n\r\n this._mySceneObjects.myPlayerObjects.myPlayer = this._myPlayer;\r\n this._mySceneObjects.myPlayerObjects.myReferenceSpace = this._myReferenceSpace;\r\n\r\n this._mySceneObjects.myPlayerObjects.myCameraNonXR = this._myCameraNonXR;\r\n\r\n this._mySceneObjects.myPlayerObjects.myEyeLeft = this._myEyeLeft;\r\n this._mySceneObjects.myPlayerObjects.myEyeRight = this._myEyeRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myHandLeft = this._myHandLeft;\r\n this._mySceneObjects.myPlayerObjects.myHandRight = this._myHandRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myEyes[Handedness.LEFT] = this._myEyeLeft;\r\n this._mySceneObjects.myPlayerObjects.myEyes[Handedness.RIGHT] = this._myEyeRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myHands[Handedness.LEFT] = this._myHandLeft;\r\n this._mySceneObjects.myPlayerObjects.myHands[Handedness.RIGHT] = this._myHandRight;\r\n\r\n this._mySceneObjects.myPlayerObjects.myHead = this._myHead;\r\n\r\n if (this._mySceneObjects.myPlayerObjects.myReferenceSpace == null) {\r\n this._mySceneObjects.myPlayerObjects.myReferenceSpace = this._mySceneObjects.myPlayerObjects.myPlayer;\r\n }\r\n\r\n this._mySceneObjects.myCauldron = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myCauldron.pp_setName(\"Cauldron\");\r\n this._mySceneObjects.myDynamics = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myDynamics.pp_setName(\"Dynamics\");\r\n this._mySceneObjects.myParticles = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myParticles.pp_setName(\"Particles\");\r\n this._mySceneObjects.myVisualElements = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myVisualElements.pp_setName(\"Visual Elements\");\r\n this._mySceneObjects.myTools = this._mySceneObjects.myScene.pp_addObject();\r\n this._mySceneObjects.myTools.pp_setName(\"Tools\");\r\n\r\n this._mySceneObjects.myPlayerObjects.myCauldron = this._mySceneObjects.myPlayerObjects.myPlayer.pp_addObject();\r\n this._mySceneObjects.myPlayerObjects.myCauldron.pp_setName(\"Cauldron\");\r\n this._mySceneObjects.myPlayerObjects.myHeadDebugs = this._mySceneObjects.myPlayerObjects.myHead.pp_addObject();\r\n this._mySceneObjects.myPlayerObjects.myHeadDebugs.pp_setName(\"Head Debugs\");\r\n\r\n Globals.setSceneObjects(this._mySceneObjects, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._mySceneObjects != null && Globals.getSceneObjects(this.engine) == this._mySceneObjects) {\r\n Globals.removeSceneObjects(this.engine);\r\n }\r\n }\r\n}", "export enum Handedness {\r\n LEFT = \"left\",\r\n RIGHT = \"right\"\r\n}\r\n\r\nexport enum HandednessIndex {\r\n LEFT = 0,\r\n RIGHT = 1\r\n}\r\n\r\nexport enum InputSourceType {\r\n GAMEPAD = 0,\r\n TRACKED_HAND = 1\r\n}\r\n\r\nexport enum TrackedHandJointID {\r\n WRIST = \"wrist\",\r\n\r\n THUMB_METACARPAL = \"thumb-metacarpal\",\r\n THUMB_PHALANX_PROXIMAL = \"thumb-phalanx-proximal\",\r\n THUMB_PHALANX_DISTAL = \"thumb-phalanx-distal\",\r\n THUMB_TIP = \"thumb-tip\",\r\n\r\n INDEX_FINGER_METACARPAL = \"index-finger-metacarpal\",\r\n INDEX_FINGER_PHALANX_PROXIMAL = \"index-finger-phalanx-proximal\",\r\n INDEX_FINGER_PHALANX_INTERMEDIATE = \"index-finger-phalanx-intermediate\",\r\n INDEX_FINGER_PHALANX_DISTAL = \"index-finger-phalanx-distal\",\r\n INDEX_FINGER_TIP = \"index-finger-tip\",\r\n\r\n MIDDLE_FINGER_METACARPAL = \"middle-finger-metacarpal\",\r\n MIDDLE_FINGER_PHALANX_PROXIMAL = \"middle-finger-phalanx-proximal\",\r\n MIDDLE_FINGER_PHALANX_INTERMEDIATE = \"middle-finger-phalanx-intermediate\",\r\n MIDDLE_FINGER_PHALANX_DISTAL = \"middle-finger-phalanx-distal\",\r\n MIDDLE_FINGER_TIP = \"middle-finger-tip\",\r\n\r\n RING_FINGER_METACARPAL = \"ring-finger-metacarpal\",\r\n RING_FINGER_PHALANX_PROXIMAL = \"ring-finger-phalanx-proximal\",\r\n RING_FINGER_PHALANX_INTERMEDIATE = \"ring-finger-phalanx-intermediate\",\r\n RING_FINGER_PHALANX_DISTAL = \"ring-finger-phalanx-distal\",\r\n RING_FINGER_TIP = \"ring-finger-tip\",\r\n\r\n PINKY_FINGER_METACARPAL = \"pinky-finger-metacarpal\",\r\n PINKY_FINGER_PHALANX_PROXIMAL = \"pinky-finger-phalanx-proximal\",\r\n PINKY_FINGER_PHALANX_INTERMEDIATE = \"pinky-finger-phalanx-intermediate\",\r\n PINKY_FINGER_PHALANX_DISTAL = \"pinky-finger-phalanx-distal\",\r\n PINKY_FINGER_TIP = \"pinky-finger-tip\",\r\n}\r\n\r\nexport enum TrackedHandJointIDIndex {\r\n WRIST = 0,\r\n\r\n THUMB_METACARPAL = 1,\r\n THUMB_PHALANX_PROXIMAL = 2,\r\n THUMB_PHALANX_DISTAL = 3,\r\n THUMB_TIP = 4,\r\n\r\n INDEX_FINGER_METACARPAL = 5,\r\n INDEX_FINGER_PHALANX_PROXIMAL = 6,\r\n INDEX_FINGER_PHALANX_INTERMEDIATE = 7,\r\n INDEX_FINGER_PHALANX_DISTAL = 8,\r\n INDEX_FINGER_TIP = 9,\r\n\r\n MIDDLE_FINGER_METACARPAL = 10,\r\n MIDDLE_FINGER_PHALANX_PROXIMAL = 11,\r\n MIDDLE_FINGER_PHALANX_INTERMEDIATE = 12,\r\n MIDDLE_FINGER_PHALANX_DISTAL = 13,\r\n MIDDLE_FINGER_TIP = 14,\r\n\r\n RING_FINGER_METACARPAL = 15,\r\n RING_FINGER_PHALANX_PROXIMAL = 16,\r\n RING_FINGER_PHALANX_INTERMEDIATE = 17,\r\n RING_FINGER_PHALANX_DISTAL = 18,\r\n RING_FINGER_TIP = 19,\r\n\r\n PINKY_FINGER_METACARPAL = 20,\r\n PINKY_FINGER_PHALANX_PROXIMAL = 21,\r\n PINKY_FINGER_PHALANX_INTERMEDIATE = 22,\r\n PINKY_FINGER_PHALANX_DISTAL = 23,\r\n PINKY_FINGER_TIP = 24\r\n}", "import { Object3D } from \"@wonderlandengine/api\";\r\nimport { Handedness } from \"../../../input/cauldron/input_types.js\";\r\n\r\nexport class SceneObjects {\r\n\r\n public myRoot: Object3D | null = null;\r\n\r\n public myScene: Object3D | null = null;\r\n\r\n public myCauldron: Object3D | null = null;\r\n public myDynamics: Object3D | null = null;\r\n public myParticles: Object3D | null = null;\r\n public myVisualElements: Object3D | null = null;\r\n public myTools: Object3D | null = null;\r\n\r\n public myPlayerObjects: PlayerObjects = new PlayerObjects();\r\n}\r\n\r\nexport class PlayerObjects {\r\n\r\n public myPlayer: Object3D | null = null;\r\n\r\n public myCauldron: Object3D | null = null;\r\n public myReferenceSpace: Object3D | null = null;\r\n\r\n public myCameraNonXR: Object3D | null = null;\r\n\r\n public myEyes: Record = { [Handedness.LEFT]: null, [Handedness.RIGHT]: null };\r\n public myEyeLeft: Object3D | null = null;\r\n public myEyeRight: Object3D | null = null;\r\n\r\n public myHands: Record = { [Handedness.LEFT]: null, [Handedness.RIGHT]: null };\r\n public myHandLeft: Object3D | null = null;\r\n public myHandRight: Object3D | null = null;\r\n\r\n public myHead: Object3D | null = null;\r\n public myHeadDebugs: Object3D | null = null;\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { DebugManager } from \"../debug_manager.js\";\r\n\r\nexport class DebugManagerComponent extends Component {\r\n static TypeName = \"pp-debug-manager\";\r\n\r\n init() {\r\n this._myDebugManager = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasDebugManager(this.engine)) {\r\n this._myDebugManager = new DebugManager(this.engine);\r\n\r\n Globals.setDebugManager(this._myDebugManager, this.engine);\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myDebugManager != null) {\r\n this._myDebugManager.start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myDebugManager != null) {\r\n this._myDebugManager.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myDebugManager != null && Globals.getDebugManager(this.engine) == this._myDebugManager) {\r\n Globals.removeDebugManager(this.engine);\r\n\r\n this._myDebugManager.destroy();\r\n }\r\n }\r\n}", "import { Alignment, Justification } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../cauldron/utils/xr_utils.js\";\r\nimport { VisualArrowParams } from \"../cauldron/visual/elements/visual_arrow.js\";\r\nimport { VisualLineParams } from \"../cauldron/visual/elements/visual_line.js\";\r\nimport { VisualPointParams } from \"../cauldron/visual/elements/visual_point.js\";\r\nimport { VisualRaycastParams } from \"../cauldron/visual/elements/visual_raycast.js\";\r\nimport { VisualTextParams } from \"../cauldron/visual/elements/visual_text.js\";\r\nimport { VisualTransformParams } from \"../cauldron/visual/elements/visual_transform.js\";\r\nimport { VisualManager } from \"../cauldron/visual/visual_manager.js\";\r\nimport { quat_create, vec3_create, vec4_create } from \"../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../pp/globals.js\";\r\n\r\nexport class DebugVisualManager extends VisualManager {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n\r\n this._myDefaultColor = vec4_create(1, 0, 1, 1);\r\n this._myDefaultLineThickness = 0.005;\r\n this._myDefaultPointRadius = 0.01;\r\n this._myDefaultAxisLength = 0.2;\r\n\r\n this._myDefaultTextLookAtPlayer = true;\r\n this._myDefaultTextAlignment = Alignment.Center;\r\n this._myDefaultTextJustification = Justification.Middle;\r\n\r\n this._myDefaultUITextAlignment = Alignment.Center;\r\n this._myDefaultUITextJustification = Justification.Middle;\r\n this._myDefaultUITextScale = 1;\r\n\r\n this._myDefaultUITextScreenPosition = vec3_create(1, 1, 1);\r\n }\r\n\r\n drawLine(lifetimeSeconds, start, direction, length, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualLineParams(this._myEngine);\r\n visualParams.myStart.vec3_copy(start);\r\n visualParams.myDirection.vec3_copy(direction);\r\n visualParams.myLength = length;\r\n visualParams.myThickness = thickness;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawLineEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n // Implemented outside class definition\r\n }\r\n\r\n drawArrow(lifetimeSeconds, start, direction, length, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualArrowParams(this._myEngine);\r\n visualParams.myStart.vec3_copy(start);\r\n visualParams.myDirection.vec3_copy(direction);\r\n visualParams.myLength = length;\r\n visualParams.myThickness = thickness;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawArrowEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n // Implemented outside class definition\r\n }\r\n\r\n drawPoint(lifetimeSeconds, position, color = this._myDefaultColor, radius = this._myDefaultPointRadius) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualPointParams(this._myEngine);\r\n visualParams.myPosition.vec3_copy(position);\r\n visualParams.myRadius = radius;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawText(lifetimeSeconds, text, transform, color = this._myDefaultColor, lookAtPlayer = this._myDefaultTextLookAtPlayer, alignment = this._myDefaultTextAlignment, justification = this._myDefaultTextJustification) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualTextParams(this._myEngine);\r\n visualParams.myText = text;\r\n visualParams.myAlignment = alignment;\r\n visualParams.myJustification = justification;\r\n visualParams.myTransform.mat4_copy(transform);\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n\r\n if (lookAtPlayer) {\r\n visualParams.myLookAtObject = Globals.getPlayerObjects(this._myEngine).myHead;\r\n }\r\n\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawRaycast(lifetimeSeconds, raycastResult, showOnlyFirstHit = true, hitNormalLength = this._myDefaultAxisLength, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualRaycastParams(this._myEngine);\r\n visualParams.myRaycastResults = raycastResult;\r\n visualParams.myShowOnlyFirstHit = showOnlyFirstHit;\r\n visualParams.myHitNormalLength = hitNormalLength;\r\n visualParams.myThickness = thickness;\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawTransform(lifetimeSeconds, transform, length = this._myDefaultAxisLength, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualTransformParams(this._myEngine);\r\n visualParams.myTransform.mat4_copy(transform);\r\n visualParams.myLength = length;\r\n visualParams.myThickness = thickness;\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n }\r\n\r\n drawUIText(lifetimeSeconds, text, screenPosition, scale = this._myDefaultUITextScale, color = this._myDefaultColor, alignment = this._myDefaultUITextAlignment, justification = this._myDefaultUITextJustification) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _getClassName() {\r\n return \"debug_visual_manager\";\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nDebugVisualManager.prototype.drawLineEnd = function () {\r\n let direction = vec3_create();\r\n return function drawLineEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n direction = end.vec3_sub(start, direction);\r\n let length = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n elementID = this.drawLine(lifetimeSeconds, start, direction, length, color, thickness);\r\n }\r\n\r\n return elementID;\r\n };\r\n}();\r\n\r\nDebugVisualManager.prototype.drawArrowEnd = function () {\r\n let direction = vec3_create();\r\n return function drawArrowEnd(lifetimeSeconds, start, end, color = this._myDefaultColor, thickness = this._myDefaultLineThickness) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n direction = end.vec3_sub(start, direction);\r\n let length = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n elementID = this.drawArrow(lifetimeSeconds, start, direction, length, color, thickness);\r\n }\r\n\r\n return elementID;\r\n };\r\n}();\r\n\r\nDebugVisualManager.prototype.drawUIText = function () {\r\n let textRotationQuat = quat_create();\r\n let up = vec3_create(0, 1, 0);\r\n let lookToForward = vec3_create();\r\n\r\n let screenPositionNormalizedXR = vec3_create(-0.12 * 1, 0.12 * 1, 0.35);\r\n let screenPositionNormalizedNonXR = vec3_create(-0.27 * 1.15, 0.13 * 1.05, 0.35);\r\n\r\n let textPosition = vec3_create();\r\n let textRotation = vec3_create();\r\n let textScale = vec3_create();\r\n return function drawUIText(lifetimeSeconds, text, screenPosition = this._myDefaultUITextScreenPosition, scale = this._myDefaultUITextScale, color = this._myDefaultColor, alignment = this._myDefaultUITextAlignment, justification = this._myDefaultUITextJustification) {\r\n let elementID = null;\r\n\r\n if (this.isActive()) {\r\n let visualParams = new VisualTextParams(this._myEngine);\r\n visualParams.myText = text;\r\n visualParams.myAlignment = alignment;\r\n visualParams.myJustification = justification;\r\n visualParams.myColor = vec4_create();\r\n visualParams.myColor.vec4_copy(color);\r\n\r\n let scaleNormalized = 0.2;\r\n\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n visualParams.myTransform.mat4_setPositionRotationScale(\r\n screenPositionNormalizedXR.vec3_mul(screenPosition, textPosition),\r\n textRotation.vec3_set(0, 180, 0),\r\n textScale.vec3_set(scaleNormalized * scale, scaleNormalized * scale, scaleNormalized * scale));\r\n\r\n lookToForward = visualParams.myTransform.mat4_getPosition(lookToForward).vec3_negate(lookToForward).vec3_normalize(lookToForward);\r\n textRotationQuat = visualParams.myTransform.mat4_getRotationQuat(textRotationQuat);\r\n textRotationQuat.quat_setForward(lookToForward, up, textRotationQuat);\r\n visualParams.myTransform.mat4_setRotationQuat(textRotationQuat);\r\n } else {\r\n visualParams.myTransform.mat4_setPositionRotationScale(\r\n screenPositionNormalizedNonXR.vec3_mul(screenPosition, textPosition),\r\n textRotation.vec3_set(0, 180, 0),\r\n textScale.vec3_set(scaleNormalized * scale, scaleNormalized * scale, scaleNormalized * scale));\r\n }\r\n\r\n visualParams.myParent = Globals.getPlayerObjects(this._myEngine).myHeadDebugs;\r\n visualParams.myLocal = true;\r\n\r\n elementID = this.draw(visualParams, lifetimeSeconds);\r\n }\r\n\r\n return elementID;\r\n };\r\n}();", "import { Globals } from \"../pp/globals.js\";\r\nimport { DebugVisualManager } from \"./debug_visual_manager.js\";\r\n\r\nexport class DebugManager {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n this._myDebugVisualManager = new DebugVisualManager(this._myEngine);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getDebugVisualManager() {\r\n return this._myDebugVisualManager;\r\n }\r\n\r\n start() {\r\n this._myDebugVisualManager.start();\r\n }\r\n\r\n update(dt) {\r\n this._myDebugVisualManager.setActive(Globals.isDebugEnabled(this._myEngine));\r\n this._myDebugVisualManager.update(dt);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myDebugVisualManager.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class EnableDebugComponent extends Component {\r\n static TypeName = \"pp-enable-debug\";\r\n static Properties = {\r\n _myEnable: Property.bool(true),\r\n };\r\n\r\n init() {\r\n this._myDebugEnabled = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasDebugEnabled(this.engine)) {\r\n this._myDebugEnabled = this._myEnable;\r\n\r\n Globals.setDebugEnabled(this._myDebugEnabled, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myDebugEnabled != null && Globals.isDebugEnabled(this.engine) == this._myDebugEnabled) {\r\n Globals.removeDebugEnabled(this.engine);\r\n }\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { CharacterCollisionSystem } from \"../character_collision_system.js\";\r\n\r\nexport class CharacterCollisionSystemComponent extends Component {\r\n static TypeName = \"pp-character-collision-system\";\r\n\r\n init() {\r\n this._myCharacterCollisionSystem = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasCharacterCollisionSystem(this.engine)) {\r\n this._myCharacterCollisionSystem = new CharacterCollisionSystem(this.engine);\r\n\r\n Globals.setCharacterCollisionSystem(this._myCharacterCollisionSystem, this.engine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myCharacterCollisionSystem != null) {\r\n this._myCharacterCollisionSystem.update(dt);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myCharacterCollisionSystem != null && Globals.getCharacterCollisionSystem(this.engine) == this._myCharacterCollisionSystem) {\r\n Globals.removeCharacterCollisionSystem(this.engine);\r\n }\r\n }\r\n}", "import { RaycastHit } from \"../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class CharacterCollisionResults {\r\n\r\n constructor() {\r\n this.myCheckType = null;\r\n\r\n this.myTransformResults = new CharacterCollisionTransformResults();\r\n\r\n this.myMovementResults = new CharacterCollisionMovementResults();\r\n this.myHorizontalMovementResults = new CharacterCollisionMovementResults();\r\n this.myVerticalMovementResults = new CharacterCollisionMovementResults();\r\n\r\n this.myTeleportResults = new CharacterCollisionTeleportResults();\r\n\r\n this.myCheckTransformResults = new CharacterCollisionCheckTransformResults();\r\n\r\n this.myWallSlideResults = new CharacterCollisionWallSlideResults();\r\n\r\n this.myGroundInfo = new CharacterCollisionSurfaceInfo();\r\n this.myCeilingInfo = new CharacterCollisionSurfaceInfo();\r\n\r\n this.myGroundResults = new CharacterCollisionSurfaceResults();\r\n this.myCeilingResults = new CharacterCollisionSurfaceResults();\r\n\r\n this.mySplitMovementResults = new CharacterCollisionSplitMovementResults();\r\n\r\n this.myDebugResults = new CharacterCollisionDebugResults();\r\n\r\n this.myInternalResults = new CharacterCollisionInternalResults();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport let CharacterCollisionCheckType = {\r\n CHECK_MOVEMENT: 0,\r\n CHECK_TELEPORT: 1,\r\n CHECK_TRANSFORM: 2,\r\n UPDATE_SURFACE_INFO: 3,\r\n UPDATE_GROUND_INFO: 4,\r\n UPDATE_CEILING_INFO: 5\r\n};\r\n\r\nexport class CharacterCollisionSurfaceInfo {\r\n\r\n constructor() {\r\n this.myOnSurface = false;\r\n\r\n this.mySurfaceReferenceCollisionHit = new RaycastHit();\r\n\r\n this.mySurfaceAngle = 0;\r\n this.mySurfacePerceivedAngle = 0;\r\n this.mySurfaceNormal = vec3_create();\r\n\r\n this.mySurfaceHitMaxAngle = 0;\r\n this.mySurfaceHitMaxNormal = vec3_create();\r\n\r\n this.mySurfaceDistance = null;\r\n\r\n this.myBaseInsideCollision = false;\r\n this.myOnSurfaceDueToBasePartiallyInsideCollision = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionWallSlideResults {\r\n\r\n constructor() {\r\n this.myHasSlid = false;\r\n this.mySlideMovementAngle = 0; // Signed angle between the start movement and the wall slide movement, basically telling you how much u had to change direction to slide\r\n this.mySlideMovementWallAngle = 0; // Signed angle between the inverted surface normal and the wall slide movement\r\n this.myWallNormal = vec3_create();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionTransformResults {\r\n\r\n constructor() {\r\n this.myInitialTransformQuat = quat2_create();\r\n this.myFinalTransformQuat = quat2_create();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionMovementResults {\r\n\r\n constructor() {\r\n this.myInitialMovement = vec3_create();\r\n this.myFinalMovement = vec3_create();\r\n this.myMovementFailed = false;\r\n this.myMovementCollided = false;\r\n this.myReferenceCollisionHit = new RaycastHit();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionTeleportResults {\r\n\r\n constructor() {\r\n this.myInitialTeleportTransformQuat = quat2_create();\r\n this.myFinalTeleportTransformQuat = quat2_create();\r\n this.myTeleportFailed = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionCheckTransformResults {\r\n\r\n constructor() {\r\n this.myInitialCheckTransformQuat = quat2_create();\r\n this.myFinalCheckTransformQuat = quat2_create();\r\n this.myCheckTransformFailed = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionSurfaceResults {\r\n\r\n constructor() {\r\n this.myHasSnappedOnSurface = false;\r\n this.myHasPoppedOutSurface = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = false;\r\n this.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = false;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionSplitMovementResults {\r\n\r\n constructor() {\r\n this.myStepsToPerform = 0;\r\n this.myStepsPerformed = 0;\r\n this.myMovementInterrupted = false;\r\n this.myMovementChecked = vec3_create();\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionDebugResults {\r\n\r\n constructor() {\r\n this._myRaycastsPerformed = 0;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterCollisionInternalResults {\r\n\r\n constructor() {\r\n this.myLastRelevantInitialHorizontalMovement = vec3_create();\r\n this.myLastRelevantAdjustedInitialHorizontalMovement = vec3_create();\r\n this.myLastRelevantFinalHorizontalMovement = vec3_create();\r\n\r\n this.myLastRelevantInitialVerticalMovement = vec3_create();\r\n this.myLastRelevantAdjustedInitialVerticalMovement = vec3_create();\r\n this.myLastRelevantFinalVerticalMovement = vec3_create();\r\n\r\n this.myLastRelevantHasWallSlid = false;\r\n this.myHasWallSlidTowardOppositeDirection = false;\r\n this.myLastRelevantWallSlideFlickerPrevented = false;\r\n this.myWallSlideFlickerPreventionForceCheckCounter = 0;\r\n this.myWallSlide90DegreesDirectionSign = 0;\r\n this.myWallSlide90DegreesRecomputeDirectionSign = true;\r\n }\r\n\r\n reset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCharacterCollisionResults.prototype.reset = function reset() {\r\n this.myCheckType = null;\r\n\r\n this.myTransformResults.reset();\r\n\r\n this.myMovementResults.reset();\r\n this.myHorizontalMovementResults.reset();\r\n this.myVerticalMovementResults.reset();\r\n\r\n this.myTeleportResults.reset();\r\n\r\n this.myCheckTransformResults.reset();\r\n\r\n this.myWallSlideResults.reset();\r\n\r\n this.myGroundInfo.reset();\r\n this.myCeilingInfo.reset();\r\n\r\n this.myGroundResults.reset();\r\n this.myCeilingResults.reset();\r\n\r\n this.mySplitMovementResults.reset();\r\n\r\n this.myInternalResults.reset();\r\n};\r\n\r\nCharacterCollisionResults.prototype.copy = function copy(other) {\r\n this.myCheckType = other.myCheckType;\r\n\r\n this.myTransformResults.copy(other.myTransformResults);\r\n\r\n this.myMovementResults.copy(other.myMovementResults);\r\n this.myHorizontalMovementResults.copy(other.myHorizontalMovementResults);\r\n this.myVerticalMovementResults.copy(other.myVerticalMovementResults);\r\n\r\n this.myTeleportResults.copy(other.myTeleportResults);\r\n\r\n this.myCheckTransformResults.copy(other.myCheckTransformResults);\r\n\r\n this.myWallSlideResults.copy(other.myWallSlideResults);\r\n\r\n this.myGroundInfo.copy(other.myGroundInfo);\r\n this.myCeilingInfo.copy(other.myCeilingInfo);\r\n\r\n this.myGroundResults.copy(other.myGroundResults);\r\n this.myCeilingResults.copy(other.myCeilingResults);\r\n\r\n this.mySplitMovementResults.copy(other.mySplitMovementResults);\r\n\r\n this.myInternalResults.copy(other.myInternalResults);\r\n};\r\n\r\nCharacterCollisionSurfaceInfo.prototype.reset = function reset() {\r\n this.myOnSurface = false;\r\n\r\n this.mySurfaceAngle = 0;\r\n this.mySurfacePerceivedAngle = 0;\r\n this.mySurfaceNormal.vec3_zero();\r\n\r\n this.mySurfaceReferenceCollisionHit.reset();\r\n\r\n this.mySurfaceHitMaxAngle = 0;\r\n this.mySurfaceHitMaxNormal.vec3_zero();\r\n\r\n this.mySurfaceDistance = null;\r\n\r\n this.myBaseInsideCollision = false;\r\n this.myOnSurfaceDueToBasePartiallyInsideCollision = false;\r\n};\r\n\r\nCharacterCollisionSurfaceInfo.prototype.copy = function copy(other) {\r\n this.myOnSurface = other.myOnSurface;\r\n\r\n this.mySurfaceAngle = other.mySurfaceAngle;\r\n this.mySurfacePerceivedAngle = other.mySurfacePerceivedAngle;\r\n this.mySurfaceNormal.vec3_copy(other.mySurfaceNormal);\r\n\r\n this.mySurfaceReferenceCollisionHit.copy(other.mySurfaceReferenceCollisionHit);\r\n\r\n this.mySurfaceHitMaxAngle = other.mySurfaceHitMaxAngle;\r\n this.mySurfaceHitMaxNormal.vec3_copy(other.mySurfaceHitMaxNormal);\r\n\r\n this.mySurfaceDistance = other.mySurfaceDistance;\r\n\r\n this.myBaseInsideCollision = other.myBaseInsideCollision;\r\n this.myOnSurfaceDueToBasePartiallyInsideCollision = other.myOnSurfaceDueToBasePartiallyInsideCollision;\r\n};\r\n\r\nCharacterCollisionWallSlideResults.prototype.reset = function reset() {\r\n this.myHasSlid = false;\r\n this.mySlideMovementAngle = 0;\r\n this.mySlideMovementWallAngle = 0;\r\n this.myWallNormal.vec3_zero();\r\n};\r\n\r\nCharacterCollisionWallSlideResults.prototype.copy = function copy(other) {\r\n this.myHasSlid = other.myHasSlid;\r\n this.mySlideMovementAngle = other.mySlideMovementAngle;\r\n this.mySlideMovementWallAngle = other.mySlideMovementWallAngle;\r\n this.myWallNormal.vec3_copy(other.myWallNormal);\r\n};\r\n\r\nCharacterCollisionTransformResults.prototype.reset = function reset() {\r\n this.myInitialTransformQuat.quat2_identity();\r\n this.myFinalTransformQuat.quat2_identity();\r\n};\r\n\r\nCharacterCollisionTransformResults.prototype.copy = function copy(other) {\r\n this.myInitialTransformQuat.quat2_copy(other.myInitialTransformQuat);\r\n this.myFinalTransformQuat.quat2_copy(other.myFinalTransformQuat);\r\n};\r\n\r\nCharacterCollisionMovementResults.prototype.reset = function reset() {\r\n this.myInitialMovement.vec3_zero();\r\n this.myFinalMovement.vec3_zero();\r\n this.myMovementFailed = false;\r\n this.myMovementCollided = false;\r\n this.myReferenceCollisionHit.reset();\r\n};\r\n\r\nCharacterCollisionMovementResults.prototype.copy = function copy(other) {\r\n this.myInitialMovement.vec3_copy(other.myInitialMovement);\r\n this.myFinalMovement.vec3_copy(other.myFinalMovement);\r\n this.myMovementFailed = other.myMovementFailed;\r\n this.myMovementCollided = other.myMovementCollided;\r\n this.myReferenceCollisionHit.copy(other.myReferenceCollisionHit);\r\n};\r\n\r\nCharacterCollisionTeleportResults.prototype.reset = function reset() {\r\n this.myInitialTeleportTransformQuat.quat2_identity();\r\n this.myFinalTeleportTransformQuat.quat2_identity();\r\n this.myTeleportFailed = false;\r\n};\r\n\r\nCharacterCollisionTeleportResults.prototype.copy = function copy(other) {\r\n this.myInitialTeleportTransformQuat.quat2_copy(other.myInitialTeleportTransformQuat);\r\n this.myFinalTeleportTransformQuat.quat2_copy(other.myFinalTeleportTransformQuat);\r\n this.myTeleportFailed = other.myTeleportFailed;\r\n};\r\n\r\nCharacterCollisionCheckTransformResults.prototype.reset = function reset() {\r\n this.myInitialCheckTransformQuat.quat2_identity();\r\n this.myFinalCheckTransformQuat.quat2_identity();\r\n this.myCheckTransformFailed = false;\r\n};\r\n\r\nCharacterCollisionCheckTransformResults.prototype.copy = function copy(other) {\r\n this.myInitialCheckTransformQuat.quat2_copy(other.myInitialCheckTransformQuat);\r\n this.myFinalCheckTransformQuat.quat2_copy(other.myFinalCheckTransformQuat);\r\n this.myCheckTransformFailed = other.myCheckTransformFailed;\r\n};\r\n\r\nCharacterCollisionSurfaceResults.prototype.reset = function reset() {\r\n this.myHasSnappedOnSurface = false;\r\n this.myHasPoppedOutSurface = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = false;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = false;\r\n this.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = false;\r\n};\r\n\r\nCharacterCollisionSurfaceResults.prototype.copy = function copy(other) {\r\n this.myHasSnappedOnSurface = other.myHasSnappedOnSurface;\r\n this.myHasPoppedOutSurface = other.myHasPoppedOutSurface;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = other.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n this.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = other.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill;\r\n this.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = other.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill;\r\n};\r\n\r\nCharacterCollisionSplitMovementResults.prototype.reset = function reset() {\r\n this.myStepsToPerform = 0;\r\n this.myStepsPerformed = 0;\r\n this.myMovementInterrupted = false;\r\n this.myMovementChecked.vec3_zero();\r\n};\r\n\r\nCharacterCollisionSplitMovementResults.prototype.copy = function copy(other) {\r\n this.myStepsToPerform = other.myStepsToPerform;\r\n this.myStepsPerformed = other.myStepsPerformed;\r\n this.myMovementInterrupted = other.myMovementInterrupted;\r\n this.myMovementChecked.vec3_copy(other.myMovementChecked);\r\n};\r\n\r\nCharacterCollisionDebugResults.prototype.reset = function reset() {\r\n this._myRaycastsPerformed = 0;\r\n};\r\n\r\nCharacterCollisionDebugResults.prototype.copy = function copy(other) {\r\n this._myRaycastsPerformed = other._myRaycastsPerformed;\r\n};\r\n\r\nCharacterCollisionInternalResults.prototype.reset = function reset() {\r\n};\r\n\r\nCharacterCollisionInternalResults.prototype.copy = function copy(other) {\r\n this.myLastRelevantInitialHorizontalMovement.vec3_copy(other.myLastRelevantInitialHorizontalMovement);\r\n this.myLastRelevantAdjustedInitialHorizontalMovement.vec3_copy(other.myLastRelevantAdjustedInitialHorizontalMovement);\r\n this.myLastRelevantFinalHorizontalMovement.vec3_copy(other.myLastRelevantFinalHorizontalMovement);\r\n\r\n this.myLastRelevantInitialVerticalMovement.vec3_copy(other.myLastRelevantInitialVerticalMovement);\r\n this.myLastRelevantAdjustedInitialVerticalMovement.vec3_copy(other.myLastRelevantAdjustedInitialVerticalMovement);\r\n this.myLastRelevantFinalVerticalMovement.vec3_copy(other.myLastRelevantFinalVerticalMovement);\r\n\r\n this.myLastRelevantHasWallSlid = other.myLastRelevantHasWallSlid;\r\n this.myHasWallSlidTowardOppositeDirection = other.myHasWallSlidTowardOppositeDirection;\r\n this.myLastRelevantWallSlideFlickerPrevented = other.myLastRelevantWallSlideFlickerPrevented;\r\n this.myWallSlideFlickerPreventionForceCheckCounter = other.myWallSlideFlickerPreventionForceCheckCounter;\r\n this.myWallSlide90DegreesDirectionSign = other.myWallSlide90DegreesDirectionSign;\r\n this.myWallSlide90DegreesRecomputeDirectionSign = other.myWallSlide90DegreesRecomputeDirectionSign;\r\n};", "import { PhysicsLayerFlags } from \"../../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { quat_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class CollisionCheckParams {\r\n\r\n constructor() {\r\n this.mySplitMovementEnabled = false;\r\n this.mySplitMovementMaxLength = 0;\r\n this.mySplitMovementMaxLengthEnabled = false;\r\n this.mySplitMovementMaxSteps = 0;\r\n this.mySplitMovementMaxStepsEnabled = false;\r\n this.mySplitMovementMinLength = 0;\r\n this.mySplitMovementMinLengthEnabled = false;\r\n this.mySplitMovementStopWhenHorizontalMovementCanceled = false;\r\n this.mySplitMovementStopWhenVerticalMovementCanceled = false;\r\n this.mySplitMovementStopCallback = null; // Signature: callback(collisionRuntimeParams)\r\n this.mySplitMovementStopReturnPrevious = false;\r\n\r\n this.myRadius = 0;\r\n this.myDistanceFromFeetToIgnore = 0;\r\n this.myDistanceFromHeadToIgnore = 0;\r\n\r\n this.myPositionOffsetLocal = vec3_create();\r\n this.myRotationOffsetLocalQuat = quat_create();\r\n\r\n this.myHorizontalMovementCheckEnabled = false;\r\n\r\n // Usually the horizontal movement is very small and it could be simply skipped has a check, the horizontal position check will be enough\r\n // With small I mean that it's very unlikely that in 10 cm of movement in a frame u are going to hit something in between but not in the final position\r\n // If u feel like the movement is bigger or want to be sure u can always enabled this\r\n // If the movement is really that big it's probably better to use the mySplitMovementEnabled flag and split the movement check into smaller movements\r\n this.myHorizontalMovementStepEnabled = false;\r\n this.myHorizontalMovementStepMaxLength = 0;\r\n\r\n this.myHorizontalMovementRadialStepAmount = 0;\r\n this.myHorizontalMovementCheckDiagonalOutward = false;\r\n this.myHorizontalMovementCheckDiagonalInward = false;\r\n this.myHorizontalMovementCheckStraight = false;\r\n this.myHorizontalMovementCheckHorizontalBorder = false;\r\n this.myHorizontalMovementCheckVerticalStraight = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardInward = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardOutward = false;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardInward = false;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalUpward = false;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalDownward = false;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward = false;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward = false;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = false;\r\n\r\n this.myHorizontalPositionCheckEnabled = false;\r\n\r\n this.myHalfConeAngle = 0;\r\n this.myHalfConeSliceAmount = 0;\r\n this.myCheckConeBorder = false;\r\n this.myCheckConeRay = false;\r\n this.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = true; // True gives less issues(tm), but may also collide a bit more, resulting in less sliding\r\n this.myHorizontalPositionCheckVerticalDirectionType = 0; // Somewhat expensive, 2 times the check for the vertical check of the horizontal movement!\r\n // 0: check upward, gives less issues(tm) (hitting a very small step at the end of a slope /-) with a grounded movement (not fly or snapped to ceiling), but may also collide a bit more, resulting in less sliding\r\n // 1: check downard, gives less issues(tm) with a ceiling-ed movement (not fly or snapped to ground), but may also collide a bit more, resulting in less sliding and more stuck in front of a wall\r\n // 2: check both directions, more expensive and better prevent collision, sliding more, but is more expensive and gives more issues \r\n // ___\r\n // The issues(tm) means that a small step at the end of a slope, maybe due to 2 rectangles, one for the floor and the other for the slope like this -> / \r\n // can create a small step if the floor rectangle is a bit above the end of the slope, this will make the character get stuck thinking it's a wall\r\n // 0 avoid this issue for a grounded movement, 2 instead do a more \"aggressive\" vertical check that makes the character get less stuck in other situations, but can get stuck in this one\r\n // The better solution is to properly create the level, and if possible combine the 2 rectangles by having the floor a little below the end of the slope\r\n // The step that is created \"on the other side\" in fact can easily be ignored thanks to the myDistanceFromFeetToIgnore field\r\n // If the level is properly created the best solution should be myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = false and myHorizontalPositionCheckVerticalDirectionType = 0\r\n\r\n this.myCheckHorizontalFixedForwardEnabled = false; // This is basically only useful if the cone angle is 180 degrees\r\n this.myCheckHorizontalFixedForward = vec3_create();\r\n\r\n this.myVerticalMovementCheckEnabled = false;\r\n this.myVerticalPositionCheckEnabled = false;\r\n this.myFeetRadius = 0;\r\n\r\n this.myAdjustVerticalMovementWithGroundAngleDownhill = false;\r\n this.myAdjustVerticalMovementWithGroundAngleUphill = false;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle = null;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle = null;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhill = false;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle = null;\r\n\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhill = false;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphill = false;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = null;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = null;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhill = false;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle = null;\r\n\r\n this.myCheckVerticalFixedForwardEnabled = false;\r\n this.myCheckVerticalFixedForward = vec3_create();\r\n this.myCheckVerticalBothDirection = false;\r\n\r\n this.mySnapOnGroundEnabled = false;\r\n this.mySnapOnGroundExtraDistance = 0;\r\n this.mySnapOnCeilingEnabled = false;\r\n this.mySnapOnCeilingExtraDistance = 0;\r\n\r\n this.myGroundPopOutEnabled = false;\r\n this.myGroundPopOutExtraDistance = 0;\r\n this.myCeilingPopOutEnabled = false;\r\n this.myCeilingPopOutExtraDistance = 0;\r\n\r\n this.myVerticalMovementReduceEnabled = false;\r\n\r\n this.myGroundCircumferenceAddCenter = false;\r\n this.myGroundCircumferenceSliceAmount = 0;\r\n this.myGroundCircumferenceStepAmount = 0;\r\n this.myGroundCircumferenceRotationPerStep = 0;\r\n this.myVerticalAllowHitInsideCollisionIfOneOk = false;\r\n\r\n this.myCheckHeight = false;\r\n this.myCheckHeightVerticalMovement = false;\r\n this.myCheckHeightVerticalPosition = false;\r\n this.myCheckHeightTopMovement = false;\r\n this.myCheckHeightTopPosition = false;\r\n this.myCheckHeightConeOnCollision = false;\r\n this.myCheckHeightConeOnCollisionKeepHit = false;\r\n // If true and myCheckHeightConeOnCollision is true, if the cone does not hit the height hit will be restored\r\n // The fact that the cone does not hit could be due to the fact that it thinks that the collision can be ignored though, sop restoring can be a bit safer but also collide more\r\n\r\n this.myHeightCheckStepAmountMovement = 0;\r\n this.myHeightCheckStepAmountPosition = 0;\r\n this.myCheckVerticalStraight = false;\r\n this.myCheckVerticalDiagonalRayOutward = false;\r\n this.myCheckVerticalDiagonalRayInward = false;\r\n this.myCheckVerticalDiagonalBorderOutward = false;\r\n this.myCheckVerticalDiagonalBorderInward = false;\r\n this.myCheckVerticalDiagonalBorderRayOutward = false;\r\n this.myCheckVerticalDiagonalBorderRayInward = false;\r\n this.myCheckVerticalSearchFartherVerticalHit = false; // Somewhat expensive, but can help fix sime sliding issues\r\n\r\n this.myGroundAngleToIgnore = 0;\r\n this.myGroundAngleToIgnoreWithPerceivedAngle = null;\r\n this.myCeilingAngleToIgnore = 0;\r\n this.myCeilingAngleToIgnoreWithPerceivedAngle = null;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreHeight = null;\r\n this.myHorizontalMovementCeilingAngleIgnoreHeight = null;\r\n this.myHorizontalPositionGroundAngleIgnoreHeight = null;\r\n this.myHorizontalPositionCeilingAngleIgnoreHeight = null;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = null;\r\n this.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft = null;\r\n\r\n this.myHeight = 0;\r\n\r\n this.myComputeGroundInfoEnabled = false;\r\n this.myComputeCeilingInfoEnabled = false;\r\n this.myDistanceToBeOnGround = 0;\r\n this.myDistanceToComputeGroundInfo = 0;\r\n this.myDistanceToBeOnCeiling = 0;\r\n this.myDistanceToComputeCeilingInfo = 0;\r\n this.myVerticalFixToBeOnGround = 0;\r\n this.myVerticalFixToComputeGroundInfo = 0;\r\n this.myVerticalFixToBeOnCeiling = 0;\r\n this.myVerticalFixToComputeCeilingInfo = 0;\r\n this.myGroundIsBaseInsideCollisionCheckEnabled = false;\r\n this.myCeilingIsBaseInsideCollisionCheckEnabled = false;\r\n this.myIsOnGroundIfInsideHit = false;\r\n this.myIsOnCeilingIfInsideHit = false;\r\n this.myIsOnGroundMaxSurfaceAngle = null;\r\n this.myIsOnCeilingMaxSurfaceAngle = null;\r\n this.myFindGroundDistanceMaxOutsideDistance = 0;\r\n this.myFindGroundDistanceMaxInsideDistance = 0;\r\n this.myFindCeilingDistanceMaxOutsideDistance = 0;\r\n this.myFindCeilingDistanceMaxInsideDistance = 0;\r\n this.myCollectGroundCollisionHitOutsideDistance = 0;\r\n this.myCollectGroundCollisionHitInsideDistance = 0;\r\n this.myCollectCeilingCollisionHitOutsideDistance = 0;\r\n this.myCollectCeilingCollisionHitInsideDistance = 0;\r\n\r\n this.myAllowGroundSteepFix = false;\r\n this.myAllowCeilingSteepFix = false;\r\n this.myMustStayOnGround = false;\r\n this.myMustStayOnCeiling = false;\r\n this.myMustStayOnValidGroundAngleDownhill = false;\r\n this.myMustStayOnValidCeilingAngleDownhill = false;\r\n this.myRegatherGroundInfoOnSurfaceCheckFail = false;\r\n this.myRegatherCeilingInfoOnSurfaceCheckFail = false;\r\n this.myMustStayBelowIgnorableGroundAngleDownhill = false;\r\n this.myMustStayBelowIgnorableCeilingAngleDownhill = false;\r\n this.myMustStayBelowGroundAngleDownhill = null;\r\n this.myMustStayBelowCeilingAngleDownhill = null;\r\n this.myMovementMustStayOnGroundHitAngle = null;\r\n this.myMovementMustStayOnCeilingHitAngle = null;\r\n\r\n this.myTeleportMustBeOnIgnorableGroundAngle = false;\r\n this.myCheckTransformMustBeOnIgnorableGroundAngle = false;\r\n this.myTeleportMustBeOnIgnorableCeilingAngle = false;\r\n this.myCheckTransformMustBeOnIgnorableCeilingAngle = false;\r\n\r\n this.myTeleportMustBeOnGroundAngle = null;\r\n this.myCheckTransformMustBeOnGroundAngle = null;\r\n this.myTeleportMustBeOnCeilingAngle = null;\r\n this.myCheckTransformMustBeOnCeilingAngle = null;\r\n\r\n this.myTeleportMustBeOnGround = false;\r\n this.myCheckTransformMustBeOnGround = false;\r\n this.myTeleportMustBeOnCeiling = false;\r\n this.myCheckTransformMustBeOnCeiling = false;\r\n\r\n this.mySlidingEnabled = false;\r\n this.mySlidingHorizontalMovementCheckBetterNormal = false;\r\n this.mySlidingMaxAttempts = 0;\r\n this.mySlidingCheckBothDirections = false; // Expensive, 2 times the check for the whole horizontal movement!\r\n // This can fix some edge cases in which u can get stuck instead of sliding\r\n // It basically require that u also add flicker prevention\r\n\r\n this.mySlidingFlickeringPreventionType = 0; // Expensive, 2 times the check for the whole horizontal movement!\r\n // 0: no prevention\r\n // 1: use previous frame data to understand if the sliding could flicker, this avoid stopping the movement when the flicker would just last some frames, \r\n // but also allows a bit of flicker that stabilize after 2-3 frames\r\n // 2: check when sliding collision angle is more then 90 degrees, prevents most flicker apart those on almost flat surfaces\r\n // 3: check 2 + check when sliding movement angle is more then 85 degrees, prevents almost all flicker, even on almost flat surfaces\r\n // 4: check every time\r\n //\r\n // From 3 and above you could have that the flicker prevents the movement when u expect it, because it's a more aggressive prevention\r\n // In case a fluid movement is more important than a bit of flicker from time to time, 1 is a better choice (which is also less expensive than 3 and above)\r\n // 2 is just a less expensive version of 3 (check less times) but also less precise, allowing more flickering\r\n\r\n this.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding = false;\r\n // This flag make it so the prevention is done only if it was already sliding, this can lead to a few frames of flicker if u go toward a corner directly\r\n // but allow the movement to be more fluid, avoiding getting stuck\r\n\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = 0;\r\n // If the collision think it needs to check for flicker, it will keep checking for the next X frames based on this value even if the condition are not met anymore\r\n // This help in catching the flicker when the direction is not changing every frame but every 2-3 for example\r\n // It's especially useful if combo-ed with mySlidingFlickeringPreventionType == 1, making it a bit less fluid but also less flickering\r\n\r\n this.mySlidingAdjustSign90Degrees = false;\r\n\r\n this.myHorizontalBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHorizontalObjectsToIgnore = [];\r\n\r\n this.myVerticalBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myVerticalObjectsToIgnore = [];\r\n\r\n this.myExtraMovementCheckCallback = null; // Signature: callback(startMovement, endMovement, currentPosition, currentTransformUp, currentTransformForward, currentHeight, collisionCheckParams, prevCollisionRuntimeParams, outCollisionRuntimeParams, outFixedMovement) -> outFixedMovement\r\n this.myExtraTeleportCheckCallback = null; // Signature: callback(collisionRuntimeParams) -> bool\r\n this.myExtraCheckTransformCheckCallback = null; // Signature: callback(collisionRuntimeParams) -> bool\r\n\r\n this.myDebugEnabled = false;\r\n\r\n this.myDebugHorizontalMovementEnabled = false;\r\n this.myDebugHorizontalPositionEnabled = false;\r\n this.myDebugVerticalMovementEnabled = false;\r\n this.myDebugVerticalPositionEnabled = false;\r\n this.myDebugSlidingEnabled = false;\r\n this.myDebugGroundInfoEnabled = false;\r\n this.myDebugCeilingInfoEnabled = false;\r\n this.myDebugRuntimeParamsEnabled = false;\r\n this.myDebugMovementEnabled = false;\r\n }\r\n\r\n copy(other) {\r\n this.mySplitMovementEnabled = other.mySplitMovementEnabled;\r\n this.mySplitMovementMaxLength = other.mySplitMovementMaxLength;\r\n this.mySplitMovementMaxLengthEnabled = other.mySplitMovementMaxLengthEnabled;\r\n this.mySplitMovementMaxSteps = other.mySplitMovementMaxSteps;\r\n this.mySplitMovementMaxStepsEnabled = other.mySplitMovementMaxStepsEnabled;\r\n this.mySplitMovementMinLength = other.mySplitMovementMinLength;\r\n this.mySplitMovementMinLengthEnabled = other.mySplitMovementMinLengthEnabled;\r\n this.mySplitMovementStopWhenHorizontalMovementCanceled = other.mySplitMovementStopWhenHorizontalMovementCanceled;\r\n this.mySplitMovementStopWhenVerticalMovementCanceled = other.mySplitMovementStopWhenVerticalMovementCanceled;\r\n this.mySplitMovementStopCallback = other.mySplitMovementStopCallback;\r\n this.mySplitMovementStopReturnPrevious = other.mySplitMovementStopReturnPrevious;\r\n\r\n this.myRadius = other.myRadius;\r\n this.myDistanceFromFeetToIgnore = other.myDistanceFromFeetToIgnore;\r\n this.myDistanceFromHeadToIgnore = other.myDistanceFromHeadToIgnore;\r\n\r\n this.myPositionOffsetLocal.vec3_copy(other.myPositionOffsetLocal);\r\n this.myRotationOffsetLocalQuat.quat_copy(other.myRotationOffsetLocalQuat);\r\n\r\n this.myHorizontalMovementCheckEnabled = other.myHorizontalMovementCheckEnabled;\r\n this.myHorizontalMovementStepEnabled = other.myHorizontalMovementStepEnabled;\r\n this.myHorizontalMovementStepMaxLength = other.myHorizontalMovementStepMaxLength;\r\n this.myHorizontalMovementRadialStepAmount = other.myHorizontalMovementRadialStepAmount;\r\n this.myHorizontalMovementCheckDiagonalOutward = other.myHorizontalMovementCheckDiagonalOutward;\r\n this.myHorizontalMovementCheckDiagonalInward = other.myHorizontalMovementCheckDiagonalInward;\r\n this.myHorizontalMovementCheckStraight = other.myHorizontalMovementCheckStraight;\r\n this.myHorizontalMovementCheckHorizontalBorder = other.myHorizontalMovementCheckHorizontalBorder;\r\n this.myHorizontalMovementCheckVerticalStraight = other.myHorizontalMovementCheckVerticalStraight;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = other.myHorizontalMovementCheckVerticalDiagonalUpwardOutward;\r\n this.myHorizontalMovementCheckVerticalDiagonalUpwardInward = other.myHorizontalMovementCheckVerticalDiagonalUpwardInward;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardOutward = other.myHorizontalMovementCheckVerticalDiagonalDownwardOutward;\r\n this.myHorizontalMovementCheckVerticalDiagonalDownwardInward = other.myHorizontalMovementCheckVerticalDiagonalDownwardInward;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalUpward = other.myHorizontalMovementCheckVerticalStraightDiagonalUpward;\r\n this.myHorizontalMovementCheckVerticalStraightDiagonalDownward = other.myHorizontalMovementCheckVerticalStraightDiagonalDownward;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward = other.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward;\r\n this.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward = other.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = other.myHorizontalMovementHorizontalStraightCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = other.myHorizontalMovementVerticalStraightCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled;\r\n\r\n this.myHorizontalPositionCheckEnabled = other.myHorizontalPositionCheckEnabled;\r\n this.myHalfConeAngle = other.myHalfConeAngle;\r\n this.myHalfConeSliceAmount = other.myHalfConeSliceAmount;\r\n this.myCheckConeBorder = other.myCheckConeBorder;\r\n this.myCheckConeRay = other.myCheckConeRay;\r\n this.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = other.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision;\r\n this.myHorizontalPositionCheckVerticalDirectionType = other.myHorizontalPositionCheckVerticalDirectionType;\r\n\r\n this.myVerticalMovementCheckEnabled = other.myVerticalMovementCheckEnabled;\r\n this.myVerticalPositionCheckEnabled = other.myVerticalPositionCheckEnabled;\r\n this.myFeetRadius = other.myFeetRadius;\r\n\r\n this.myAdjustVerticalMovementWithGroundAngleDownhill = other.myAdjustVerticalMovementWithGroundAngleDownhill;\r\n this.myAdjustVerticalMovementWithGroundAngleUphill = other.myAdjustVerticalMovementWithGroundAngleUphill;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle = other.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle = other.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle;\r\n this.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle = other.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle;\r\n this.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle = other.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhill = other.myAdjustHorizontalMovementWithGroundAngleDownhill;\r\n this.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle = other.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle;\r\n\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhill = other.myAdjustVerticalMovementWithCeilingAngleDownhill;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphill = other.myAdjustVerticalMovementWithCeilingAngleUphill;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle;\r\n this.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle;\r\n this.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = other.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhill = other.myAdjustHorizontalMovementWithCeilingAngleDownhill;\r\n this.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle = other.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle;\r\n\r\n this.myCheckVerticalFixedForwardEnabled = other.myCheckVerticalFixedForwardEnabled;\r\n this.myCheckVerticalFixedForward.vec3_copy(other.myCheckVerticalFixedForward);\r\n this.myCheckVerticalBothDirection = other.myCheckVerticalBothDirection;\r\n\r\n this.mySnapOnGroundEnabled = other.mySnapOnGroundEnabled;\r\n this.mySnapOnGroundExtraDistance = other.mySnapOnGroundExtraDistance;\r\n this.mySnapOnCeilingEnabled = other.mySnapOnCeilingEnabled;\r\n this.mySnapOnCeilingExtraDistance = other.mySnapOnCeilingExtraDistance;\r\n\r\n this.myGroundPopOutEnabled = other.myGroundPopOutEnabled;\r\n this.myGroundPopOutExtraDistance = other.myGroundPopOutExtraDistance;\r\n this.myCeilingPopOutEnabled = other.myCeilingPopOutEnabled;\r\n this.myCeilingPopOutExtraDistance = other.myCeilingPopOutExtraDistance;\r\n\r\n this.myVerticalMovementReduceEnabled = other.myVerticalMovementReduceEnabled;\r\n\r\n this.myGroundCircumferenceAddCenter = other.myGroundCircumferenceAddCenter;\r\n this.myGroundCircumferenceSliceAmount = other.myGroundCircumferenceSliceAmount;\r\n this.myGroundCircumferenceStepAmount = other.myGroundCircumferenceStepAmount;\r\n this.myGroundCircumferenceRotationPerStep = other.myGroundCircumferenceRotationPerStep;\r\n this.myVerticalAllowHitInsideCollisionIfOneOk = other.myVerticalAllowHitInsideCollisionIfOneOk;\r\n\r\n this.myCheckHeight = other.myCheckHeight;\r\n this.myCheckHeightVerticalMovement = other.myCheckHeightVerticalMovement;\r\n this.myCheckHeightVerticalPosition = other.myCheckHeightVerticalPosition;\r\n this.myCheckHeightTopMovement = other.myCheckHeightTopMovement;\r\n this.myCheckHeightTopPosition = other.myCheckHeightTopPosition;\r\n this.myCheckHeightConeOnCollision = other.myCheckHeightConeOnCollision;\r\n this.myCheckHeightConeOnCollisionKeepHit = other.myCheckHeightConeOnCollisionKeepHit;\r\n this.myHeightCheckStepAmountMovement = other.myHeightCheckStepAmountMovement;\r\n this.myHeightCheckStepAmountPosition = other.myHeightCheckStepAmountPosition;\r\n this.myCheckVerticalStraight = other.myCheckVerticalStraight;\r\n this.myCheckVerticalDiagonalRayOutward = other.myCheckVerticalDiagonalRayOutward;\r\n this.myCheckVerticalDiagonalRayInward = other.myCheckVerticalDiagonalRayInward;\r\n this.myCheckVerticalDiagonalBorderOutward = other.myCheckVerticalDiagonalBorderOutward;\r\n this.myCheckVerticalDiagonalBorderInward = other.myCheckVerticalDiagonalBorderInward;\r\n this.myCheckVerticalDiagonalBorderRayOutward = other.myCheckVerticalDiagonalBorderRayOutward;\r\n this.myCheckVerticalDiagonalBorderRayInward = other.myCheckVerticalDiagonalBorderRayInward;\r\n this.myCheckVerticalSearchFartherVerticalHit = other.myCheckVerticalSearchFartherVerticalHit;\r\n\r\n this.myGroundAngleToIgnore = other.myGroundAngleToIgnore;\r\n this.myGroundAngleToIgnoreWithPerceivedAngle = other.myGroundAngleToIgnoreWithPerceivedAngle;\r\n this.myCeilingAngleToIgnore = other.myCeilingAngleToIgnore;\r\n this.myCeilingAngleToIgnoreWithPerceivedAngle = other.myCeilingAngleToIgnoreWithPerceivedAngle;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreHeight = other.myHorizontalMovementGroundAngleIgnoreHeight;\r\n this.myHorizontalMovementCeilingAngleIgnoreHeight = other.myHorizontalMovementCeilingAngleIgnoreHeight;\r\n this.myHorizontalPositionGroundAngleIgnoreHeight = other.myHorizontalPositionGroundAngleIgnoreHeight;\r\n this.myHorizontalPositionCeilingAngleIgnoreHeight = other.myHorizontalPositionCeilingAngleIgnoreHeight;\r\n\r\n this.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = other.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n this.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft = other.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft;\r\n\r\n this.myHeight = other.myHeight;\r\n\r\n this.myComputeGroundInfoEnabled = other.myComputeGroundInfoEnabled;\r\n this.myComputeCeilingInfoEnabled = other.myComputeCeilingInfoEnabled;\r\n this.myDistanceToBeOnGround = other.myDistanceToBeOnGround;\r\n this.myDistanceToComputeGroundInfo = other.myDistanceToComputeGroundInfo;\r\n this.myDistanceToBeOnCeiling = other.myDistanceToBeOnCeiling;\r\n this.myDistanceToComputeCeilingInfo = other.myDistanceToComputeCeilingInfo;\r\n this.myVerticalFixToBeOnGround = other.myVerticalFixToBeOnGround;\r\n this.myVerticalFixToComputeGroundInfo = other.myVerticalFixToComputeGroundInfo;\r\n this.myVerticalFixToBeOnCeiling = other.myVerticalFixToBeOnCeiling;\r\n this.myVerticalFixToComputeCeilingInfo = other.myVerticalFixToComputeCeilingInfo;\r\n this.myGroundIsBaseInsideCollisionCheckEnabled = other.myGroundIsBaseInsideCollisionCheckEnabled;\r\n this.myCeilingIsBaseInsideCollisionCheckEnabled = other.myCeilingIsBaseInsideCollisionCheckEnabled;\r\n this.myIsOnGroundIfInsideHit = other.myIsOnGroundIfInsideHit;\r\n this.myIsOnCeilingIfInsideHit = other.myIsOnCeilingIfInsideHit;\r\n this.myIsOnGroundMaxSurfaceAngle = other.myIsOnGroundMaxSurfaceAngle;\r\n this.myIsOnCeilingMaxSurfaceAngle = other.myIsOnCeilingMaxSurfaceAngle;\r\n this.myFindGroundDistanceMaxOutsideDistance = other.myFindGroundDistanceMaxOutsideDistance;\r\n this.myFindGroundDistanceMaxInsideDistance = other.myFindGroundDistanceMaxInsideDistance;\r\n this.myFindCeilingDistanceMaxOutsideDistance = other.myFindCeilingDistanceMaxOutsideDistance;\r\n this.myFindCeilingDistanceMaxInsideDistance = other.myFindCeilingDistanceMaxInsideDistance;\r\n this.myCollectGroundCollisionHitOutsideDistance = other.myCollectGroundCollisionHitOutsideDistance;\r\n this.myCollectGroundCollisionHitInsideDistance = other.myCollectGroundCollisionHitInsideDistance;\r\n this.myCollectCeilingCollisionHitOutsideDistance = other.myCollectCeilingCollisionHitOutsideDistance;\r\n this.myCollectCeilingCollisionHitInsideDistance = other.myCollectCeilingCollisionHitInsideDistance;\r\n\r\n this.myAllowGroundSteepFix = other.myAllowGroundSteepFix;\r\n this.myAllowCeilingSteepFix = other.myAllowCeilingSteepFix;\r\n this.myMustStayOnGround = other.myMustStayOnGround;\r\n this.myMustStayOnCeiling = other.myMustStayOnCeiling;\r\n this.myMustStayOnValidGroundAngleDownhill = other.myMustStayOnValidGroundAngleDownhill;\r\n this.myMustStayOnValidCeilingAngleDownhill = other.myMustStayOnValidCeilingAngleDownhill;\r\n this.myRegatherGroundInfoOnSurfaceCheckFail = other.myRegatherGroundInfoOnSurfaceCheckFail;\r\n this.myRegatherCeilingInfoOnSurfaceCheckFail = other.myRegatherCeilingInfoOnSurfaceCheckFail;\r\n this.myMustStayBelowGroundAngleDownhill = other.myMustStayBelowGroundAngleDownhill;\r\n this.myMustStayBelowCeilingAngleDownhill = other.myMustStayBelowCeilingAngleDownhill;\r\n this.myMustStayBelowIgnorableGroundAngleDownhill = other.myMustStayBelowIgnorableGroundAngleDownhill;\r\n this.myMustStayBelowIgnorableCeilingAngleDownhill = other.myMustStayBelowIgnorableCeilingAngleDownhill;\r\n this.myMovementMustStayOnGroundHitAngle = other.myMovementMustStayOnGroundHitAngle;\r\n this.myMovementMustStayOnCeilingHitAngle = other.myMovementMustStayOnCeilingHitAngle;\r\n\r\n this.myTeleportMustBeOnIgnorableGroundAngle = other.myTeleportMustBeOnIgnorableGroundAngle;\r\n this.myCheckTransformMustBeOnIgnorableGroundAngle = other.myCheckTransformMustBeOnIgnorableGroundAngle;\r\n this.myTeleportMustBeOnIgnorableCeilingAngle = other.myTeleportMustBeOnIgnorableCeilingAngle;\r\n this.myCheckTransformMustBeOnIgnorableCeilingAngle = other.myCheckTransformMustBeOnIgnorableCeilingAngle;\r\n\r\n this.myTeleportMustBeOnGroundAngle = other.myTeleportMustBeOnGroundAngle;\r\n this.myCheckTransformMustBeOnGroundAngle = other.myCheckTransformMustBeOnGroundAngle;\r\n this.myTeleportMustBeOnCeilingAngle = other.myTeleportMustBeOnCeilingAngle;\r\n this.myCheckTransformMustBeOnCeilingAngle = other.myCheckTransformMustBeOnCeilingAngle;\r\n\r\n this.myTeleportMustBeOnGround = other.myTeleportMustBeOnGround;\r\n this.myCheckTransformMustBeOnGround = other.myCheckTransformMustBeOnGround;\r\n this.myTeleportMustBeOnCeiling = other.myTeleportMustBeOnCeiling;\r\n this.myCheckTransformMustBeOnCeiling = other.myCheckTransformMustBeOnCeiling;\r\n\r\n this.mySlidingEnabled = other.mySlidingEnabled;\r\n this.mySlidingHorizontalMovementCheckBetterNormal = other.mySlidingHorizontalMovementCheckBetterNormal;\r\n this.mySlidingMaxAttempts = other.mySlidingMaxAttempts;\r\n this.mySlidingCheckBothDirections = other.mySlidingCheckBothDirections;\r\n this.mySlidingFlickeringPreventionType = other.mySlidingFlickeringPreventionType;\r\n this.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding = other.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = other.mySlidingFlickerPreventionCheckAnywayCounter;\r\n\r\n this.mySlidingAdjustSign90Degrees = other.mySlidingAdjustSign90Degrees;\r\n\r\n this.myHorizontalBlockLayerFlags.copy(other.myHorizontalBlockLayerFlags);\r\n this.myHorizontalObjectsToIgnore.pp_copy(other.myHorizontalObjectsToIgnore);\r\n\r\n this.myVerticalBlockLayerFlags.copy(other.myVerticalBlockLayerFlags);\r\n this.myVerticalObjectsToIgnore.pp_copy(other.myVerticalObjectsToIgnore);\r\n\r\n this.myExtraMovementCheckCallback = other.myExtraMovementCheckCallback;\r\n this.myExtraTeleportCheckCallback = other.myExtraTeleportCheckCallback;\r\n this.myExtraCheckTransformCheckCallback = other.myExtraCheckTransformCheckCallback;\r\n\r\n this.myDebugEnabled = other.myDebugEnabled;\r\n\r\n this.myDebugHorizontalMovementEnabled = other.myDebugHorizontalMovementEnabled;\r\n this.myDebugHorizontalPositionEnabled = other.myDebugHorizontalPositionEnabled;\r\n this.myDebugVerticalMovementEnabled = other.myDebugVerticalMovementEnabled;\r\n this.myDebugVerticalPositionEnabled = other.myDebugVerticalPositionEnabled;\r\n this.myDebugSlidingEnabled = other.myDebugSlidingEnabled;\r\n this.myDebugGroundInfoEnabled = other.myDebugGroundInfoEnabled;\r\n this.myDebugCeilingInfoEnabled = other.myDebugCeilingInfoEnabled;\r\n this.myDebugRuntimeParamsEnabled = other.myDebugRuntimeParamsEnabled;\r\n this.myDebugMovementEnabled = other.myDebugMovementEnabled;\r\n }\r\n}\r\n\r\nexport class CollisionRuntimeParams {\r\n\r\n constructor() {\r\n this.myOriginalPosition = vec3_create();\r\n this.myNewPosition = vec3_create();\r\n\r\n this.myOriginalHeight = 0;\r\n\r\n this.myOriginalForward = vec3_create();\r\n this.myOriginalUp = vec3_create();\r\n\r\n this.myOffsetUp = vec3_create();\r\n\r\n this.myOriginalMovement = vec3_create();\r\n this.myFixedMovement = vec3_create();\r\n\r\n this.myLastValidOriginalHorizontalMovement = vec3_create();\r\n this.myLastValidOriginalVerticalMovement = vec3_create();\r\n this.myLastValidSurfaceAdjustedHorizontalMovement = vec3_create();\r\n this.myLastValidSurfaceAdjustedVerticalMovement = vec3_create();\r\n this.myLastValidEndHorizontalMovement = vec3_create();\r\n this.myLastValidEndVerticalMovement = vec3_create();\r\n\r\n this.myIsOnGround = false;\r\n this.myGroundCollisionHit = new RaycastHit();\r\n this.myGroundAngle = 0;\r\n this.myGroundPerceivedAngle = 0;\r\n this.myGroundNormal = vec3_create();\r\n this.myGroundHitMaxAngle = 0;\r\n this.myGroundHitMaxNormal = vec3_create();\r\n this.myGroundDistance = null;\r\n this.myGroundIsBaseInsideCollision = false;\r\n\r\n this.myIsOnCeiling = false;\r\n this.myCeilingCollisionHit = new RaycastHit();\r\n this.myCeilingAngle = 0;\r\n this.myCeilingPerceivedAngle = 0;\r\n this.myCeilingNormal = vec3_create();\r\n this.myCeilingHitMaxAngle = 0;\r\n this.myCeilingHitMaxNormal = vec3_create();\r\n this.myCeilingDistance = null;\r\n this.myCeilingIsBaseInsideCollision = false;\r\n\r\n this.myHorizontalMovementCanceled = false; // Could add HorizontalMovementCanceledReason\r\n this.myIsCollidingHorizontally = false;\r\n this.myHorizontalCollisionHit = new RaycastHit();\r\n\r\n this.myVerticalMovementCanceled = false;\r\n this.myIsCollidingVertically = false;\r\n this.myVerticalCollisionHit = new RaycastHit();\r\n\r\n this.myHasSnappedOnGround = false;\r\n this.myHasSnappedOnCeiling = false;\r\n this.myHasPoppedOutGround = false;\r\n this.myHasPoppedOutCeiling = false;\r\n this.myHasReducedVerticalMovement = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = false;\r\n\r\n this.myIsSliding = false;\r\n this.myIsSlidingIntoOppositeDirection = false;\r\n this.myIsSlidingFlickerPrevented = false;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = 0;\r\n this.mySlidingMovementAngle = 0;\r\n this.mySlidingCollisionAngle = 0;\r\n this.mySlidingCollisionHit = new RaycastHit();\r\n this.mySlidingWallNormal = new vec3_create();\r\n this.mySliding90DegreesSign = 0;\r\n this.mySlidingRecompute90DegreesSign = true;\r\n this.myLastValidIsSliding = false;\r\n this.mySlidingPreviousHorizontalMovement = vec3_create();\r\n\r\n this.myOriginalTeleportPosition = vec3_create();\r\n this.myFixedTeleportPosition = vec3_create();\r\n\r\n this.myOriginalPositionCheckPosition = vec3_create();\r\n this.myFixedPositionCheckPosition = vec3_create();\r\n\r\n this.myTeleportCanceled = false;\r\n\r\n this.myIsPositionOk = false;\r\n\r\n this.myIsTeleport = false; // Could be a single bool but not sure if there should be an option and don't want to create an enum for now\r\n this.myIsMove = false;\r\n this.myIsPositionCheck = false;\r\n this.myIsPositionCheckAllowAdjustments = false;\r\n\r\n this.mySplitMovementSteps = 0;\r\n this.mySplitMovementStepsPerformed = 0;\r\n this.mySplitMovementStop = false;\r\n this.mySplitMovementMovementChecked = vec3_create();\r\n\r\n this.myRealIsOnGround = false;\r\n this.myRealIsOnCeiling = false;\r\n }\r\n\r\n reset() {\r\n this.myOriginalPosition.vec3_zero();\r\n this.myNewPosition.vec3_zero();\r\n\r\n this.myOriginalHeight = 0;\r\n\r\n this.myOriginalForward.vec3_zero();\r\n this.myOriginalUp.vec3_zero();\r\n\r\n this.myOffsetUp.vec3_zero();\r\n\r\n this.myOriginalMovement.vec3_zero();\r\n this.myFixedMovement.vec3_zero();\r\n\r\n this.myLastValidOriginalHorizontalMovement.vec3_zero();\r\n this.myLastValidOriginalVerticalMovement.vec3_zero();\r\n this.myLastValidSurfaceAdjustedHorizontalMovement.vec3_zero();\r\n this.myLastValidSurfaceAdjustedVerticalMovement.vec3_zero();\r\n this.myLastValidEndHorizontalMovement.vec3_zero();\r\n this.myLastValidEndVerticalMovement.vec3_zero();\r\n\r\n\r\n this.myIsOnGround = false;\r\n this.myGroundCollisionHit.reset();\r\n this.myGroundAngle = 0;\r\n this.myGroundPerceivedAngle = 0;\r\n this.myGroundNormal.vec3_zero();\r\n this.myGroundHitMaxAngle = 0;\r\n this.myGroundHitMaxNormal.vec3_zero();\r\n this.myGroundDistance = null;\r\n this.myGroundIsBaseInsideCollision = false;\r\n\r\n this.myIsOnCeiling = false;\r\n this.myCeilingCollisionHit.reset();\r\n this.myCeilingAngle = 0;\r\n this.myCeilingPerceivedAngle = 0;\r\n this.myCeilingNormal.vec3_zero();\r\n this.myCeilingHitMaxAngle = 0;\r\n this.myCeilingHitMaxNormal.vec3_zero();\r\n this.myCeilingDistance = null;\r\n this.myCeilingIsBaseInsideCollision = false;\r\n\r\n this.myHorizontalMovementCanceled = false;\r\n this.myIsCollidingHorizontally = false;\r\n this.myHorizontalCollisionHit.reset();\r\n\r\n this.myVerticalMovementCanceled = false;\r\n this.myIsCollidingVertically = false;\r\n this.myVerticalCollisionHit.reset();\r\n\r\n this.myHasSnappedOnGround = false;\r\n this.myHasSnappedOnCeiling = false;\r\n this.myHasPoppedOutGround = false;\r\n this.myHasPoppedOutCeiling = false;\r\n this.myHasReducedVerticalMovement = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = false;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = false;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = false;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = false;\r\n\r\n this.myIsSliding = false;\r\n this.myIsSlidingIntoOppositeDirection = false;\r\n this.myIsSlidingFlickerPrevented = false;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = 0;\r\n this.mySlidingMovementAngle = 0;\r\n this.mySlidingCollisionAngle = 0;\r\n this.mySlidingCollisionHit.reset();\r\n this.mySliding90DegreesSign = 0;\r\n this.mySlidingRecompute90DegreesSign = true;\r\n this.myLastValidIsSliding = false;\r\n this.mySlidingPreviousHorizontalMovement.vec3_zero();\r\n this.mySlidingWallNormal.vec3_zero();\r\n\r\n this.myOriginalTeleportPosition.vec3_zero();\r\n this.myFixedTeleportPosition.vec3_zero();\r\n\r\n this.myOriginalPositionCheckPosition.vec3_zero();\r\n this.myFixedPositionCheckPosition.vec3_zero();\r\n\r\n this.myTeleportCanceled = false;\r\n\r\n this.myIsPositionOk = false;\r\n\r\n this.myIsTeleport = false;\r\n this.myIsMove = false;\r\n this.myIsPositionCheck = false;\r\n this.myIsPositionCheckAllowAdjustments = false;\r\n\r\n this.mySplitMovementSteps = 0;\r\n this.mySplitMovementStepsPerformed = 0;\r\n this.mySplitMovementStop = false;\r\n this.mySplitMovementMovementChecked.vec3_zero();\r\n\r\n this.myRealIsOnGround = false;\r\n this.myRealIsOnCeiling = false;\r\n }\r\n\r\n copy(other) {\r\n this.myOriginalPosition.vec3_copy(other.myOriginalPosition);\r\n this.myNewPosition.vec3_copy(other.myNewPosition);\r\n\r\n this.myOriginalHeight = other.myOriginalHeight;\r\n\r\n this.myOriginalForward.vec3_copy(other.myOriginalForward);\r\n this.myOriginalUp.vec3_copy(other.myOriginalUp);\r\n\r\n this.myOffsetUp.vec3_copy(other.myOffsetUp);\r\n\r\n this.myOriginalMovement.vec3_copy(other.myOriginalMovement);\r\n this.myFixedMovement.vec3_copy(other.myFixedMovement);\r\n\r\n this.myLastValidOriginalHorizontalMovement.vec3_copy(other.myLastValidOriginalHorizontalMovement);\r\n this.myLastValidOriginalVerticalMovement.vec3_copy(other.myLastValidOriginalVerticalMovement);\r\n this.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(other.myLastValidSurfaceAdjustedHorizontalMovement);\r\n this.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(other.myLastValidSurfaceAdjustedVerticalMovement);\r\n this.myLastValidEndHorizontalMovement.vec3_copy(other.myLastValidEndHorizontalMovement);\r\n this.myLastValidEndVerticalMovement.vec3_copy(other.myLastValidEndVerticalMovement);\r\n\r\n this.myIsOnGround = other.myIsOnGround;\r\n this.myGroundCollisionHit.copy(other.myGroundCollisionHit);\r\n this.myGroundAngle = other.myGroundAngle;\r\n this.myGroundPerceivedAngle = other.myGroundPerceivedAngle;\r\n this.myGroundNormal.vec3_copy(other.myGroundNormal);\r\n this.myGroundHitMaxAngle = other.myGroundHitMaxAngle;\r\n this.myGroundHitMaxNormal.vec3_copy(other.myGroundHitMaxNormal);\r\n this.myGroundDistance = other.myGroundDistance;\r\n this.myGroundIsBaseInsideCollision = other.myGroundIsBaseInsideCollision;\r\n\r\n this.myIsOnCeiling = other.myIsOnCeiling;\r\n this.myCeilingCollisionHit.copy(other.myCeilingCollisionHit);\r\n this.myCeilingAngle = other.myCeilingAngle;\r\n this.myCeilingPerceivedAngle = other.myCeilingPerceivedAngle;\r\n this.myCeilingNormal.vec3_copy(other.myCeilingNormal);\r\n this.myCeilingHitMaxAngle = other.myCeilingHitMaxAngle;\r\n this.myCeilingHitMaxNormal.vec3_copy(other.myCeilingHitMaxNormal);\r\n this.myCeilingDistance = other.myCeilingDistance;\r\n this.myCeilingIsBaseInsideCollision = other.myCeilingIsBaseInsideCollision;\r\n\r\n this.myHorizontalMovementCanceled = other.myHorizontalMovementCanceled;\r\n this.myIsCollidingHorizontally = other.myIsCollidingHorizontally;\r\n this.myHorizontalCollisionHit.copy(other.myHorizontalCollisionHit);\r\n\r\n this.myVerticalMovementCanceled = other.myVerticalMovementCanceled;\r\n this.myIsCollidingVertically = other.myIsCollidingVertically;\r\n this.myVerticalCollisionHit.copy(other.myVerticalCollisionHit);\r\n\r\n this.myHasSnappedOnGround = other.myHasSnappedOnGround;\r\n this.myHasSnappedOnCeiling = other.myHasSnappedOnCeiling;\r\n this.myHasPoppedOutGround = other.myHasPoppedOutGround;\r\n this.myHasPoppedOutCeiling = other.myHasPoppedOutCeiling;\r\n this.myHasReducedVerticalMovement = other.myHasReducedVerticalMovement;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = other.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = other.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = other.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill;\r\n\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = other.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill;\r\n this.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = other.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill;\r\n this.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = other.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill;\r\n\r\n this.myIsSliding = other.myIsSliding;\r\n this.myIsSlidingIntoOppositeDirection = other.myIsSlidingIntoOppositeDirection;\r\n this.myIsSlidingFlickerPrevented = other.myIsSlidingFlickerPrevented;\r\n this.mySlidingFlickerPreventionCheckAnywayCounter = other.mySlidingFlickerPreventionCheckAnywayCounter;\r\n this.mySlidingMovementAngle = other.mySlidingMovementAngle;\r\n this.mySlidingCollisionAngle = other.mySlidingCollisionAngle;\r\n this.mySlidingCollisionHit.copy(other.mySlidingCollisionHit);\r\n this.mySliding90DegreesSign = other.mySliding90DegreesSign;\r\n this.mySlidingRecompute90DegreesSign = other.mySlidingRecompute90DegreesSign;\r\n this.myLastValidIsSliding = other.myLastValidIsSliding;\r\n this.mySlidingPreviousHorizontalMovement.vec3_copy(other.mySlidingPreviousHorizontalMovement);\r\n this.mySlidingWallNormal.vec3_copy(other.mySlidingWallNormal);\r\n\r\n this.myOriginalTeleportPosition.vec3_copy(other.myOriginalTeleportPosition);\r\n this.myFixedTeleportPosition.vec3_copy(other.myFixedTeleportPosition);\r\n this.myTeleportCanceled = other.myTeleportCanceled;\r\n\r\n this.myIsPositionOk = other.myIsPositionOk;\r\n\r\n this.myOriginalPositionCheckPosition.vec3_copy(other.myOriginalPositionCheckPosition);\r\n this.myFixedPositionCheckPosition.vec3_copy(other.myFixedPositionCheckPosition);\r\n\r\n this.myIsTeleport = other.myIsTeleport;\r\n this.myIsMove = other.myIsMove;\r\n this.myIsPositionCheck = other.myIsPositionCheck;\r\n this.myIsPositionCheckAllowAdjustments = other.myIsPositionCheckAllowAdjustments;\r\n\r\n this.mySplitMovementSteps = other.mySplitMovementSteps;\r\n this.mySplitMovementStepsPerformed = other.mySplitMovementStepsPerformed;\r\n this.mySplitMovementStop = other.mySplitMovementStop;\r\n this.mySplitMovementMovementChecked.vec3_copy(other.mySplitMovementMovementChecked);\r\n\r\n this.myRealIsOnGround = other.myRealIsOnGround;\r\n this.myRealIsOnCeiling = other.myRealIsOnCeiling;\r\n }\r\n}", "import { RaycastHit, RaycastParams, RaycastResults } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../../../../../../cauldron/physics/physics_utils.js\";\r\nimport { quat2_create, vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionRuntimeParams } from \"./collision_params.js\";\r\n\r\nexport class CollisionCheckBase {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myRaycastParams = new RaycastParams(Globals.getPhysics(this._myEngine));\r\n this._myRaycastResult = new RaycastResults();\r\n this._myFixRaycastResult = new RaycastResults();\r\n\r\n this._myBackupRaycastHit = new RaycastHit();\r\n\r\n this._myPrevCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n this._mySlidingCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myInternalSlidingCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingFlickeringFixCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingFlickeringFixSlidingCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingOppositeDirectionCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._mySlidingOnVerticalCheckCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n this._myCollisionCheckDisabled = false;\r\n\r\n this._myDebugEnabled = false;\r\n\r\n this._myTotalRaycasts = 0;\r\n }\r\n\r\n isCollisionCheckDisabled() {\r\n return this._myCollisionCheckDisabled;\r\n }\r\n\r\n setCollisionCheckDisabled(collisionCheckDisabled) {\r\n this._myCollisionCheckDisabled = collisionCheckDisabled;\r\n }\r\n\r\n _raycastAndDebug(origin, direction, distance, ignoreHitsInsideCollision, isHorizontal, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForMoveCollisionCheckDisabled(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForTeleportCollisionCheckDisabled(position, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForPositionCheckCollisionCheckDisabled(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _debugMovement(movement, fixedMovement, feetPosition, up, collisionCheckParams) {\r\n let originalHorizontalMovement = movement.vec3_removeComponentAlongAxis(up);\r\n\r\n let horizontalMovement = fixedMovement.vec3_removeComponentAlongAxis(up);\r\n let verticalMovement = fixedMovement.vec3_componentAlongAxis(up);\r\n\r\n let feetPositionPlusOffset = feetPosition.vec3_add(up.vec3_scale(collisionCheckParams.myDistanceFromFeetToIgnore + 0.001));\r\n\r\n if (!originalHorizontalMovement.vec3_isZero()) {\r\n originalHorizontalMovement.vec3_normalize(originalHorizontalMovement);\r\n\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPositionPlusOffset, originalHorizontalMovement, 0.2, vec4_create(0.5, 0.5, 1, 1));\r\n }\r\n\r\n if (!horizontalMovement.vec3_isZero()) {\r\n horizontalMovement.vec3_normalize(horizontalMovement);\r\n\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPositionPlusOffset, horizontalMovement, 0.2, vec4_create(0, 0, 1, 1));\r\n }\r\n\r\n if (!verticalMovement.vec3_isZero()) {\r\n verticalMovement.vec3_normalize(verticalMovement);\r\n\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPosition, verticalMovement, 0.2, vec4_create(0, 0, 1, 1));\r\n }\r\n }\r\n\r\n _debugRuntimeParams(collisionRuntimeParams) {\r\n if (collisionRuntimeParams.myHorizontalCollisionHit.isValid()) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0,\r\n collisionRuntimeParams.myHorizontalCollisionHit.myPosition,\r\n collisionRuntimeParams.myHorizontalCollisionHit.myNormal, 0.2, vec4_create(1, 0, 0, 1));\r\n }\r\n\r\n if (collisionRuntimeParams.mySlidingCollisionHit.isValid()) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0,\r\n collisionRuntimeParams.mySlidingCollisionHit.myPosition,\r\n collisionRuntimeParams.mySlidingCollisionHit.myNormal, 0.2, vec4_create(1, 0, 0, 1));\r\n }\r\n\r\n if (collisionRuntimeParams.myVerticalCollisionHit.isValid()) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0,\r\n collisionRuntimeParams.myVerticalCollisionHit.myPosition,\r\n collisionRuntimeParams.myVerticalCollisionHit.myNormal, 0.2, vec4_create(1, 0, 0, 1));\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckBase.prototype._raycastAndDebug = function () {\r\n let tempRaycastResult = new RaycastResults();\r\n return function _raycastAndDebug(origin, direction, distance, ignoreHitsInsideCollision, isHorizontal, collisionCheckParams, collisionRuntimeParams) {\r\n this._myRaycastParams.myOrigin.vec3_copy(origin);\r\n this._myRaycastParams.myDirection.vec3_copy(direction);\r\n this._myRaycastParams.myDistance = distance;\r\n\r\n if (isHorizontal) {\r\n this._myRaycastParams.myBlockLayerFlags.copy(collisionCheckParams.myHorizontalBlockLayerFlags);\r\n this._myRaycastParams.myObjectsToIgnore = collisionCheckParams.myHorizontalObjectsToIgnore;\r\n } else {\r\n this._myRaycastParams.myBlockLayerFlags.copy(collisionCheckParams.myVerticalBlockLayerFlags);\r\n this._myRaycastParams.myObjectsToIgnore = collisionCheckParams.myVerticalObjectsToIgnore;\r\n }\r\n\r\n this._myRaycastParams.myIgnoreHitsInsideCollision = ignoreHitsInsideCollision;\r\n\r\n let raycastResult = null;\r\n\r\n let raycastPerformanceDebugEnabled = false;\r\n if (raycastPerformanceDebugEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n // Quick debug to remove raycasts and/or let all raycasts fail\r\n\r\n let raycastAlways = false;\r\n if (raycastAlways || !this._myRaycastResult.isColliding()) {\r\n raycastResult = PhysicsUtils.raycast(this._myRaycastParams, tempRaycastResult);\r\n }\r\n\r\n if (!this._myRaycastResult.isColliding() && tempRaycastResult.isColliding()) {\r\n this._myRaycastResult.copy(tempRaycastResult);\r\n }\r\n\r\n raycastResult = this._myRaycastResult;\r\n } else {\r\n raycastResult = PhysicsUtils.raycast(this._myRaycastParams, this._myRaycastResult);\r\n }\r\n\r\n\r\n this._myTotalRaycasts++;\r\n\r\n if (this._myDebugEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n Globals.getDebugVisualManager(this._myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n return raycastResult;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForMoveCollisionCheckDisabled = function () {\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n return function _setRuntimeParamsForMoveCollisionCheckDisabled(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n collisionRuntimeParams.reset();\r\n\r\n collisionRuntimeParams.myRealIsOnGround = true;\r\n collisionRuntimeParams.myIsOnGround = true;\r\n collisionRuntimeParams.myGroundCollisionHit.reset();\r\n collisionRuntimeParams.myGroundAngle = 0;\r\n collisionRuntimeParams.myGroundPerceivedAngle = 0;\r\n collisionRuntimeParams.myGroundNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myGroundHitMaxAngle = collisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundDistance = 0;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myRealIsOnCeiling = false;\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n collisionRuntimeParams.myCeilingCollisionHit.reset();\r\n collisionRuntimeParams.myCeilingAngle = 0;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = 0;\r\n collisionRuntimeParams.myCeilingNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = collisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingDistance = 0;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.mySplitMovementSteps = 1;\r\n collisionRuntimeParams.mySplitMovementStepsPerformed = 1;\r\n collisionRuntimeParams.mySplitMovementStop = false;\r\n collisionRuntimeParams.mySplitMovementMovementChecked.vec3_copy(movement);\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n collisionRuntimeParams.myOffsetUp = offsetTransformQuat.quat2_getUp(collisionRuntimeParams.myOffsetUp);\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalMovement.vec3_copy(movement);\r\n collisionRuntimeParams.myFixedMovement.vec3_copy(movement);\r\n\r\n collisionRuntimeParams.myNewPosition = collisionRuntimeParams.myOriginalPosition.vec3_add(collisionRuntimeParams.myFixedMovement, collisionRuntimeParams.myNewPosition);\r\n\r\n collisionRuntimeParams.myIsMove = true;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForTeleportCollisionCheckDisabled = function () {\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n return function _setRuntimeParamsForTeleportCollisionCheckDisabled(position, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n collisionRuntimeParams.reset();\r\n\r\n collisionRuntimeParams.myRealIsOnGround = true;\r\n collisionRuntimeParams.myIsOnGround = true;\r\n collisionRuntimeParams.myGroundCollisionHit.reset();\r\n collisionRuntimeParams.myGroundAngle = 0;\r\n collisionRuntimeParams.myGroundPerceivedAngle = 0;\r\n collisionRuntimeParams.myGroundNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myGroundHitMaxAngle = collisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundDistance = 0;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myRealIsOnCeiling = false;\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n collisionRuntimeParams.myCeilingCollisionHit.reset();\r\n collisionRuntimeParams.myCeilingAngle = 0;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = 0;\r\n collisionRuntimeParams.myCeilingNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = collisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingDistance = 0;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n collisionRuntimeParams.myOffsetUp = offsetTransformQuat.quat2_getUp(collisionRuntimeParams.myOffsetUp);\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_copy(position);\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_copy(position);\r\n\r\n collisionRuntimeParams.myNewPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n\r\n collisionRuntimeParams.myIsTeleport = true;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForPositionCheckCollisionCheckDisabled = function () {\r\n let feetPosition = vec3_create();\r\n return function _setRuntimeParamsForPositionCheckCollisionCheckDisabled(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n feetPosition = transformQuat.quat2_getPosition(feetPosition);\r\n this._setRuntimeParamsForTeleportCollisionCheckDisabled(feetPosition, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n\r\n collisionRuntimeParams.myIsPositionOk = true;\r\n collisionRuntimeParams.myIsPositionCheck = true;\r\n\r\n collisionRuntimeParams.myOriginalPositionCheckPosition.vec3_copy(collisionRuntimeParams.myOriginalTeleportPosition);\r\n collisionRuntimeParams.myFixedPositionCheckPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n collisionRuntimeParams.myIsPositionCheckAllowAdjustments = allowFix;\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myTeleportCanceled = false;\r\n collisionRuntimeParams.myIsTeleport = false;\r\n };\r\n}();\r\n\r\nCollisionCheckBase.prototype._setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled = function () {\r\n return function _setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n collisionRuntimeParams.myRealIsOnGround = true;\r\n collisionRuntimeParams.myIsOnGround = true;\r\n collisionRuntimeParams.myGroundCollisionHit.reset();\r\n collisionRuntimeParams.myGroundAngle = 0;\r\n collisionRuntimeParams.myGroundPerceivedAngle = 0;\r\n collisionRuntimeParams.myGroundNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myGroundHitMaxAngle = collisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundDistance = 0;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = false;\r\n\r\n collisionRuntimeParams.myRealIsOnCeiling = false;\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n collisionRuntimeParams.myCeilingCollisionHit.reset();\r\n collisionRuntimeParams.myCeilingAngle = 0;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = 0;\r\n collisionRuntimeParams.myCeilingNormal.vec3_set(0, 1, 0);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = collisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingDistance = 0;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = false;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = false;\r\n };\r\n}();", "import { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckBase } from \"./collision_check_base.js\";\r\n\r\nexport class CollisionCheckSurface extends CollisionCheckBase {\r\n\r\n updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForUpdateSurfaceInfoCollisionCheckDisabled(transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n computeSurfacePerceivedAngle(surfaceNormal, forward, up, isGround = true) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _postSurfaceCheck(fixedHorizontalMovement, originalVerticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _surfaceTooSteep(up, direction, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _adjustVerticalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedVerticalMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _adjustHorizontalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedHorizontalMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _computeExtraSurfaceVerticalMovement(horizontalMovement, up, collisionCheckParams, collisionRuntimeParams, outExtraSurfaceVerticalMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _gatherSurfaceInfo(feetPosition, height, up, forwardForPerceivedAngle, forwardForVertical, isGround, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckSurface.prototype._updateSurfaceInfo = function () {\r\n let transformUp = vec3_create();\r\n let transformForward = vec3_create();\r\n let feetPosition = vec3_create();\r\n\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n\r\n let forwardForPerceivedAngle = vec3_create();\r\n let forwardForVertical = vec3_create();\r\n\r\n let zAxis = vec3_create(0, 0, 1);\r\n let xAxis = vec3_create(1, 0, 0);\r\n return function _updateSurfaceInfo(transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n\r\n transformUp = offsetTransformQuat.quat2_getUp(transformUp);\r\n transformForward = offsetTransformQuat.quat2_getForward(transformForward);\r\n feetPosition = offsetTransformQuat.quat2_getPosition(feetPosition);\r\n\r\n let height = collisionCheckParams.myHeight;\r\n height = height - 0.00001; // This makes it easier to setup things at the same exact height of a character so that it can go under it\r\n if (height < 0.00001) {\r\n height = 0;\r\n }\r\n\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n forwardForVertical.vec3_copy(transformForward);\r\n } else {\r\n if (collisionCheckParams.myCheckVerticalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForVertical.vec3_copy(xAxis);\r\n } else {\r\n forwardForVertical.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForVertical = forwardForVertical.vec3_removeComponentAlongAxis(transformUp, forwardForVertical);\r\n forwardForVertical = forwardForVertical.vec3_normalize(forwardForVertical);\r\n\r\n if (forwardForVertical.vec_equals(collisionCheckParams.myCheckVerticalFixedForward, 0.00001)) {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled) {\r\n this._gatherSurfaceInfo(feetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled) {\r\n this._gatherSurfaceInfo(feetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._postSurfaceCheck = function () {\r\n let horizontalDirection = vec3_create();\r\n return function _postSurfaceCheck(fixedHorizontalMovement, originalVerticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n\r\n let isVerticalMovementZero = originalVerticalMovement.vec3_isZero(0.00001);\r\n let isVerticalMovemenDownward = Math.pp_sign(originalVerticalMovement.vec3_lengthSigned(transformUp), -1) < 0;\r\n\r\n let horizontalMovementIsZero = fixedHorizontalMovement.vec3_isZero(0.00001);\r\n horizontalDirection = fixedHorizontalMovement.vec3_normalize(horizontalDirection);\r\n\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(collisionRuntimeParams.myGroundNormal, horizontalDirection, transformUp, true);\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(collisionRuntimeParams.myCeilingNormal, horizontalDirection, transformUp, false);\r\n\r\n let mustRemainOnGroundOk = true;\r\n if (collisionCheckParams.myMustStayOnGround) {\r\n if (previousCollisionRuntimeParams.myIsOnGround && !collisionRuntimeParams.myIsOnGround && (isVerticalMovementZero || isVerticalMovemenDownward)) {\r\n mustRemainOnGroundOk = false;\r\n }\r\n }\r\n\r\n let mustRemainOnCeilingOk = true;\r\n if (collisionCheckParams.myMustStayOnCeiling) {\r\n if (previousCollisionRuntimeParams.myIsOnCeiling && !collisionRuntimeParams.myIsOnCeiling && (isVerticalMovementZero || isVerticalMovemenDownward)) {\r\n mustRemainOnCeilingOk = false;\r\n }\r\n }\r\n\r\n let mustStayBelowGroundAngleOk = true;\r\n if (collisionCheckParams.myMustStayBelowGroundAngleDownhill != null || collisionCheckParams.myMustStayBelowIgnorableGroundAngleDownhill) {\r\n let minAngle = null;\r\n if (!collisionCheckParams.myMustStayBelowIgnorableGroundAngleDownhill) {\r\n minAngle = collisionCheckParams.myMustStayBelowGroundAngleDownhill;\r\n } else if (collisionCheckParams.myMustStayBelowGroundAngleDownhill == null) {\r\n minAngle = collisionCheckParams.myGroundAngleToIgnore;\r\n } else {\r\n minAngle = Math.min(collisionCheckParams.myMustStayBelowGroundAngleDownhill, collisionCheckParams.myGroundAngleToIgnore);\r\n }\r\n\r\n if (!horizontalMovementIsZero && groundPerceivedAngle < 0 && previousCollisionRuntimeParams.myIsOnGround &&\r\n previousCollisionRuntimeParams.myGroundAngle <= minAngle &&\r\n collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle > minAngle + 0.0001) {\r\n mustStayBelowGroundAngleOk = false;\r\n }\r\n }\r\n\r\n let mustStayBelowCeilingAngleOk = true;\r\n if (collisionCheckParams.myMustStayBelowCeilingAngleDownhill != null || collisionCheckParams.myMustStayBelowIgnorableCeilingAngleDownhill) {\r\n let minAngle = null;\r\n if (!collisionCheckParams.myMustStayBelowIgnorableCeilingAngleDownhill) {\r\n minAngle = collisionCheckParams.myMustStayBelowCeilingAngleDownhill;\r\n } else if (collisionCheckParams.myMustStayBelowCeilingAngleDownhill == null) {\r\n minAngle = collisionCheckParams.myCeilingAngleToIgnore;\r\n } else {\r\n minAngle = Math.min(collisionCheckParams.myMustStayBelowCeilingAngleDownhill, collisionCheckParams.myCeilingAngleToIgnore);\r\n }\r\n\r\n if (!horizontalMovementIsZero && groundPerceivedAngle < 0 && previousCollisionRuntimeParams.myIsOnCeiling &&\r\n previousCollisionRuntimeParams.myCeilingAngle <= minAngle &&\r\n collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle > minAngle + 0.0001) {\r\n mustStayBelowCeilingAngleOk = false;\r\n }\r\n }\r\n\r\n let mustStayOnGroundHitAngleOk = true;\r\n if (collisionCheckParams.myMovementMustStayOnGroundHitAngle != null) {\r\n if (!horizontalMovementIsZero && previousCollisionRuntimeParams.myIsOnGround &&\r\n previousCollisionRuntimeParams.myGroundHitMaxAngle <= collisionCheckParams.myMovementMustStayOnGroundHitAngle &&\r\n collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundHitMaxAngle > collisionCheckParams.myMovementMustStayOnGroundHitAngle + 0.0001) {\r\n mustStayOnGroundHitAngleOk = false;\r\n }\r\n }\r\n\r\n let mustStayOnCeilingHitAngleOk = true;\r\n if (collisionCheckParams.myMovementMustStayOnCeilingHitAngle != null) {\r\n if (!horizontalMovementIsZero && previousCollisionRuntimeParams.myIsOnCeiling &&\r\n previousCollisionRuntimeParams.myCeilingHitMaxAngle <= collisionCheckParams.myMovementMustStayOnCeilingHitAngle &&\r\n collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingHitMaxAngle > collisionCheckParams.myMovementMustStayOnCeilingHitAngle + 0.0001) {\r\n mustStayOnCeilingHitAngleOk = false;\r\n }\r\n }\r\n\r\n let isOnValidGroundAngleUphill = true;\r\n let isOnValidGroundAngleDownhill = true;\r\n if (collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle > collisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n if (previousCollisionRuntimeParams.myIsOnGround && !horizontalMovementIsZero) {\r\n if (groundPerceivedAngle > 0) {\r\n isOnValidGroundAngleUphill = false;\r\n if (collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myGroundAngle <= collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n isOnValidGroundAngleUphill = Math.abs(groundPerceivedAngle) <= collisionCheckParams.myGroundAngleToIgnore + 0.0001;\r\n }\r\n } else if (groundPerceivedAngle < 0) {\r\n if (previousCollisionRuntimeParams.myGroundAngle <= collisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n if (collisionCheckParams.myMustStayOnValidGroundAngleDownhill) {\r\n isOnValidGroundAngleDownhill = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n let isOnValidCeilingAngleUphill = true;\r\n let isOnValidCeilingAngleDownhill = true;\r\n if (collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle > collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n if (previousCollisionRuntimeParams.myIsOnCeiling && !horizontalMovementIsZero) {\r\n if (ceilingPerceivedAngle > 0) {\r\n isOnValidCeilingAngleUphill = false;\r\n if (collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n isOnValidCeilingAngleUphill = Math.abs(ceilingPerceivedAngle) <= collisionCheckParams.myCeilingAngleToIgnore + 0.0001;\r\n }\r\n } else if (ceilingPerceivedAngle < 0) {\r\n if (previousCollisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n if (collisionCheckParams.myMustStayOnValidCeilingAngleDownhill) {\r\n isOnValidCeilingAngleDownhill = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return mustRemainOnGroundOk && mustRemainOnCeilingOk && mustStayBelowGroundAngleOk && mustStayBelowCeilingAngleOk && mustStayOnGroundHitAngleOk && mustStayOnCeilingHitAngleOk && isOnValidGroundAngleUphill && isOnValidGroundAngleDownhill && isOnValidCeilingAngleUphill && isOnValidCeilingAngleDownhill;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._surfaceTooSteep = function () {\r\n let surfaceSteepResults = [false, false];\r\n return function _surfaceTooSteep(up, direction, collisionCheckParams, collisionRuntimeParams) {\r\n let groundTooSteep = false;\r\n let ceilingTooSteep = false;\r\n\r\n if (collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle > collisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myGroundNormal,\r\n direction, up, true);\r\n\r\n groundTooSteep = groundPerceivedAngle > 0;\r\n if (groundTooSteep &&\r\n collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myGroundAngle <= collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n groundTooSteep = Math.abs(groundPerceivedAngle) > collisionCheckParams.myGroundAngleToIgnore + 0.0001;\r\n }\r\n }\r\n\r\n if (!groundTooSteep) {\r\n if (collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle > collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myCeilingNormal,\r\n direction, up, false);\r\n\r\n ceilingTooSteep = ceilingPerceivedAngle > 0;\r\n if (ceilingTooSteep &&\r\n collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle != null &&\r\n collisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n ceilingTooSteep = Math.abs(ceilingPerceivedAngle) > collisionCheckParams.myCeilingAngleToIgnore + 0.0001;\r\n }\r\n }\r\n }\r\n\r\n surfaceSteepResults[0] = groundTooSteep;\r\n surfaceSteepResults[1] = ceilingTooSteep;\r\n return surfaceSteepResults;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._adjustVerticalMovementWithSurface = function () {\r\n let horizontalDirection = vec3_create();\r\n let extraVerticalMovement = vec3_create();\r\n return function _adjustVerticalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedVerticalMovement) {\r\n outAdjustedVerticalMovement.vec3_copy(verticalMovement);\r\n\r\n if (horizontalMovement.vec3_isZero(0.00001)) {\r\n return outAdjustedVerticalMovement;\r\n }\r\n\r\n let extraVerticalLength = 0;\r\n horizontalDirection = horizontalMovement.vec3_normalize(horizontalDirection);\r\n if (previousCollisionRuntimeParams.myIsOnGround) {\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n previousCollisionRuntimeParams.myGroundNormal,\r\n horizontalDirection, up, true);\r\n\r\n let groundExtraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(groundPerceivedAngle)));\r\n groundExtraVerticalLength *= Math.pp_sign(groundPerceivedAngle);\r\n\r\n if (Math.abs(groundExtraVerticalLength) > 0.00001) {\r\n if (groundPerceivedAngle > 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle == null || Math.abs(groundPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle == null || previousCollisionRuntimeParams.myGroundAngle <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle)) {\r\n extraVerticalLength = groundExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = true;\r\n }\r\n } else if (groundPerceivedAngle < 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle == null || Math.abs(groundPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle == null || previousCollisionRuntimeParams.myGroundAngle <= collisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle)) {\r\n extraVerticalLength = groundExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (previousCollisionRuntimeParams.myIsOnCeiling) {\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n previousCollisionRuntimeParams.myCeilingNormal,\r\n horizontalDirection, up, false);\r\n\r\n let ceilingExtraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(ceilingPerceivedAngle)));\r\n ceilingExtraVerticalLength *= Math.pp_sign(ceilingPerceivedAngle);\r\n\r\n if (Math.abs(ceilingExtraVerticalLength) > 0.00001) {\r\n let sameSignThanGround = Math.pp_sign(extraVerticalLength) == Math.pp_sign(ceilingExtraVerticalLength);\r\n if (extraVerticalLength == 0 || (sameSignThanGround && Math.abs(ceilingExtraVerticalLength) > Math.abs(extraVerticalLength))) {\r\n if (ceilingPerceivedAngle > 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxPerceivedAngle == null || Math.abs(ceilingPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle == null || previousCollisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle)) {\r\n extraVerticalLength = ceilingExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = true;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n }\r\n } else if (ceilingPerceivedAngle < 0) {\r\n if (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhill &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxPerceivedAngle == null || Math.abs(ceilingPerceivedAngle) <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxPerceivedAngle) &&\r\n (collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle == null || previousCollisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle)) {\r\n extraVerticalLength = ceilingExtraVerticalLength;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = true;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (Math.abs(extraVerticalLength) > 0.00001) {\r\n let verticalMovementLength = verticalMovement.vec3_lengthSigned(up);\r\n let sameSignThanExtra = Math.pp_sign(extraVerticalLength) == Math.pp_sign(verticalMovementLength);\r\n extraVerticalMovement = up.vec3_scale(extraVerticalLength, extraVerticalMovement);\r\n if (verticalMovement.vec3_isZero(0.00001)) {\r\n outAdjustedVerticalMovement.vec3_copy(extraVerticalMovement);\r\n } else if (sameSignThanExtra) {\r\n outAdjustedVerticalMovement = verticalMovement.vec3_add(extraVerticalMovement, outAdjustedVerticalMovement);\r\n } else if (!sameSignThanExtra && (\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill ||\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill)) {\r\n // Do not add for downhill, since it means the vertical movement was about to go away from surface and u should not cancel that\r\n outAdjustedVerticalMovement = verticalMovement.vec3_add(extraVerticalMovement, outAdjustedVerticalMovement);\r\n } else {\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = false;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = false;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = false;\r\n collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = false;\r\n }\r\n }\r\n\r\n if (outAdjustedVerticalMovement.vec3_isZero(0.000001)) {\r\n outAdjustedVerticalMovement.vec3_zero();\r\n }\r\n\r\n return outAdjustedVerticalMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._adjustHorizontalMovementWithSurface = function () {\r\n let extraHorizontalMovement = vec3_create();\r\n let groundHorizontalDirection = vec3_create();\r\n let ceilingHorizontalDirection = vec3_create();\r\n let scaledCeilingHorizontalDirection = vec3_create();\r\n let scaledCeilingHorizontalDirectionAlongGroundHorizontalDirection = vec3_create();\r\n let scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection = vec3_create();\r\n return function _adjustHorizontalMovementWithSurface(horizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outAdjustedHorizontalMovement) {\r\n outAdjustedHorizontalMovement.vec3_copy(horizontalMovement);\r\n\r\n if (verticalMovement.vec3_isZero(0.00001)) {\r\n return outAdjustedHorizontalMovement;\r\n }\r\n\r\n let isMovementDownward = !verticalMovement.vec3_isConcordant(up);\r\n\r\n extraHorizontalMovement.vec3_zero();\r\n groundHorizontalDirection.vec3_zero();\r\n\r\n if (previousCollisionRuntimeParams.myIsOnGround) {\r\n groundHorizontalDirection = previousCollisionRuntimeParams.myGroundNormal.vec3_removeComponentAlongAxis(up, groundHorizontalDirection);\r\n if (!groundHorizontalDirection.vec3_isZero(0.00001)) {\r\n groundHorizontalDirection.vec3_normalize(groundHorizontalDirection);\r\n\r\n let groundExtraHorizontalLength = verticalMovement.vec3_length() / Math.tan(Math.pp_toRadians(previousCollisionRuntimeParams.myGroundAngle));\r\n groundExtraHorizontalLength *= (isMovementDownward) ? 1 : -1;\r\n\r\n if (Math.abs(groundExtraHorizontalLength) > 0.00001) {\r\n if (isMovementDownward) {\r\n if (collisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhill &&\r\n (collisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle == null || previousCollisionRuntimeParams.myGroundAngle >= collisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle)) {\r\n extraHorizontalMovement = groundHorizontalDirection.vec3_scale(groundExtraHorizontalLength, extraHorizontalMovement);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (previousCollisionRuntimeParams.myIsOnCeiling) {\r\n ceilingHorizontalDirection = previousCollisionRuntimeParams.myCeilingNormal.vec3_removeComponentAlongAxis(up, ceilingHorizontalDirection);\r\n if (!ceilingHorizontalDirection.vec3_isZero(0.00001)) {\r\n ceilingHorizontalDirection.vec3_normalize(ceilingHorizontalDirection);\r\n\r\n let ceilingExtraHorizontalLength = verticalMovement.vec3_length() / Math.tan(Math.pp_toRadians(previousCollisionRuntimeParams.myCeilingAngle));\r\n ceilingExtraHorizontalLength *= (isMovementDownward) ? -1 : 1;\r\n\r\n if (Math.abs(ceilingExtraHorizontalLength) > 0.00001) {\r\n let sameDirectionAsGround = ceilingHorizontalDirection.vec3_isConcordant(groundHorizontalDirection);\r\n if (extraHorizontalMovement.vec3_isZero() || sameDirectionAsGround) {\r\n if (!isMovementDownward) {\r\n if (collisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhill &&\r\n (collisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle == null || previousCollisionRuntimeParams.myCeilingAngle >= collisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle)) {\r\n scaledCeilingHorizontalDirection = ceilingHorizontalDirection.vec3_scale(ceilingExtraHorizontalLength, scaledCeilingHorizontalDirection);\r\n if (!groundHorizontalDirection.vec3_isZero()) {\r\n scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection = scaledCeilingHorizontalDirection.vec3_removeComponentAlongAxis(scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection);\r\n scaledCeilingHorizontalDirectionAlongGroundHorizontalDirection = scaledCeilingHorizontalDirection.vec3_componentAlongAxis(scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection);\r\n\r\n if (scaledCeilingHorizontalDirectionAlongGroundHorizontalDirection.vec3_isFartherAlongAxis(extraHorizontalMovement, groundHorizontalDirection)) {\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = false;\r\n extraHorizontalMovement.vec3_copy(scaledCeilingHorizontalDirection);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = true;\r\n } else if (!scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection.vec3_isZero(0.00001)) {\r\n extraHorizontalMovement = extraHorizontalMovement.vec3_add(scaledCeilingHorizontalDirectionWithoutGroundHorizontalDirection, extraHorizontalMovement);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = true;\r\n }\r\n } else {\r\n extraHorizontalMovement.vec3_copy(scaledCeilingHorizontalDirection);\r\n collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!extraHorizontalMovement.vec3_isZero()) {\r\n if (horizontalMovement.vec3_isZero(0.00001)) {\r\n outAdjustedHorizontalMovement.vec3_copy(extraHorizontalMovement);\r\n } else if (extraHorizontalMovement.vec3_isConcordant(horizontalMovement)) {\r\n outAdjustedHorizontalMovement = horizontalMovement.vec3_add(extraHorizontalMovement, outAdjustedHorizontalMovement);\r\n } else {\r\n outAdjustedHorizontalMovement = horizontalMovement.vec3_add(extraHorizontalMovement, outAdjustedHorizontalMovement);\r\n }\r\n }\r\n\r\n if (outAdjustedHorizontalMovement.vec3_isZero(0.000001)) {\r\n outAdjustedHorizontalMovement.vec3_zero();\r\n }\r\n\r\n return outAdjustedHorizontalMovement;\r\n };\r\n}();\r\n\r\n// Useless now\r\nCollisionCheckSurface.prototype._computeExtraSurfaceVerticalMovement = function () {\r\n let direction = vec3_create();\r\n let tempVector = vec3_create();\r\n return function _computeExtraSurfaceVerticalMovement(horizontalMovement, up, collisionCheckParams, collisionRuntimeParams, outExtraSurfaceVerticalMovement) {\r\n outExtraSurfaceVerticalMovement.vec3_zero();\r\n\r\n if (!horizontalMovement.vec3_isZero()) {\r\n if (collisionRuntimeParams.myIsOnGround && collisionRuntimeParams.myGroundAngle != 0) {\r\n direction = horizontalMovement.vec3_normalize(direction);\r\n let groundPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myGroundNormal,\r\n direction, up, true);\r\n\r\n let extraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(groundPerceivedAngle)));\r\n extraVerticalLength *= Math.pp_sign(groundPerceivedAngle);\r\n\r\n if (Math.abs(extraVerticalLength) > 0.00001 && (collisionCheckParams.mySnapOnGroundEnabled || extraVerticalLength > 0)) {\r\n outExtraSurfaceVerticalMovement.vec3_add(up.vec3_scale(extraVerticalLength, tempVector), outExtraSurfaceVerticalMovement);\r\n }\r\n } else if (collisionRuntimeParams.myIsOnCeiling && collisionRuntimeParams.myCeilingAngle != 0) {\r\n direction = horizontalMovement.vec3_normalize(direction);\r\n let ceilingPerceivedAngle = this.computeSurfacePerceivedAngle(\r\n collisionRuntimeParams.myCeilingNormal,\r\n direction, up, false);\r\n\r\n let extraVerticalLength = horizontalMovement.vec3_length() * Math.tan(Math.pp_toRadians(Math.abs(ceilingPerceivedAngle)));\r\n extraVerticalLength *= Math.pp_sign(ceilingPerceivedAngle);\r\n extraVerticalLength *= -1;\r\n\r\n if (Math.abs(extraVerticalLength) > 0.00001 && (collisionCheckParams.mySnapOnCeilingEnabled || extraVerticalLength < 0)) {\r\n outExtraSurfaceVerticalMovement.vec3_add(up.vec3_scale(extraVerticalLength, tempVector), outExtraSurfaceVerticalMovement);\r\n }\r\n }\r\n }\r\n\r\n return outExtraSurfaceVerticalMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype._gatherSurfaceInfo = function () {\r\n let verticalDirection = vec3_create();\r\n let startOffset = vec3_create();\r\n let endOffset = vec3_create();\r\n let heightOffset = vec3_create();\r\n let smallOffset = vec3_create();\r\n let smallStartPosition = vec3_create();\r\n let smallEndPosition = vec3_create();\r\n let surfaceNormal = vec3_create();\r\n let surfaceHitMaxNormal = vec3_create();\r\n let hitFromCurrentPosition = vec3_create();\r\n let startPosition = vec3_create();\r\n let endPosition = vec3_create();\r\n let direction = vec3_create();\r\n\r\n let surfaceCollisionHit = new RaycastHit();\r\n let surfaceCollisionHitForBaseInsideCollision = new RaycastHit();\r\n return function _gatherSurfaceInfo(feetPosition, height, up, forwardForPerceivedAngle, forwardForVertical, isGround, collisionCheckParams, collisionRuntimeParams) {\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && ((isGround && collisionCheckParams.myDebugGroundInfoEnabled) || (!isGround && collisionCheckParams.myDebugCeilingInfoEnabled));\r\n\r\n let checkPositions = this._getVerticalCheckPositions(feetPosition, up, forwardForVertical, collisionCheckParams, collisionRuntimeParams);\r\n\r\n verticalDirection.vec3_copy(up);\r\n let distanceToBeOnSurface = collisionCheckParams.myDistanceToBeOnGround;\r\n let distanceToComputeSurfaceInfo = collisionCheckParams.myDistanceToComputeGroundInfo;\r\n let distanceToFindSurfaceDistance = collisionCheckParams.myFindGroundDistanceMaxOutsideDistance;\r\n let distanceToCollectCollisionHit = collisionCheckParams.myCollectGroundCollisionHitOutsideDistance;\r\n let verticalFixToBeOnSurface = collisionCheckParams.myVerticalFixToBeOnGround;\r\n let verticalFixToComputeSurfaceInfo = collisionCheckParams.myVerticalFixToComputeGroundInfo;\r\n let verticalFixToFindSurfaceDistance = collisionCheckParams.myFindGroundDistanceMaxInsideDistance;\r\n let verticalFixToCollectCollisionHit = collisionCheckParams.myCollectGroundCollisionHitInsideDistance;\r\n let isOnSurfaceIfInsideHit = collisionCheckParams.myIsOnGroundIfInsideHit;\r\n let isBaseInsideCollisionCheckEnabled = collisionCheckParams.myGroundIsBaseInsideCollisionCheckEnabled;\r\n if (!isGround) {\r\n verticalDirection.vec3_negate(verticalDirection);\r\n distanceToBeOnSurface = collisionCheckParams.myDistanceToBeOnCeiling;\r\n distanceToComputeSurfaceInfo = collisionCheckParams.myDistanceToComputeCeilingInfo;\r\n distanceToFindSurfaceDistance = collisionCheckParams.myFindCeilingDistanceMaxOutsideDistance;\r\n distanceToCollectCollisionHit = collisionCheckParams.myCollectCeilingCollisionHitOutsideDistance;\r\n verticalFixToBeOnSurface = collisionCheckParams.myVerticalFixToBeOnCeiling;\r\n verticalFixToComputeSurfaceInfo = collisionCheckParams.myVerticalFixToComputeCeilingInfo;\r\n verticalFixToFindSurfaceDistance = collisionCheckParams.myFindCeilingDistanceMaxInsideDistance;\r\n verticalFixToCollectCollisionHit = collisionCheckParams.myCollectCeilingCollisionHitInsideDistance;\r\n isOnSurfaceIfInsideHit = collisionCheckParams.myIsOnCeilingIfInsideHit;\r\n isBaseInsideCollisionCheckEnabled = collisionCheckParams.myCeilingIsBaseInsideCollisionCheckEnabled;\r\n }\r\n\r\n startOffset = verticalDirection.vec3_scale(Math.max(verticalFixToBeOnSurface, verticalFixToComputeSurfaceInfo, verticalFixToFindSurfaceDistance, 0.00001), startOffset);\r\n endOffset = verticalDirection.vec3_negate(endOffset).vec3_scale(Math.max(distanceToBeOnSurface, distanceToComputeSurfaceInfo, distanceToFindSurfaceDistance, 0.00001), endOffset);\r\n\r\n heightOffset.vec3_zero();\r\n if (!isGround) {\r\n heightOffset = up.vec3_scale(height, heightOffset);\r\n }\r\n\r\n smallOffset = verticalDirection.vec3_scale(0.0001, smallOffset);\r\n\r\n let isOnSurface = false;\r\n let isActuallyOnSurface = false;\r\n let surfaceAngle = 0;\r\n let surfacePerceivedAngle = 0;\r\n surfaceNormal.vec3_zero();\r\n surfaceCollisionHit.reset();\r\n surfaceCollisionHitForBaseInsideCollision.reset();\r\n\r\n let surfaceHitMaxAngle = 0;\r\n surfaceHitMaxNormal.vec3_zero();\r\n\r\n let surfaceDistance = null;\r\n let surfaceDistanceForCollectCollisionHit = null;\r\n let isBaseInsideCollision = checkPositions.length > 0;\r\n\r\n for (let i = 0; i < checkPositions.length; i++) {\r\n let currentPosition = checkPositions[i];\r\n currentPosition.vec3_add(heightOffset, currentPosition);\r\n\r\n let baseHitIsInsideCollision = false;\r\n if (isBaseInsideCollisionCheckEnabled) {\r\n smallStartPosition = currentPosition.vec3_add(smallOffset, smallStartPosition);\r\n smallEndPosition = currentPosition.vec3_sub(smallOffset, smallEndPosition);\r\n\r\n let origin = smallStartPosition;\r\n direction = smallEndPosition.vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, false, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.isColliding()) {\r\n baseHitIsInsideCollision = raycastResult.myHits[0].myInsideCollision;\r\n surfaceCollisionHitForBaseInsideCollision.copy(raycastResult.myHits[0]);\r\n }\r\n }\r\n\r\n isBaseInsideCollision &&= baseHitIsInsideCollision;\r\n\r\n if (!baseHitIsInsideCollision) {\r\n startPosition = currentPosition.vec3_add(startOffset, startPosition);\r\n endPosition = currentPosition.vec3_add(endOffset, endPosition);\r\n\r\n let origin = startPosition;\r\n direction = endPosition.vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, true, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.isColliding()) {\r\n hitFromCurrentPosition = raycastResult.myHits[0].myPosition.vec3_sub(currentPosition, hitFromCurrentPosition);\r\n let hitFromCurrentPositionLength = hitFromCurrentPosition.vec3_lengthSigned(verticalDirection);\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToBeOnSurface + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToBeOnSurface + 0.00001)) {\r\n isOnSurface = true;\r\n isActuallyOnSurface = true;\r\n }\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToComputeSurfaceInfo + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToComputeSurfaceInfo + 0.00001)) {\r\n let currentSurfaceNormal = raycastResult.myHits[0].myNormal;\r\n surfaceNormal.vec3_add(currentSurfaceNormal, surfaceNormal);\r\n\r\n let surfaceHitAngle = currentSurfaceNormal.vec3_angle(verticalDirection);\r\n if (surfaceHitAngle > surfaceHitMaxAngle) {\r\n surfaceHitMaxAngle = surfaceHitAngle;\r\n surfaceHitMaxNormal.vec3_copy(currentSurfaceNormal);\r\n }\r\n }\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToFindSurfaceDistance + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToFindSurfaceDistance + 0.00001)) {\r\n if (surfaceDistance == null) {\r\n surfaceDistance = -hitFromCurrentPositionLength;\r\n } else {\r\n if (Math.abs(hitFromCurrentPositionLength) < Math.abs(surfaceDistance)) {\r\n surfaceDistance = -hitFromCurrentPositionLength;\r\n }\r\n }\r\n }\r\n\r\n if ((hitFromCurrentPositionLength >= 0 && hitFromCurrentPositionLength <= verticalFixToCollectCollisionHit + 0.00001) ||\r\n (hitFromCurrentPositionLength < 0 && Math.abs(hitFromCurrentPositionLength) <= distanceToCollectCollisionHit + 0.00001)) {\r\n if (surfaceDistanceForCollectCollisionHit == null) {\r\n surfaceDistanceForCollectCollisionHit = -hitFromCurrentPositionLength;\r\n surfaceCollisionHit.copy(raycastResult.myHits[0]);\r\n } else {\r\n if (Math.abs(hitFromCurrentPositionLength) < Math.abs(surfaceDistanceForCollectCollisionHit)) {\r\n surfaceDistanceForCollectCollisionHit = -hitFromCurrentPositionLength;\r\n surfaceCollisionHit.copy(raycastResult.myHits[0]);\r\n }\r\n }\r\n }\r\n }\r\n } else if (isOnSurfaceIfInsideHit) {\r\n if (!isOnSurface) {\r\n isOnSurface = true;\r\n if (!surfaceCollisionHit.isValid()) {\r\n surfaceCollisionHit.copy(surfaceCollisionHitForBaseInsideCollision);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!surfaceNormal.vec3_isZero()) {\r\n surfaceNormal.vec3_normalize(surfaceNormal);\r\n surfaceAngle = surfaceNormal.vec3_angle(verticalDirection);\r\n\r\n if (surfaceAngle <= 0.0001) {\r\n surfaceAngle = 0;\r\n surfaceNormal.vec3_copy(verticalDirection);\r\n } else if (surfaceAngle >= 180 - 0.0001) {\r\n surfaceAngle = 180;\r\n surfaceNormal = verticalDirection.vec3_negate(surfaceNormal);\r\n }\r\n\r\n surfacePerceivedAngle = this.computeSurfacePerceivedAngle(surfaceNormal, forwardForPerceivedAngle, up, isGround);\r\n }\r\n\r\n if (isGround) {\r\n collisionRuntimeParams.myRealIsOnGround = isOnSurface;\r\n\r\n collisionRuntimeParams.myGroundCollisionHit.copy(surfaceCollisionHit);\r\n\r\n collisionRuntimeParams.myGroundAngle = surfaceAngle;\r\n collisionRuntimeParams.myGroundPerceivedAngle = surfacePerceivedAngle;\r\n collisionRuntimeParams.myGroundNormal.vec3_copy(surfaceNormal);\r\n\r\n collisionRuntimeParams.myGroundHitMaxAngle = surfaceHitMaxAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(surfaceHitMaxNormal);\r\n\r\n collisionRuntimeParams.myGroundDistance = surfaceDistance;\r\n\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = isBaseInsideCollision;\r\n\r\n if (isOnSurface && (collisionCheckParams.myIsOnGroundMaxSurfaceAngle == null || collisionRuntimeParams.myGroundAngle <= collisionCheckParams.myIsOnGroundMaxSurfaceAngle)) {\r\n collisionRuntimeParams.myIsOnGround = true;\r\n } else {\r\n collisionRuntimeParams.myIsOnGround = false;\r\n }\r\n\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = isOnSurface && !isActuallyOnSurface;\r\n } else {\r\n collisionRuntimeParams.myRealIsOnCeiling = isOnSurface;\r\n\r\n collisionRuntimeParams.myCeilingCollisionHit.copy(surfaceCollisionHit);\r\n\r\n collisionRuntimeParams.myCeilingAngle = surfaceAngle;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = surfacePerceivedAngle;\r\n collisionRuntimeParams.myCeilingNormal.vec3_copy(surfaceNormal);\r\n\r\n collisionRuntimeParams.myCeilingHitMaxAngle = surfaceHitMaxAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(surfaceHitMaxNormal);\r\n\r\n collisionRuntimeParams.myCeilingDistance = surfaceDistance;\r\n\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = isBaseInsideCollision;\r\n\r\n if (isOnSurface && (collisionCheckParams.myIsOnCeilingMaxSurfaceAngle == null || collisionRuntimeParams.myCeilingAngle <= collisionCheckParams.myIsOnCeilingMaxSurfaceAngle)) {\r\n collisionRuntimeParams.myIsOnCeiling = true;\r\n } else {\r\n collisionRuntimeParams.myIsOnCeiling = false;\r\n }\r\n\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = isOnSurface && !isActuallyOnSurface;\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckSurface.prototype.computeSurfacePerceivedAngle = function () {\r\n let forwardOnSurface = vec3_create();\r\n let verticalDirection = vec3_create();\r\n return function computeSurfacePerceivedAngle(surfaceNormal, forward, up, isGround = true) {\r\n let surfacePerceivedAngle = 0;\r\n\r\n verticalDirection.vec3_copy(up);\r\n if (!isGround) {\r\n verticalDirection.vec3_negate(verticalDirection);\r\n }\r\n\r\n let surfaceAngle = surfaceNormal.vec3_angle(verticalDirection);\r\n if (surfaceAngle <= Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 0;\r\n } else if (surfaceAngle >= 180 - Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 180;\r\n }\r\n\r\n forwardOnSurface = forward.vec3_projectOnPlaneAlongAxis(surfaceNormal, up, forwardOnSurface);\r\n surfacePerceivedAngle = forwardOnSurface.vec3_angle(forward);\r\n\r\n let isFartherOnUp = forwardOnSurface.vec3_isFartherAlongAxis(forward, up);\r\n if ((!isFartherOnUp && isGround) || (isFartherOnUp && !isGround)) {\r\n surfacePerceivedAngle *= -1;\r\n }\r\n\r\n if (Math.abs(surfacePerceivedAngle) >= surfaceAngle) {\r\n if (surfaceAngle != 0 && surfaceAngle != 180) {\r\n surfacePerceivedAngle = surfaceAngle * Math.pp_sign(surfacePerceivedAngle);\r\n } else {\r\n surfacePerceivedAngle = surfaceAngle;\r\n }\r\n }\r\n\r\n return surfacePerceivedAngle;\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckSurface } from \"./collision_check_surface.js\";\r\n\r\nexport class CollisionCheckHorizontalBase extends CollisionCheckSurface {\r\n\r\n _horizontalCheckRaycast(startPosition, endPosition, movementDirection, up,\r\n ignoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, fixHitOnCollision,\r\n collisionCheckParams, collisionRuntimeParams, checkAllHits = false, ignoreHitsInsideCollisionIfObjectToIgnore = false) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _ignoreSurfaceAngle(feetPosition, height, movementOrForward, objectsToIgnore, outIgnoredObjects, isGround, isMovementCheck, up, collisionCheckParams, hit, ignoreHitsInsideCollisionIfObjectToIgnore) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalBase.prototype._horizontalCheckRaycast = function () {\r\n let direction = vec3_create();\r\n let fixedFeetPosition = vec3_create();\r\n let fixedHitPosition = vec3_create();\r\n return function _horizontalCheckRaycast(startPosition, endPosition, movementDirection, up,\r\n ignoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, fixHitOnCollision,\r\n collisionCheckParams, collisionRuntimeParams, checkAllHits = false, ignoreHitsInsideCollisionIfObjectToIgnore = false) {\r\n\r\n let origin = startPosition;\r\n direction = endPosition.vec3_sub(origin, direction);\r\n\r\n if (movementDirection != null && !direction.vec3_isConcordant(movementDirection)) {\r\n direction.vec3_negate(direction);\r\n origin = endPosition;\r\n }\r\n\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, ignoreHitsInsideCollision, true, collisionCheckParams, collisionRuntimeParams);\r\n\r\n let isOk = true;\r\n\r\n if (raycastResult.isColliding()) {\r\n let hitsToControl = checkAllHits ? raycastResult.myHits.length : 1;\r\n let validHitIndex = 0;\r\n for (let i = 0; i < hitsToControl; i++) {\r\n let hit = raycastResult.myHits[i];\r\n if ((ignoreGroundAngleCallback == null || !ignoreGroundAngleCallback(hit, ignoreHitsInsideCollisionIfObjectToIgnore)) &&\r\n (ignoreCeilingAngleCallback == null || !ignoreCeilingAngleCallback(hit, ignoreHitsInsideCollisionIfObjectToIgnore))) {\r\n isOk = false;\r\n validHitIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n if (!isOk && validHitIndex > 0) {\r\n for (let i = 0; i < validHitIndex; i++) {\r\n raycastResult.removeHit(0);\r\n }\r\n }\r\n }\r\n\r\n if (!isOk && fixHitOnCollision) {\r\n let hitPosition = raycastResult.myHits[0].myPosition;\r\n\r\n fixedFeetPosition = feetPosition.vec3_copyComponentAlongAxis(hitPosition, up, fixedFeetPosition);\r\n fixedHitPosition.vec3_copy(hitPosition);\r\n\r\n let directionOffsetEpsilonValue = 0.0001;\r\n direction = direction.vec3_componentAlongAxis(up, direction);\r\n if (!direction.vec3_isZero(0.000001)) {\r\n // If the check has an up part move the hit a bit on the that direction\r\n direction.vec3_normalize(direction);\r\n direction.vec3_scale(directionOffsetEpsilonValue, direction);\r\n\r\n // This offset is a workaround for objects that in the editor are aligned but due to clamp get a bit tilted when in the game\r\n // and therefore trying an horizontal cast on the vertical hit position could result in hitting the bottom which in theory should be parallel and therefore not possible\r\n fixedFeetPosition.vec3_add(direction, fixedFeetPosition);\r\n fixedHitPosition.vec3_add(direction, fixedHitPosition);\r\n }\r\n\r\n // Move the hit a bit further to prevent miss\r\n direction = fixedHitPosition.vec3_sub(fixedFeetPosition, direction);\r\n direction.vec3_normalize(direction);\r\n direction.vec3_scale(directionOffsetEpsilonValue, direction);\r\n fixedHitPosition = fixedHitPosition.vec3_add(direction, fixedHitPosition);\r\n\r\n let swapRaycastResult = this._myRaycastResult;\r\n this._myRaycastResult = this._myFixRaycastResult;\r\n\r\n isOk = this._horizontalCheckRaycast(fixedFeetPosition, fixedHitPosition, null, up,\r\n false, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, false,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (this._myRaycastResult.isColliding()) {\r\n this._myFixRaycastResult = swapRaycastResult;\r\n } else {\r\n isOk = false;\r\n this._myRaycastResult = swapRaycastResult;\r\n }\r\n }\r\n\r\n return isOk;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalBase.prototype._ignoreSurfaceAngle = function () {\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n\r\n let movementDirection = vec3_create();\r\n let hitDirection = vec3_create();\r\n let hitMovement = vec3_create();\r\n let projectAlongAxis = vec3_create();\r\n return function _ignoreSurfaceAngle(feetPosition, height, movementOrForward, objectsToIgnore, outIgnoredObjects, isGround, isMovementCheck, up, collisionCheckParams, hit, ignoreHitsInsideCollisionIfObjectToIgnore) {\r\n let isIgnorable = false;\r\n\r\n let surfaceIgnoreHeight = null;\r\n let groundIgnoreHeight = isMovementCheck ? collisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight : collisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight;\r\n let ceilingIgnoreHeight = isMovementCheck ? collisionCheckParams.myHorizontalMovementCeilingAngleIgnoreHeight : collisionCheckParams.myHorizontalPositionCeilingAngleIgnoreHeight;\r\n if (isGround && groundIgnoreHeight != null) {\r\n surfaceIgnoreHeight = Math.pp_clamp(groundIgnoreHeight + 0.0002, 0, height);\r\n } else if (!isGround && ceilingIgnoreHeight != null) {\r\n surfaceIgnoreHeight = Math.pp_clamp(height - ceilingIgnoreHeight - 0.0002, 0, height);\r\n }\r\n\r\n let surfaceIgnoreMaxMovementLeft = null;\r\n if (isMovementCheck) {\r\n if (isGround && collisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft != null) {\r\n surfaceIgnoreMaxMovementLeft = collisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n } else if (!isGround && collisionCheckParams.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft != null) {\r\n surfaceIgnoreMaxMovementLeft = collisionCheckParams.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft;\r\n }\r\n }\r\n\r\n if (!hit.myInsideCollision) {\r\n movementDirection = movementOrForward.vec3_normalize(movementDirection);\r\n\r\n let surfaceAngle = hit.myNormal.vec3_angle(up);\r\n if (!isGround) {\r\n surfaceAngle = 180 - surfaceAngle;\r\n }\r\n\r\n if (isGround && collisionCheckParams.myGroundAngleToIgnore > 0 && (surfaceAngle > collisionCheckParams.myGroundAngleToIgnore + 0.0001)) {\r\n if (collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle != null &&\r\n surfaceAngle <= collisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n let perceivedAngle = this.computeSurfacePerceivedAngle(\r\n hit.myNormal,\r\n movementDirection, up, true);\r\n surfaceAngle = Math.abs(perceivedAngle);\r\n }\r\n } else if (!isGround && collisionCheckParams.myCeilingAngleToIgnore > 0 && surfaceAngle > collisionCheckParams.myCeilingAngleToIgnore + 0.0001) {\r\n if (collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle != null &&\r\n surfaceAngle <= collisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle + 0.0001) {\r\n let perceivedAngle = this.computeSurfacePerceivedAngle(\r\n hit.myNormal,\r\n movementDirection, up, false);\r\n surfaceAngle = Math.abs(perceivedAngle);\r\n }\r\n }\r\n\r\n if ((isGround && (collisionCheckParams.myGroundAngleToIgnore > 0 && surfaceAngle <= collisionCheckParams.myGroundAngleToIgnore + 0.0001)) ||\r\n (!isGround && (collisionCheckParams.myCeilingAngleToIgnore > 0 && surfaceAngle <= collisionCheckParams.myCeilingAngleToIgnore + 0.0001))) {\r\n if (objectsToIgnore == null || objectsToIgnore.pp_hasEqual(hit.myObject, objectsEqualCallback)) {\r\n let surfaceHeightCheckOk = true;\r\n let maxMovementLeftCheckOk = true;\r\n\r\n if (surfaceIgnoreHeight != null) {\r\n surfaceHeightCheckOk = false;\r\n\r\n let feetPositionUp = feetPosition.vec3_valueAlongAxis(up);\r\n let hitUp = hit.myPosition.vec3_valueAlongAxis(up);\r\n let hitHeight = hitUp - feetPositionUp;\r\n if ((isGround && hitHeight <= surfaceIgnoreHeight) || (!isGround && hitHeight >= surfaceIgnoreHeight)) {\r\n surfaceHeightCheckOk = true;\r\n } else {\r\n //console.error(hitHeight.toFixed(6));\r\n }\r\n }\r\n\r\n if (surfaceHeightCheckOk && isMovementCheck) {\r\n if (surfaceIgnoreMaxMovementLeft != null) {\r\n let movementLength = movementOrForward.vec3_length();\r\n if (movementLength > surfaceIgnoreMaxMovementLeft) {\r\n maxMovementLeftCheckOk = false;\r\n\r\n let hitPosition = hit.myPosition;\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 90);\r\n hitDirection = hitPosition.vec3_sub(feetPosition, hitDirection);\r\n\r\n if (hitDirection.vec3_isToTheRight(movementDirection, up)) {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(-halfConeAngle, up, projectAlongAxis);\r\n } else {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(halfConeAngle, up, projectAlongAxis);\r\n }\r\n\r\n hitMovement = hitDirection.vec3_projectOnAxisAlongAxis(movementDirection, projectAlongAxis, hitMovement);\r\n\r\n let hitMovementLength = hitMovement.vec3_length();\r\n let movementLeft = movementLength - hitMovementLength;\r\n\r\n if (movementLeft <= surfaceIgnoreMaxMovementLeft) {\r\n maxMovementLeftCheckOk = true;\r\n } else {\r\n //console.error(movementLeft.toFixed(3));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (surfaceHeightCheckOk && maxMovementLeftCheckOk) {\r\n isIgnorable = true;\r\n }\r\n }\r\n }\r\n } else if (ignoreHitsInsideCollisionIfObjectToIgnore) {\r\n // #TODO When raycast pierce will work, if it gives the normal even when inside check if the angle is ok and only ignore if that's the case\r\n if (objectsToIgnore == null || objectsToIgnore.pp_hasEqual(hit.myObject, objectsEqualCallback)) {\r\n isIgnorable = true;\r\n }\r\n }\r\n\r\n if (isIgnorable) {\r\n if (outIgnoredObjects != null) {\r\n outIgnoredObjects.pp_pushUnique(hit.myObject, objectsEqualCallback);\r\n }\r\n }\r\n\r\n\r\n return isIgnorable;\r\n };\r\n}();", "import { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontalBase } from \"./collision_check_horizontal_base.js\";\r\n\r\nexport class CollisionCheckHorizontalPosition extends CollisionCheckHorizontalBase {\r\n\r\n _horizontalPositionCheck(originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalPositionVerticalCheck(feetPosition, checkPositions, heightOffset, heightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalPosition.prototype._horizontalPositionCheck = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let _localGroundObjectsToIgnore = [];\r\n let _localCeilingObjectsToIgnore = [];\r\n let _localGroundCeilingObjectsToIgnore = [];\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n\r\n let heightOffset = vec3_create();\r\n let heightStep = vec3_create();\r\n let currentHeightOffset = vec3_create();\r\n let hitHeightOffset = vec3_create();\r\n let hitHeightOffsetEpsilon = vec3_create();\r\n let downwardHeightOffset = vec3_create();\r\n let downwardHeightStep = vec3_create();\r\n\r\n let verticalDirection = vec3_create();\r\n\r\n let vertilCheckHit = new RaycastHit();\r\n\r\n return function _horizontalPositionCheck(originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugHorizontalPositionEnabled;\r\n\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 180);\r\n let sliceAngle = halfConeAngle / collisionCheckParams.myHalfConeSliceAmount;\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n checkPositions.push(feetPosition.vec3_add(forward.vec3_scale(collisionCheckParams.myRadius, tempCheckPosition), tempCheckPosition));\r\n for (let i = 1; i <= collisionCheckParams.myHalfConeSliceAmount; i++) {\r\n let currentAngle = i * sliceAngle;\r\n\r\n tempCheckPosition = _localGetCachedCheckPosition();\r\n let radialDirection = forward.vec3_rotateAxis(-currentAngle, up, tempCheckPosition);\r\n checkPositions.push(feetPosition.vec3_add(radialDirection.vec3_scale(collisionCheckParams.myRadius, radialDirection), radialDirection));\r\n\r\n tempCheckPosition = _localGetCachedCheckPosition();\r\n radialDirection = forward.vec3_rotateAxis(currentAngle, up, tempCheckPosition);\r\n checkPositions.push(feetPosition.vec3_add(radialDirection.vec3_scale(collisionCheckParams.myRadius, radialDirection), radialDirection));\r\n }\r\n\r\n let groundObjectsToIgnore = null;\r\n let ceilingObjectsToIgnore = null;\r\n let groundCeilingObjectsToIgnore = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n // Gather ground objects to ignore\r\n groundObjectsToIgnore = _localGroundObjectsToIgnore;\r\n groundObjectsToIgnore.length = 0;\r\n groundCeilingObjectsToIgnore = _localGroundCeilingObjectsToIgnore;\r\n groundCeilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, null, groundObjectsToIgnore, true, false, up, collisionCheckParams);\r\n\r\n let ignoreCeilingAngleCallback = null;\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, null, groundCeilingObjectsToIgnore, false, false, up, collisionCheckParams);\r\n }\r\n\r\n heightOffset.vec3_zero();\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n // Gather ceiling objects to ignore\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeight) {\r\n ceilingObjectsToIgnore = _localCeilingObjectsToIgnore;\r\n ceilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = null;\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, groundObjectsToIgnore, null, true, false, up, collisionCheckParams);\r\n }\r\n\r\n let ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, null, ceilingObjectsToIgnore, false, false, up, collisionCheckParams);\r\n\r\n heightOffset = up.vec3_scale(height, heightOffset);\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n\r\n let groundCeilingCheckIsFine = true;\r\n\r\n if (groundCeilingObjectsToIgnore != null) {\r\n // Check that the ceiling objects ignored by the ground are the correct ones, that is the one ignored by the upper check\r\n for (let object of groundCeilingObjectsToIgnore) {\r\n if (!ceilingObjectsToIgnore.pp_hasEqual(object, objectsEqualCallback)) {\r\n groundCeilingCheckIsFine = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let ignoreGroundAngleCallback = null;\r\n let ignoreCeilingAngleCallback = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, groundObjectsToIgnore, null, true, false, up, collisionCheckParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, forward, ceilingObjectsToIgnore, null, false, false, up, collisionCheckParams);\r\n }\r\n\r\n let heightStepAmount = 0;\r\n if (collisionCheckParams.myCheckHeight && collisionCheckParams.myHeightCheckStepAmountPosition > 0 && height > 0) {\r\n heightStepAmount = collisionCheckParams.myHeightCheckStepAmountPosition;\r\n up.vec3_scale(height / heightStepAmount, heightStep);\r\n }\r\n\r\n for (let i = 0; i <= heightStepAmount; i++) {\r\n currentHeightOffset = heightStep.vec3_scale(i, currentHeightOffset);\r\n\r\n // We can skip the ground check since we have already done that, but if there was an error do it again with the proper set of objects to ignore\r\n // The ceiling check can always be ignored, it used the proper ground objects already\r\n if (collisionCheckParams.myCheckHeightTopPosition || i == 0) {\r\n if ((i != 0 && i != heightStepAmount) ||\r\n (i == 0 && !groundCeilingCheckIsFine) ||\r\n (i == 0 && collisionCheckParams.myGroundAngleToIgnore == 0) ||\r\n (i != 0 && i == heightStepAmount && collisionCheckParams.myCeilingAngleToIgnore == 0)) {\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, currentHeightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (i > 0) {\r\n if (collisionCheckParams.myCheckHeightVerticalPosition) {\r\n // This offset is a workaround for objects that in the editor are aligned but due to clamp get a bit tilted when in the game\r\n // and therefore trying an horizontal cast on the vertical hit position could result in hitting the bottom which in theory should be parallel and therefore not possible\r\n let hitHeightOffsetEpsilonValue = 0.0001;\r\n\r\n if (collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 0 || collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 2) {\r\n verticalDirection.vec3_copy(up);\r\n this._horizontalPositionVerticalCheck(feetPosition, checkPositions, currentHeightOffset, heightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeightConeOnCollision) {\r\n hitHeightOffset = collisionRuntimeParams.myHorizontalCollisionHit.myPosition.vec3_sub(feetPosition, hitHeightOffset).vec3_componentAlongAxis(up, hitHeightOffset);\r\n hitHeightOffset.vec3_add(verticalDirection.vec3_scale(hitHeightOffsetEpsilonValue, hitHeightOffsetEpsilon), hitHeightOffset);\r\n\r\n collisionRuntimeParams.myIsCollidingHorizontally = false;\r\n if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n vertilCheckHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n }\r\n collisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, hitHeightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n } else if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(vertilCheckHit);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n if (collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 1 || collisionCheckParams.myHorizontalPositionCheckVerticalDirectionType == 2) {\r\n verticalDirection = up.vec3_negate(verticalDirection);\r\n downwardHeightOffset = currentHeightOffset.vec3_sub(heightStep, downwardHeightOffset);\r\n downwardHeightStep = heightStep.vec3_negate(downwardHeightStep);\r\n this._horizontalPositionVerticalCheck(feetPosition, checkPositions, downwardHeightOffset, downwardHeightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeightConeOnCollision) {\r\n hitHeightOffset = collisionRuntimeParams.myHorizontalCollisionHit.myPosition.vec3_sub(feetPosition, hitHeightOffset).vec3_componentAlongAxis(up, hitHeightOffset);\r\n hitHeightOffset.vec3_add(verticalDirection.vec3_scale(hitHeightOffsetEpsilonValue, hitHeightOffsetEpsilon), hitHeightOffset);\r\n\r\n collisionRuntimeParams.myIsCollidingHorizontally = false;\r\n if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n vertilCheckHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n }\r\n collisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n this._horizontalPositionHorizontalCheck(feetPosition, checkPositions, hitHeightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n } else if (collisionCheckParams.myCheckHeightConeOnCollisionKeepHit) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(vertilCheckHit);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return !collisionRuntimeParams.myIsCollidingHorizontally;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalPosition.prototype._horizontalPositionHorizontalCheck = function () {\r\n let basePosition = vec3_create();\r\n let forwardNegate = vec3_create();\r\n let currentRadialPosition = vec3_create();\r\n let previousRadialPosition = vec3_create();\r\n return function _horizontalPositionHorizontalCheck(feetPosition, checkPositions, heightOffset, up, forward, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n basePosition = feetPosition.vec3_add(heightOffset, basePosition);\r\n\r\n let halfRadialPositions = Math.floor(checkPositions.length / 2) + 1;\r\n for (let j = 0; j < halfRadialPositions; j++) {\r\n if (j > 0) {\r\n let leftIndex = Math.max(0, j * 2);\r\n let rightIndex = Math.max(0, (j * 2 - 1));\r\n let leftAndRightEqual = checkPositions[leftIndex].vec_equals(checkPositions[rightIndex], 0.000001);\r\n\r\n if (collisionCheckParams.myCheckConeBorder) {\r\n for (let r = 0; r < 2; r++) {\r\n let currentIndex = r == 0 ? leftIndex : rightIndex;\r\n\r\n currentRadialPosition = checkPositions[currentIndex].vec3_add(heightOffset, currentRadialPosition);\r\n\r\n let previousIndex = Math.max(0, currentIndex - 2);\r\n previousRadialPosition = checkPositions[previousIndex].vec3_add(heightOffset, previousRadialPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, currentRadialPosition, forward.vec3_negate(forwardNegate), up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myCheckConeRay && isHorizontalCheckOk) {\r\n for (let r = 0; r < 2; r++) {\r\n if (r == 1 && leftAndRightEqual) {\r\n break;\r\n }\r\n\r\n let currentIndex = r == 0 ? leftIndex : rightIndex;\r\n\r\n currentRadialPosition = checkPositions[currentIndex].vec3_add(heightOffset, currentRadialPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(basePosition, currentRadialPosition, null, up,\r\n false, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, false,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckConeRay) {\r\n currentRadialPosition = checkPositions[j].vec3_add(heightOffset, currentRadialPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(basePosition, currentRadialPosition, null, up,\r\n false, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, false,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n break;\r\n }\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n return isHorizontalCheckOk;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalPosition.prototype._horizontalPositionVerticalCheck = function () {\r\n let basePosition = vec3_create();\r\n let previousBasePosition = vec3_create();\r\n let currentRadialPosition = vec3_create();\r\n let previousRadialPosition = vec3_create();\r\n let previousCurrentRadialPosition = vec3_create();\r\n let previousPreviousRadialPosition = vec3_create();\r\n return function _horizontalPositionVerticalCheck(feetPosition, checkPositions, heightOffset, heightStep, verticalDirection, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n basePosition = feetPosition.vec3_add(heightOffset, basePosition);\r\n previousBasePosition = basePosition.vec3_sub(heightStep, previousBasePosition);\r\n\r\n for (let j = 0; j <= checkPositions.length; j++) {\r\n let previousCheckPositionIsEqual = false;\r\n\r\n if (j == checkPositions.length) {\r\n currentRadialPosition.vec3_copy(basePosition);\r\n previousRadialPosition.vec3_copy(previousBasePosition);\r\n } else {\r\n currentRadialPosition = checkPositions[j].vec3_add(heightOffset, currentRadialPosition);\r\n previousRadialPosition = currentRadialPosition.vec3_sub(heightStep, previousRadialPosition);\r\n\r\n if (j > 0) {\r\n previousCheckPositionIsEqual = checkPositions[j].vec_equals(checkPositions[j - 1], 0.000001);\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myCheckVerticalStraight && !previousCheckPositionIsEqual) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, currentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (j < checkPositions.length) {\r\n if ((collisionCheckParams.myCheckVerticalDiagonalRayOutward ||\r\n (collisionCheckParams.myCheckVerticalDiagonalBorderRayOutward && (j == checkPositions.length - 2 || j == checkPositions.length - 1))) &&\r\n !previousCheckPositionIsEqual) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousBasePosition, currentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if ((collisionCheckParams.myCheckVerticalDiagonalRayInward ||\r\n (collisionCheckParams.myCheckVerticalDiagonalBorderRayInward && (j == checkPositions.length - 2 || j == checkPositions.length - 1))) &&\r\n !previousCheckPositionIsEqual) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, basePosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (j > 0) {\r\n if (collisionCheckParams.myCheckVerticalDiagonalBorderOutward || collisionCheckParams.myCheckVerticalDiagonalBorderInward) {\r\n let previousIndex = Math.max(0, j - 2);\r\n previousCurrentRadialPosition = checkPositions[previousIndex].vec3_add(heightOffset, previousCurrentRadialPosition);\r\n previousPreviousRadialPosition = previousCurrentRadialPosition.vec3_sub(heightStep, previousPreviousRadialPosition);\r\n\r\n if (collisionCheckParams.myCheckVerticalDiagonalBorderOutward) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousPreviousRadialPosition, currentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myCheckVerticalDiagonalBorderInward) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(previousRadialPosition, previousCurrentRadialPosition, null, up,\r\n collisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams, true, true);\r\n\r\n if (!isHorizontalCheckOk) {\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n } else if (this._myRaycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(collisionRuntimeParams.myHorizontalCollisionHit.myPosition, verticalDirection)) {\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n }\r\n\r\n if (!collisionCheckParams.myCheckVerticalSearchFartherVerticalHit) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return !collisionRuntimeParams.myIsCollidingHorizontally;\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontalPosition } from \"./collision_check_horizontal_position.js\";\r\n\r\nexport class CollisionCheckHorizontalMovement extends CollisionCheckHorizontalPosition {\r\n\r\n _horizontalMovementCheck(movement, originalFeetPosition, originalHeight, feetPosition, height, up, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalMovementVerticalCheck(movement, feetPosition, checkPositions, heightOffset, heightStep, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalMovement.prototype._horizontalMovementCheck = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let _localGroundObjectsToIgnore = [];\r\n let _localCeilingObjectsToIgnore = [];\r\n let _localGroundCeilingObjectsToIgnore = [];\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n\r\n let movementDirection = vec3_create();\r\n let heightOffset = vec3_create();\r\n let heightStep = vec3_create();\r\n let currentHeightOffset = vec3_create();\r\n let leftRadialDirection = vec3_create();\r\n let rightRadialDirection = vec3_create();\r\n return function _horizontalMovementCheck(movement, originalFeetPosition, originalHeight, feetPosition, height, up, collisionCheckParams, collisionRuntimeParams) {\r\n // #TODO Add a flag in the params to specify if u want to allow movement inside collision (to hope that it will end up in a non collision position)\r\n // Also vertical check should check all hits like the position check\r\n // For now is ok as it is, the movement check is not as important and could also be disabled it the movement per frame is very small\r\n\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugHorizontalMovementEnabled;\r\n\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 90);\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n let steplength = collisionCheckParams.myRadius / collisionCheckParams.myHorizontalMovementRadialStepAmount;\r\n\r\n {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n tempCheckPosition.vec3_copy(feetPosition);\r\n checkPositions.push(tempCheckPosition);\r\n }\r\n\r\n {\r\n leftRadialDirection = movementDirection.vec3_rotateAxis(halfConeAngle, up, leftRadialDirection);\r\n rightRadialDirection = movementDirection.vec3_rotateAxis(-halfConeAngle, up, rightRadialDirection);\r\n for (let i = 1; i <= collisionCheckParams.myHorizontalMovementRadialStepAmount; i++) {\r\n // Left\r\n {\r\n let currentStep = i * steplength;\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let currentRadialPosition = leftRadialDirection.vec3_scale(currentStep, tempCheckPosition);\r\n let currentCheckPosition = currentRadialPosition.vec3_add(feetPosition, currentRadialPosition);\r\n checkPositions.push(currentCheckPosition);\r\n }\r\n\r\n // Right\r\n {\r\n let currentStep = i * steplength;\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let currentRadialPosition = rightRadialDirection.vec3_scale(currentStep, tempCheckPosition);\r\n let currentCheckPosition = currentRadialPosition.vec3_add(feetPosition, currentRadialPosition);\r\n checkPositions.push(currentCheckPosition);\r\n }\r\n }\r\n }\r\n\r\n // If result is inside a collision it's ignored, so that at least you can exit it before seeing if the new position works now\r\n\r\n let groundObjectsToIgnore = null;\r\n let ceilingObjectsToIgnore = null;\r\n let groundCeilingObjectsToIgnore = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n // Gather ground objects to ignore\r\n groundObjectsToIgnore = _localGroundObjectsToIgnore;\r\n groundObjectsToIgnore.length = 0;\r\n groundCeilingObjectsToIgnore = _localGroundCeilingObjectsToIgnore;\r\n groundCeilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, null, groundObjectsToIgnore, true, true, up, collisionCheckParams);\r\n\r\n let ignoreCeilingAngleCallback = null;\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, null, groundCeilingObjectsToIgnore, false, true, up, collisionCheckParams);\r\n }\r\n\r\n heightOffset.vec3_zero();\r\n this._horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n // Gather ceiling objects to ignore\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally && collisionCheckParams.myCheckHeight) {\r\n ceilingObjectsToIgnore = _localCeilingObjectsToIgnore;\r\n ceilingObjectsToIgnore.length = 0;\r\n\r\n let ignoreGroundAngleCallback = null;\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, groundObjectsToIgnore, null, true, true, up, collisionCheckParams);\r\n }\r\n\r\n let ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, null, ceilingObjectsToIgnore, false, true, up, collisionCheckParams);\r\n\r\n heightOffset = up.vec3_scale(height, heightOffset);\r\n this._horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n\r\n let groundCeilingCheckIsFine = true;\r\n\r\n if (groundCeilingObjectsToIgnore != null) {\r\n // Check that the ceiling objects ignored by the ground are the correct ones, that is the one ignored by the upper check\r\n for (let object of groundCeilingObjectsToIgnore) {\r\n if (!ceilingObjectsToIgnore.pp_hasEqual(object, objectsEqualCallback)) {\r\n groundCeilingCheckIsFine = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let ignoreGroundAngleCallback = null;\r\n let ignoreCeilingAngleCallback = null;\r\n\r\n if (collisionCheckParams.myGroundAngleToIgnore > 0) {\r\n ignoreGroundAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, groundObjectsToIgnore, null, true, true, up, collisionCheckParams);\r\n }\r\n\r\n if (collisionCheckParams.myCeilingAngleToIgnore > 0) {\r\n ignoreCeilingAngleCallback = this._ignoreSurfaceAngle.bind(this, originalFeetPosition, originalHeight, movement, ceilingObjectsToIgnore, null, false, true, up, collisionCheckParams);\r\n }\r\n\r\n let heightStepAmount = 0;\r\n if (collisionCheckParams.myCheckHeight && collisionCheckParams.myHeightCheckStepAmountMovement > 0 && height > 0.000001) {\r\n heightStepAmount = collisionCheckParams.myHeightCheckStepAmountMovement;\r\n heightStep = up.vec3_scale(height / heightStepAmount, heightStep);\r\n }\r\n\r\n for (let i = 0; i <= heightStepAmount; i++) {\r\n currentHeightOffset = heightStep.vec3_scale(i, currentHeightOffset);\r\n\r\n // We can skip the ground check since we have already done that, but if there was an error do it again with the proper set of objects to ignore\r\n // The ceiling check can always be ignored, it used the proper ground objects already\r\n if (collisionCheckParams.myCheckHeightTopMovement || i == 0) {\r\n if ((i != 0 && i != heightStepAmount) ||\r\n (i == 0 && !groundCeilingCheckIsFine) ||\r\n (i == 0 && collisionCheckParams.myGroundAngleToIgnore == 0) ||\r\n (i == heightStepAmount && collisionCheckParams.myCeilingAngleToIgnore == 0)) {\r\n this._horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, currentHeightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (i > 0) {\r\n if (collisionCheckParams.myCheckHeightVerticalMovement) {\r\n this._horizontalMovementVerticalCheck(movement, feetPosition, checkPositions, currentHeightOffset, heightStep, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return !collisionRuntimeParams.myIsCollidingHorizontally;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalMovement.prototype._horizontalMovementVerticalCheck = function () {\r\n let movementStep = vec3_create();\r\n let movementDirection = vec3_create();\r\n let firstPosition = vec3_create();\r\n let secondPosition = vec3_create();\r\n let firstMovementPosition = vec3_create();\r\n let secondMovementPosition = vec3_create();\r\n let firstHeightPosition = vec3_create();\r\n let secondHeightPosition = vec3_create();\r\n let firstHeightMovementPosition = vec3_create();\r\n let secondHeightMovementPosition = vec3_create();\r\n return function _horizontalMovementVerticalCheck(movement, feetPosition, checkPositions, heightOffset, heightStep, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movement);\r\n\r\n if (collisionCheckParams.myHorizontalMovementStepEnabled) {\r\n movementStepAmount = Math.max(1, Math.ceil(movement.vec3_length() / collisionCheckParams.myHorizontalMovementStepMaxLength));\r\n movement.vec3_scale(1 / movementStepAmount, movementStep);\r\n }\r\n\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n for (let m = 0; m < movementStepAmount; m++) {\r\n for (let j = 0; j < checkPositions.length; j++) {\r\n firstPosition = checkPositions[j].vec3_add(movementStep.vec3_scale(m, firstPosition), firstPosition).vec3_add(heightOffset, firstPosition);\r\n\r\n if (j > 0) {\r\n let secondIndex = Math.max(0, j - 2);\r\n secondPosition = checkPositions[secondIndex].vec3_add(movementStep.vec3_scale(m, secondPosition), secondPosition).vec3_add(heightOffset, secondPosition);\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardOutward) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n secondHeightPosition = secondPosition.vec3_sub(heightStep, secondHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondHeightPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardInward) {\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n firstHeightPosition = firstPosition.vec3_sub(heightStep, firstHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, secondMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardOutward) {\r\n firstHeightMovementPosition = firstPosition.vec3_add(movementStep, firstHeightMovementPosition);\r\n firstHeightMovementPosition = firstHeightMovementPosition.vec3_sub(heightStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondPosition, firstHeightMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardInward) {\r\n secondHeightMovementPosition = secondPosition.vec3_add(movementStep, secondHeightMovementPosition);\r\n secondHeightMovementPosition = secondHeightMovementPosition.vec3_sub(heightStep, secondHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, secondHeightMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (m == 0) {\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward) {\r\n secondHeightPosition = secondPosition.vec3_sub(heightStep, secondHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondHeightPosition, firstPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward) {\r\n let firstHeightPosition = firstPosition.vec3_sub(heightStep);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, secondPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n secondHeightMovementPosition = secondPosition.vec3_sub(heightStep, secondHeightMovementPosition).vec3_add(movementStep, secondHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondHeightMovementPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward) {\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n firstHeightMovementPosition = firstPosition.vec3_sub(heightStep, firstHeightMovementPosition).vec3_add(movementStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightMovementPosition, secondMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalStraight ||\r\n (collisionCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled && j == 0)) {\r\n if (m == 0) {\r\n firstHeightPosition = firstPosition.vec3_sub(heightStep, firstHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, firstPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n firstHeightMovementPosition = firstMovementPosition.vec3_sub(heightStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightMovementPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalUpward ||\r\n (collisionCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled && j == 0)) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n firstHeightPosition = firstPosition.vec3_sub(heightStep, firstHeightPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstHeightPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalDownward ||\r\n (collisionCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled && j == 0)) {\r\n firstHeightMovementPosition = firstPosition.vec3_sub(heightStep, firstHeightMovementPosition).vec3_add(movementStep, firstHeightMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, firstHeightMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return isHorizontalCheckOk;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalMovement.prototype._horizontalMovementHorizontalCheck = function () {\r\n let movementStep = vec3_create();\r\n let movementDirection = vec3_create();\r\n let firstPosition = vec3_create();\r\n let secondPosition = vec3_create();\r\n let firstMovementPosition = vec3_create();\r\n let secondMovementPosition = vec3_create();\r\n return function _horizontalMovementHorizontalCheck(movement, feetPosition, checkPositions, heightOffset, up, ignoreGroundAngleCallback, ignoreCeilingAngleCallback, collisionCheckParams, collisionRuntimeParams) {\r\n let isHorizontalCheckOk = true;\r\n\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movement);\r\n\r\n if (collisionCheckParams.myHorizontalMovementStepEnabled) {\r\n movementStepAmount = Math.max(1, Math.ceil(movement.vec3_length() / collisionCheckParams.myHorizontalMovementStepMaxLength));\r\n movement.vec3_scale(1 / movementStepAmount, movementStep);\r\n }\r\n\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n for (let m = 0; m < movementStepAmount; m++) {\r\n for (let j = 0; j < checkPositions.length; j++) {\r\n firstPosition = checkPositions[j].vec3_add(movementStep.vec3_scale(m, firstPosition), firstPosition).vec3_add(heightOffset, firstPosition);\r\n\r\n if (j > 0) {\r\n let secondIndex = Math.max(0, j - 2);\r\n secondPosition = checkPositions[secondIndex].vec3_add(movementStep.vec3_scale(m, secondPosition), secondPosition).vec3_add(heightOffset, secondPosition);\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckDiagonalOutward) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n\r\n // #TODO Ignore hits if inside could be a paramter, so you can specify if u want to be able to exit from a collision\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckDiagonalInward) {\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, secondMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckHorizontalBorder) {\r\n if (m == 0) {\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondPosition, firstPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n\r\n {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n secondMovementPosition = secondPosition.vec3_add(movementStep, secondMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(secondMovementPosition, firstMovementPosition, movementDirection, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n }\r\n\r\n if (collisionCheckParams.myHorizontalMovementCheckStraight ||\r\n (collisionCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled && j == 0)) {\r\n firstMovementPosition = firstPosition.vec3_add(movementStep, firstMovementPosition);\r\n\r\n isHorizontalCheckOk = this._horizontalCheckRaycast(firstPosition, firstMovementPosition, null, up,\r\n true, ignoreGroundAngleCallback, ignoreCeilingAngleCallback,\r\n feetPosition, true,\r\n collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!isHorizontalCheckOk) break;\r\n }\r\n }\r\n\r\n if (!isHorizontalCheckOk) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n collisionRuntimeParams.myHorizontalCollisionHit.copy(this._myRaycastResult.myHits[0]);\r\n break;\r\n }\r\n }\r\n\r\n return isHorizontalCheckOk;\r\n };\r\n}();", "import { vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckHorizontalMovement } from \"./collision_check_horizontal_movement.js\";\r\n\r\nexport class CollisionCheckHorizontalSliding extends CollisionCheckHorizontalMovement {\r\n\r\n _horizontalSlide(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalSlideCheckOpposite(movement, feetPosition, height, up, forward, previousHorizontalMovement, previousIsSliding, allowSurfaceSteepFix, collisionCheckParams, preSlideCollisionRuntimeParams, postSlideCollisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalSlideFlickerCheck(movement, slideMovement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, checkOppositeDirection, outSlideMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _horizontalCheckBetterSlideNormal(movement, originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isSlidingNormalValid(movement, up, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalSlide = function () {\r\n let previousHorizontalMovement = vec3_create();\r\n return function _horizontalSlide(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n if (movement.vec3_isZero(0.00001)) {\r\n return outSlideMovement.vec3_zero();\r\n }\r\n\r\n this._mySlidingCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n\r\n previousHorizontalMovement.vec3_copy(collisionRuntimeParams.mySlidingPreviousHorizontalMovement);\r\n outSlideMovement = this._internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingCollisionRuntimeParams, previousCollisionRuntimeParams, false, outSlideMovement);\r\n\r\n if (collisionCheckParams.mySlidingCheckBothDirections) {\r\n this._horizontalSlideCheckOpposite(movement, feetPosition, height, up, forward, previousHorizontalMovement, this._myPrevCollisionRuntimeParams.myIsSliding, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, this._mySlidingCollisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement);\r\n\r\n //console.error(\"post oppo:\", outSlideMovement.vec_toString());\r\n }\r\n\r\n //console.error(\" \");\r\n\r\n if (this._mySlidingCollisionRuntimeParams.myIsSliding && collisionCheckParams.mySlidingFlickeringPreventionType > 0) {\r\n let isFlickering = this._horizontalSlideFlickerCheck(movement, outSlideMovement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingCollisionRuntimeParams, previousCollisionRuntimeParams);\r\n this._mySlidingCollisionRuntimeParams.myIsSliding = !isFlickering;\r\n }\r\n\r\n if (this._mySlidingCollisionRuntimeParams.myIsSliding) {\r\n let backupFlickerPrevented = collisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n collisionRuntimeParams.copy(this._mySlidingCollisionRuntimeParams);\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = backupFlickerPrevented || this._mySlidingCollisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n } else {\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = collisionRuntimeParams.myIsSlidingFlickerPrevented || this._mySlidingCollisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n //console.error(\"slide cancel\");\r\n outSlideMovement.vec3_zero();\r\n }\r\n\r\n return outSlideMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalSlideCheckOpposite = function () {\r\n let horizontalCollisionNormal = vec3_create();\r\n let oppositeSlideMovement = vec3_create();\r\n //let hitNormal = vec3_create();\r\n return function _horizontalSlideCheckOpposite(movement, feetPosition, height, up, forward, previousHorizontalMovement, previousIsSliding, allowSurfaceSteepFix, collisionCheckParams, preSlideCollisionRuntimeParams, postSlideCollisionRuntimeParams, previousCollisionRuntimeParams, outSlideMovement) {\r\n horizontalCollisionNormal = preSlideCollisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, horizontalCollisionNormal);\r\n horizontalCollisionNormal.vec3_normalize(horizontalCollisionNormal);\r\n\r\n //console.error(\"oppo\", outSlideMovement.vec_toString(), movement.vec_toString(15));\r\n let angleNormalWithMovementThreshold = 20;\r\n if (horizontalCollisionNormal.vec3_angle(movement) > 180 - angleNormalWithMovementThreshold) {\r\n //console.error(\"opposite normal ok\");\r\n return;\r\n } else if (previousIsSliding && postSlideCollisionRuntimeParams.myIsSliding && outSlideMovement.vec3_isConcordant(previousHorizontalMovement)) {\r\n //console.error(\"previous direction ok\");\r\n //console.error(postSlideCollisionRuntimeParams.myIsSliding, outSlideMovement.vec3_isConcordant(previousHorizontalMovement), outSlideMovement.vec_toString(), previousHorizontalMovement.vec_toString());\r\n return;\r\n } else {\r\n //console.error(\"no fast exit\");\r\n }\r\n\r\n //console.error(horizontalCollisionNormal.vec3_angle(movement));\r\n\r\n this._mySlidingOppositeDirectionCollisionRuntimeParams.copy(preSlideCollisionRuntimeParams);\r\n\r\n oppositeSlideMovement = this._internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingOppositeDirectionCollisionRuntimeParams, previousCollisionRuntimeParams, true, oppositeSlideMovement);\r\n\r\n //console.error(previousHorizontalMovement.vec_toString(), outSlideMovement.vec_toString(), oppositeSlideMovement.vec_toString());\r\n if (this._mySlidingOppositeDirectionCollisionRuntimeParams.myIsSliding) {\r\n\r\n let isOppositeBetter = false;\r\n if (postSlideCollisionRuntimeParams.myIsSliding) {\r\n if (movement.vec3_angle(oppositeSlideMovement) < movement.vec3_angle(outSlideMovement) - 0.0001) {\r\n //console.error(\"oppo minor\");\r\n isOppositeBetter = true;\r\n } else {\r\n if (Math.abs(movement.vec3_angle(oppositeSlideMovement) - movement.vec3_angle(outSlideMovement)) <= 0.0001) {\r\n if (previousHorizontalMovement.vec3_angle(oppositeSlideMovement) < previousHorizontalMovement.vec3_angle(outSlideMovement) - 0.0001) {\r\n let angleNormalWithMovementThreshold = 5;\r\n if (horizontalCollisionNormal.vec3_angle(movement) < 90 + angleNormalWithMovementThreshold) {\r\n //console.error(\"oppo equal\");\r\n isOppositeBetter = true;\r\n }\r\n }\r\n }\r\n }\r\n //console.error(movement.vec3_angle(outSlideMovement), movement.vec3_angle(oppositeSlideMovement));\r\n\r\n } else {\r\n let angleEpsilon = 0.001;\r\n if (movement.vec3_isConcordant(oppositeSlideMovement) && movement.vec3_angle(oppositeSlideMovement) < 90 - angleEpsilon) {\r\n //console.error(\"oppo not\");\r\n isOppositeBetter = true;\r\n } else {\r\n //console.error(\"oppo not prevention\");\r\n }\r\n }\r\n\r\n if (isOppositeBetter) {\r\n /* {\r\n hitNormal.vec3_copy(preSlideCollisionRuntimeParams.myHorizontalCollisionHit.myNormal);\r\n \r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = slideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(0, 0, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 1);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = oppositeSlideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 0, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 1);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = hitNormal.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 1);\r\n } */\r\n\r\n outSlideMovement.vec3_copy(oppositeSlideMovement);\r\n postSlideCollisionRuntimeParams.copy(this._mySlidingOppositeDirectionCollisionRuntimeParams);\r\n } else {\r\n //console.error(\"normal\", previousHorizontalMovement.vec_toString(), outSlideMovement.vec_toString(), oppositeSlideMovement.vec_toString());\r\n }\r\n } else {\r\n //console.error(\"oppo not sliding\");\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalSlideFlickerCheck = function () {\r\n let previousHorizontalMovement = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let fixedMovement = vec3_create();\r\n let flickerFixSlideMovement = vec3_create();\r\n return function _horizontalSlideFlickerCheck(movement, slideMovement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n let isFlickering = false;\r\n\r\n previousHorizontalMovement.vec3_copy(collisionRuntimeParams.mySlidingPreviousHorizontalMovement);\r\n let shouldCheckFlicker =\r\n this._myPrevCollisionRuntimeParams.myIsSlidingFlickerPrevented ||\r\n previousHorizontalMovement.vec3_isZero(0.00001);\r\n\r\n if (!shouldCheckFlicker) {\r\n if (this._myPrevCollisionRuntimeParams.myIsSliding || !collisionCheckParams.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding) {\r\n let flickerCollisionAngle = 90;\r\n let flickerMovementAngle = 85;\r\n switch (collisionCheckParams.mySlidingFlickeringPreventionType) {\r\n case 1:\r\n shouldCheckFlicker = previousHorizontalMovement.vec3_signTo(movement, up, 0) != slideMovement.vec3_signTo(movement, up, 0);\r\n break;\r\n case 2:\r\n shouldCheckFlicker = collisionCheckParams.mySlidingCheckBothDirections && collisionRuntimeParams.myIsSlidingIntoOppositeDirection;\r\n shouldCheckFlicker = shouldCheckFlicker || Math.abs(collisionRuntimeParams.mySlidingCollisionAngle) > flickerCollisionAngle + 0.00001;\r\n break;\r\n case 3:\r\n shouldCheckFlicker = collisionCheckParams.mySlidingCheckBothDirections && collisionRuntimeParams.myIsSlidingIntoOppositeDirection;\r\n shouldCheckFlicker = shouldCheckFlicker || Math.abs(collisionRuntimeParams.mySlidingCollisionAngle) > flickerCollisionAngle + 0.00001;\r\n\r\n shouldCheckFlicker = shouldCheckFlicker || (\r\n Math.abs(Math.abs(collisionRuntimeParams.mySlidingCollisionAngle) - flickerCollisionAngle) < 0.00001 &&\r\n Math.abs(collisionRuntimeParams.mySlidingMovementAngle) > flickerMovementAngle + 0.00001);\r\n break;\r\n case 4:\r\n shouldCheckFlicker = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n //console.error(this._myPrevCollisionRuntimeParams.myIsSlidingFlickerPrevented);\r\n if (shouldCheckFlicker || this._myPrevCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter > 0) {\r\n if (shouldCheckFlicker) {\r\n collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter = collisionCheckParams.mySlidingFlickerPreventionCheckAnywayCounter;\r\n } else {\r\n collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter = Math.max(0, this._myPrevCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter - 1);\r\n //console.error(collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter);\r\n }\r\n\r\n //console.error(previousHorizontalMovement.vec3_signTo(movement, up, 0), slideMovement.vec3_signTo(movement, up, 0));\r\n if ((collisionCheckParams.mySlidingFlickeringPreventionType != 1 || collisionRuntimeParams.myIsSlidingFlickerPrevented || this._myPrevCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter > 0) &&\r\n (this._myPrevCollisionRuntimeParams.myIsSliding && previousHorizontalMovement.vec3_signTo(movement, up, 0) != slideMovement.vec3_signTo(movement, up, 0))) {\r\n isFlickering = true;\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = true;\r\n //console.error(\"quick flicker fix\");\r\n } else {\r\n this._mySlidingFlickeringFixCollisionRuntimeParams.reset();\r\n this._mySlidingFlickeringFixCollisionRuntimeParams.mySliding90DegreesSign = collisionRuntimeParams.mySliding90DegreesSign;\r\n this._mySlidingFlickeringFixCollisionRuntimeParams.mySlidingRecompute90DegreesSign = false;\r\n\r\n //console.error(\"slide movement\", slideMovement.vec_toString(), feetPosition.vec_toString());\r\n newFeetPosition = feetPosition.vec3_add(slideMovement, newFeetPosition);\r\n\r\n let backupDebugEnabled = collisionCheckParams.myDebugEnabled;\r\n collisionCheckParams.myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugSlidingEnabled;\r\n\r\n fixedMovement.vec3_zero();\r\n fixedMovement = this._horizontalCheck(movement, newFeetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingFlickeringFixCollisionRuntimeParams, previousCollisionRuntimeParams, false, fixedMovement);\r\n collisionCheckParams.myDebugEnabled = backupDebugEnabled;\r\n\r\n if (fixedMovement.vec3_isZero(0.00001)) {\r\n this._mySlidingFlickeringFixSlidingCollisionRuntimeParams.copy(this._mySlidingFlickeringFixCollisionRuntimeParams);\r\n\r\n flickerFixSlideMovement = this._internalHorizontalSlide(movement, newFeetPosition, height, up, forward, slideMovement, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingFlickeringFixSlidingCollisionRuntimeParams, previousCollisionRuntimeParams, false, flickerFixSlideMovement);\r\n\r\n if (collisionCheckParams.mySlidingCheckBothDirections) {\r\n this._horizontalSlideCheckOpposite(movement, newFeetPosition, height, up, forward, slideMovement, true, allowSurfaceSteepFix, collisionCheckParams, this._mySlidingFlickeringFixCollisionRuntimeParams, this._mySlidingFlickeringFixSlidingCollisionRuntimeParams, previousCollisionRuntimeParams, flickerFixSlideMovement);\r\n }\r\n\r\n if (this._mySlidingFlickeringFixSlidingCollisionRuntimeParams.myIsSliding) {\r\n if (slideMovement.vec3_signTo(movement, up, 0) != flickerFixSlideMovement.vec3_signTo(movement, up, 0)) {\r\n\r\n /* {\r\n hitNormal.vec3_copy(collisionRuntimeParams.mySlidingCollisionHit.myNormal);\r\n \r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = slideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(0.5, 0.5, 0.5, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 2);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = flickerFixSlideMovement.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 1, 1, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 2);\r\n }\r\n \r\n {\r\n let visualParams = new VisualArrowParams();\r\n visualParams.myStart = feetPosition;\r\n visualParams.myDirection = hitNormal.vec3_normalize();\r\n visualParams.myLength = 0.2;\r\n visualParams.myMaterial = Globals.getDefaultMaterials(this._myEngine).myFlatOpaque.clone();\r\n visualParams.myMaterial.color = vec4_create(1, 0, 0.5, 1);\r\n Globals.getDebugVisualManager(this._myEngine).draw(visualParams, 2);\r\n } */\r\n\r\n isFlickering = true;\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = true;\r\n //console.error(\"expensive flicker fix\");\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n //console.error(\"no flicker check\");\r\n }\r\n\r\n if (isFlickering) {\r\n //console.error(\"flicker\", shouldCheckFlicker, slideMovement.vec_toString(), \"\\n\");\r\n } else {\r\n //console.error(\"no flicker\", shouldCheckFlicker, slideMovement.vec_toString(), \"\\n\");\r\n }\r\n\r\n return isFlickering;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._internalHorizontalSlide = function () {\r\n let invertedNormal = vec3_create();\r\n let slidingMovement = vec3_create();\r\n let movement90 = vec3_create();\r\n let currentMovement = vec3_create();\r\n let slideMovementForward = vec3_create();\r\n let fixedMovement = vec3_create();\r\n return function _internalHorizontalSlide(movement, feetPosition, height, up, forward, previousHorizontalMovement, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, checkOppositeDirection, outSlideMovement) {\r\n if (movement.vec3_isZero(0.00001)) {\r\n return outSlideMovement.vec3_zero();\r\n }\r\n\r\n //let copiedNormal = collisionRuntimeParams.myHorizontalCollisionHit.myNormal.pp_clone();\r\n invertedNormal = collisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_negate(invertedNormal);\r\n invertedNormal.vec3_removeComponentAlongAxis(up, invertedNormal);\r\n invertedNormal[0] = Math.abs(invertedNormal[0]) < 0.01 ? 0 : invertedNormal[0];\r\n invertedNormal[2] = Math.abs(invertedNormal[2]) < 0.01 ? 0 : invertedNormal[2];\r\n invertedNormal.vec3_normalize(invertedNormal);\r\n\r\n collisionRuntimeParams.mySlidingCollisionHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n collisionRuntimeParams.mySlidingWallNormal.vec3_copy(collisionRuntimeParams.myHorizontalCollisionHit.myNormal);\r\n\r\n outSlideMovement.vec3_zero();\r\n\r\n slidingMovement.vec3_copy(invertedNormal);\r\n if (checkOppositeDirection) {\r\n slidingMovement.vec3_copy(movement);\r\n slidingMovement.vec3_normalize(slidingMovement);\r\n }\r\n\r\n if (!slidingMovement.vec3_isZero(0.00001)) {\r\n\r\n slidingMovement.vec3_scale(movement.vec3_length(), slidingMovement);\r\n\r\n let slidingSign = invertedNormal.vec3_signTo(movement, up);\r\n\r\n if (collisionCheckParams.mySlidingAdjustSign90Degrees) {\r\n let angleThreshold = 0.1;\r\n if (invertedNormal.vec3_angle(movement) < angleThreshold && collisionRuntimeParams.mySliding90DegreesSign != 0) {\r\n //console.error(slidingSign, collisionRuntimeParams.mySliding90DegreesSign);\r\n slidingSign = collisionRuntimeParams.mySliding90DegreesSign;\r\n } else if (collisionRuntimeParams.mySliding90DegreesSign == 0 || collisionRuntimeParams.mySlidingRecompute90DegreesSign) {\r\n collisionRuntimeParams.mySliding90DegreesSign = slidingSign;\r\n } else {\r\n //console.error(\"no fix\");\r\n }\r\n\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = false;\r\n }\r\n\r\n if (checkOppositeDirection) {\r\n slidingSign *= -1;\r\n }\r\n\r\n let currentAngle = 90 * slidingSign;\r\n let maxAngle = Math.pp_angleClamp(slidingMovement.vec3_angleSigned(movement.vec3_rotateAxis(90 * slidingSign, up, movement90), up) * slidingSign, true) * slidingSign;\r\n let minAngle = Math.pp_angleClamp(slidingMovement.vec3_angleSigned(movement, up) * slidingSign, true) * slidingSign;\r\n\r\n if (checkOppositeDirection) {\r\n maxAngle = currentAngle;\r\n minAngle = 0;\r\n } else {\r\n if (Math.abs(maxAngle) < Math.abs(minAngle)) {\r\n // This should only happens because of the 90 degrees adjustment\r\n //console.error(\"90 adjust\");\r\n minAngle = 0;\r\n }\r\n\r\n if (Math.abs(Math.abs(maxAngle) - Math.abs(minAngle)) < 0.0001) {\r\n minAngle = maxAngle;\r\n }\r\n\r\n if (Math.abs(maxAngle) < Math.abs(currentAngle) || Math.abs(Math.abs(maxAngle) - Math.abs(currentAngle)) < 0.0001) {\r\n //console.error(\"max\", currentAngle.toFixed(15), maxAngle.toFixed(15));\r\n currentAngle = maxAngle;\r\n }\r\n\r\n if (Math.abs(currentAngle) < Math.abs(minAngle) || Math.abs(Math.abs(minAngle) - Math.abs(currentAngle)) < 0.0001) {\r\n //console.error(\"min\", currentAngle.toFixed(3), minAngle.toFixed(3));\r\n currentAngle = minAngle;\r\n }\r\n\r\n //console.error(maxAngle.toFixed(3), minAngle.toFixed(3));\r\n }\r\n\r\n if (checkOppositeDirection && !previousHorizontalMovement.vec3_isZero(0.000001)) {\r\n let angleWithPrevious = movement.vec3_angleSigned(previousHorizontalMovement, up);\r\n if (Math.pp_sign(angleWithPrevious) == Math.pp_sign(maxAngle) && Math.abs(maxAngle) > Math.abs(angleWithPrevious)) {\r\n currentAngle = angleWithPrevious;\r\n //console.error(\"better angle\", currentAngle, previousHorizontalMovement.vec_toString(10), movement.vec_toString(10));\r\n }\r\n }\r\n\r\n currentMovement.vec3_zero();\r\n\r\n let backupDebugEnabled = collisionCheckParams.myDebugEnabled;\r\n collisionCheckParams.myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugSlidingEnabled;\r\n\r\n //let originalCurrentAngle = currentAngle;\r\n for (let i = 0; i < collisionCheckParams.mySlidingMaxAttempts; i++) {\r\n this._myInternalSlidingCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n\r\n currentMovement = slidingMovement.vec3_rotateAxis(currentAngle, up, currentMovement);\r\n\r\n slideMovementForward.vec3_copy(forward);\r\n if (!collisionCheckParams.myCheckHorizontalFixedForwardEnabled) {\r\n if (!currentMovement.vec3_isZero()) {\r\n slideMovementForward = currentMovement.vec3_normalize(slideMovementForward);\r\n }\r\n }\r\n\r\n fixedMovement.vec3_zero();\r\n fixedMovement = this._horizontalCheck(currentMovement, feetPosition, height, up, slideMovementForward, allowSurfaceSteepFix, collisionCheckParams, this._myInternalSlidingCollisionRuntimeParams, previousCollisionRuntimeParams, true, fixedMovement);\r\n if (!fixedMovement.vec3_isZero(0.00001)) {\r\n outSlideMovement.vec3_copy(currentMovement);\r\n collisionRuntimeParams.copy(this._myInternalSlidingCollisionRuntimeParams);\r\n collisionRuntimeParams.myIsSliding = true;\r\n collisionRuntimeParams.myIsSlidingIntoOppositeDirection = checkOppositeDirection;\r\n collisionRuntimeParams.mySlidingMovementAngle = movement.vec3_angleSigned(currentMovement, up);\r\n collisionRuntimeParams.mySlidingCollisionAngle = invertedNormal.vec3_angleSigned(currentMovement, up);\r\n\r\n maxAngle = currentAngle;\r\n currentAngle = (maxAngle + minAngle) / 2;\r\n } else {\r\n if (currentAngle != maxAngle) {\r\n minAngle = currentAngle;\r\n }\r\n\r\n if (i == 0 && currentAngle != maxAngle) {\r\n currentAngle = maxAngle;\r\n } else {\r\n currentAngle = (minAngle + maxAngle) / 2;\r\n }\r\n }\r\n\r\n if (Math.abs(Math.abs(maxAngle) - Math.abs(minAngle)) < 0.0001) {\r\n //console.error(\"fast slide exit\", maxAngle, minAngle, originalCurrentAngle, collisionRuntimeParams.myIsSliding, checkOppositeDirection);\r\n break;\r\n }\r\n }\r\n\r\n collisionCheckParams.myDebugEnabled = backupDebugEnabled;\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsSliding) {\r\n collisionRuntimeParams.mySlidingCollisionHit.reset();\r\n } else {\r\n //console.error(\"slide angle\", movement.vec3_angleSigned(invertedNormal, up), invertedNormal.vec_toString(), copiedNormal.vec_toString());\r\n }\r\n\r\n return outSlideMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._horizontalCheckBetterSlideNormal = function () {\r\n let movementDirection = vec3_create();\r\n let hitDirection = vec3_create();\r\n let projectAlongAxis = vec3_create();\r\n let fixedMovement = vec3_create();\r\n let newFixedFeetPosition = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n return function _horizontalCheckBetterSlideNormal(movement, originalFeetPosition, originalHeight, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Check for a better slide hit position and normal\r\n\r\n movementDirection = movement.vec3_normalize(movementDirection);\r\n\r\n let hitPosition = collisionRuntimeParams.myHorizontalCollisionHit.myPosition;\r\n let halfConeAngle = Math.min(collisionCheckParams.myHalfConeAngle, 90);\r\n hitDirection = hitPosition.vec3_sub(feetPosition, hitDirection);\r\n if (hitDirection.vec3_isToTheRight(movementDirection, up)) {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(-halfConeAngle, up, projectAlongAxis);\r\n } else {\r\n projectAlongAxis = movementDirection.vec3_rotateAxis(halfConeAngle, up, projectAlongAxis);\r\n }\r\n\r\n fixedMovement = hitDirection.vec3_projectOnAxisAlongAxis(movementDirection, projectAlongAxis, fixedMovement);\r\n /* if (fixedMovement.vec3_angle(movementDirection) >= 0.00001 || fixedMovement.vec3_length() > movement.vec3_length() + 0.00001) {\r\n console.error(\"ERROR, project function should return a smaller movement in the same direction\",\r\n fixedMovement.vec3_angle(movementDirection), fixedMovement.vec3_length(), movement.vec3_length());\r\n // Maybe epsilon could be 0.0001? is higher but still 10 times less then a millimiter\r\n } */\r\n\r\n if (fixedMovement.vec3_isConcordant(movementDirection)) {\r\n fixedMovement = movementDirection.vec3_scale(Math.min(fixedMovement.vec3_length(), movement.vec3_length()), fixedMovement);\r\n } else {\r\n fixedMovement.vec3_zero();\r\n }\r\n\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugHorizontalMovementEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n Globals.getDebugVisualManager(this._myEngine).drawArrow(0, feetPosition, movementDirection, fixedMovement.vec3_length(), vec4_create(1, 0, 1, 1));\r\n }\r\n\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams.myIsCollidingHorizontally = false;\r\n this._myCheckBetterSlidingNormalCollisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n\r\n newFixedFeetPosition = feetPosition.vec3_add(fixedMovement, newFixedFeetPosition);\r\n newFeetPosition = feetPosition.vec3_add(fixedMovement, newFeetPosition);\r\n\r\n let backupDebugEnabled = collisionCheckParams.myDebugEnabled;\r\n collisionCheckParams.myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugSlidingEnabled;\r\n\r\n if (collisionCheckParams.myHorizontalPositionCheckEnabled) {\r\n this._horizontalPositionCheck(originalFeetPosition, originalHeight, newFixedFeetPosition, height, up, forward, collisionCheckParams, this._myCheckBetterSlidingNormalCollisionRuntimeParams);\r\n }\r\n\r\n collisionCheckParams.myDebugEnabled = backupDebugEnabled;\r\n\r\n if (this._myCheckBetterSlidingNormalCollisionRuntimeParams.myIsCollidingHorizontally &&\r\n !this._myCheckBetterSlidingNormalCollisionRuntimeParams.myHorizontalCollisionHit.myInsideCollision) {\r\n collisionRuntimeParams.copy(this._myCheckBetterSlidingNormalCollisionRuntimeParams);\r\n }\r\n };\r\n}();\r\n\r\nCollisionCheckHorizontalSliding.prototype._isSlidingNormalValid = function () {\r\n let flatNormal = vec3_create();\r\n return function _isSlidingNormalValid(movement, up, collisionRuntimeParams) {\r\n let isValid = false;\r\n\r\n flatNormal = collisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, flatNormal);\r\n flatNormal.vec3_normalize(flatNormal);\r\n\r\n if (!flatNormal.vec3_isZero(0.000001)) {\r\n isValid = true;\r\n }\r\n\r\n // I wanted to check if the normal angle was not concordant and thought that in that case it shouldn't slide but it turns out it makes sense\r\n // even for back hits which either can't resolve or at least makes me slide out of collision\r\n // At least a check for the normal to be not up is ok\r\n\r\n return isValid;\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontalSliding } from \"./collision_check_horizontal_sliding.js\";\r\n\r\nexport class CollisionCheckHorizontal extends CollisionCheckHorizontalSliding {\r\n\r\n _horizontalCheck(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, avoidSlidingExtraCheck, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckHorizontal.prototype._horizontalCheck = function () {\r\n let fixedFeetPosition = vec3_create();\r\n let newFixedFeetPosition = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let horizontalDirection = vec3_create();\r\n return function _horizontalCheck(movement, feetPosition, height, up, forward, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams, avoidSlidingExtraCheck, outFixedMovement) {\r\n collisionRuntimeParams.myIsCollidingHorizontally = false;\r\n collisionRuntimeParams.myHorizontalCollisionHit.reset();\r\n outFixedMovement.vec3_zero();\r\n\r\n horizontalDirection = movement.vec3_normalize(horizontalDirection);\r\n let surfaceTooSteepResults = this._surfaceTooSteep(up, horizontalDirection, collisionCheckParams, previousCollisionRuntimeParams);\r\n if (movement.vec3_isZero(0.000001) ||\r\n ((!surfaceTooSteepResults[0] || (allowSurfaceSteepFix && collisionCheckParams.myAllowGroundSteepFix)) &&\r\n (!surfaceTooSteepResults[1] || (allowSurfaceSteepFix && collisionCheckParams.myAllowCeilingSteepFix)))) {\r\n fixedFeetPosition = feetPosition.vec3_add(up.vec3_scale(collisionCheckParams.myDistanceFromFeetToIgnore + 0.0001, fixedFeetPosition), fixedFeetPosition);\r\n let fixedHeight = Math.max(0, height - collisionCheckParams.myDistanceFromFeetToIgnore - collisionCheckParams.myDistanceFromHeadToIgnore - 0.0001 * 2);\r\n\r\n let canMove = true;\r\n if (collisionCheckParams.myHorizontalMovementCheckEnabled && !movement.vec3_isZero(0.000001)) {\r\n canMove = this._horizontalMovementCheck(movement, feetPosition, height, fixedFeetPosition, fixedHeight, up, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (canMove) {\r\n if (collisionCheckParams.myHorizontalPositionCheckEnabled) {\r\n newFixedFeetPosition = fixedFeetPosition.vec3_add(movement, newFixedFeetPosition);\r\n newFeetPosition = feetPosition.vec3_add(movement, newFeetPosition);\r\n let canStay = this._horizontalPositionCheck(newFeetPosition, height, newFixedFeetPosition, fixedHeight, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n if (canStay) {\r\n outFixedMovement.vec3_copy(movement);\r\n }\r\n\r\n if (outFixedMovement.vec3_isZero(0.000001)) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n } else {\r\n outFixedMovement.vec3_copy(movement);\r\n }\r\n } else if (!avoidSlidingExtraCheck && collisionCheckParams.mySlidingEnabled && collisionCheckParams.mySlidingHorizontalMovementCheckBetterNormal) {\r\n this._horizontalCheckBetterSlideNormal(movement, feetPosition, height, fixedFeetPosition, fixedHeight, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();", "import { RaycastHit } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckHorizontal } from \"./collision_check_horizontal.js\";\r\n\r\nexport class CollisionCheckVertical extends CollisionCheckHorizontal {\r\n\r\n _verticalCheck(verticalMovement, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _verticalMovementAdjustment(verticalMovement, isMovementDownward, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _verticalPositionCheck(feetPosition, checkUpward, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckVertical.prototype._verticalCheck = function () {\r\n let newFeetPosition = vec3_create();\r\n let additionalFixedMovement = vec3_create();\r\n let zero = vec3_create(0, 0, 0);\r\n return function _verticalCheck(verticalMovement, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n collisionRuntimeParams.myIsCollidingVertically = false;\r\n collisionRuntimeParams.myVerticalCollisionHit.reset();\r\n\r\n // #TODO the sign of 0 is by default downward, but it should probably be based on if u previously were on Ground or Ceiling\r\n // If none, ok downward, if on Ground downward, if on Ceiling upward, so that even without @myCheckVerticalBothDirection\r\n // if u were snapped to the ceiling u will keep snap on it even when 0 vertical movement\r\n let movementSign = Math.pp_sign(verticalMovement.vec3_lengthSigned(up), -1);\r\n let isMovementDownward = movementSign < 0;\r\n\r\n outFixedMovement.vec3_copy(verticalMovement);\r\n if (collisionCheckParams.myVerticalMovementCheckEnabled) {\r\n outFixedMovement = this._verticalMovementAdjustment(verticalMovement, isMovementDownward, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement);\r\n\r\n if (!collisionRuntimeParams.myIsCollidingVertically && collisionCheckParams.myCheckVerticalBothDirection &&\r\n (outFixedMovement.vec_equals(verticalMovement, 0.00001) || originalMovementSign == 0 || (movementSign != originalMovementSign))) {\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n let isOppositeMovementDownward = !isMovementDownward;\r\n additionalFixedMovement = this._verticalMovementAdjustment(zero, isOppositeMovementDownward, originalMovementSign, newFeetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, additionalFixedMovement);\r\n\r\n outFixedMovement.vec3_add(additionalFixedMovement, outFixedMovement);\r\n isMovementDownward = !isMovementDownward;\r\n }\r\n }\r\n\r\n // #TODO Here, if there is no vertical movement and there is no horizontal movement (or it has been canceled)\r\n // it would probably make more sense to skip this check, and if it is vertically colliding, but the movement is 0,0,0\r\n // we can say that the movement is, after all, fine\r\n // For now I will keep it as it is because i'm not sure if some feature (like the transform manager) could make assumption\r\n // on the fact that even a 0,0,0 movement can fail thanks to this (like the head colliding check)\r\n // Is not a big problem anyway, u can just check if the movement is 0 before checking the collision, and if it is 0\r\n // u won't move anyway\r\n if (!collisionRuntimeParams.myIsCollidingVertically && collisionCheckParams.myVerticalPositionCheckEnabled) {\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n let canStay = this._verticalPositionCheck(newFeetPosition, isMovementDownward, height, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n if (!canStay) {\r\n outFixedMovement.vec3_zero();\r\n\r\n // #TODO Probably this should not be reset, you should be required to check if the movement was ok to be sure this values have a meaning\r\n collisionRuntimeParams.myHasSnappedOnGround = false;\r\n collisionRuntimeParams.myHasSnappedOnCeiling = false;\r\n collisionRuntimeParams.myHasPoppedOutGround = false;\r\n collisionRuntimeParams.myHasPoppedOutCeiling = false;\r\n collisionRuntimeParams.myHasReducedVerticalMovement = false;\r\n }\r\n } else if (collisionRuntimeParams.myIsCollidingVertically) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckVertical.prototype._verticalMovementAdjustment = function () {\r\n let startOffset = vec3_create();\r\n let endOffset = vec3_create();\r\n let tempVector = vec3_create();\r\n let furtherDirection = vec3_create();\r\n let furtherDirectionPosition = vec3_create();\r\n let upNegate = vec3_create();\r\n let origin = vec3_create();\r\n let direction = vec3_create();\r\n\r\n let verticalCollisionHit = new RaycastHit();\r\n return function _verticalMovementAdjustment(verticalMovement, isMovementDownward, originalMovementSign, feetPosition, height, up, forward, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugVerticalMovementEnabled;\r\n\r\n startOffset.vec3_zero();\r\n endOffset.vec3_zero();\r\n\r\n let popOutEnabled = false;\r\n let snapEnabled = false;\r\n\r\n if (isMovementDownward) {\r\n startOffset.vec3_zero();\r\n endOffset.vec3_copy(verticalMovement);\r\n\r\n if (collisionCheckParams.myGroundPopOutExtraDistance > 0 && collisionCheckParams.myGroundPopOutEnabled) {\r\n startOffset.vec3_add(up.vec3_scale(collisionCheckParams.myGroundPopOutExtraDistance + 0.00001, tempVector), startOffset);\r\n popOutEnabled = true;\r\n }\r\n } else {\r\n startOffset = up.vec3_scale(height, startOffset);\r\n endOffset = up.vec3_scale(height, endOffset).vec3_add(verticalMovement, endOffset);\r\n\r\n if (collisionCheckParams.myCeilingPopOutExtraDistance > 0 && collisionCheckParams.myCeilingPopOutEnabled) {\r\n startOffset.vec3_add(up.vec3_scale(-collisionCheckParams.myCeilingPopOutExtraDistance - 0.00001, tempVector), startOffset);\r\n popOutEnabled = true;\r\n }\r\n }\r\n\r\n if (isMovementDownward && originalMovementSign <= 0 && this._myPrevCollisionRuntimeParams.myIsOnGround && collisionCheckParams.mySnapOnGroundEnabled && collisionCheckParams.mySnapOnGroundExtraDistance > 0) {\r\n endOffset.vec3_add(up.vec3_scale(-collisionCheckParams.mySnapOnGroundExtraDistance - 0.00001, tempVector), endOffset);\r\n snapEnabled = true;\r\n } else if (!isMovementDownward && this._myPrevCollisionRuntimeParams.myIsOnCeiling && collisionCheckParams.mySnapOnCeilingEnabled && collisionCheckParams.mySnapOnCeilingExtraDistance > 0 &&\r\n (originalMovementSign > 0 || (originalMovementSign == 0 && (!this._myPrevCollisionRuntimeParams.myIsOnGround || !collisionCheckParams.mySnapOnGroundEnabled)))) {\r\n endOffset.vec3_add(up.vec3_scale(collisionCheckParams.mySnapOnCeilingExtraDistance + 0.00001, tempVector), endOffset);\r\n snapEnabled = true;\r\n }\r\n\r\n outFixedMovement.vec3_zero();\r\n if (startOffset.vec3_distance(endOffset) > 0.00001) {\r\n let checkPositions = this._getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n\r\n furtherDirection.vec3_copy(up);\r\n if (!isMovementDownward) {\r\n furtherDirection.vec3_negate(furtherDirection);\r\n }\r\n\r\n let furtherDirectionPositionSet = false;\r\n\r\n for (let i = 0; i < checkPositions.length; i++) {\r\n let currentPosition = checkPositions[i];\r\n\r\n origin = currentPosition.vec3_add(startOffset, origin);\r\n direction = currentPosition.vec3_add(endOffset, direction).vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, true, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.myHits.length > 0) {\r\n if (furtherDirectionPositionSet) {\r\n if (raycastResult.myHits[0].myPosition.vec3_isFartherAlongAxis(furtherDirectionPosition, furtherDirection)) {\r\n furtherDirectionPosition.vec3_copy(raycastResult.myHits[0].myPosition);\r\n verticalCollisionHit.copy(raycastResult.myHits[0]);\r\n }\r\n } else {\r\n furtherDirectionPositionSet = true;\r\n furtherDirectionPosition.vec3_copy(raycastResult.myHits[0].myPosition);\r\n verticalCollisionHit.copy(raycastResult.myHits[0]);\r\n }\r\n }\r\n }\r\n\r\n if (furtherDirectionPositionSet) {\r\n upNegate = up.vec3_negate(upNegate);\r\n if (isMovementDownward) {\r\n outFixedMovement = furtherDirectionPosition.vec3_sub(feetPosition, outFixedMovement).vec3_componentAlongAxis(up, outFixedMovement);\r\n\r\n if (snapEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, upNegate)) {\r\n collisionRuntimeParams.myHasSnappedOnGround = true;\r\n } else if (popOutEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, up)) {\r\n if (!outFixedMovement.vec3_isZero(0.00001) &&\r\n (verticalMovement.vec3_isZero(0.00001) || !outFixedMovement.vec3_isConcordant(verticalMovement))) {\r\n collisionRuntimeParams.myHasPoppedOutGround = true;\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n } else {\r\n outFixedMovement = furtherDirectionPosition.vec3_sub(feetPosition.vec3_add(up.vec3_scale(height, outFixedMovement), outFixedMovement), outFixedMovement).\r\n vec3_componentAlongAxis(up, outFixedMovement);\r\n\r\n if (snapEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, up)) {\r\n collisionRuntimeParams.myHasSnappedOnCeiling = true;\r\n } else if (popOutEnabled && outFixedMovement.vec3_isFartherAlongAxis(verticalMovement, upNegate)) {\r\n if (!outFixedMovement.vec3_isZero(0.00001) &&\r\n (verticalMovement.vec3_isZero(0.00001) || !outFixedMovement.vec3_isConcordant(verticalMovement))) {\r\n collisionRuntimeParams.myHasPoppedOutCeiling = true;\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n } else {\r\n collisionRuntimeParams.myHasReducedVerticalMovement = true;\r\n }\r\n }\r\n\r\n if (!popOutEnabled && !outFixedMovement.vec3_isConcordant(verticalMovement)) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n\r\n if (!collisionCheckParams.myVerticalMovementReduceEnabled && collisionRuntimeParams.myHasReducedVerticalMovement) {\r\n outFixedMovement.vec3_zero();\r\n\r\n // #TODO Probably this should not be reset, you should be required to check if the movement was ok to be sure this values have a meaning\r\n collisionRuntimeParams.myHasSnappedOnGround = false;\r\n collisionRuntimeParams.myHasSnappedOnCeiling = false;\r\n collisionRuntimeParams.myHasPoppedOutGround = false;\r\n collisionRuntimeParams.myHasPoppedOutCeiling = false;\r\n collisionRuntimeParams.myHasReducedVerticalMovement = false;\r\n\r\n collisionRuntimeParams.myIsCollidingVertically = true;\r\n collisionRuntimeParams.myVerticalCollisionHit.copy(verticalCollisionHit);\r\n }\r\n } else {\r\n outFixedMovement.vec3_copy(verticalMovement);\r\n }\r\n } else {\r\n outFixedMovement.vec3_copy(verticalMovement);\r\n }\r\n\r\n if (outFixedMovement.vec3_length() < 0.00001) {\r\n outFixedMovement.vec3_zero();\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckVertical.prototype._verticalPositionCheck = function () {\r\n let smallHeightFixOffset = vec3_create();\r\n let heightOffset = vec3_create();\r\n let startPosition = vec3_create();\r\n let endPosition = vec3_create();\r\n let direction = vec3_create();\r\n return function _verticalPositionCheck(feetPosition, checkUpward, height, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n if (height < 0.00001) {\r\n return true;\r\n }\r\n\r\n this._myDebugEnabled = collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugVerticalPositionEnabled;\r\n\r\n let checkPositions = this._getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams);\r\n\r\n let isVerticalPositionOk = true;\r\n let atLeastOneIsOk = false;\r\n\r\n let adjustmentEpsilon = 0.0001; // Small offset to prevent hitting with the surface where u are on\r\n smallHeightFixOffset = up.vec3_scale(adjustmentEpsilon, smallHeightFixOffset);\r\n heightOffset = up.vec3_scale(height - adjustmentEpsilon, heightOffset);\r\n if (height - adjustmentEpsilon < adjustmentEpsilon * 10) {\r\n heightOffset = up.vec3_scale(adjustmentEpsilon * 10, heightOffset);\r\n }\r\n\r\n let insideHitSet = false;\r\n for (let i = 0; i < checkPositions.length; i++) {\r\n let currentPosition = checkPositions[i];\r\n\r\n if (checkUpward) {\r\n startPosition = currentPosition.vec3_add(smallHeightFixOffset, startPosition);\r\n endPosition = currentPosition.vec3_add(heightOffset, endPosition);\r\n } else {\r\n startPosition = currentPosition.vec3_add(heightOffset, startPosition);\r\n endPosition = currentPosition.vec3_add(smallHeightFixOffset, endPosition);\r\n }\r\n\r\n let origin = startPosition;\r\n direction = endPosition.vec3_sub(origin, direction);\r\n let distance = direction.vec3_length();\r\n direction.vec3_normalize(direction);\r\n\r\n let raycastResult = this._raycastAndDebug(origin, direction, distance, false, false, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if (raycastResult.isColliding()) {\r\n let firstHitOutsideCollision = raycastResult.getFirstHitOutsideCollision();\r\n if (firstHitOutsideCollision != null) {\r\n isVerticalPositionOk = false;\r\n collisionRuntimeParams.myVerticalCollisionHit.copy(firstHitOutsideCollision);\r\n break;\r\n } else if (!insideHitSet) {\r\n insideHitSet = true;\r\n collisionRuntimeParams.myVerticalCollisionHit.copy(raycastResult.myHits[0]);\r\n if (!collisionCheckParams.myVerticalAllowHitInsideCollisionIfOneOk) {\r\n isVerticalPositionOk = false;\r\n break;\r\n }\r\n }\r\n } else {\r\n atLeastOneIsOk = true;\r\n }\r\n }\r\n\r\n collisionRuntimeParams.myIsCollidingVertically = !isVerticalPositionOk || !atLeastOneIsOk;\r\n\r\n return !collisionRuntimeParams.myIsCollidingVertically;\r\n };\r\n}();\r\n\r\nCollisionCheckVertical.prototype._getVerticalCheckPositions = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let currentDirection = vec3_create();\r\n return function _getVerticalCheckPositions(feetPosition, up, forward, collisionCheckParams, collisionRuntimeParams) {\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n if (collisionCheckParams.myGroundCircumferenceAddCenter) {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n tempCheckPosition.vec3_copy(feetPosition);\r\n checkPositions.push(tempCheckPosition);\r\n }\r\n\r\n let radiusStep = collisionCheckParams.myFeetRadius / collisionCheckParams.myGroundCircumferenceStepAmount;\r\n let sliceAngle = 360 / collisionCheckParams.myGroundCircumferenceSliceAmount;\r\n let currentStepRotation = 0;\r\n for (let i = 0; i < collisionCheckParams.myGroundCircumferenceStepAmount; i++) {\r\n let currentRadius = radiusStep * (i + 1);\r\n\r\n currentDirection = forward.vec3_rotateAxis(currentStepRotation, up, currentDirection);\r\n for (let j = 0; j < collisionCheckParams.myGroundCircumferenceSliceAmount; j++) {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let sliceDirection = currentDirection.vec3_rotateAxis(sliceAngle * j, up, tempCheckPosition);\r\n checkPositions.push(feetPosition.vec3_add(sliceDirection.vec3_scale(currentRadius, sliceDirection), sliceDirection));\r\n }\r\n\r\n currentStepRotation += collisionCheckParams.myGroundCircumferenceRotationPerStep;\r\n }\r\n\r\n return checkPositions;\r\n };\r\n}();", "import { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckVertical } from \"./collision_check_vertical.js\";\r\nimport { CollisionRuntimeParams } from \"./collision_params.js\";\r\n\r\nexport class CollisionCheckMove extends CollisionCheckVertical {\r\n\r\n move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForMoveCollisionCheckDisabled(movement, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n _move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _moveStep(movement, feetPosition, transformUp, transformForward, height, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _syncCollisionRuntimeParamsWithPrevious(surfaceAdjustedHorizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckMove.prototype._move = function () {\r\n let transformUp = vec3_create();\r\n let transformForward = vec3_create();\r\n let feetPosition = vec3_create();\r\n\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n\r\n let horizontalMovement = vec3_create();\r\n let verticalMovement = vec3_create();\r\n\r\n let movementStep = vec3_create();\r\n let currentMovementStep = vec3_create();\r\n let movementChecked = vec3_create();\r\n let fixedMovement = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let fixedMovementStep = vec3_create();\r\n\r\n let previousCollisionRuntimeParams = new CollisionRuntimeParams();\r\n let previousFixedMovement = vec3_create();\r\n let previousMovementChecked = vec3_create();\r\n return function _move(movement, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n //return vec3_create();\r\n //movement = vec3_create(0, 0, -1);\r\n\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n\r\n transformUp = offsetTransformQuat.quat2_getUp(transformUp);\r\n transformForward = offsetTransformQuat.quat2_getForward(transformForward);\r\n feetPosition = offsetTransformQuat.quat2_getPosition(feetPosition);\r\n\r\n let height = collisionCheckParams.myHeight;\r\n height = height - 0.00001; // This makes it easier to setup things at the same exact height of a character so that it can go under it\r\n if (height < 0.00001) {\r\n height = 0;\r\n }\r\n //height = 1.70;\r\n\r\n horizontalMovement = movement.vec3_removeComponentAlongAxis(transformUp, horizontalMovement);\r\n if (horizontalMovement.vec3_isZero(0.000001)) {\r\n horizontalMovement.vec3_zero();\r\n }\r\n\r\n verticalMovement = movement.vec3_componentAlongAxis(transformUp, verticalMovement);\r\n if (verticalMovement.vec3_isZero(0.000001)) {\r\n verticalMovement.vec3_zero();\r\n }\r\n\r\n //feetPosition = feetPosition.vec3_add(horizontalMovement.vec3_normalize().vec3_scale(0.5));\r\n //height = height / 2;\r\n //horizontalMovement.vec3_normalize(horizontalMovement).vec3_scale(0.3, horizontalMovement); movement = horizontalMovement.vec3_add(verticalMovement);\r\n\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movement);\r\n\r\n if (!movement.vec3_isZero(0.00001) && collisionCheckParams.mySplitMovementEnabled) {\r\n let minLength = collisionCheckParams.mySplitMovementMinLengthEnabled ? collisionCheckParams.mySplitMovementMinLength : null;\r\n let maxLength = collisionCheckParams.mySplitMovementMaxLengthEnabled && collisionCheckParams.mySplitMovementMaxLength > 0 ? collisionCheckParams.mySplitMovementMaxLength : null;\r\n let maxSteps = collisionCheckParams.mySplitMovementMaxStepsEnabled && collisionCheckParams.mySplitMovementMaxSteps > 0 ? collisionCheckParams.mySplitMovementMaxSteps : 1;\r\n\r\n let movementLength = movement.vec3_length();\r\n let equalStepLength = movementLength / maxSteps;\r\n\r\n let stepLength = Math.pp_clamp(equalStepLength, minLength, maxLength);\r\n if (stepLength != equalStepLength) {\r\n movementStepAmount = Math.ceil(movementLength / stepLength);\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(stepLength, movementStep);\r\n\r\n if (collisionCheckParams.mySplitMovementMaxStepsEnabled) {\r\n movementStepAmount = Math.min(movementStepAmount, maxSteps);\r\n }\r\n } else {\r\n movementStepAmount = maxSteps;\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(equalStepLength, movementStep);\r\n }\r\n\r\n movementStepAmount = Math.max(1, movementStepAmount);\r\n\r\n if (movementStepAmount == 1) {\r\n movementStep.vec3_copy(movement);\r\n }\r\n }\r\n\r\n fixedMovement.vec3_zero();\r\n movementChecked.vec3_zero();\r\n\r\n previousCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n previousFixedMovement.vec3_copy(fixedMovement);\r\n previousMovementChecked.vec3_copy(movementChecked);\r\n\r\n let stepsPerformed = 0;\r\n let splitMovementStop = false;\r\n for (let i = 0; i < movementStepAmount; i++) {\r\n if (movementStepAmount == 1 || i != movementStepAmount - 1) {\r\n currentMovementStep.vec3_copy(movementStep);\r\n } else {\r\n currentMovementStep = movement.vec3_sub(movementChecked, currentMovementStep);\r\n }\r\n\r\n newFeetPosition = feetPosition.vec3_add(fixedMovement, newFeetPosition);\r\n fixedMovementStep.vec3_zero();\r\n fixedMovementStep = this._moveStep(currentMovementStep, newFeetPosition, transformUp, transformForward, height, true, collisionCheckParams, collisionRuntimeParams, fixedMovementStep);\r\n fixedMovement.vec3_add(fixedMovementStep, fixedMovement);\r\n\r\n movementChecked = movementChecked.vec3_add(movementStep, movementChecked);\r\n\r\n stepsPerformed = i + 1;\r\n\r\n if ((collisionRuntimeParams.myHorizontalMovementCanceled && collisionRuntimeParams.myVerticalMovementCanceled) ||\r\n (collisionRuntimeParams.myHorizontalMovementCanceled &&\r\n (collisionCheckParams.mySplitMovementStopWhenHorizontalMovementCanceled || (verticalMovement.vec3_isZero() && fixedMovementStep.vec3_isZero()))) ||\r\n (collisionRuntimeParams.myVerticalMovementCanceled &&\r\n (collisionCheckParams.mySplitMovementStopWhenVerticalMovementCanceled || (horizontalMovement.vec3_isZero() && fixedMovementStep.vec3_isZero()))) ||\r\n (collisionCheckParams.mySplitMovementStopCallback != null && collisionCheckParams.mySplitMovementStopCallback(collisionRuntimeParams))) {\r\n if (collisionCheckParams.mySplitMovementStopReturnPrevious) {\r\n collisionRuntimeParams.copy(previousCollisionRuntimeParams);\r\n fixedMovement.vec3_copy(previousFixedMovement);\r\n movementChecked.vec3_copy(previousMovementChecked);\r\n stepsPerformed -= 1;\r\n }\r\n\r\n splitMovementStop = true;\r\n break;\r\n }\r\n\r\n previousCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n previousFixedMovement.vec3_copy(fixedMovement);\r\n previousMovementChecked.vec3_copy(movementChecked);\r\n }\r\n\r\n //fixedMovement.vec3_zero();\r\n\r\n collisionRuntimeParams.mySplitMovementSteps = movementStepAmount;\r\n collisionRuntimeParams.mySplitMovementStepsPerformed = stepsPerformed;\r\n collisionRuntimeParams.mySplitMovementStop = splitMovementStop;\r\n collisionRuntimeParams.mySplitMovementMovementChecked.vec3_copy(movementChecked);\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n collisionRuntimeParams.myOffsetUp.vec3_copy(transformUp);\r\n\r\n //console.error(collisionRuntimeParams.myOriginalPosition.vec3_sub(feetPosition)[1].toFixed(3));\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalMovement.vec3_copy(movement);\r\n collisionRuntimeParams.myFixedMovement.vec3_copy(fixedMovement);\r\n\r\n collisionRuntimeParams.myNewPosition = collisionRuntimeParams.myOriginalPosition.vec3_add(collisionRuntimeParams.myFixedMovement, collisionRuntimeParams.myNewPosition);\r\n\r\n collisionRuntimeParams.myIsMove = true;\r\n };\r\n}();\r\n\r\nCollisionCheckMove.prototype._moveStep = function () {\r\n let horizontalMovement = vec3_create();\r\n let verticalMovement = vec3_create();\r\n let fixedHorizontalMovement = vec3_create();\r\n let fixedVerticalMovement = vec3_create();\r\n let horizontalDirection = vec3_create();\r\n let forwardForHorizontal = vec3_create();\r\n let forwardForVertical = vec3_create();\r\n let forwardForPerceivedAngle = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let surfaceAdjustedVerticalMovement = vec3_create();\r\n let surfaceAdjustedHorizontalMovement = vec3_create();\r\n let fixedMovement = vec3_create();\r\n\r\n let zAxis = vec3_create(0, 0, 1);\r\n let xAxis = vec3_create(1, 0, 0);\r\n return function _moveStep(movement, feetPosition, transformUp, transformForward, height, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, outFixedMovement) {\r\n // #TODO Refactor and split horizontal check and vertical check into: hMovement + vMovement + hPosition + vPosition?\r\n // Will make the sliding heavier, if I slide repeating all the 4 steps instead of 2 as now, but would be more correct\r\n\r\n // #TODO When on high slopes where u are not allowed to move the check does not manage to slide\r\n\r\n // #TODO When moving upward on the edge of a slope, the edge can be detected as a wall and prevent movement, while it should just keep moving\r\n\r\n horizontalMovement = movement.vec3_removeComponentAlongAxis(transformUp, horizontalMovement);\r\n if (horizontalMovement.vec3_isZero(0.000001)) {\r\n horizontalMovement.vec3_zero();\r\n }\r\n\r\n verticalMovement = movement.vec3_componentAlongAxis(transformUp, verticalMovement);\r\n if (verticalMovement.vec3_isZero(0.000001)) {\r\n verticalMovement.vec3_zero();\r\n }\r\n\r\n if (horizontalMovement.vec3_isZero()) {\r\n //return vec3_create();\r\n }\r\n\r\n //collisionCheckParams.myDebugEnabled = true;\r\n\r\n this._myPrevCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n collisionRuntimeParams.reset();\r\n\r\n surfaceAdjustedHorizontalMovement = this._adjustHorizontalMovementWithSurface(horizontalMovement, verticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, surfaceAdjustedHorizontalMovement);\r\n if (surfaceAdjustedHorizontalMovement.vec3_isZero(0.00001)) {\r\n surfaceAdjustedHorizontalMovement.vec3_zero();\r\n }\r\n\r\n this._syncCollisionRuntimeParamsWithPrevious(surfaceAdjustedHorizontalMovement, verticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams);\r\n\r\n {\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n if (!collisionCheckParams.myCheckHorizontalFixedForwardEnabled) {\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForHorizontal = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForHorizontal);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForHorizontal = horizontalMovement.vec3_normalize(forwardForHorizontal);\r\n } else {\r\n forwardForHorizontal.vec3_copy(transformForward);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckHorizontalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForHorizontal.vec3_copy(xAxis);\r\n } else {\r\n forwardForHorizontal.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForHorizontal = forwardForHorizontal.vec3_removeComponentAlongAxis(transformUp, forwardForHorizontal);\r\n forwardForHorizontal = forwardForHorizontal.vec3_normalize(forwardForHorizontal);\r\n\r\n if (forwardForHorizontal.vec_equals(collisionCheckParams.myCheckHorizontalFixedForward, 0.00001)) {\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n }\r\n }\r\n\r\n fixedHorizontalMovement.vec3_zero();\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n fixedHorizontalMovement = this._horizontalCheck(surfaceAdjustedHorizontalMovement, feetPosition, height, transformUp, forwardForHorizontal, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, false, fixedHorizontalMovement);\r\n //collisionRuntimeParams.myIsCollidingHorizontally = true;\r\n //collisionRuntimeParams.myHorizontalCollisionHit.myNormal = vec3_create(0, 0, 1);\r\n if (collisionCheckParams.mySlidingEnabled && collisionRuntimeParams.myIsCollidingHorizontally && this._isSlidingNormalValid(surfaceAdjustedHorizontalMovement, transformUp, collisionRuntimeParams)) {\r\n fixedHorizontalMovement = this._horizontalSlide(surfaceAdjustedHorizontalMovement, feetPosition, height, transformUp, forwardForHorizontal, allowSurfaceSteepFix, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, fixedHorizontalMovement);\r\n } else {\r\n //console.error(\"no slide\");\r\n }\r\n }\r\n\r\n if (fixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n fixedHorizontalMovement.vec3_zero();\r\n }\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero() && fixedHorizontalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myHorizontalMovementCanceled = true;\r\n }\r\n }\r\n\r\n {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n if (fixedHorizontalMovement.vec3_isZero()) {\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForVertical = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForVertical);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForVertical = horizontalMovement.vec3_normalize(forwardForVertical);\r\n } else {\r\n forwardForVertical.vec3_copy(transformForward);\r\n }\r\n } else {\r\n forwardForVertical = fixedHorizontalMovement.vec3_normalize(forwardForVertical);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckVerticalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForVertical.vec3_copy(xAxis);\r\n } else {\r\n forwardForVertical.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForVertical = forwardForVertical.vec3_removeComponentAlongAxis(transformUp, forwardForVertical);\r\n forwardForVertical = forwardForVertical.vec3_normalize(forwardForVertical);\r\n\r\n if (forwardForVertical.vec_equals(collisionCheckParams.myCheckVerticalFixedForward, 0.00001)) {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n }\r\n }\r\n\r\n //collisionCheckParams.myDebugEnabled = false;\r\n\r\n surfaceAdjustedVerticalMovement = this._adjustVerticalMovementWithSurface(fixedHorizontalMovement, verticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, surfaceAdjustedVerticalMovement);\r\n\r\n newFeetPosition = feetPosition.vec3_add(fixedHorizontalMovement, newFeetPosition);\r\n let originalMovementSign = Math.pp_sign(verticalMovement.vec3_lengthSigned(transformUp), 0);\r\n\r\n fixedVerticalMovement.vec3_zero();\r\n fixedVerticalMovement = this._verticalCheck(surfaceAdjustedVerticalMovement, originalMovementSign, newFeetPosition, height, transformUp, forwardForVertical, collisionCheckParams, collisionRuntimeParams, fixedVerticalMovement);\r\n\r\n if (fixedVerticalMovement.vec3_isZero(0.000001)) {\r\n fixedVerticalMovement.vec3_zero();\r\n }\r\n }\r\n\r\n outFixedMovement.vec3_zero();\r\n if (!collisionRuntimeParams.myIsCollidingVertically) {\r\n outFixedMovement = fixedHorizontalMovement.vec3_add(fixedVerticalMovement, outFixedMovement);\r\n } else {\r\n collisionRuntimeParams.myHorizontalMovementCanceled = true;\r\n collisionRuntimeParams.myVerticalMovementCanceled = true;\r\n fixedHorizontalMovement.vec3_zero();\r\n fixedVerticalMovement.vec3_zero();\r\n\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForVertical = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForVertical);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForVertical = horizontalMovement.vec3_normalize(forwardForVertical);\r\n } else {\r\n forwardForVertical.vec3_copy(transformForward);\r\n }\r\n }\r\n }\r\n\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n\r\n if (!fixedHorizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = fixedHorizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = horizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n }\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero() && !collisionRuntimeParams.myHorizontalMovementCanceled) {\r\n let surfaceCheckOk = this._postSurfaceCheck(fixedHorizontalMovement, fixedVerticalMovement, transformUp, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams);\r\n\r\n if (!surfaceCheckOk) {\r\n collisionRuntimeParams.myHorizontalMovementCanceled = true;\r\n collisionRuntimeParams.myVerticalMovementCanceled = true;\r\n fixedHorizontalMovement.vec3_zero();\r\n fixedVerticalMovement.vec3_zero();\r\n outFixedMovement.vec3_zero();\r\n newFeetPosition = feetPosition.vec3_add(outFixedMovement, newFeetPosition);\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = surfaceAdjustedHorizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else if (!horizontalMovement.vec3_isZero()) {\r\n forwardForPerceivedAngle = horizontalMovement.vec3_normalize(forwardForPerceivedAngle);\r\n } else {\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n }\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled && collisionCheckParams.myRegatherGroundInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnGround = this._myPrevCollisionRuntimeParams.myRealIsOnGround;\r\n collisionRuntimeParams.myIsOnGround = this._myPrevCollisionRuntimeParams.myIsOnGround;\r\n collisionRuntimeParams.myGroundCollisionHit.copy(this._myPrevCollisionRuntimeParams.myGroundCollisionHit);\r\n collisionRuntimeParams.myGroundAngle = this._myPrevCollisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundPerceivedAngle = this._myPrevCollisionRuntimeParams.myGroundPerceivedAngle;\r\n collisionRuntimeParams.myGroundNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundHitMaxAngle = this._myPrevCollisionRuntimeParams.myGroundHitMaxAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundHitMaxNormal);\r\n collisionRuntimeParams.myGroundDistance = this._myPrevCollisionRuntimeParams.myGroundDistance;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myGroundIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision;\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled && collisionCheckParams.myRegatherCeilingInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnCeiling = this._myPrevCollisionRuntimeParams.myRealIsOnCeiling;\r\n collisionRuntimeParams.myIsOnCeiling = this._myPrevCollisionRuntimeParams.myIsOnCeiling;\r\n collisionRuntimeParams.myCeilingCollisionHit.copy(this._myPrevCollisionRuntimeParams.myCeilingCollisionHit);\r\n collisionRuntimeParams.myCeilingAngle = this._myPrevCollisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = this._myPrevCollisionRuntimeParams.myCeilingPerceivedAngle;\r\n collisionRuntimeParams.myCeilingNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = this._myPrevCollisionRuntimeParams.myCeilingHitMaxAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingHitMaxNormal);\r\n collisionRuntimeParams.myCeilingDistance = this._myPrevCollisionRuntimeParams.myCeilingDistance;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myCeilingIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision;\r\n }\r\n }\r\n }\r\n\r\n //return outFixedMovement.vec3_zero(); \r\n\r\n if (collisionCheckParams.myExtraMovementCheckCallback != null) {\r\n fixedMovement.vec3_copy(outFixedMovement);\r\n outFixedMovement = collisionCheckParams.myExtraMovementCheckCallback(\r\n movement, fixedMovement, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, this._myPrevCollisionRuntimeParams, collisionRuntimeParams, outFixedMovement);\r\n\r\n fixedHorizontalMovement = outFixedMovement.vec3_removeComponentAlongAxis(transformUp, fixedHorizontalMovement);\r\n fixedVerticalMovement = outFixedMovement.vec3_componentAlongAxis(transformUp, fixedVerticalMovement);\r\n }\r\n\r\n {\r\n if (collisionCheckParams.mySlidingAdjustSign90Degrees) {\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !collisionRuntimeParams.myIsSliding && !fixedHorizontalMovement.vec3_isZero()) {\r\n /* let angleWithPreviousThreshold = 0.5;\r\n check use surfaceAdjustedHorizontalMovement instead of horizontalMovement if re-enable this\r\n \r\n if (!this._myPrevCollisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_isZero() && !horizontalMovement.vec3_isZero() &&\r\n horizontalMovement.vec3_angle(this._myPrevCollisionRuntimeParams.myLastValidOriginalHorizontalMovement) > angleWithPreviousThreshold) {\r\n collisionRuntimeParams.mySliding90DegreesSign = horizontalMovement.vec3_signTo(this._myPrevCollisionRuntimeParams.myLastValidOriginalHorizontalMovement, transformUp);\r\n console.error(\"sp\", collisionRuntimeParams.mySliding90DegreesSign, collisionRuntimeParams.myIsSliding);\r\n } */\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = true;\r\n //console.error(\"empty renew\");\r\n }\r\n }\r\n\r\n if (!horizontalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_copy(horizontalMovement);\r\n }\r\n\r\n if (!surfaceAdjustedHorizontalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(surfaceAdjustedHorizontalMovement);\r\n }\r\n\r\n if (!verticalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidOriginalVerticalMovement.vec3_copy(verticalMovement);\r\n }\r\n\r\n if (!surfaceAdjustedVerticalMovement.vec3_isZero()) {\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(surfaceAdjustedVerticalMovement);\r\n }\r\n\r\n if (!fixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n collisionRuntimeParams.myLastValidIsSliding = collisionRuntimeParams.myIsSliding;\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = false;\r\n collisionRuntimeParams.myLastValidEndHorizontalMovement.vec3_copy(fixedHorizontalMovement);\r\n //fixedHorizontalMovement.vec_error();\r\n\r\n if (!collisionRuntimeParams.myIsSliding) {\r\n //console.error(\"not sliding\");\r\n } else {\r\n //console.error(\"sliding\", collisionRuntimeParams.myIsSlidingFlickerPrevented, collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter);\r\n }\r\n } else {\r\n //console.error(\"still\", collisionRuntimeParams.myIsSlidingFlickerPrevented, collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter);\r\n }\r\n\r\n if (!fixedVerticalMovement.vec3_isZero(0.000001)) {\r\n collisionRuntimeParams.myLastValidEndVerticalMovement.vec3_copy(fixedVerticalMovement);\r\n }\r\n }\r\n\r\n let moveStepFixed = false;\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !fixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n horizontalDirection = fixedHorizontalMovement.vec3_normalize(horizontalDirection);\r\n let surfaceTooSteepResults = this._surfaceTooSteep(transformUp, horizontalDirection, collisionCheckParams, this._myPrevCollisionRuntimeParams);\r\n if (surfaceTooSteepResults[0] || surfaceTooSteepResults[1]) {\r\n horizontalDirection = fixedHorizontalMovement.vec3_normalize(horizontalDirection);\r\n let newSurfaceTooSteepResults = this._surfaceTooSteep(transformUp, horizontalDirection, collisionCheckParams, collisionRuntimeParams);\r\n\r\n if ((surfaceTooSteepResults[0] && newSurfaceTooSteepResults[0]) ||\r\n (surfaceTooSteepResults[1] && newSurfaceTooSteepResults[1]) ||\r\n !allowSurfaceSteepFix ||\r\n (surfaceTooSteepResults[0] && !collisionCheckParams.myAllowGroundSteepFix) ||\r\n (surfaceTooSteepResults[1] && !collisionCheckParams.myAllowCeilingSteepFix)) {\r\n outFixedMovement.vec3_zero();\r\n collisionRuntimeParams.copy(this._myPrevCollisionRuntimeParams);\r\n this._moveStep(movement, feetPosition, transformUp, transformForward, height, false, collisionCheckParams, collisionRuntimeParams, outFixedMovement);\r\n moveStepFixed = true;\r\n }\r\n }\r\n }\r\n\r\n if (!moveStepFixed) {\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugMovementEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n this._debugMovement(movement, outFixedMovement, newFeetPosition, transformUp, collisionCheckParams);\r\n }\r\n\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugRuntimeParamsEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n this._debugRuntimeParams(collisionRuntimeParams);\r\n }\r\n }\r\n\r\n return outFixedMovement;\r\n };\r\n}();\r\n\r\nCollisionCheckMove.prototype._syncCollisionRuntimeParamsWithPrevious = function () {\r\n let previousFixedHorizontalMovement = vec3_create();\r\n return function _syncCollisionRuntimeParamsWithPrevious(surfaceAdjustedHorizontalMovement, verticalMovement, up, collisionCheckParams, collisionRuntimeParams, previousCollisionRuntimeParams) {\r\n collisionRuntimeParams.myIsSlidingFlickerPrevented = previousCollisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n //console.error(\"prevented\", collisionRuntimeParams.myIsSlidingFlickerPrevented);\r\n\r\n collisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidOriginalHorizontalMovement);\r\n collisionRuntimeParams.myLastValidOriginalVerticalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidOriginalVerticalMovement);\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement);\r\n collisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement);\r\n collisionRuntimeParams.myLastValidIsSliding = previousCollisionRuntimeParams.myLastValidIsSliding;\r\n\r\n collisionRuntimeParams.mySliding90DegreesSign = previousCollisionRuntimeParams.mySliding90DegreesSign;\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = previousCollisionRuntimeParams.mySlidingRecompute90DegreesSign;\r\n if (collisionCheckParams.mySlidingAdjustSign90Degrees) {\r\n let angleWithPreviousThreshold = 0.5;\r\n if (!previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_isZero() && !surfaceAdjustedHorizontalMovement.vec3_isZero() &&\r\n surfaceAdjustedHorizontalMovement.vec3_angle(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement) > angleWithPreviousThreshold) {\r\n //previousFixedHorizontalMovement = previousCollisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(up, previousFixedHorizontalMovement);\r\n if (!previousCollisionRuntimeParams.myLastValidIsSliding) {\r\n let angleSigned = surfaceAdjustedHorizontalMovement.vec3_angleSigned(previousCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement, up);\r\n let angleSignedThreshold = 10;\r\n if (Math.abs(angleSigned) < 180 - angleSignedThreshold) {\r\n collisionRuntimeParams.mySliding90DegreesSign = Math.pp_sign(angleSigned);\r\n //console.error(\"special sign\");\r\n }\r\n }\r\n collisionRuntimeParams.mySlidingRecompute90DegreesSign = true;\r\n //console.error(\"direction new\");\r\n }\r\n }\r\n\r\n previousFixedHorizontalMovement = previousCollisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(up, previousFixedHorizontalMovement);\r\n if (previousFixedHorizontalMovement.vec3_isZero(0.000001)) {\r\n collisionRuntimeParams.mySlidingPreviousHorizontalMovement.vec3_copy(previousCollisionRuntimeParams.mySlidingPreviousHorizontalMovement);\r\n } else {\r\n collisionRuntimeParams.mySlidingPreviousHorizontalMovement.vec3_copy(previousFixedHorizontalMovement);\r\n }\r\n };\r\n}();", "import { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckMove } from \"./collision_check_move.js\";\r\n\r\nexport class CollisionCheckTeleport extends CollisionCheckMove {\r\n\r\n // #TODO Add teleport position/transform and return originalteleportransform\r\n // instead of position old transform / new transform\r\n teleport(position, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForTeleportCollisionCheckDisabled(position, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._teleport(position, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n _teleport(teleportPosition, transformQuat, collisionCheckParams, collisionRuntimeParams, isPositionCheck = false) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckTeleport.prototype._teleport = function () {\r\n let transformUp = vec3_create();\r\n let transformForward = vec3_create();\r\n let feetPosition = vec3_create();\r\n let originalFeetPosition = vec3_create();\r\n\r\n let transformOffsetLocalQuat = quat2_create();\r\n let offsetTransformQuat = quat2_create();\r\n\r\n let feetPositionOffsetToOriginal = vec3_create();\r\n let offsetTeleportPosition = vec3_create();\r\n\r\n let zero = vec3_create();\r\n let forwardForHorizontal = vec3_create();\r\n let forwardForVertical = vec3_create();\r\n let forwardForPerceivedAngle = vec3_create();\r\n let fixedHorizontalMovement = vec3_create();\r\n let fixedVerticalMovement = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let endPosition = vec3_create();\r\n\r\n let zAxis = vec3_create(0, 0, 1);\r\n let xAxis = vec3_create(1, 0, 0);\r\n return function _teleport(teleportPosition, transformQuat, collisionCheckParams, collisionRuntimeParams, isPositionCheck = false) {\r\n transformOffsetLocalQuat.quat2_setPositionRotationQuat(collisionCheckParams.myPositionOffsetLocal, collisionCheckParams.myRotationOffsetLocalQuat);\r\n offsetTransformQuat = transformOffsetLocalQuat.quat2_toWorld(transformQuat, offsetTransformQuat);\r\n if (transformQuat.vec_equals(offsetTransformQuat, 0.00001)) {\r\n offsetTransformQuat.quat2_copy(transformQuat);\r\n }\r\n\r\n transformUp = offsetTransformQuat.quat2_getUp(transformUp);\r\n transformForward = offsetTransformQuat.quat2_getForward(transformForward);\r\n feetPosition = offsetTransformQuat.quat2_getPosition(feetPosition);\r\n\r\n offsetTeleportPosition.vec3_copy(teleportPosition);\r\n originalFeetPosition = transformQuat.quat2_getPosition(originalFeetPosition);\r\n feetPositionOffsetToOriginal = originalFeetPosition.vec3_sub(feetPosition, feetPositionOffsetToOriginal);\r\n if (feetPositionOffsetToOriginal.vec3_isZero(0.00001)) {\r\n feetPositionOffsetToOriginal.vec3_zero();\r\n } else {\r\n offsetTeleportPosition = offsetTeleportPosition.vec3_sub(feetPositionOffsetToOriginal, offsetTeleportPosition);\r\n }\r\n\r\n\r\n let height = collisionCheckParams.myHeight;\r\n height = height - 0.00001; // This makes it easier to setup things at the same exact height of a character so that it can go under it\r\n if (height < 0.00001) {\r\n height = 0;\r\n }\r\n //height = 1.70;\r\n\r\n this._myPrevCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n collisionRuntimeParams.reset();\r\n\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n if (!collisionCheckParams.myCheckHorizontalFixedForwardEnabled) {\r\n forwardForHorizontal.vec3_copy(transformForward);\r\n } else {\r\n if (collisionCheckParams.myCheckHorizontalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForHorizontal.vec3_copy(xAxis);\r\n } else {\r\n forwardForHorizontal.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForHorizontal = forwardForHorizontal.vec3_removeComponentAlongAxis(transformUp, forwardForHorizontal);\r\n forwardForHorizontal = forwardForHorizontal.vec3_normalize(forwardForHorizontal);\r\n\r\n if (forwardForHorizontal.vec_equals(collisionCheckParams.myCheckHorizontalFixedForward, 0.00001)) {\r\n forwardForHorizontal.vec3_copy(collisionCheckParams.myCheckHorizontalFixedForward);\r\n }\r\n }\r\n\r\n fixedHorizontalMovement = this._horizontalCheck(zero, offsetTeleportPosition, height, transformUp, forwardForHorizontal, false, collisionCheckParams, collisionRuntimeParams, this._myPrevCollisionRuntimeParams, false, fixedHorizontalMovement);\r\n if (!collisionRuntimeParams.myIsCollidingHorizontally) {\r\n newFeetPosition = offsetTeleportPosition.vec3_add(fixedHorizontalMovement, newFeetPosition);\r\n\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n if (!collisionCheckParams.myCheckVerticalFixedForwardEnabled) {\r\n forwardForVertical.vec3_copy(transformForward);\r\n } else {\r\n if (collisionCheckParams.myCheckVerticalFixedForward.vec3_isOnAxis(transformUp)) {\r\n if (zAxis.vec3_isOnAxis(transformUp)) {\r\n forwardForVertical.vec3_copy(xAxis);\r\n } else {\r\n forwardForVertical.vec3_copy(zAxis);\r\n }\r\n }\r\n\r\n forwardForVertical = forwardForVertical.vec3_removeComponentAlongAxis(transformUp, forwardForVertical);\r\n forwardForVertical = forwardForVertical.vec3_normalize(forwardForVertical);\r\n\r\n if (forwardForVertical.vec_equals(collisionCheckParams.myCheckVerticalFixedForward, 0.00001)) {\r\n forwardForVertical.vec3_copy(collisionCheckParams.myCheckVerticalFixedForward);\r\n }\r\n }\r\n\r\n let downward = -1;\r\n fixedVerticalMovement = this._verticalCheck(zero, downward, newFeetPosition, height, transformUp, forwardForVertical, collisionCheckParams, collisionRuntimeParams, fixedVerticalMovement);\r\n if (!collisionRuntimeParams.myIsCollidingVertically) {\r\n newFeetPosition = newFeetPosition.vec3_add(fixedVerticalMovement, newFeetPosition);\r\n\r\n forwardForPerceivedAngle.vec3_copy(transformForward);\r\n\r\n if (collisionCheckParams.myComputeGroundInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsOnGround) {\r\n if ((collisionCheckParams.myTeleportMustBeOnGround && !isPositionCheck)\r\n || (collisionCheckParams.myCheckTransformMustBeOnGround && isPositionCheck)) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (!collisionRuntimeParams.myIsOnCeiling) {\r\n if ((collisionCheckParams.myTeleportMustBeOnCeiling && !isPositionCheck)\r\n || (collisionCheckParams.myCheckTransformMustBeOnCeiling && isPositionCheck)) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (collisionRuntimeParams.myIsOnGround) {\r\n let minAngle = null;\r\n if (!isPositionCheck) {\r\n if (collisionCheckParams.myTeleportMustBeOnIgnorableGroundAngle) {\r\n minAngle = collisionCheckParams.myGroundAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myTeleportMustBeOnGroundAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myTeleportMustBeOnGroundAngle);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckTransformMustBeOnIgnorableGroundAngle) {\r\n minAngle = collisionCheckParams.myGroundAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myCheckTransformMustBeOnGroundAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myCheckTransformMustBeOnGroundAngle);\r\n }\r\n }\r\n\r\n if (minAngle != null && collisionRuntimeParams.myGroundAngle > minAngle + 0.0001) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (collisionRuntimeParams.myIsOnCeiling) {\r\n let minAngle = null;\r\n if (!isPositionCheck) {\r\n if (collisionCheckParams.myTeleportMustBeOnIgnorableCeilingAngle) {\r\n minAngle = collisionCheckParams.myCeilingAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myTeleportMustBeOnCeilingAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myTeleportMustBeOnCeilingAngle);\r\n }\r\n } else {\r\n if (collisionCheckParams.myCheckTransformMustBeOnIgnorableCeilingAngle) {\r\n minAngle = collisionCheckParams.myCeilingAngleToIgnore;\r\n }\r\n\r\n if (collisionCheckParams.myCheckTransformMustBeOnCeilingAngle != null) {\r\n minAngle = Math.min(minAngle, collisionCheckParams.myCheckTransformMustBeOnCeilingAngle);\r\n }\r\n }\r\n\r\n if (minAngle != null && collisionRuntimeParams.myCeilingAngle > minAngle + 0.0001) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n }\r\n\r\n if (collisionRuntimeParams.myTeleportCanceled) {\r\n if (collisionCheckParams.myComputeGroundInfoEnabled && collisionCheckParams.myRegatherGroundInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, true, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnGround = this._myPrevCollisionRuntimeParams.myRealIsOnGround;\r\n collisionRuntimeParams.myIsOnGround = this._myPrevCollisionRuntimeParams.myIsOnGround;\r\n collisionRuntimeParams.myGroundCollisionHit.copy(this._myPrevCollisionRuntimeParams.myGroundCollisionHit);\r\n collisionRuntimeParams.myGroundAngle = this._myPrevCollisionRuntimeParams.myGroundAngle;\r\n collisionRuntimeParams.myGroundPerceivedAngle = this._myPrevCollisionRuntimeParams.myGroundPerceivedAngle;\r\n collisionRuntimeParams.myGroundNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundNormal);\r\n collisionRuntimeParams.myGroundHitMaxAngle = this._myPrevCollisionRuntimeParams.myGroundHitMaxAngle;\r\n collisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myGroundHitMaxNormal);\r\n collisionRuntimeParams.myGroundDistance = this._myPrevCollisionRuntimeParams.myGroundDistance;\r\n collisionRuntimeParams.myGroundIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myGroundIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision;\r\n }\r\n\r\n if (collisionCheckParams.myComputeCeilingInfoEnabled && collisionCheckParams.myRegatherCeilingInfoOnSurfaceCheckFail) {\r\n this._gatherSurfaceInfo(newFeetPosition, height, transformUp, forwardForPerceivedAngle, forwardForVertical, false, collisionCheckParams, collisionRuntimeParams);\r\n } else {\r\n collisionRuntimeParams.myRealIsOnCeiling = this._myPrevCollisionRuntimeParams.myRealIsOnCeiling;\r\n collisionRuntimeParams.myIsOnCeiling = this._myPrevCollisionRuntimeParams.myIsOnCeiling;\r\n collisionRuntimeParams.myCeilingCollisionHit.copy(this._myPrevCollisionRuntimeParams.myCeilingCollisionHit);\r\n collisionRuntimeParams.myCeilingAngle = this._myPrevCollisionRuntimeParams.myCeilingAngle;\r\n collisionRuntimeParams.myCeilingPerceivedAngle = this._myPrevCollisionRuntimeParams.myCeilingPerceivedAngle;\r\n collisionRuntimeParams.myCeilingNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingNormal);\r\n collisionRuntimeParams.myCeilingHitMaxAngle = this._myPrevCollisionRuntimeParams.myCeilingHitMaxAngle;\r\n collisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(this._myPrevCollisionRuntimeParams.myCeilingHitMaxNormal);\r\n collisionRuntimeParams.myCeilingDistance = this._myPrevCollisionRuntimeParams.myCeilingDistance;\r\n collisionRuntimeParams.myCeilingIsBaseInsideCollision = this._myPrevCollisionRuntimeParams.myCeilingIsBaseInsideCollision;\r\n collisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = this._myPrevCollisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision;\r\n }\r\n }\r\n\r\n // Regather surface if invalid else use before\r\n } else {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n } else {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n\r\n if (!isPositionCheck) {\r\n if (collisionCheckParams.myExtraTeleportCheckCallback != null) {\r\n endPosition.vec3_copy(newFeetPosition);\r\n newFeetPosition = collisionCheckParams.myExtraTeleportCheckCallback(\r\n offsetTeleportPosition, endPosition, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, this._myPrevCollisionRuntimeParams, collisionRuntimeParams, newFeetPosition);\r\n }\r\n } else {\r\n if (collisionCheckParams.myExtraCheckTransformCheckCallback != null) {\r\n endPosition.vec3_copy(newFeetPosition);\r\n newFeetPosition = collisionCheckParams.myExtraCheckTransformCheckCallback(\r\n endPosition, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, this._myPrevCollisionRuntimeParams, collisionRuntimeParams, newFeetPosition);\r\n }\r\n }\r\n\r\n collisionRuntimeParams.myOriginalUp = transformQuat.quat2_getUp(collisionRuntimeParams.myOriginalUp);\r\n collisionRuntimeParams.myOriginalForward = transformQuat.quat2_getForward(collisionRuntimeParams.myOriginalForward);\r\n collisionRuntimeParams.myOriginalPosition = transformQuat.quat2_getPosition(collisionRuntimeParams.myOriginalPosition);\r\n\r\n collisionRuntimeParams.myOffsetUp.vec3_copy(transformUp);\r\n\r\n collisionRuntimeParams.myOriginalHeight = collisionCheckParams.myHeight;\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_copy(teleportPosition);\r\n\r\n if (!collisionRuntimeParams.myTeleportCanceled) {\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_copy(newFeetPosition);\r\n if (!feetPositionOffsetToOriginal.vec3_isZero(0.00001)) {\r\n collisionRuntimeParams.myFixedTeleportPosition = collisionRuntimeParams.myFixedTeleportPosition.vec3_add(feetPositionOffsetToOriginal, collisionRuntimeParams.myFixedTeleportPosition);\r\n }\r\n\r\n collisionRuntimeParams.myNewPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n } else {\r\n collisionRuntimeParams.myNewPosition.vec3_copy(collisionRuntimeParams.myOriginalPosition);\r\n }\r\n\r\n collisionRuntimeParams.myIsTeleport = true;\r\n\r\n if (collisionCheckParams.myDebugEnabled && collisionCheckParams.myDebugRuntimeParamsEnabled && Globals.isDebugEnabled(this._myEngine)) {\r\n this._debugRuntimeParams(collisionRuntimeParams);\r\n }\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckTeleport } from \"./collision_check_teleport.js\";\r\n\r\nexport class CollisionCheckPosition extends CollisionCheckTeleport {\r\n\r\n positionCheck(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n if (this.isCollisionCheckDisabled() && Globals.isDebugEnabled(this._myEngine)) {\r\n this._setRuntimeParamsForPositionCheckCollisionCheckDisabled(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n return;\r\n }\r\n\r\n this._positionCheck(allowFix, transformQuat, collisionCheckParams, collisionRuntimeParams);\r\n }\r\n\r\n _positionCheck(allowAdjustments, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCollisionCheckPosition.prototype._positionCheck = function () {\r\n let feetPosition = vec3_create();\r\n return function _positionCheck(allowAdjustments, transformQuat, collisionCheckParams, collisionRuntimeParams) {\r\n feetPosition = transformQuat.quat2_getPosition(feetPosition);\r\n\r\n this._teleport(feetPosition, transformQuat, collisionCheckParams, collisionRuntimeParams, true);\r\n\r\n collisionRuntimeParams.myIsPositionOk = !collisionRuntimeParams.myTeleportCanceled;\r\n collisionRuntimeParams.myIsPositionCheck = true;\r\n collisionRuntimeParams.myOriginalPositionCheckPosition.vec3_copy(collisionRuntimeParams.myOriginalTeleportPosition);\r\n collisionRuntimeParams.myFixedPositionCheckPosition.vec3_copy(collisionRuntimeParams.myFixedTeleportPosition);\r\n collisionRuntimeParams.myIsPositionCheckAllowAdjustments = allowAdjustments;\r\n\r\n if (!allowAdjustments) {\r\n collisionRuntimeParams.myIsPositionOk = collisionRuntimeParams.myIsPositionOk &&\r\n collisionRuntimeParams.myOriginalPositionCheckPosition.vec_equals(collisionRuntimeParams.myFixedPositionCheckPosition, 0.00001);\r\n }\r\n\r\n collisionRuntimeParams.myOriginalTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myFixedTeleportPosition.vec3_zero();\r\n collisionRuntimeParams.myTeleportCanceled = false;\r\n collisionRuntimeParams.myIsTeleport = false;\r\n };\r\n}();", "import { CollisionCheckPosition } from \"./collision_check_position.js\";\r\n\r\nexport class CollisionCheck extends CollisionCheckPosition {\r\n\r\n}", "import { quat_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { CharacterCollisionCheckType, CharacterCollisionResults } from \"./character_collision_results.js\";\r\nimport { CollisionCheck } from \"./legacy/collision_check/collision_check.js\";\r\nimport { CollisionCheckParams, CollisionRuntimeParams } from \"./legacy/collision_check/collision_params.js\";\r\n\r\nlet _myCollisionChecks = new WeakMap();\r\n\r\nexport function getCollisionCheck(engine = Globals.getMainEngine()) {\r\n return _myCollisionChecks.get(engine);\r\n}\r\n\r\nexport function setCollisionCheck(collisionCheck, engine = Globals.getMainEngine()) {\r\n _myCollisionChecks.set(engine, collisionCheck);\r\n}\r\n\r\nexport function isCollisionCheckDisabled(engine = Globals.getMainEngine()) {\r\n let collisionCheck = CollisionCheckBridge.getCollisionCheck(engine);\r\n\r\n if (collisionCheck != null) {\r\n return collisionCheck.isCollisionCheckDisabled();\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function setCollisionCheckDisabled(collisionCheckDisabled, engine = Globals.getMainEngine()) {\r\n let collisionCheck = CollisionCheckBridge.getCollisionCheck(engine);\r\n\r\n if (collisionCheck != null) {\r\n collisionCheck.setCollisionCheckDisabled(collisionCheckDisabled);\r\n }\r\n}\r\n\r\nexport function initBridge(engine = Globals.getMainEngine()) {\r\n if (!_myCollisionChecks.has(engine)) {\r\n CollisionCheckBridge.setCollisionCheck(new CollisionCheck(engine), engine);\r\n }\r\n}\r\n\r\nexport let checkMovement = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function checkMovement(movement, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n CollisionCheckBridge.getCollisionCheck(engine).move(movement, currentTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let checkTeleportToTransform = function () {\r\n let teleportPosition = vec3_create();\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n teleportPosition = teleportTransformQuat.quat2_getPosition(teleportPosition);\r\n CollisionCheckBridge.getCollisionCheck(engine).teleport(teleportPosition, teleportTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let checkTransform = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function checkTransform(checkTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n CollisionCheckBridge.getCollisionCheck(engine).positionCheck(true, checkTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, checkTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let updateGroundInfo = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n collisionCheckParams.myComputeCeilingInfoEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(engine).updateSurfaceInfo(currentTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport let updateCeilingInfo = function () {\r\n let collisionCheckParams = new CollisionCheckParams();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n return function updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults(), engine = Globals.getMainEngine()) {\r\n CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, collisionCheckParams);\r\n CollisionCheckBridge.convertCharacterCollisionResultsToCollisionRuntimeParams(prevCharacterCollisionResults, collisionRuntimeParams);\r\n collisionCheckParams.myComputeGroundInfoEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(engine).updateSurfaceInfo(currentTransformQuat, collisionCheckParams, collisionRuntimeParams);\r\n CollisionCheckBridge.convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults);\r\n };\r\n}();\r\n\r\nexport function convertCharacterCollisionResultsToCollisionRuntimeParams(characterCollisionResults, outCollisionRuntimeParams) {\r\n outCollisionRuntimeParams.reset();\r\n\r\n characterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myOriginalPosition);\r\n characterCollisionResults.myTransformResults.myFinalTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myNewPosition);\r\n\r\n characterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_getForward(outCollisionRuntimeParams.myOriginalForward);\r\n characterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_getUp(outCollisionRuntimeParams.myOriginalUp);\r\n\r\n // Ok: outCollisionRuntimeParams.myOriginalHeight = characterCollisionResults.myOriginalHeight;\r\n\r\n outCollisionRuntimeParams.myOriginalMovement.vec3_copy(characterCollisionResults.myMovementResults.myInitialMovement);\r\n outCollisionRuntimeParams.myFixedMovement.vec3_copy(characterCollisionResults.myMovementResults.myFinalMovement);\r\n\r\n outCollisionRuntimeParams.myLastValidOriginalHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantInitialHorizontalMovement);\r\n outCollisionRuntimeParams.myLastValidOriginalVerticalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantInitialVerticalMovement);\r\n\r\n outCollisionRuntimeParams.myLastValidEndHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantFinalHorizontalMovement);\r\n outCollisionRuntimeParams.myLastValidEndVerticalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantFinalVerticalMovement);\r\n\r\n outCollisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialHorizontalMovement);\r\n outCollisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialVerticalMovement);\r\n\r\n outCollisionRuntimeParams.myIsOnGround = characterCollisionResults.myGroundInfo.myOnSurface;\r\n outCollisionRuntimeParams.myGroundCollisionHit.copy(characterCollisionResults.myGroundInfo.mySurfaceReferenceCollisionHit);\r\n outCollisionRuntimeParams.myGroundAngle = characterCollisionResults.myGroundInfo.mySurfaceAngle;\r\n outCollisionRuntimeParams.myGroundPerceivedAngle = characterCollisionResults.myGroundInfo.mySurfacePerceivedAngle;\r\n outCollisionRuntimeParams.myGroundNormal.vec3_copy(characterCollisionResults.myGroundInfo.mySurfaceNormal);\r\n outCollisionRuntimeParams.myGroundHitMaxAngle = characterCollisionResults.myGroundInfo.mySurfaceHitMaxAngle;\r\n outCollisionRuntimeParams.myGroundHitMaxNormal.vec3_copy(characterCollisionResults.myGroundInfo.mySurfaceHitMaxNormal);\r\n outCollisionRuntimeParams.myGroundDistance = characterCollisionResults.myGroundInfo.mySurfaceDistance;\r\n outCollisionRuntimeParams.myGroundIsBaseInsideCollision = characterCollisionResults.myGroundInfo.myBaseInsideCollision;\r\n outCollisionRuntimeParams.myOnGroundDueToBasePartiallyInsideCollision = characterCollisionResults.myGroundInfo.myOnSurfaceDueToBasePartiallyInsideCollision;\r\n\r\n outCollisionRuntimeParams.myIsOnCeiling = characterCollisionResults.myCeilingInfo.myOnSurface;\r\n outCollisionRuntimeParams.myCeilingCollisionHit.copy(characterCollisionResults.myCeilingInfo.mySurfaceReferenceCollisionHit);\r\n outCollisionRuntimeParams.myCeilingAngle = characterCollisionResults.myCeilingInfo.mySurfaceAngle;\r\n outCollisionRuntimeParams.myCeilingPerceivedAngle = characterCollisionResults.myCeilingInfo.mySurfacePerceivedAngle;\r\n outCollisionRuntimeParams.myCeilingNormal.vec3_copy(characterCollisionResults.myCeilingInfo.mySurfaceNormal);\r\n outCollisionRuntimeParams.myCeilingHitMaxAngle = characterCollisionResults.myCeilingInfo.mySurfaceHitMaxAngle;\r\n outCollisionRuntimeParams.myCeilingHitMaxNormal.vec3_copy(characterCollisionResults.myCeilingInfo.mySurfaceHitMaxNormal);\r\n outCollisionRuntimeParams.myCeilingDistance = characterCollisionResults.myCeilingInfo.mySurfaceDistance;\r\n outCollisionRuntimeParams.myCeilingIsBaseInsideCollision = characterCollisionResults.myCeilingInfo.myBaseInsideCollision;\r\n outCollisionRuntimeParams.myOnCeilingDueToBasePartiallyInsideCollision = characterCollisionResults.myCeilingInfo.myOnSurfaceDueToBasePartiallyInsideCollision;\r\n\r\n outCollisionRuntimeParams.myHorizontalMovementCanceled = characterCollisionResults.myHorizontalMovementResults.myMovementFailed;\r\n outCollisionRuntimeParams.myIsCollidingHorizontally = characterCollisionResults.myHorizontalMovementResults.myMovementCollided;\r\n outCollisionRuntimeParams.myHorizontalCollisionHit.copy(characterCollisionResults.myHorizontalMovementResults.myReferenceCollisionHit);\r\n\r\n outCollisionRuntimeParams.myVerticalMovementCanceled = characterCollisionResults.myVerticalMovementResults.myMovementFailed;\r\n outCollisionRuntimeParams.myIsCollidingVertically = characterCollisionResults.myVerticalMovementResults.myMovementCollided;\r\n outCollisionRuntimeParams.myVerticalCollisionHit.copy(characterCollisionResults.myVerticalMovementResults.myReferenceCollisionHit);\r\n\r\n outCollisionRuntimeParams.myHasSnappedOnGround = characterCollisionResults.myGroundResults.myHasSnappedOnSurface;\r\n outCollisionRuntimeParams.myHasSnappedOnCeiling = characterCollisionResults.myCeilingResults.myHasSnappedOnSurface;\r\n outCollisionRuntimeParams.myHasPoppedOutGround = characterCollisionResults.myGroundResults.myHasPoppedOutSurface;\r\n outCollisionRuntimeParams.myHasPoppedOutCeiling = characterCollisionResults.myCeilingResults.myHasPoppedOutSurface;\r\n\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill = characterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill = characterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill = characterCollisionResults.myGroundResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill;\r\n\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill = characterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill = characterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill = characterCollisionResults.myCeilingResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill;\r\n\r\n // Ok: outCollisionRuntimeParams.myHasReducedVerticalMovement = characterCollisionResults.myVerticalMovementResults.myHasMovementBeenReduced;\r\n\r\n outCollisionRuntimeParams.myIsSliding = characterCollisionResults.myWallSlideResults.myHasSlid;\r\n outCollisionRuntimeParams.mySlidingMovementAngle = characterCollisionResults.myWallSlideResults.mySlideMovementAngle;\r\n outCollisionRuntimeParams.mySlidingCollisionAngle = characterCollisionResults.myWallSlideResults.mySlideMovementWallAngle;\r\n outCollisionRuntimeParams.mySlidingWallNormal.vec3_copy(characterCollisionResults.myWallSlideResults.myWallNormal);\r\n\r\n outCollisionRuntimeParams.myIsSlidingIntoOppositeDirection = characterCollisionResults.myInternalResults.myHasWallSlidTowardOppositeDirection;\r\n outCollisionRuntimeParams.myIsSlidingFlickerPrevented = characterCollisionResults.myInternalResults.myLastRelevantWallSlideFlickerPrevented;\r\n outCollisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter = characterCollisionResults.myInternalResults.myWallSlideFlickerPreventionForceCheckCounter;\r\n outCollisionRuntimeParams.mySliding90DegreesSign = characterCollisionResults.myInternalResults.myWallSlide90DegreesDirectionSign;\r\n outCollisionRuntimeParams.mySlidingRecompute90DegreesSign = characterCollisionResults.myInternalResults.myWallSlide90DegreesRecomputeDirectionSign;\r\n outCollisionRuntimeParams.myLastValidIsSliding = characterCollisionResults.myInternalResults.myLastRelevantHasWallSlid;\r\n outCollisionRuntimeParams.mySlidingPreviousHorizontalMovement.vec3_copy(characterCollisionResults.myInternalResults.myLastRelevantFinalHorizontalMovement);\r\n\r\n outCollisionRuntimeParams.myOriginalTeleportPosition.vec3_copy(characterCollisionResults.myTeleportResults.myInitialTeleportTransformQuat);\r\n outCollisionRuntimeParams.myFixedTeleportPosition.vec3_copy(characterCollisionResults.myTeleportResults.myFinalTeleportTransformQuat);\r\n outCollisionRuntimeParams.myTeleportCanceled = characterCollisionResults.myTeleportResults.myTeleportFailed;\r\n\r\n outCollisionRuntimeParams.myIsPositionOk = characterCollisionResults.myCheckTransformResults.myCheckTransformFailed;\r\n characterCollisionResults.myCheckTransformResults.myInitialCheckTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myOriginalPositionCheckPosition);\r\n characterCollisionResults.myCheckTransformResults.myFinalCheckTransformQuat.quat2_getPosition(outCollisionRuntimeParams.myFixedPositionCheckPosition);\r\n\r\n outCollisionRuntimeParams.myIsTeleport = characterCollisionResults.myCheckType == CharacterCollisionCheckType.CHECK_TELEPORT;\r\n outCollisionRuntimeParams.myIsMove = characterCollisionResults.myCheckType == CharacterCollisionCheckType.CHECK_MOVEMENT;\r\n outCollisionRuntimeParams.myIsPositionCheck = characterCollisionResults.myCheckType == CharacterCollisionCheckType.CHECK_TRANSFORM;\r\n\r\n outCollisionRuntimeParams.mySplitMovementSteps = characterCollisionResults.mySplitMovementResults.myStepsToPerform;\r\n outCollisionRuntimeParams.mySplitMovementStepsPerformed = characterCollisionResults.mySplitMovementResults.myStepsPerformed;\r\n outCollisionRuntimeParams.mySplitMovementStop = characterCollisionResults.mySplitMovementResults.myMovementInterrupted;\r\n outCollisionRuntimeParams.mySplitMovementMovementChecked.vec3_copy(characterCollisionResults.mySplitMovementResults.myMovementChecked);\r\n\r\n return outCollisionRuntimeParams;\r\n}\r\n\r\nexport let convertCollisionRuntimeParamsToCharacterCollisionResults = function () {\r\n let rotationQuat = quat_create();\r\n return function convertCollisionRuntimeParamsToCharacterCollisionResults(collisionRuntimeParams, currentTransformQuat, outCharacterCollisionResults) {\r\n outCharacterCollisionResults.reset();\r\n\r\n if (collisionRuntimeParams.myIsMove) {\r\n outCharacterCollisionResults.myCheckType = CharacterCollisionCheckType.CHECK_MOVEMENT;\r\n } else if (collisionRuntimeParams.myIsTeleport) {\r\n outCharacterCollisionResults.myCheckType = CharacterCollisionCheckType.CHECK_TELEPORT;\r\n } else if (collisionRuntimeParams.myIsPositionCheck) {\r\n outCharacterCollisionResults.myCheckType = CharacterCollisionCheckType.CHECK_TRANSFORM;\r\n }\r\n\r\n rotationQuat.quat_setForward(collisionRuntimeParams.myOriginalForward, collisionRuntimeParams.myOriginalUp);\r\n outCharacterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_setPositionRotationQuat(collisionRuntimeParams.myOriginalPosition, rotationQuat);\r\n outCharacterCollisionResults.myTransformResults.myFinalTransformQuat.quat2_setPositionRotationQuat(collisionRuntimeParams.myNewPosition, rotationQuat);\r\n\r\n outCharacterCollisionResults.myMovementResults.myInitialMovement.vec3_copy(collisionRuntimeParams.myOriginalMovement);\r\n outCharacterCollisionResults.myMovementResults.myFinalMovement.vec3_copy(collisionRuntimeParams.myFixedMovement);\r\n outCharacterCollisionResults.myMovementResults.myMovementFailed = collisionRuntimeParams.myHorizontalMovementCanceled && collisionRuntimeParams.myVerticalMovementCanceled;\r\n outCharacterCollisionResults.myMovementResults.myMovementCollided = collisionRuntimeParams.myIsCollidingHorizontally || collisionRuntimeParams.myIsCollidingVertically;\r\n if (collisionRuntimeParams.myIsCollidingHorizontally) {\r\n outCharacterCollisionResults.myMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n } else if (collisionRuntimeParams.myIsCollidingVertically) {\r\n outCharacterCollisionResults.myMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myVerticalCollisionHit);\r\n }\r\n\r\n outCharacterCollisionResults.myHorizontalMovementResults.myMovementFailed = collisionRuntimeParams.myHorizontalMovementCanceled;\r\n outCharacterCollisionResults.myHorizontalMovementResults.myMovementCollided = collisionRuntimeParams.myIsCollidingHorizontally;\r\n outCharacterCollisionResults.myHorizontalMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myHorizontalCollisionHit);\r\n outCharacterCollisionResults.myHorizontalMovementResults.myInitialMovement = collisionRuntimeParams.myOriginalMovement.vec3_removeComponentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myHorizontalMovementResults.myInitialMovement);\r\n outCharacterCollisionResults.myHorizontalMovementResults.myFinalMovement = collisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myHorizontalMovementResults.myFinalMovement);\r\n\r\n outCharacterCollisionResults.myVerticalMovementResults.myMovementFailed = collisionRuntimeParams.myVerticalMovementCanceled;\r\n outCharacterCollisionResults.myVerticalMovementResults.myMovementCollided = collisionRuntimeParams.myIsCollidingVertically;\r\n outCharacterCollisionResults.myVerticalMovementResults.myReferenceCollisionHit.copy(collisionRuntimeParams.myVerticalCollisionHit);\r\n outCharacterCollisionResults.myVerticalMovementResults.myInitialMovement = collisionRuntimeParams.myOriginalMovement.vec3_componentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myVerticalMovementResults.myInitialMovement);\r\n outCharacterCollisionResults.myVerticalMovementResults.myFinalMovement = collisionRuntimeParams.myFixedMovement.vec3_componentAlongAxis(collisionRuntimeParams.myOffsetUp, outCharacterCollisionResults.myVerticalMovementResults.myFinalMovement);\r\n\r\n outCharacterCollisionResults.myTeleportResults.myInitialTeleportTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myInitialTransformQuat);\r\n outCharacterCollisionResults.myTeleportResults.myInitialTeleportTransformQuat.quat2_setPosition(collisionRuntimeParams.myOriginalTeleportPosition);\r\n outCharacterCollisionResults.myTeleportResults.myFinalTeleportTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myFinalTransformQuat);\r\n outCharacterCollisionResults.myTeleportResults.myFinalTeleportTransformQuat.quat2_setPosition(collisionRuntimeParams.myFixedTeleportPosition);\r\n outCharacterCollisionResults.myTeleportResults.myTeleportFailed = collisionRuntimeParams.myTeleportCanceled;\r\n\r\n outCharacterCollisionResults.myCheckTransformResults.myInitialCheckTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myInitialTransformQuat);\r\n outCharacterCollisionResults.myCheckTransformResults.myInitialCheckTransformQuat.quat2_setPosition(collisionRuntimeParams.myOriginalPositionCheckPosition);\r\n outCharacterCollisionResults.myCheckTransformResults.myFinalCheckTransformQuat.quat2_copy(outCharacterCollisionResults.myTransformResults.myFinalTransformQuat);\r\n outCharacterCollisionResults.myCheckTransformResults.myFinalCheckTransformQuat.quat2_setPosition(collisionRuntimeParams.myFixedPositionCheckPosition);\r\n outCharacterCollisionResults.myCheckTransformResults.myCheckTransformFailed = !collisionRuntimeParams.myIsPositionOk;\r\n\r\n outCharacterCollisionResults.myWallSlideResults.myHasSlid = collisionRuntimeParams.myIsSliding;\r\n outCharacterCollisionResults.myWallSlideResults.mySlideMovementAngle = collisionRuntimeParams.mySlidingMovementAngle;\r\n outCharacterCollisionResults.myWallSlideResults.mySlideMovementWallAngle = collisionRuntimeParams.mySlidingCollisionAngle;\r\n outCharacterCollisionResults.myWallSlideResults.myWallNormal.vec3_copy(collisionRuntimeParams.mySlidingWallNormal);\r\n\r\n outCharacterCollisionResults.myGroundInfo.myOnSurface = collisionRuntimeParams.myIsOnGround;\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceReferenceCollisionHit.copy(collisionRuntimeParams.myGroundCollisionHit);\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceAngle = collisionRuntimeParams.myGroundAngle;\r\n outCharacterCollisionResults.myGroundInfo.mySurfacePerceivedAngle = collisionRuntimeParams.myGroundPerceivedAngle;\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceNormal.vec3_copy(collisionRuntimeParams.myGroundNormal);\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceHitMaxAngle = collisionRuntimeParams.myGroundHitMaxAngle;\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceHitMaxNormal.vec3_copy(collisionRuntimeParams.myGroundHitMaxNormal);\r\n outCharacterCollisionResults.myGroundInfo.mySurfaceDistance = collisionRuntimeParams.myGroundDistance;\r\n outCharacterCollisionResults.myGroundInfo.myBaseInsideCollision = collisionRuntimeParams.myGroundIsBaseInsideCollision;\r\n\r\n outCharacterCollisionResults.myCeilingInfo.myOnSurface = collisionRuntimeParams.myIsOnCeiling;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceReferenceCollisionHit.copy(collisionRuntimeParams.myCeilingCollisionHit);\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceAngle = collisionRuntimeParams.myCeilingAngle;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfacePerceivedAngle = collisionRuntimeParams.myCeilingPerceivedAngle;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceNormal.vec3_copy(collisionRuntimeParams.myCeilingNormal);\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceHitMaxAngle = collisionRuntimeParams.myCeilingHitMaxAngle;\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceHitMaxNormal.vec3_copy(collisionRuntimeParams.myCeilingHitMaxNormal);\r\n outCharacterCollisionResults.myCeilingInfo.mySurfaceDistance = collisionRuntimeParams.myCeilingDistance;\r\n outCharacterCollisionResults.myCeilingInfo.myBaseInsideCollision = collisionRuntimeParams.myCeilingIsBaseInsideCollision;\r\n\r\n outCharacterCollisionResults.myGroundResults.myHasSnappedOnSurface = collisionRuntimeParams.myHasSnappedOnGround;\r\n outCharacterCollisionResults.myGroundResults.myHasPoppedOutSurface = collisionRuntimeParams.myHasPoppedOutGround;\r\n outCharacterCollisionResults.myCeilingResults.myHasSnappedOnSurface = collisionRuntimeParams.myHasSnappedOnCeiling;\r\n outCharacterCollisionResults.myCeilingResults.myHasPoppedOutSurface = collisionRuntimeParams.myHasPoppedOutCeiling;\r\n\r\n outCharacterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleDownhill;\r\n outCharacterCollisionResults.myGroundResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverGroundPerceivedAngleUphill;\r\n outCharacterCollisionResults.myGroundResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverGroundAngleDownhill;\r\n\r\n outCharacterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleDownhill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleDownhill;\r\n outCharacterCollisionResults.myCeilingResults.myHasHorizontalMovementAdjustedVerticalMovementOverSurfacePerceivedAngleUphill = collisionRuntimeParams.myHorizontalMovementHasAdjustedVerticalMovementOverCeilingPerceivedAngleUphill;\r\n outCharacterCollisionResults.myCeilingResults.myHasVerticalMovementAdjustedHorizontalMovementOverSurfaceAngleDownhill = collisionRuntimeParams.myVerticalMovementHasAdjustedHorizontalMovementOverCeilingAngleDownhill;\r\n\r\n outCharacterCollisionResults.mySplitMovementResults.myStepsToPerform = collisionRuntimeParams.mySplitMovementSteps;\r\n outCharacterCollisionResults.mySplitMovementResults.myStepsPerformed = collisionRuntimeParams.mySplitMovementStepsPerformed;\r\n outCharacterCollisionResults.mySplitMovementResults.myMovementInterrupted = collisionRuntimeParams.mySplitMovementStop;\r\n outCharacterCollisionResults.mySplitMovementResults.myMovementChecked.vec3_copy(collisionRuntimeParams.mySplitMovementMovementChecked);\r\n\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantInitialHorizontalMovement.vec3_copy(collisionRuntimeParams.myLastValidOriginalHorizontalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantFinalHorizontalMovement.vec3_copy(collisionRuntimeParams.myLastValidEndHorizontalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantInitialVerticalMovement.vec3_copy(collisionRuntimeParams.myLastValidOriginalVerticalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantFinalVerticalMovement.vec3_copy(collisionRuntimeParams.myLastValidEndVerticalMovement);\r\n\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialHorizontalMovement.vec3_copy(collisionRuntimeParams.myLastValidSurfaceAdjustedHorizontalMovement);\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantAdjustedInitialVerticalMovement.vec3_copy(collisionRuntimeParams.myLastValidSurfaceAdjustedVerticalMovement);\r\n\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantHasWallSlid = collisionRuntimeParams.myLastValidIsSliding;\r\n outCharacterCollisionResults.myInternalResults.myHasWallSlidTowardOppositeDirection = collisionRuntimeParams.myIsSlidingIntoOppositeDirection;\r\n outCharacterCollisionResults.myInternalResults.myLastRelevantWallSlideFlickerPrevented = collisionRuntimeParams.myIsSlidingFlickerPrevented;\r\n outCharacterCollisionResults.myInternalResults.myWallSlideFlickerPreventionForceCheckCounter = collisionRuntimeParams.mySlidingFlickerPreventionCheckAnywayCounter;\r\n outCharacterCollisionResults.myInternalResults.myWallSlide90DegreesDirectionSign = collisionRuntimeParams.mySliding90DegreesSign;\r\n outCharacterCollisionResults.myInternalResults.myWallSlide90DegreesRecomputeDirectionSign = collisionRuntimeParams.mySlidingRecompute90DegreesSign;\r\n\r\n outCharacterCollisionResults.myTransformResults.myInitialTransformQuat.quat2_copy(currentTransformQuat);\r\n\r\n return outCharacterCollisionResults;\r\n };\r\n}();\r\n\r\nexport let convertCharacterColliderSetupToCollisionCheckParams = function () {\r\n return function convertCharacterColliderSetupToCollisionCheckParams(characterColliderSetup, outCollisionCheckParams) {\r\n outCollisionCheckParams.myHeight = characterColliderSetup.myHeight;\r\n\r\n outCollisionCheckParams.myRadius = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeRadius;\r\n outCollisionCheckParams.myDistanceFromFeetToIgnore = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore;\r\n outCollisionCheckParams.myDistanceFromHeadToIgnore = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckHeadDistanceToIgnore;\r\n\r\n outCollisionCheckParams.myHorizontalMovementCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckEnabled;\r\n\r\n outCollisionCheckParams.myHorizontalMovementStepEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckSplitMovementEnabled;\r\n outCollisionCheckParams.myHorizontalMovementStepMaxLength = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckSplitMovementMaxStepLength == null ? 0 : characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckSplitMovementMaxStepLength;\r\n\r\n outCollisionCheckParams.myHorizontalMovementRadialStepAmount = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckRadialSteps;\r\n\r\n outCollisionCheckParams.myHorizontalMovementCheckDiagonalOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckDiagonalInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckStraight = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckHorizontalBorder = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalRadialCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalStraight = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalUpwardInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalDiagonalDownwardInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalUpward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalStraightDiagonalDownward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementCheckVerticalHorizontalBorderDiagonalInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled;\r\n\r\n outCollisionCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled;\r\n outCollisionCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled;\r\n\r\n outCollisionCheckParams.myHorizontalPositionCheckEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckEnabled;\r\n\r\n outCollisionCheckParams.myHalfConeAngle = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle;\r\n outCollisionCheckParams.myHalfConeSliceAmount = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices;\r\n outCollisionCheckParams.myCheckConeBorder = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalBorderCheckEnabled;\r\n outCollisionCheckParams.myCheckConeRay = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalRadialCheckEnabled;\r\n outCollisionCheckParams.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision;\r\n outCollisionCheckParams.myHorizontalPositionCheckVerticalDirectionType = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckDirection;\r\n\r\n outCollisionCheckParams.myCheckHeight = characterColliderSetup.myHorizontalCheckParams.myHorizontalHeightCheckEnabled;\r\n\r\n outCollisionCheckParams.myCheckHeightVerticalMovement = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightVerticalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightVerticalPosition = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightVerticalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightTopMovement = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightHorizontalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightTopPosition = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightHorizontalCheckEnabled;\r\n outCollisionCheckParams.myCheckHeightConeOnCollision = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit;\r\n outCollisionCheckParams.myCheckHeightConeOnCollisionKeepHit = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit;\r\n\r\n outCollisionCheckParams.myHeightCheckStepAmountMovement = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightCheckSteps;\r\n outCollisionCheckParams.myHeightCheckStepAmountPosition = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightCheckSteps;\r\n outCollisionCheckParams.myCheckVerticalStraight = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalStraightCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalRayOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalRayInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderRayOutward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalDiagonalBorderRayInward = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled;\r\n outCollisionCheckParams.myCheckVerticalSearchFartherVerticalHit = characterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckGetFarthestHit;\r\n\r\n outCollisionCheckParams.myCheckHorizontalFixedForwardEnabled = characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForwardEnabled;\r\n outCollisionCheckParams.myCheckHorizontalFixedForward.vec3_copy(characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForward);\r\n\r\n outCollisionCheckParams.myVerticalMovementCheckEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckEnabled;\r\n outCollisionCheckParams.myVerticalPositionCheckEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalPositionCheckEnabled;\r\n outCollisionCheckParams.myFeetRadius = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadius;\r\n\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhill = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphill = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleDownhillMaxPerceivedAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithGroundAngleUphillMaxPerceivedAngle = characterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhill = characterColliderSetup.myGroundParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithGroundAngleDownhillMinAngle = characterColliderSetup.myGroundParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle;\r\n\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphill = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleDownhillMaxPerceivedAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustVerticalMovementWithCeilingAngleUphillMaxPerceivedAngle = characterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill;\r\n outCollisionCheckParams.myAdjustHorizontalMovementWithCeilingAngleDownhillMinAngle = characterColliderSetup.myCeilingParams.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle;\r\n\r\n outCollisionCheckParams.myCheckVerticalFixedForwardEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForwardEnabled;\r\n outCollisionCheckParams.myCheckVerticalFixedForward.vec3_copy(characterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForward);\r\n outCollisionCheckParams.myCheckVerticalBothDirection = characterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckPerformCheckOnBothSides;\r\n\r\n outCollisionCheckParams.myVerticalMovementReduceEnabled = characterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckReductionEnabled;\r\n\r\n outCollisionCheckParams.myGroundCircumferenceAddCenter = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceCentralCheckEnabled;\r\n outCollisionCheckParams.myGroundCircumferenceSliceAmount = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n outCollisionCheckParams.myGroundCircumferenceStepAmount = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps;\r\n outCollisionCheckParams.myGroundCircumferenceRotationPerStep = characterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep;\r\n outCollisionCheckParams.myVerticalAllowHitInsideCollisionIfOneOk = characterColliderSetup.myVerticalCheckParams.myVerticalCheckAllowHitsInsideCollisionIfOneValid;\r\n\r\n outCollisionCheckParams.myHorizontalBlockLayerFlags.copy(characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckBlockLayerFlags);\r\n outCollisionCheckParams.myVerticalBlockLayerFlags.copy(characterColliderSetup.myVerticalCheckParams.myVerticalCheckBlockLayerFlags);\r\n outCollisionCheckParams.myHorizontalObjectsToIgnore.pp_copy(characterColliderSetup.myHorizontalCheckParams.myHorizontalCheckObjectsToIgnore);\r\n outCollisionCheckParams.myVerticalObjectsToIgnore.pp_copy(characterColliderSetup.myVerticalCheckParams.myVerticalCheckObjectsToIgnore);\r\n\r\n outCollisionCheckParams.mySnapOnGroundEnabled = characterColliderSetup.myGroundParams.mySurfaceSnapEnabled;\r\n outCollisionCheckParams.mySnapOnGroundExtraDistance = characterColliderSetup.myGroundParams.mySurfaceSnapMaxDistance;\r\n outCollisionCheckParams.mySnapOnCeilingEnabled = characterColliderSetup.myCeilingParams.mySurfaceSnapEnabled;\r\n outCollisionCheckParams.mySnapOnCeilingExtraDistance = characterColliderSetup.myCeilingParams.mySurfaceSnapMaxDistance;\r\n\r\n outCollisionCheckParams.myGroundPopOutEnabled = characterColliderSetup.myGroundParams.mySurfacePopOutEnabled;\r\n outCollisionCheckParams.myGroundPopOutExtraDistance = characterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance;\r\n outCollisionCheckParams.myCeilingPopOutEnabled = characterColliderSetup.myCeilingParams.mySurfacePopOutEnabled;\r\n outCollisionCheckParams.myCeilingPopOutExtraDistance = characterColliderSetup.myCeilingParams.mySurfacePopOutMaxDistance;\r\n\r\n outCollisionCheckParams.myGroundAngleToIgnore = characterColliderSetup.myGroundParams.mySurfaceAngleToIgnore;\r\n outCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = characterColliderSetup.myGroundParams.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle;\r\n outCollisionCheckParams.myCeilingAngleToIgnore = characterColliderSetup.myCeilingParams.mySurfaceAngleToIgnore;\r\n outCollisionCheckParams.myCeilingAngleToIgnoreWithPerceivedAngle = characterColliderSetup.myCeilingParams.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle;\r\n\r\n outCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = characterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance;\r\n outCollisionCheckParams.myHorizontalMovementCeilingAngleIgnoreHeight = characterColliderSetup.myCeilingParams.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance;\r\n outCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = characterColliderSetup.myGroundParams.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance;\r\n outCollisionCheckParams.myHorizontalPositionCeilingAngleIgnoreHeight = characterColliderSetup.myCeilingParams.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance;\r\n\r\n outCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = characterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n outCollisionCheckParams.myHorizontalMovementCeilingAngleIgnoreMaxMovementLeft = characterColliderSetup.myCeilingParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n\r\n outCollisionCheckParams.myComputeGroundInfoEnabled = characterColliderSetup.myGroundParams.myCollectSurfaceInfo;\r\n outCollisionCheckParams.myComputeCeilingInfoEnabled = characterColliderSetup.myCeilingParams.myCollectSurfaceInfo;\r\n outCollisionCheckParams.myDistanceToBeOnGround = characterColliderSetup.myGroundParams.myOnSurfaceMaxOutsideDistance;\r\n outCollisionCheckParams.myDistanceToComputeGroundInfo = characterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCollisionCheckParams.myDistanceToBeOnCeiling = characterColliderSetup.myCeilingParams.myOnSurfaceMaxOutsideDistance;\r\n outCollisionCheckParams.myDistanceToComputeCeilingInfo = characterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCollisionCheckParams.myVerticalFixToBeOnGround = characterColliderSetup.myGroundParams.myOnSurfaceMaxInsideDistance;\r\n outCollisionCheckParams.myVerticalFixToComputeGroundInfo = characterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n outCollisionCheckParams.myVerticalFixToBeOnCeiling = characterColliderSetup.myCeilingParams.myOnSurfaceMaxInsideDistance;\r\n outCollisionCheckParams.myVerticalFixToComputeCeilingInfo = characterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxInsideDistance;\r\n\r\n outCollisionCheckParams.myGroundIsBaseInsideCollisionCheckEnabled = characterColliderSetup.myGroundParams.myBaseInsideCollisionCheckEnabled;\r\n outCollisionCheckParams.myCeilingIsBaseInsideCollisionCheckEnabled = characterColliderSetup.myCeilingParams.myBaseInsideCollisionCheckEnabled;\r\n outCollisionCheckParams.myIsOnGroundIfInsideHit = characterColliderSetup.myGroundParams.myOnSurfaceIfBaseInsideCollision;\r\n outCollisionCheckParams.myIsOnCeilingIfInsideHit = characterColliderSetup.myCeilingParams.myOnSurfaceIfBaseInsideCollision;\r\n\r\n outCollisionCheckParams.myFindGroundDistanceMaxOutsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceDistanceOutsideDistance;\r\n outCollisionCheckParams.myFindGroundDistanceMaxInsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceDistanceInsideDistance;\r\n outCollisionCheckParams.myFindCeilingDistanceMaxOutsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceDistanceOutsideDistance;\r\n outCollisionCheckParams.myFindCeilingDistanceMaxInsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceDistanceInsideDistance;\r\n\r\n outCollisionCheckParams.myCollectGroundCollisionHitOutsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitOutsideDistance;\r\n outCollisionCheckParams.myCollectGroundCollisionHitInsideDistance = characterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitInsideDistance;\r\n outCollisionCheckParams.myCollectCeilingCollisionHitOutsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitOutsideDistance;\r\n outCollisionCheckParams.myCollectCeilingCollisionHitInsideDistance = characterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitInsideDistance;\r\n\r\n outCollisionCheckParams.myAllowGroundSteepFix = characterColliderSetup.myGroundParams.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle;\r\n outCollisionCheckParams.myAllowCeilingSteepFix = characterColliderSetup.myCeilingParams.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle;\r\n\r\n outCollisionCheckParams.myMustStayOnGround = characterColliderSetup.myGroundParams.myMovementMustStayOnSurface;\r\n outCollisionCheckParams.myMustStayOnCeiling = characterColliderSetup.myCeilingParams.myMovementMustStayOnSurface;\r\n outCollisionCheckParams.myRegatherGroundInfoOnSurfaceCheckFail = characterColliderSetup.myGroundParams.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n outCollisionCheckParams.myRegatherCeilingInfoOnSurfaceCheckFail = characterColliderSetup.myCeilingParams.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n outCollisionCheckParams.myMustStayBelowIgnorableGroundAngleDownhill = characterColliderSetup.myGroundParams.myMovementMustStayOnIgnorableSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMustStayBelowIgnorableCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myMovementMustStayOnIgnorableSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMustStayBelowGroundAngleDownhill = characterColliderSetup.myGroundParams.myMovementMustStayOnSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMustStayBelowCeilingAngleDownhill = characterColliderSetup.myCeilingParams.myMovementMustStayOnSurfaceAngleDownhill;\r\n outCollisionCheckParams.myMovementMustStayOnGroundHitAngle = characterColliderSetup.myGroundParams.myMovementMustStayOnSurfaceHitMaxAngle;\r\n outCollisionCheckParams.myMovementMustStayOnCeilingHitAngle = characterColliderSetup.myCeilingParams.myMovementMustStayOnSurfaceHitMaxAngle;\r\n\r\n outCollisionCheckParams.myTeleportMustBeOnIgnorableGroundAngle = characterColliderSetup.myGroundParams.myTeleportMustBeOnIgnorableSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnIgnorableGroundAngle = characterColliderSetup.myGroundParams.myCheckTransformMustBeOnIgnorableSurfaceAngle;\r\n outCollisionCheckParams.myTeleportMustBeOnIgnorableCeilingAngle = characterColliderSetup.myCeilingParams.myTeleportMustBeOnIgnorableSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnIgnorableCeilingAngle = characterColliderSetup.myCeilingParams.myCheckTransformMustBeOnIgnorableSurfaceAngle;\r\n\r\n outCollisionCheckParams.myTeleportMustBeOnGroundAngle = characterColliderSetup.myGroundParams.myTeleportMustBeOnSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnGroundAngle = characterColliderSetup.myGroundParams.myCheckTransformMustBeOnSurfaceAngle;\r\n outCollisionCheckParams.myTeleportMustBeOnCeilingAngle = characterColliderSetup.myCeilingParams.myTeleportMustBeOnSurfaceAngle;\r\n outCollisionCheckParams.myCheckTransformMustBeOnCeilingAngle = characterColliderSetup.myCeilingParams.myCheckTransformMustBeOnSurfaceAngle;\r\n\r\n outCollisionCheckParams.myTeleportMustBeOnGround = characterColliderSetup.myGroundParams.myTeleportMustBeOnSurface;\r\n outCollisionCheckParams.myCheckTransformMustBeOnGround = characterColliderSetup.myGroundParams.myCheckTransformMustBeOnSurface;\r\n outCollisionCheckParams.myTeleportMustBeOnCeiling = characterColliderSetup.myCeilingParams.myTeleportMustBeOnSurface;\r\n outCollisionCheckParams.myCheckTransformMustBeOnCeiling = characterColliderSetup.myCeilingParams.myCheckTransformMustBeOnSurface;\r\n\r\n outCollisionCheckParams.mySlidingEnabled = characterColliderSetup.myWallSlideParams.myWallSlideEnabled;\r\n outCollisionCheckParams.mySlidingHorizontalMovementCheckBetterNormal = characterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckGetBetterReferenceHit;\r\n outCollisionCheckParams.mySlidingMaxAttempts = characterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts;\r\n outCollisionCheckParams.mySlidingCheckBothDirections = characterColliderSetup.myWallSlideParams.myCheckBothWallSlideDirections;\r\n outCollisionCheckParams.mySlidingFlickeringPreventionType = characterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionMode;\r\n outCollisionCheckParams.mySlidingFlickeringPreventionCheckOnlyIfAlreadySliding = characterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding;\r\n outCollisionCheckParams.mySlidingFlickerPreventionCheckAnywayCounter = characterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionForceCheckCounter;\r\n outCollisionCheckParams.mySlidingAdjustSign90Degrees = characterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign;\r\n\r\n outCollisionCheckParams.mySplitMovementEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementEnabled;\r\n outCollisionCheckParams.mySplitMovementMaxLength = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength == null ? 0 : characterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength;\r\n outCollisionCheckParams.mySplitMovementMaxLengthEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength != null;\r\n outCollisionCheckParams.mySplitMovementMaxSteps = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps == null ? 0 : characterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps;\r\n outCollisionCheckParams.mySplitMovementMaxStepsEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps != null;\r\n outCollisionCheckParams.mySplitMovementMinLength = characterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength == null ? 0 : characterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength;\r\n outCollisionCheckParams.mySplitMovementMinLengthEnabled = characterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength != null;\r\n outCollisionCheckParams.mySplitMovementStopWhenHorizontalMovementCanceled = characterColliderSetup.mySplitMovementParams.mySplitMovementStopOnHorizontalMovementFailed;\r\n outCollisionCheckParams.mySplitMovementStopWhenVerticalMovementCanceled = characterColliderSetup.mySplitMovementParams.mySplitMovementStopOnVerticalMovementFailed;\r\n outCollisionCheckParams.mySplitMovementStopCallback = null;\r\n outCollisionCheckParams.mySplitMovementStopReturnPrevious = characterColliderSetup.mySplitMovementParams.mySplitMovementStopReturnPreviousResults;\r\n\r\n outCollisionCheckParams.myPositionOffsetLocal.vec3_copy(characterColliderSetup.myAdditionalParams.myPositionOffsetLocal);\r\n outCollisionCheckParams.myRotationOffsetLocalQuat.quat_copy(characterColliderSetup.myAdditionalParams.myRotationOffsetLocalQuat);\r\n\r\n outCollisionCheckParams.myDebugEnabled = characterColliderSetup.myDebugParams.myVisualDebugEnabled;\r\n\r\n outCollisionCheckParams.myDebugHorizontalMovementEnabled = characterColliderSetup.myDebugParams.myVisualDebugHorizontalMovementCheckEnabled;\r\n outCollisionCheckParams.myDebugHorizontalPositionEnabled = characterColliderSetup.myDebugParams.myVisualDebugHorizontalPositionCheckEnabled;\r\n outCollisionCheckParams.myDebugVerticalMovementEnabled = characterColliderSetup.myDebugParams.myVisualDebugVerticalMovementCheckEnabled;\r\n outCollisionCheckParams.myDebugVerticalPositionEnabled = characterColliderSetup.myDebugParams.myVisualDebugVerticalPositionCheckEnabled;\r\n outCollisionCheckParams.myDebugSlidingEnabled = characterColliderSetup.myDebugParams.myVisualDebugSlideEnabled;\r\n\r\n outCollisionCheckParams.myDebugGroundInfoEnabled = characterColliderSetup.myDebugParams.myVisualDebugGroundInfoEnabled;\r\n outCollisionCheckParams.myDebugCeilingInfoEnabled = characterColliderSetup.myDebugParams.myVisualDebugGroundInfoEnabled;\r\n outCollisionCheckParams.myDebugRuntimeParamsEnabled = characterColliderSetup.myDebugParams.myVisualDebugResultsEnabled;\r\n outCollisionCheckParams.myDebugMovementEnabled = characterColliderSetup.myDebugParams.myVisualDebugMovementEnabled;\r\n\r\n return outCollisionCheckParams;\r\n };\r\n}();\r\n\r\nexport let CollisionCheckBridge = {\r\n getCollisionCheck,\r\n setCollisionCheck,\r\n isCollisionCheckDisabled,\r\n setCollisionCheckDisabled,\r\n initBridge,\r\n checkMovement,\r\n checkTeleportToTransform,\r\n checkTransform,\r\n updateGroundInfo,\r\n updateCeilingInfo,\r\n convertCharacterCollisionResultsToCollisionRuntimeParams,\r\n convertCollisionRuntimeParamsToCharacterCollisionResults,\r\n convertCharacterColliderSetupToCollisionCheckParams\r\n};", "import { quat2_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { CharacterCollisionResults } from \"./character_collision_results.js\";\r\nimport { CollisionCheckBridge } from \"./collision_check_bridge.js\";\r\n\r\nexport class CharacterCollisionSystem {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myLastCheckRaycastsPerformed = 0;\r\n this._myCurrentFrameRaycastsPerformed = 0;\r\n this._myMaxFrameRaycastsPerformed = 0;\r\n\r\n this.myEngine = engine;\r\n\r\n CollisionCheckBridge.initBridge(this.myEngine);\r\n }\r\n\r\n update(dt) {\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n this._myCurrentFrameRaycastsPerformed = 0;\r\n CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts = 0;\r\n }\r\n\r\n checkMovement(movement, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.checkMovement(movement, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n checkTeleportToPosition(teleportPosition, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n checkTransform(checkTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.checkTransform(checkTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n updateSurfaceInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n let currentFramePerformedRaycasts = this._myCurrentFrameRaycastsPerformed;\r\n\r\n this.updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults);\r\n this.updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - currentFramePerformedRaycasts;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.updateGroundInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n\r\n updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults = new CharacterCollisionResults()) {\r\n CollisionCheckBridge.updateCeilingInfo(currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults, this.myEngine);\r\n\r\n this._myLastCheckRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts - this._myCurrentFrameRaycastsPerformed;\r\n this._myCurrentFrameRaycastsPerformed = CollisionCheckBridge.getCollisionCheck(this.myEngine)._myTotalRaycasts;\r\n this._myMaxFrameRaycastsPerformed = Math.max(this._myCurrentFrameRaycastsPerformed, this._myMaxFrameRaycastsPerformed);\r\n outCharacterCollisionResults.myDebugResults._myRaycastsPerformed = this._myLastCheckRaycastsPerformed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCharacterCollisionSystem.prototype.checkTeleportToPosition = function () {\r\n let teleportTransformQuat = quat2_create();\r\n return function checkTeleportToPosition(teleportPosition, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults) {\r\n teleportTransformQuat.quat2_copy(currentTransformQuat);\r\n teleportTransformQuat.quat2_setPosition(teleportPosition);\r\n this.checkTeleportToTransform(teleportTransformQuat, currentTransformQuat, characterColliderSetup, prevCharacterCollisionResults, outCharacterCollisionResults);\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ClassicGamepadCore } from \"../../gamepad/gamepad_cores/classic_gamepad_core.js\";\r\nimport { KeyboardGamepadCore } from \"../../gamepad/gamepad_cores/keyboard_gamepad_core.js\";\r\nimport { XRGamepadCore } from \"../../gamepad/gamepad_cores/xr_gamepad_core.js\";\r\nimport { InputManager } from \"../input_manager.js\";\r\n\r\nexport class InputManagerComponent extends Component {\r\n static TypeName = \"pp-input-manager\";\r\n static Properties = {\r\n _myPoseForwardFixed: Property.bool(true),\r\n _myPreventMouseContextMenu: Property.bool(true),\r\n _myPreventMouseMiddleButtonScroll: Property.bool(true),\r\n _myEnableTrackedHandPoses: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myInputManager = null;\r\n this._myPoseForwardFixedGlobal = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasInputManager(this.engine)) {\r\n this._myInputManager = new InputManager(this.engine);\r\n this._myInputManager.setTrackedHandPosesEnabled(this._myEnableTrackedHandPoses);\r\n\r\n Globals.setInputManager(this._myInputManager, this.engine);\r\n }\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasPoseForwardFixed(this.engine)) {\r\n this._myPoseForwardFixedGlobal = this._myPoseForwardFixed;\r\n\r\n Globals.setPoseForwardFixed(this._myPoseForwardFixedGlobal, this.engine);\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myInputManager != null) {\r\n this._myInputManager.start();\r\n\r\n this._setupMousePrevent();\r\n\r\n this._addGamepadCores();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myInputManager != null) {\r\n this._myInputManager.update(dt);\r\n }\r\n }\r\n\r\n _setupMousePrevent() {\r\n if (this._myPreventMouseContextMenu) {\r\n this._myInputManager.getMouse().setContextMenuActive(false);\r\n }\r\n\r\n if (this._myPreventMouseMiddleButtonScroll) {\r\n this._myInputManager.getMouse().setMiddleButtonScrollActive(false);\r\n }\r\n }\r\n\r\n _addGamepadCores() {\r\n let leftHandPose = this._myInputManager.getLeftHandPose();\r\n let rightHandPose = this._myInputManager.getRightHandPose();\r\n\r\n let leftXRGamepadCore = new XRGamepadCore(leftHandPose);\r\n let rightXRGamepadCore = new XRGamepadCore(rightHandPose);\r\n\r\n this._myInputManager.getGamepadsManager().getLeftGamepad().addGamepadCore(\"pp_left_xr_gamepad\", leftXRGamepadCore);\r\n this._myInputManager.getGamepadsManager().getRightGamepad().addGamepadCore(\"pp_right_xr_gamepad\", rightXRGamepadCore);\r\n\r\n let leftKeyboardGamepadCore = new KeyboardGamepadCore(leftHandPose);\r\n let rightKeyboardGamepadCore = new KeyboardGamepadCore(rightHandPose);\r\n\r\n this._myInputManager.getGamepadsManager().getLeftGamepad().addGamepadCore(\"pp_left_keyboard_gamepad\", leftKeyboardGamepadCore);\r\n this._myInputManager.getGamepadsManager().getRightGamepad().addGamepadCore(\"pp_right_keyboard_gamepad\", rightKeyboardGamepadCore);\r\n\r\n let leftClassicGamepadCore = new ClassicGamepadCore(null, leftHandPose);\r\n let rightClassicGamepadCore = new ClassicGamepadCore(null, rightHandPose);\r\n\r\n this._myInputManager.getGamepadsManager().getLeftGamepad().addGamepadCore(\"pp_left_classic_gamepad\", leftClassicGamepadCore);\r\n this._myInputManager.getGamepadsManager().getRightGamepad().addGamepadCore(\"pp_right_classic_gamepad\", rightClassicGamepadCore);\r\n }\r\n\r\n onDestroy() {\r\n if (this._myInputManager != null && Globals.getInputManager(this.engine) == this._myInputManager) {\r\n Globals.removeInputManager(this.engine);\r\n\r\n this._myInputManager.destroy();\r\n }\r\n\r\n if (this._myPoseForwardFixedGlobal != null && Globals.isPoseForwardFixed(this.engine) == this._myPoseForwardFixedGlobal) {\r\n Globals.removePoseForwardFixed(this.engine);\r\n }\r\n }\r\n}", "import { vec2_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport let GamepadButtonID = {\r\n SELECT: 0, // Trigger\r\n SQUEEZE: 1, // Grip\r\n TOUCHPAD: 2,\r\n THUMBSTICK: 3,\r\n BOTTOM_BUTTON: 4, // A or X button on oculus quest gamepad\r\n TOP_BUTTON: 5, // B or Y button on oculus quest gamepad, reverts to TOUCHPAD button for gamepads that does not support TOP_BUTTON\r\n THUMB_REST: 6\r\n};\r\n\r\nexport let GamepadButtonEvent = {\r\n PRESS_START: 0,\r\n PRESS_END: 1,\r\n PRESSED: 2, // Every frame that it is pressed\r\n NOT_PRESSED: 3, // Every frame that it is not pressed\r\n TOUCH_START: 4,\r\n TOUCH_END: 5,\r\n TOUCHED: 6, // Every frame that it is touched\r\n NOT_TOUCHED: 7, // Every frame that it is not touched\r\n VALUE_CHANGED: 8,\r\n ALWAYS: 9 // Every frame\r\n};\r\n\r\nexport let GamepadAxesID = {\r\n THUMBSTICK: 0\r\n};\r\n\r\nexport let GamepadAxesEvent = {\r\n X_CHANGED: 0,\r\n Y_CHANGED: 1,\r\n AXES_CHANGED: 2,\r\n ALWAYS: 3\r\n};\r\n\r\nexport class GamepadButtonInfo {\r\n\r\n constructor(id, handedness) {\r\n this.myID = id;\r\n this.myHandedness = handedness;\r\n\r\n this.myPressed = false;\r\n this.myPrevIsPressed = false;\r\n\r\n this.myTouched = false;\r\n this.myPrevIsTouched = false;\r\n\r\n this.myValue = 0.0;\r\n this.myPrevValue = 0.0;\r\n\r\n this.myTimePressed = 0;\r\n this.myPrevTimePressed = 0;\r\n\r\n this.myTimeNotPressed = 0;\r\n this.myPrevTimeNotPressed = 0;\r\n\r\n this.myTimeTouched = 0;\r\n this.myPrevTimeTouched = 0;\r\n\r\n this.myTimeNotTouched = 0;\r\n this.myPrevTimeNotTouched = 0;\r\n\r\n this.myMultiplePressStartCount = 0;\r\n this.myPrevMultiplePressStartCount = 0;\r\n this.myMultiplePressEndCount = 0;\r\n this.myPrevMultiplePressEndCount = 0;\r\n\r\n this.myMultipleTouchStartCount = 0;\r\n this.myPrevMultipleTouchStartCount = 0;\r\n this.myMultipleTouchEndCount = 0;\r\n this.myPrevMultipleTouchEndCount = 0;\r\n }\r\n\r\n getID() {\r\n return this.myID;\r\n }\r\n\r\n getHandedness() {\r\n return this.myHandedness;\r\n }\r\n\r\n getValue() {\r\n return this.myValue;\r\n }\r\n\r\n isPressed() {\r\n return this.myPressed;\r\n }\r\n\r\n isTouched() {\r\n return this.myTouched;\r\n }\r\n\r\n isPressStart(multiplePressCount = null) {\r\n return (this.myPressed && !this.myPrevIsPressed) && (multiplePressCount == null || this.myMultiplePressStartCount == multiplePressCount);\r\n }\r\n\r\n isPressEnd(multiplePressCount = null) {\r\n return (!this.myPressed && this.myPrevIsPressed) && (multiplePressCount == null || this.myMultiplePressEndCount == multiplePressCount);\r\n }\r\n\r\n isTouchStart(multipleTouchCount = null) {\r\n return (this.myTouched && !this.myPrevIsTouched) && (multipleTouchCount == null || this.myMultipleTouchStartCount == multipleTouchCount);\r\n }\r\n\r\n isTouchEnd(multipleTouchCount = null) {\r\n return (!this.myTouched && this.myPrevIsTouched) && (multipleTouchCount == null || this.myMultipleTouchEndCount == multipleTouchCount);\r\n }\r\n\r\n clone() {\r\n let value = new GamepadButtonInfo(this.myID, this.myHandedness);\r\n value.myPressed = this.myPressed;\r\n value.myPrevIsPressed = this.myPrevIsPressed;\r\n value.myTouched = this.myTouched;\r\n value.myPrevIsTouched = this.myPrevIsTouched;\r\n value.myValue = this.myValue;\r\n value.myPrevValue = this.myPrevValue;\r\n\r\n value.myTimePressed = this.myTimePressed;\r\n value.myPrevTimePressed = this.myPrevTimePressed;\r\n value.myTimeNotPressed = this.myTimeNotPressed;\r\n value.myPrevTimeNotPressed = this.myPrevTimeNotPressed;\r\n\r\n value.myTimeTouched = this.myTimeTouched;\r\n value.myPrevTimeTouched = this.myPrevTimeTouched;\r\n value.myTimeNotTouched = this.myTimeNotTouched;\r\n value.myPrevTimeNotTouched = this.myPrevTimeNotTouched;\r\n\r\n value.myMultiplePressStartCount = this.myMultiplePressStartCount;\r\n value.myPrevMultiplePressStartCount = this.myPrevMultiplePressStartCount;\r\n value.myMultiplePressEndCount = this.myMultiplePressEndCount;\r\n value.myPrevMultiplePressEndCount = this.myPrevMultiplePressEndCount;\r\n\r\n value.myMultipleTouchStartCount = this.myMultipleTouchStartCount;\r\n value.myPrevMultipleTouchStartCount = this.myPrevMultipleTouchStartCount;\r\n value.myMultipleTouchEndCount = this.myMultipleTouchEndCount;\r\n value.myPrevMultipleTouchEndCount = this.myPrevMultipleTouchEndCount;\r\n\r\n return value;\r\n }\r\n}\r\n\r\nexport class GamepadAxesInfo {\r\n\r\n constructor(id, handedness) {\r\n this.myID = id;\r\n\r\n this.myHandedness = handedness;\r\n\r\n this.myAxes = vec2_create(0, 0); // this.myAxes[0] is X, this.myAxes[1] is Y\r\n this.myPrevAxes = vec2_create(0, 0);\r\n }\r\n\r\n getID() {\r\n return this.myID;\r\n }\r\n\r\n getAxes() {\r\n return this.myAxes;\r\n }\r\n\r\n getHandedness() {\r\n return this.myHandedness;\r\n }\r\n\r\n clone() {\r\n let value = new GamepadAxesInfo(this.myID, this.myHandedness);\r\n value.myAxes.vec2_copy(this.myAxes);\r\n value.myPrevAxes.vec2_copy(this.myPrevAxes);\r\n\r\n return value;\r\n }\r\n}\r\n\r\nexport class GamepadPulseInfo {\r\n\r\n constructor() {\r\n this.myIntensity = 0.0;\r\n this.myDuration = 0.0;\r\n\r\n this.myDevicePulsing = false; // true if the gamepad actually sent a request to pulse to the device\r\n }\r\n\r\n clone() {\r\n let value = new GamepadPulseInfo();\r\n value.myIntensity = this.myIntensity;\r\n value.myDuration = this.myDuration;\r\n value.myDevicePulsing = this.myDevicePulsing;\r\n\r\n return value;\r\n }\r\n}", "import { vec2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class GamepadCore {\r\n\r\n constructor(handPose) {\r\n this._myHandPose = handPose;\r\n\r\n this._myManagingHandPose = false;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getHandedness() {\r\n return this.getHandPose().getHandedness();\r\n }\r\n\r\n getHandPose() {\r\n return this._myHandPose;\r\n }\r\n\r\n getEngine() {\r\n return this.getHandPose().getEngine();\r\n }\r\n\r\n isGamepadCoreActive() {\r\n return true;\r\n }\r\n\r\n setManageHandPose(manageHandPose) {\r\n this._myManagingHandPose = manageHandPose;\r\n }\r\n\r\n isManagingHandPose() {\r\n return this._myManagingHandPose;\r\n }\r\n\r\n start() {\r\n if (this.getHandPose() && this.isManagingHandPose()) {\r\n this.getHandPose().start();\r\n }\r\n\r\n this._startHook();\r\n }\r\n\r\n preUpdate(dt) {\r\n if (this.getHandPose() && this.isManagingHandPose()) {\r\n this.getHandPose().update(dt);\r\n }\r\n\r\n this._preUpdateHook(dt);\r\n }\r\n\r\n postUpdate(dt) {\r\n this._postUpdateHook(dt);\r\n }\r\n\r\n getButtonData(buttonID) {\r\n let buttonData = this._createButtonData();\r\n return buttonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n let axesData = this._createAxesData();\r\n return axesData;\r\n }\r\n\r\n getHapticActuators() {\r\n let hapticActuators = [];\r\n return hapticActuators;\r\n }\r\n\r\n // Hooks\r\n\r\n _startHook() {\r\n\r\n }\r\n\r\n _preUpdateHook(dt) {\r\n\r\n }\r\n\r\n _postUpdateHook(dt) {\r\n\r\n }\r\n\r\n _destroyHook() {\r\n\r\n }\r\n\r\n // Hooks end\r\n\r\n _createButtonData() {\r\n return { myPressed: false, myTouched: false, myValue: 0 };\r\n }\r\n\r\n _createAxesData() {\r\n return vec2_create(0, 0);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._destroyHook();\r\n\r\n if (this.isManagingHandPose()) {\r\n this.getHandPose().destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class ClassicGamepadCore extends GamepadCore {\r\n\r\n constructor(gamepadIndex, handPose) {\r\n super(handPose);\r\n\r\n this._myGamepadIndex = gamepadIndex; // null means any active gamepad\r\n\r\n this._myCurrentGamepads = navigator.getGamepads();\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n _preUpdateHook(dt) {\r\n this._myCurrentGamepads = navigator.getGamepads();\r\n }\r\n\r\n isGamepadCoreActive() {\r\n let classicGamepad = this._getClassicGamepad();\r\n return classicGamepad != null && (classicGamepad.connected == null || classicGamepad.connected);\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n let classicGamepad = this._getClassicGamepad();\r\n if (classicGamepad != null && this.isGamepadCoreActive()) {\r\n let button = null;\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n button = classicGamepad.buttons[4];\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n button = classicGamepad.buttons[6];\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n button = null;\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n button = classicGamepad.buttons[10];\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n button = classicGamepad.buttons[13];\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n button = classicGamepad.buttons[12];\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n button = null;\r\n break;\r\n }\r\n } else {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n button = classicGamepad.buttons[5];\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n button = classicGamepad.buttons[7];\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n button = null;\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n button = classicGamepad.buttons[11];\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n button = classicGamepad.buttons[0];\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n button = classicGamepad.buttons[3];\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n button = null;\r\n break;\r\n }\r\n }\r\n\r\n if (button != null) {\r\n this._myButtonData.myPressed = button.pressed;\r\n this._myButtonData.myTouched = button.touched;\r\n this._myButtonData.myValue = button.value;\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n let classicGamepad = this._getClassicGamepad();\r\n if (classicGamepad != null && this.isGamepadCoreActive()) {\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n this._myAxesData[0] = classicGamepad.axes[0];\r\n this._myAxesData[1] = classicGamepad.axes[1];\r\n } else {\r\n this._myAxesData[0] = classicGamepad.axes[2];\r\n this._myAxesData[1] = classicGamepad.axes[3];\r\n }\r\n\r\n // Y axis is recorded negative when thumbstick is pressed forward for weird reasons\r\n this._myAxesData[1] = -this._myAxesData[1];\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n this._myHapticActuators.pp_clear();\r\n\r\n let classicGamepad = this._getClassicGamepad();\r\n if (classicGamepad != null && this.isGamepadCoreActive()) {\r\n if (classicGamepad.hapticActuators != null) {\r\n for (let i = 0; i < classicGamepad.hapticActuators.length; i++) {\r\n this._myHapticActuators.push(classicGamepad.hapticActuators[i]);\r\n }\r\n }\r\n\r\n if (classicGamepad.vibrationActuator != null) {\r\n this._myHapticActuators.push(classicGamepad.vibrationActuator);\r\n }\r\n }\r\n\r\n return this._myHapticActuators;\r\n }\r\n\r\n _getClassicGamepad() {\r\n let classicGamepad = null;\r\n\r\n if (this._myGamepadIndex != null) {\r\n if (this._myGamepadIndex < this._myCurrentGamepads.length) {\r\n classicGamepad = this._myCurrentGamepads[this._myGamepadIndex];\r\n }\r\n } else {\r\n for (let i = 0; i < this._myCurrentGamepads.length; i++) {\r\n let gamepad = this._myCurrentGamepads[i];\r\n if (gamepad != null && (gamepad.connected == null || gamepad.connected)) {\r\n classicGamepad = gamepad;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return classicGamepad;\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nexport let KeyID = {\r\n _0: \"0\",\r\n _1: \"1\",\r\n _2: \"2\",\r\n _3: \"3\",\r\n _4: \"4\",\r\n _5: \"5\",\r\n _6: \"6\",\r\n _7: \"7\",\r\n _8: \"8\",\r\n _9: \"9\",\r\n\r\n KeyA: \"KeyA\",\r\n KeyB: \"KeyB\",\r\n KeyC: \"KeyC\",\r\n KeyD: \"KeyD\",\r\n KeyE: \"KeyE\",\r\n KeyF: \"KeyF\",\r\n KeyG: \"KeyG\",\r\n KeyH: \"KeyH\",\r\n KeyI: \"KeyI\",\r\n KeyJ: \"KeyJ\",\r\n KeyK: \"KeyK\",\r\n KeyL: \"KeyL\",\r\n KeyM: \"KeyM\",\r\n KeyN: \"KeyN\",\r\n KeyO: \"KeyO\",\r\n KeyP: \"KeyP\",\r\n KeyQ: \"KeyQ\",\r\n KeyR: \"KeyR\",\r\n KeyS: \"KeyS\",\r\n KeyT: \"KeyT\",\r\n KeyU: \"KeyU\",\r\n KeyV: \"KeyV\",\r\n KeyW: \"KeyW\",\r\n KeyX: \"KeyX\",\r\n KeyY: \"KeyY\",\r\n KeyZ: \"KeyZ\",\r\n\r\n A: \"A\",\r\n B: \"B\",\r\n C: \"C\",\r\n D: \"D\",\r\n E: \"E\",\r\n F: \"F\",\r\n G: \"G\",\r\n H: \"H\",\r\n I: \"I\",\r\n J: \"J\",\r\n K: \"K\",\r\n L: \"L\",\r\n M: \"M\",\r\n N: \"N\",\r\n O: \"O\",\r\n P: \"P\",\r\n Q: \"Q\",\r\n R: \"R\",\r\n S: \"S\",\r\n T: \"T\",\r\n U: \"U\",\r\n V: \"V\",\r\n W: \"W\",\r\n X: \"X\",\r\n Y: \"Y\",\r\n Z: \"Z\",\r\n\r\n a: \"a\",\r\n b: \"b\",\r\n c: \"c\",\r\n d: \"d\",\r\n e: \"e\",\r\n f: \"f\",\r\n g: \"g\",\r\n h: \"h\",\r\n i: \"i\",\r\n j: \"j\",\r\n k: \"k\",\r\n l: \"l\",\r\n m: \"m\",\r\n n: \"n\",\r\n o: \"o\",\r\n p: \"p\",\r\n q: \"q\",\r\n r: \"r\",\r\n s: \"s\",\r\n t: \"t\",\r\n u: \"u\",\r\n v: \"v\",\r\n w: \"w\",\r\n x: \"x\",\r\n y: \"y\",\r\n z: \"z\",\r\n\r\n UP: \"ArrowUp\",\r\n DOWN: \"ArrowDown\",\r\n LEFT: \"ArrowLeft\",\r\n RIGHT: \"ArrowRight\",\r\n\r\n SPACE: \" \",\r\n ENTER: \"Enter\",\r\n BACKSPACE: \"Backspace\",\r\n ESC: \"Escape\",\r\n\r\n SHIFT_LEFT: \"ShiftLeft\",\r\n SHIFT_RIGHT: \"ShiftRight\",\r\n CONTROL_LEFT: \"ControlLeft\",\r\n CONTROL_RIGHT: \"ControlRight\",\r\n ALT_LEFT: \"AltLeft\",\r\n ALT_RIGHT: \"AltRight\"\r\n};\r\n\r\nexport class Keyboard {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myKeyInfos = {};\r\n this._myKeyInfosIDs = [];\r\n for (let key in KeyID) {\r\n this.addKey(KeyID[key]);\r\n }\r\n\r\n this._myOnKeyDownEventListener = null;\r\n this._myOnKeyUpEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isKeyPressed(keyID) {\r\n let pressed = false;\r\n\r\n if (this._myKeyInfos[keyID] != null) {\r\n pressed = this._myKeyInfos[keyID].myPressed;\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n isKeyPressStart(keyID) {\r\n let pressStart = false;\r\n\r\n if (this._myKeyInfos[keyID] != null) {\r\n pressStart = this._myKeyInfos[keyID].myPressStart;\r\n }\r\n\r\n return pressStart;\r\n }\r\n\r\n isKeyPressEnd(keyID) {\r\n let pressEnd = false;\r\n\r\n if (this._myKeyInfos[keyID] != null) {\r\n pressEnd = this._myKeyInfos[keyID].myPressEnd;\r\n }\r\n\r\n return pressEnd;\r\n }\r\n\r\n addKey(keyID) {\r\n this._myKeyInfos[keyID] = this._createKeyInfo();\r\n this._myKeyInfosIDs.push(keyID);\r\n }\r\n\r\n start() {\r\n this._myOnKeyDownEventListener = this._keyDown.bind(this);\r\n window.addEventListener(\"keydown\", this._myOnKeyDownEventListener);\r\n this._myOnKeyUpEventListener = this._keyUp.bind(this);\r\n window.addEventListener(\"keyup\", this._myOnKeyUpEventListener);\r\n }\r\n\r\n update(dt) {\r\n if (!document.hasFocus()) {\r\n\r\n for (let i = 0; i < this._myKeyInfosIDs.length; i++) {\r\n let id = this._myKeyInfosIDs[i];\r\n let keyInfo = this._myKeyInfos[id];\r\n if (keyInfo.myPressed) {\r\n keyInfo.myPressed = false;\r\n keyInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._myKeyInfosIDs.length; i++) {\r\n let id = this._myKeyInfosIDs[i];\r\n let keyInfo = this._myKeyInfos[id];\r\n keyInfo.myPressStart = keyInfo.myPressStartToProcess;\r\n keyInfo.myPressEnd = keyInfo.myPressEndToProcess;\r\n keyInfo.myPressStartToProcess = false;\r\n keyInfo.myPressEndToProcess = false;\r\n }\r\n }\r\n\r\n _keyDown(event) {\r\n this._keyPressedChanged(event.key, true);\r\n if (event.key != event.code) {\r\n this._keyPressedChanged(event.code, true);\r\n }\r\n }\r\n\r\n _keyUp(event) {\r\n this._keyPressedChanged(event.key, false);\r\n if (event.key != event.code) {\r\n this._keyPressedChanged(event.code, false);\r\n }\r\n }\r\n\r\n _keyPressedChanged(keyID, pressed) {\r\n if (this._myKeyInfos[keyID] != null) {\r\n let keyInfo = this._myKeyInfos[keyID];\r\n\r\n if (pressed) {\r\n keyInfo.myPressed = true;\r\n keyInfo.myPressStartToProcess = true;\r\n } else {\r\n keyInfo.myPressed = false;\r\n keyInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n }\r\n\r\n _createKeyInfo() {\r\n return { myPressed: false, myPressStart: false, myPressStartToProcess: false, myPressEnd: false, myPressEndToProcess: false, };\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n window.removeEventListener(\"keydown\", this._myOnKeyDownEventListener);\r\n window.removeEventListener(\"keyup\", this._myOnKeyUpEventListener);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { KeyID } from \"../../cauldron/keyboard.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class KeyboardGamepadCore extends GamepadCore {\r\n\r\n constructor(handPose) {\r\n super(handPose);\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n isGamepadCoreActive() {\r\n return true;\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n let keyboard = Globals.getKeyboard(this.getEngine());\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyE);\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyQ);\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyX);\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyR);\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyC);\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyF);\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyV);\r\n break;\r\n }\r\n } else {\r\n switch (buttonID) {\r\n case GamepadButtonID.SELECT:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyU);\r\n break;\r\n case GamepadButtonID.SQUEEZE:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyO);\r\n break;\r\n case GamepadButtonID.TOUCHPAD:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyM);\r\n break;\r\n case GamepadButtonID.THUMBSTICK:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyY);\r\n break;\r\n case GamepadButtonID.BOTTOM_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyN);\r\n break;\r\n case GamepadButtonID.TOP_BUTTON:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyH);\r\n break;\r\n case GamepadButtonID.THUMB_REST:\r\n this._myButtonData.myPressed = keyboard.isKeyPressed(KeyID.KeyB);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (this._myButtonData.myPressed) {\r\n this._myButtonData.myTouched = true;\r\n this._myButtonData.myValue = 1;\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n let keyboard = Globals.getKeyboard(this.getEngine());\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this.getHandedness() == Handedness.LEFT) {\r\n if (keyboard.isKeyPressed(KeyID.KeyW)) this._myAxesData[1] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyS)) this._myAxesData[1] += -1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyD)) this._myAxesData[0] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyA)) this._myAxesData[0] += -1.0;\r\n } else {\r\n if (keyboard.isKeyPressed(KeyID.KeyI) || keyboard.isKeyPressed(KeyID.UP)) this._myAxesData[1] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyK) || keyboard.isKeyPressed(KeyID.DOWN)) this._myAxesData[1] += -1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyL) || keyboard.isKeyPressed(KeyID.RIGHT)) this._myAxesData[0] += 1.0;\r\n if (keyboard.isKeyPressed(KeyID.KeyJ) || keyboard.isKeyPressed(KeyID.LEFT)) this._myAxesData[0] += -1.0;\r\n }\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n return this._myHapticActuators;\r\n }\r\n}", "// xr-standard mapping is assumed\r\n\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class XRGamepadCore extends GamepadCore {\r\n\r\n constructor(handPose) {\r\n super(handPose);\r\n\r\n this._mySelectPressed = false;\r\n this._mySqueezePressed = false;\r\n\r\n this._myXRSessionActive = false;\r\n this._myInputSource = null;\r\n this._myGamepad = null;\r\n\r\n this._mySelectStartEventListener = null;\r\n this._mySelectEndEventListener = null;\r\n this._mySqueezeStartEventListener = null;\r\n this._mySqueezeEndEventListener = null;\r\n\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n isGamepadCoreActive() {\r\n // connected == null is to fix webxr emulator that leaves that field undefined\r\n return this._myXRSessionActive && this._myGamepad != null && (this._myGamepad.connected == null || this._myGamepad.connected);\r\n }\r\n\r\n _startHook() {\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this.getEngine());\r\n }\r\n\r\n _preUpdateHook(dt) {\r\n let prevInputSource = this._myInputSource;\r\n this._myInputSource = this.getHandPose().getInputSource();\r\n\r\n if (prevInputSource != this._myInputSource) {\r\n this._mySelectPressed = false;\r\n this._mySqueezePressed = false;\r\n }\r\n\r\n if (this._myInputSource != null) {\r\n this._myGamepad = this._myInputSource.gamepad;\r\n } else {\r\n this._myGamepad = null;\r\n }\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (buttonID < this._myGamepad.buttons.length) {\r\n let gamepadButton = this._myGamepad.buttons[buttonID];\r\n\r\n if (buttonID != GamepadButtonID.SELECT && buttonID != GamepadButtonID.SQUEEZE) {\r\n this._myButtonData.myPressed = gamepadButton.pressed;\r\n } else {\r\n this._myButtonData.myPressed = this._getSpecialButtonPressed(buttonID);\r\n }\r\n\r\n this._myButtonData.myTouched = gamepadButton.touched;\r\n this._myButtonData.myValue = gamepadButton.value;\r\n } else if (buttonID == GamepadButtonID.TOP_BUTTON && this._myGamepad.buttons.length >= 3) {\r\n // This way if you are using a basic touch gamepad, top button will work anyway\r\n\r\n let touchButton = this._myGamepad.buttons[2];\r\n this._myButtonData.myPressed = touchButton.pressed;\r\n this._myButtonData.myTouched = touchButton.touched;\r\n this._myButtonData.myValue = touchButton.value;\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n if (this.isGamepadCoreActive()) {\r\n let internalAxes = this._myGamepad.axes;\r\n if (internalAxes.length == 4) {\r\n // In this case it could be both touch axes or thumbstick axes, that depends on the gamepad\r\n // to support both I simply choose the absolute max value (unused axes will always be 0)\r\n\r\n // X\r\n if (Math.abs(internalAxes[0]) > Math.abs(internalAxes[2])) {\r\n this._myAxesData[0] = internalAxes[0];\r\n } else {\r\n this._myAxesData[0] = internalAxes[2];\r\n }\r\n\r\n // Y\r\n if (Math.abs(internalAxes[1]) > Math.abs(internalAxes[3])) {\r\n this._myAxesData[1] = internalAxes[1];\r\n } else {\r\n this._myAxesData[1] = internalAxes[3];\r\n }\r\n\r\n } else if (internalAxes.length == 2) {\r\n this._myAxesData[0] = internalAxes[0];\r\n this._myAxesData[1] = internalAxes[1];\r\n }\r\n\r\n // Y axis is recorded negative when thumbstick is pressed forward for weird reasons\r\n this._myAxesData[1] = -this._myAxesData[1];\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n this._myHapticActuators.pp_clear();\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this._myGamepad.hapticActuators != null) {\r\n for (let i = 0; i < this._myGamepad.hapticActuators.length; i++) {\r\n this._myHapticActuators.push(this._myGamepad.hapticActuators[i]);\r\n }\r\n }\r\n\r\n if (this._myGamepad.vibrationActuator != null) {\r\n this._myHapticActuators.push(this._myGamepad.vibrationActuator);\r\n }\r\n }\r\n\r\n return this._myHapticActuators;\r\n }\r\n\r\n // This is to be more compatible\r\n _getSpecialButtonPressed(buttonID) {\r\n let pressed = false;\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (buttonID == GamepadButtonID.SELECT) {\r\n pressed = this._mySelectPressed;\r\n } else if (buttonID == GamepadButtonID.SQUEEZE) {\r\n pressed = this._mySqueezePressed;\r\n }\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n _onXRSessionStart(session) {\r\n this._mySelectStartEventListener = this._selectStart.bind(this);\r\n this._mySelectEndEventListener = this._selectEnd.bind(this);\r\n this._mySqueezeStartEventListener = this._squeezeStart.bind(this);\r\n this._mySqueezeEndEventListener = this._squeezeEnd.bind(this);\r\n\r\n session.addEventListener(\"selectstart\", this._mySelectStartEventListener);\r\n session.addEventListener(\"selectend\", this._mySelectEndEventListener);\r\n\r\n session.addEventListener(\"squeezestart\", this._mySqueezeStartEventListener);\r\n session.addEventListener(\"squeezeend\", this._mySqueezeEndEventListener);\r\n\r\n this._myXRSessionActive = true;\r\n }\r\n\r\n _onXRSessionEnd(session) {\r\n this._mySelectStartEventListener = null;\r\n this._mySelectEndEventListener = null;\r\n this._mySqueezeStartEventListener = null;\r\n this._mySqueezeEndEventListener = null;\r\n\r\n this._mySelectPressed = false;\r\n this._mySqueezePressed = false;\r\n\r\n this._myXRSessionActive = false;\r\n }\r\n\r\n // Select and Squeeze are managed this way to be more compatible\r\n _selectStart(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySelectPressed = true;\r\n }\r\n }\r\n\r\n _selectEnd(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySelectPressed = false;\r\n }\r\n }\r\n\r\n _squeezeStart(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySqueezePressed = true;\r\n }\r\n }\r\n\r\n _squeezeEnd(event) {\r\n if (this._myInputSource != null && this._myInputSource == event.inputSource) {\r\n this._mySqueezePressed = false;\r\n }\r\n }\r\n\r\n _destroyHook() {\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"selectstart\", this._mySelectStartEventListener);\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"selectend\", this._mySelectEndEventListener);\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"squeezestart\", this._mySqueezeStartEventListener);\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"squeezeend\", this._mySqueezeEndEventListener);\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this.getEngine());\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { GamepadsManager } from \"../gamepad/cauldron/gamepads_manager.js\";\r\nimport { BasePoseParams } from \"../pose/base_pose.js\";\r\nimport { HandPose, HandPoseParams } from \"../pose/hand_pose.js\";\r\nimport { HeadPose } from \"../pose/head_pose.js\";\r\nimport { TrackedHandPose, TrackedHandPoseParams } from \"../pose/tracked_hand_pose.js\";\r\nimport { Handedness } from \"./input_types.js\";\r\nimport { Keyboard } from \"./keyboard.js\";\r\nimport { Mouse } from \"./mouse.js\";\r\n\r\nexport class InputManager {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myMouse = new Mouse(this._myEngine);\r\n this._myKeyboard = new Keyboard(this._myEngine);\r\n\r\n this._myHeadPose = new HeadPose(new BasePoseParams(this._myEngine));\r\n this._myHeadPose.setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHeadPose.setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n\r\n this._myHandPoses = [];\r\n this._myHandPoses[Handedness.LEFT] = new HandPose(Handedness.LEFT, new HandPoseParams(this._myEngine));\r\n this._myHandPoses[Handedness.RIGHT] = new HandPose(Handedness.RIGHT, new HandPoseParams(this._myEngine));\r\n this._myHandPoses[Handedness.LEFT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[Handedness.RIGHT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[Handedness.LEFT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHandPoses[Handedness.RIGHT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n\r\n this._myTrackedHandPoses = [];\r\n this._myTrackedHandPoses[Handedness.LEFT] = new TrackedHandPose(Handedness.LEFT, new TrackedHandPoseParams(true, this._myEngine));\r\n this._myTrackedHandPoses[Handedness.RIGHT] = new TrackedHandPose(Handedness.RIGHT, new TrackedHandPoseParams(true, this._myEngine));\r\n this._myTrackedHandPoses[Handedness.LEFT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[Handedness.RIGHT].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[Handedness.LEFT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myTrackedHandPoses[Handedness.RIGHT].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n\r\n this._myGamepadsManager = new GamepadsManager(this._myEngine);\r\n\r\n this._myStarted = false;\r\n\r\n this._myTrackedHandPosesEnabled = true;\r\n this._myTrackedHandPosesStarted = false;\r\n\r\n this._myPreUpdateEmitter = new Emitter(); // Signature: callback(dt, inputManager)\r\n this._myPostUpdateEmitter = new Emitter(); // Signature: callback(dt, inputManager)\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._myMouse.start();\r\n this._myKeyboard.start();\r\n\r\n this._myHeadPose.setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHeadPose.setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHeadPose.start();\r\n\r\n for (let key in this._myHandPoses) {\r\n this._myHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHandPoses[key].start();\r\n }\r\n\r\n if (this._myTrackedHandPosesEnabled) {\r\n this._startTrackedHandPoses();\r\n }\r\n\r\n this._myGamepadsManager.start();\r\n\r\n this._myStarted = true;\r\n }\r\n\r\n update(dt) {\r\n this._myPreUpdateEmitter.notify(dt, this);\r\n\r\n this._myMouse.update(dt);\r\n this._myKeyboard.update(dt);\r\n\r\n this._myHeadPose.setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHeadPose.setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHeadPose.update(dt);\r\n\r\n for (let key in this._myHandPoses) {\r\n this._myHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myHandPoses[key].update(dt);\r\n }\r\n\r\n this._updateTrackedHandPoses();\r\n\r\n this._myGamepadsManager.update(dt);\r\n\r\n this._myPostUpdateEmitter.notify(dt, this);\r\n }\r\n\r\n getMouse() {\r\n return this._myMouse;\r\n }\r\n\r\n getKeyboard() {\r\n return this._myKeyboard;\r\n }\r\n\r\n getGamepadsManager() {\r\n return this._myGamepadsManager;\r\n }\r\n\r\n getHeadPose() {\r\n return this._myHeadPose;\r\n }\r\n\r\n getLeftHandPose() {\r\n return this._myHandPoses[Handedness.LEFT];\r\n }\r\n\r\n getRightHandPose() {\r\n return this._myHandPoses[Handedness.RIGHT];\r\n }\r\n\r\n getHandPose(handedness) {\r\n return this._myHandPoses[handedness];\r\n }\r\n\r\n getHandPoses() {\r\n return this._myHandPoses;\r\n }\r\n\r\n getLeftTrackedHandPose() {\r\n return this._myTrackedHandPoses[Handedness.LEFT];\r\n }\r\n\r\n getRightTrackedHandPose() {\r\n return this._myTrackedHandPoses[Handedness.RIGHT];\r\n }\r\n\r\n getTrackedHandPose(handedness) {\r\n return this._myTrackedHandPoses[handedness];\r\n }\r\n\r\n getTrackedHandPoses() {\r\n return this._myTrackedHandPoses;\r\n }\r\n\r\n areTrackedHandPosesEnabled() {\r\n return this._myTrackedHandPosesEnabled;\r\n }\r\n\r\n setTrackedHandPosesEnabled(enabled) {\r\n this._myTrackedHandPosesEnabled = enabled;\r\n\r\n if (this._myStarted && this._myTrackedHandPosesEnabled) {\r\n this._startTrackedHandPoses();\r\n }\r\n }\r\n\r\n registerPreUpdateCallback(id, callback) {\r\n this._myPreUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPreUpdateCallback(id) {\r\n this._myPreUpdateEmitter.remove(id);\r\n }\r\n\r\n registerPostUpdateCallback(id, callback) {\r\n this._myPostUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPostUpdateCallback(id) {\r\n this._myPostUpdateEmitter.remove(id);\r\n }\r\n\r\n _startTrackedHandPoses() {\r\n if (!this._myTrackedHandPosesStarted) {\r\n for (let key in this._myTrackedHandPoses) {\r\n this._myTrackedHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myTrackedHandPoses[key].start();\r\n }\r\n\r\n this._myTrackedHandPosesStarted = true;\r\n }\r\n }\r\n\r\n _updateTrackedHandPoses(dt) {\r\n if (this._myTrackedHandPosesEnabled && this._myTrackedHandPosesStarted) {\r\n for (let key in this._myTrackedHandPoses) {\r\n this._myTrackedHandPoses[key].setReferenceObject(Globals.getPlayerObjects(this._myEngine).myReferenceSpace);\r\n this._myTrackedHandPoses[key].setForwardFixed(Globals.isPoseForwardFixed(this._myEngine));\r\n this._myTrackedHandPoses[key].update(dt);\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myMouse.destroy();\r\n this._myKeyboard.destroy();\r\n\r\n this._myHeadPose.destroy();\r\n\r\n for (let key in this._myHandPoses) {\r\n this._myHandPoses[key].destroy();\r\n }\r\n\r\n for (let key in this._myTrackedHandPoses) {\r\n this._myTrackedHandPoses[key].destroy();\r\n }\r\n\r\n this._myGamepadsManager.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { vec2_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { GamepadAxesEvent, GamepadAxesID, GamepadAxesInfo, GamepadButtonEvent, GamepadButtonID, GamepadButtonInfo, GamepadPulseInfo } from \"./gamepad_buttons.js\";\r\n\r\nexport class BaseGamepad {\r\n\r\n constructor(handedness) {\r\n this._myHandedness = handedness;\r\n\r\n this._myButtonInfos = {};\r\n this._myButtonInfosIDs = [];\r\n for (let key in GamepadButtonID) {\r\n this._myButtonInfos[GamepadButtonID[key]] = new GamepadButtonInfo(GamepadButtonID[key], this._myHandedness);\r\n this._myButtonInfosIDs.push(GamepadButtonID[key]);\r\n }\r\n\r\n this._myAxesInfos = {};\r\n this._myAxesInfosIDs = [];\r\n for (let key in GamepadAxesID) {\r\n this._myAxesInfos[GamepadAxesID[key]] = new GamepadAxesInfo(GamepadAxesID[key], this._myHandedness);\r\n this._myAxesInfosIDs.push(GamepadAxesID[key]);\r\n }\r\n\r\n this._myButtonEmitters = []; // Signature: listener(ButtonInfo, Gamepad)\r\n for (let key in GamepadButtonID) {\r\n this._myButtonEmitters[GamepadButtonID[key]] = [];\r\n for (let eventKey in GamepadButtonEvent) {\r\n this._myButtonEmitters[GamepadButtonID[key]][GamepadButtonEvent[eventKey]] = new Emitter();\r\n }\r\n }\r\n\r\n this._myAxesEmitters = []; // Signature: listener(AxesInfo, Gamepad)\r\n for (let key in GamepadAxesID) {\r\n this._myAxesEmitters[GamepadAxesID[key]] = [];\r\n for (let eventKey in GamepadAxesEvent) {\r\n this._myAxesEmitters[GamepadAxesID[key]][GamepadAxesEvent[eventKey]] = new Emitter();\r\n }\r\n }\r\n\r\n this._myPulseInfo = new GamepadPulseInfo();\r\n\r\n this._myDestroyed = false;\r\n\r\n // Config\r\n\r\n this._myMultiplePressMaxDelay = 0.4;\r\n this._myMultipleTouchMaxDelay = 0.4;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getButtonInfo(buttonID) {\r\n return this._myButtonInfos[buttonID];\r\n }\r\n\r\n registerButtonEventListener(buttonID, buttonEvent, id, listener) {\r\n this._myButtonEmitters[buttonID][buttonEvent].add(listener, { id: id });\r\n }\r\n\r\n unregisterButtonEventListener(buttonID, buttonEvent, id) {\r\n this._myButtonEmitters[buttonID][buttonEvent].remove(id);\r\n }\r\n\r\n getAxesInfo(axesID) {\r\n return this._myAxesInfos[axesID];\r\n }\r\n\r\n registerAxesEventListener(axesID, axesEvent, id, listener) {\r\n this._myAxesEmitters[axesID][axesEvent].add(listener, { id: id });\r\n }\r\n\r\n unregisterAxesEventListener(axesID, axesEvent, id) {\r\n this._myAxesEmitters[axesID][axesEvent].remove(id);\r\n }\r\n\r\n pulse(intensity, duration = 0) {\r\n this._myPulseInfo.myIntensity = Math.pp_clamp(intensity, 0, 1);\r\n this._myPulseInfo.myDuration = Math.max(duration, 0);\r\n }\r\n\r\n stopPulse() {\r\n this._myPulseInfo.myIntensity = 0;\r\n this._myPulseInfo.myDuration = 0;\r\n }\r\n\r\n isPulsing() {\r\n return this._myPulseInfo.myIntensity > 0 || this._myPulseInfo.myDuration > 0;\r\n }\r\n\r\n getPulseInfo() {\r\n return this._myPulseInfo;\r\n }\r\n\r\n getMultiplePressMaxDelay() {\r\n return this._myMultiplePressMaxDelay;\r\n }\r\n\r\n setMultiplePressMaxDelay(maxDelay) {\r\n this._myMultiplePressMaxDelay = maxDelay;\r\n }\r\n\r\n getMultipleTouchMaxDelay() {\r\n return this._myMultipleTouchMaxDelay;\r\n }\r\n\r\n setMultipleTouchMaxDelay(maxDelay) {\r\n this._myMultipleTouchMaxDelay = maxDelay;\r\n }\r\n\r\n // Hooks\r\n\r\n getHandPose() {\r\n return null;\r\n }\r\n\r\n _startHook() {\r\n\r\n }\r\n\r\n _preUpdate(dt) {\r\n\r\n }\r\n\r\n _postUpdate(dt) {\r\n\r\n }\r\n\r\n _getButtonData(buttonID) {\r\n let buttonData = this._createButtonData();\r\n return buttonData;\r\n }\r\n\r\n _getAxesData(axesID) {\r\n let axesData = this._createAxesData();\r\n return axesData;\r\n }\r\n\r\n _getHapticActuators() {\r\n let hapticActuator = [];\r\n return hapticActuator;\r\n }\r\n\r\n _destroyHook() {\r\n\r\n }\r\n\r\n // Hooks End\r\n\r\n start() {\r\n this._startHook();\r\n }\r\n\r\n update(dt) {\r\n this._preUpdate(dt);\r\n\r\n this._preUpdateButtonInfos();\r\n this._updateButtonInfos();\r\n this._postUpdateButtonInfos(dt);\r\n\r\n this._preUpdateAxesInfos();\r\n this._updateAxesInfos();\r\n this._postUpdateAxesInfos();\r\n\r\n this._updatePulse(dt);\r\n\r\n this._postUpdate(dt);\r\n }\r\n\r\n _preUpdateButtonInfos() {\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let info = this._myButtonInfos[id];\r\n info.myPrevIsPressed = info.myPressed;\r\n info.myPrevIsTouched = info.myTouched;\r\n info.myPrevValue = info.myValue;\r\n }\r\n }\r\n\r\n _updateButtonInfos() {\r\n this._updateSingleButtonInfo(GamepadButtonID.SELECT);\r\n this._updateSingleButtonInfo(GamepadButtonID.SQUEEZE);\r\n this._updateSingleButtonInfo(GamepadButtonID.TOUCHPAD);\r\n this._updateSingleButtonInfo(GamepadButtonID.THUMBSTICK);\r\n this._updateSingleButtonInfo(GamepadButtonID.BOTTOM_BUTTON);\r\n this._updateSingleButtonInfo(GamepadButtonID.TOP_BUTTON);\r\n this._updateSingleButtonInfo(GamepadButtonID.THUMB_REST);\r\n }\r\n\r\n _updateSingleButtonInfo(buttonID) {\r\n let buttonInfo = this._myButtonInfos[buttonID];\r\n let buttonData = this._getButtonData(buttonID);\r\n\r\n buttonInfo.myPressed = buttonData.myPressed;\r\n buttonInfo.myTouched = buttonData.myTouched;\r\n buttonInfo.myValue = buttonData.myValue;\r\n\r\n if (buttonInfo.myPressed) {\r\n buttonInfo.myTouched = true;\r\n\r\n if (buttonInfo.myValue == 0) {\r\n buttonInfo.myValue = 1;\r\n }\r\n }\r\n }\r\n\r\n _postUpdateButtonInfos(dt) {\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let info = this._myButtonInfos[id];\r\n if (info.myPressed) {\r\n info.myTimePressed += dt;\r\n if (!info.myPrevIsPressed) {\r\n info.myMultiplePressStartCount += 1;\r\n\r\n info.myPrevTimeNotPressed = info.myTimeNotPressed;\r\n info.myTimeNotPressed = 0;\r\n }\r\n\r\n if (info.myPrevTimeNotPressed + info.myTimePressed > this._myMultiplePressMaxDelay && info.myMultiplePressEndCount > 0) {\r\n info.myPrevMultiplePressEndCount = info.myMultiplePressEndCount;\r\n info.myMultiplePressEndCount = 0;\r\n }\r\n\r\n if (info.myTimePressed > this._myMultiplePressMaxDelay && info.myMultiplePressStartCount > 0) {\r\n info.myPrevMultiplePressStartCount = info.myMultiplePressStartCount;\r\n info.myMultiplePressStartCount = 0;\r\n }\r\n } else {\r\n info.myTimeNotPressed += dt;\r\n if (info.myPrevIsPressed) {\r\n info.myMultiplePressEndCount += 1;\r\n\r\n info.myPrevTimePressed = info.myTimePressed;\r\n info.myTimePressed = 0;\r\n }\r\n\r\n if (info.myPrevTimePressed + info.myTimeNotPressed > this._myMultiplePressMaxDelay && info.myMultiplePressStartCount > 0) {\r\n info.myPrevMultiplePressStartCount = info.myMultiplePressStartCount;\r\n info.myMultiplePressStartCount = 0;\r\n }\r\n\r\n if (info.myTimeNotPressed > this._myMultiplePressMaxDelay && info.myMultiplePressEndCount > 0) {\r\n info.myPrevMultiplePressEndCount = info.myMultiplePressEndCount;\r\n info.myMultiplePressEndCount = 0;\r\n }\r\n }\r\n\r\n if (info.myTouched) {\r\n info.myTimeTouched += dt;\r\n if (!info.myPrevIsTouched) {\r\n info.myMultipleTouchStartCount += 1;\r\n\r\n info.myPrevTimeNotTouched = info.myTimeNotTouched;\r\n info.myTimeNotTouched = 0;\r\n }\r\n\r\n if (info.myPrevTimeNotTouched + info.myTimeTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchEndCount > 0) {\r\n info.myPrevMultipleTouchEndCount = info.myMultipleTouchEndCount;\r\n info.myMultipleTouchEndCount = 0;\r\n }\r\n\r\n if (info.myTimeTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchStartCount > 0) {\r\n info.myPrevMultipleTouchStartCount = info.myMultipleTouchStartCount;\r\n info.myMultipleTouchStartCount = 0;\r\n }\r\n } else {\r\n info.myTimeNotTouched += dt;\r\n if (info.myPrevIsTouched) {\r\n info.myMultipleTouchEndCount += 1;\r\n\r\n info.myPrevTimeTouched = info.myTimeTouched;\r\n info.myTimeTouched = 0;\r\n }\r\n\r\n if (info.myPrevTimeTouched + info.myTimeNotTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchStartCount > 0) {\r\n info.myPrevMultipleTouchStartCount = info.myMultipleTouchStartCount;\r\n info.myMultipleTouchStartCount = 0;\r\n }\r\n\r\n if (info.myTimeNotTouched > this._myMultipleTouchMaxDelay && info.myMultipleTouchEndCount > 0) {\r\n info.myPrevMultipleTouchEndCount = info.myMultipleTouchEndCount;\r\n info.myMultipleTouchEndCount = 0;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n let buttonEventEmitters = this._myButtonEmitters[id];\r\n\r\n // PRESSED\r\n if (buttonInfo.myPressed && !buttonInfo.myPrevIsPressed) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.PRESS_START];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (!buttonInfo.myPressed && buttonInfo.myPrevIsPressed) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.PRESS_END];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (buttonInfo.myPressed) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.PRESSED];\r\n emitter.notify(buttonInfo, this);\r\n } else {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.NOT_PRESSED];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n // TOUCHED\r\n if (buttonInfo.myTouched && !buttonInfo.myPrevIsTouched) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.TOUCH_START];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (!buttonInfo.myTouched && buttonInfo.myPrevIsTouched) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.TOUCH_END];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n if (buttonInfo.myTouched) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.TOUCHED];\r\n emitter.notify(buttonInfo, this);\r\n } else {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.NOT_TOUCHED];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n // VALUE\r\n if (buttonInfo.myValue != buttonInfo.myPrevValue) {\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.VALUE_CHANGED];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n // ALWAYS\r\n let emitter = buttonEventEmitters[GamepadButtonEvent.ALWAYS];\r\n emitter.notify(buttonInfo, this);\r\n }\r\n\r\n this._mySelectStart = false;\r\n this._mySelectEnd = false;\r\n this._mySqueezeStart = false;\r\n this._mySqueezeEnd = false;\r\n }\r\n\r\n _preUpdateAxesInfos() {\r\n for (let i = 0; i < this._myAxesInfosIDs.length; i++) {\r\n let id = this._myAxesInfosIDs[i];\r\n let info = this._myAxesInfos[id];\r\n info.myPrevAxes[0] = info.myAxes[0];\r\n info.myPrevAxes[1] = info.myAxes[1];\r\n }\r\n }\r\n\r\n _updateAxesInfos() {\r\n this._updateSingleAxesInfo(GamepadAxesID.THUMBSTICK);\r\n }\r\n\r\n _updateSingleAxesInfo(axesID) {\r\n let axesInfo = this._myAxesInfos[axesID];\r\n let axesData = this._getAxesData(axesID);\r\n\r\n axesInfo.myAxes[0] = axesData[0];\r\n axesInfo.myAxes[1] = axesData[1];\r\n }\r\n\r\n _postUpdateAxesInfos() {\r\n for (let key in GamepadAxesID) {\r\n let axesInfo = this._myAxesInfos[GamepadAxesID[key]];\r\n let axesEventEmitters = this._myAxesEmitters[GamepadAxesID[key]];\r\n\r\n // X CHANGED\r\n if (axesInfo.myAxes[0] != axesInfo.myPrevAxes[0]) {\r\n let emitter = axesEventEmitters[GamepadAxesEvent.X_CHANGED];\r\n emitter.notify(axesInfo, this);\r\n }\r\n\r\n // Y CHANGED\r\n if (axesInfo.myAxes[1] != axesInfo.myPrevAxes[1]) {\r\n let emitter = axesEventEmitters[GamepadAxesEvent.Y_CHANGED];\r\n emitter.notify(axesInfo, this);\r\n }\r\n\r\n // AXES CHANGED\r\n if (axesInfo.myAxes[0] != axesInfo.myPrevAxes[0] ||\r\n axesInfo.myAxes[1] != axesInfo.myPrevAxes[1]) {\r\n let emitter = axesEventEmitters[GamepadAxesEvent.AXES_CHANGED];\r\n emitter.notify(axesInfo, this);\r\n }\r\n\r\n // ALWAYS \r\n let emitter = axesEventEmitters[GamepadAxesEvent.ALWAYS];\r\n emitter.notify(axesInfo, this);\r\n }\r\n }\r\n\r\n _updatePulse(dt) {\r\n if (this._myPulseInfo.myDevicePulsing || this._myPulseInfo.myIntensity > 0) {\r\n let hapticActuators = this._getHapticActuators();\r\n if (hapticActuators.length > 0) {\r\n if (this._myPulseInfo.myIntensity > 0) {\r\n for (let i = 0; i < hapticActuators.length; i++) {\r\n let hapticActuator = hapticActuators[i];\r\n hapticActuator.pulse(this._myPulseInfo.myIntensity, Math.max(250, this._myPulseInfo.myDuration * 1000)); // Duration is managed by this class\r\n }\r\n this._myPulseInfo.myDevicePulsing = true;\r\n } else if (this._myPulseInfo.myDevicePulsing) {\r\n for (let i = 0; i < hapticActuators.length; i++) {\r\n let hapticActuator = hapticActuators[i];\r\n hapticActuator.pulse(0, 1);\r\n\r\n try {\r\n if (hapticActuator.reset != null) {\r\n hapticActuator.reset();\r\n }\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n }\r\n\r\n this._myPulseInfo.myDevicePulsing = false;\r\n }\r\n } else {\r\n this._myPulseInfo.myDevicePulsing = false;\r\n }\r\n }\r\n\r\n this._myPulseInfo.myDuration -= dt;\r\n if (this._myPulseInfo.myDuration <= 0) {\r\n this._myPulseInfo.myIntensity = 0;\r\n this._myPulseInfo.myDuration = 0;\r\n }\r\n }\r\n\r\n _createButtonData() {\r\n return { myPressed: false, myTouched: false, myValue: 0 };\r\n }\r\n\r\n _createAxesData() {\r\n return vec2_create(0, 0);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._destroyHook();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { BaseGamepad } from \"./base_gamepad.js\";\r\n\r\nexport class UniversalGamepad extends BaseGamepad {\r\n\r\n constructor(handedness) {\r\n super(handedness);\r\n\r\n this._myGamepadCores = {}; // Switched to object instead of Map for memory optimization reason since iterating allocates a lot\r\n this._myGamepadCoresIDs = [];\r\n\r\n this._myStarted = false;\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n addGamepadCore(id, gamepadCore) {\r\n if (gamepadCore.getHandedness() == this.getHandedness()) {\r\n this._myGamepadCores[id] = gamepadCore;\r\n this._myGamepadCoresIDs.push(id);\r\n if (this._myStarted) {\r\n gamepadCore.start();\r\n }\r\n }\r\n }\r\n\r\n getGamepadCore(id) {\r\n return this._myGamepadCores[id];\r\n }\r\n\r\n removeGamepadCore(id) {\r\n let gamepadCore = this._myGamepadCores[id];\r\n if (gamepadCore != null) {\r\n delete this._myGamepadCores[id];\r\n this._myGamepadCoresIDs.pp_removeEqual(id);\r\n }\r\n }\r\n\r\n removeAllGamepadCores() {\r\n this._myGamepadCores = {};\r\n this._myGamepadCoresIDs = [];\r\n }\r\n\r\n getHandPose() {\r\n let handPose = null;\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let currentCoreHandPose = core.getHandPose();\r\n if (handPose == null || (currentCoreHandPose != null && currentCoreHandPose.isValid())) {\r\n handPose = currentCoreHandPose;\r\n }\r\n }\r\n\r\n if (handPose != null && handPose.isValid()) {\r\n break;\r\n }\r\n }\r\n\r\n return handPose;\r\n }\r\n\r\n _startHook() {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.start();\r\n }\r\n\r\n this._myStarted = true;\r\n }\r\n\r\n _preUpdate(dt) {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.preUpdate(dt);\r\n }\r\n }\r\n\r\n _postUpdate(dt) {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.postUpdate(dt);\r\n }\r\n }\r\n\r\n _getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let coreButtonData = core.getButtonData(buttonID);\r\n this._myButtonData.myPressed = this._myButtonData.myPressed || coreButtonData.myPressed;\r\n this._myButtonData.myTouched = this._myButtonData.myTouched || coreButtonData.myTouched;\r\n if (Math.abs(coreButtonData.myValue) > Math.abs(this._myButtonData.myValue)) {\r\n this._myButtonData.myValue = coreButtonData.myValue;\r\n }\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n _getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let coreAxesData = core.getAxesData(axesID);\r\n\r\n if (Math.abs(coreAxesData[0]) > Math.abs(this._myAxesData[0])) {\r\n this._myAxesData[0] = coreAxesData[0];\r\n }\r\n\r\n if (Math.abs(coreAxesData[1]) > Math.abs(this._myAxesData[1])) {\r\n this._myAxesData[1] = coreAxesData[1];\r\n }\r\n }\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n _getHapticActuators() {\r\n this._myHapticActuators.pp_clear();\r\n\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n if (core.isGamepadCoreActive()) {\r\n let coreHapticActuators = core.getHapticActuators();\r\n for (let j = 0; j < coreHapticActuators.length; j++) {\r\n this._myHapticActuators.push(coreHapticActuators[j]);\r\n }\r\n }\r\n }\r\n\r\n return this._myHapticActuators;\r\n }\r\n\r\n _destroyHook() {\r\n for (let i = 0; i < this._myGamepadCoresIDs.length; i++) {\r\n let id = this._myGamepadCoresIDs[i];\r\n let core = this._myGamepadCores[id];\r\n core.destroy();\r\n }\r\n }\r\n}", "import { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { UniversalGamepad } from \"../universal_gamepad.js\";\r\n\r\nexport class GamepadsManager {\r\n\r\n constructor() {\r\n this._myGamepads = [];\r\n\r\n this._myGamepads[Handedness.LEFT] = new UniversalGamepad(Handedness.LEFT);\r\n this._myGamepads[Handedness.RIGHT] = new UniversalGamepad(Handedness.RIGHT);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n for (let key in this._myGamepads) {\r\n this._myGamepads[key].start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n for (let key in this._myGamepads) {\r\n this._myGamepads[key].update(dt);\r\n }\r\n }\r\n\r\n getLeftGamepad() {\r\n return this._myGamepads[Handedness.LEFT];\r\n }\r\n\r\n getRightGamepad() {\r\n return this._myGamepads[Handedness.RIGHT];\r\n }\r\n\r\n getGamepad(handedness) {\r\n return this._myGamepads[handedness];\r\n }\r\n\r\n getGamepads() {\r\n return this._myGamepads;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let key in this._myGamepads) {\r\n this._myGamepads[key].destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { mat4_create, quat2_create, quat_create, vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class BasePoseParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myReferenceObject = null;\r\n this.myForwardFixed = true;\r\n this.myUpdateOnViewReset = false;\r\n this.myForceEmulatedVelocities = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\n// BasePose transform is local by default (as if the parent/reference object was the identity transform)\r\n// You can use setReferenceObject if you want the BasePose to return the transform in world space \r\nexport class BasePose {\r\n\r\n constructor(basePoseParams = new BasePoseParams()) {\r\n this._myForwardFixed = basePoseParams.myForwardFixed;\r\n this._myForceEmulatedVelocities = basePoseParams.myForceEmulatedVelocities;\r\n this._myUpdateOnViewReset = basePoseParams.myUpdateOnViewReset;\r\n\r\n this._myReferenceObject = basePoseParams.myReferenceObject;\r\n\r\n this._myEngine = basePoseParams.myEngine;\r\n\r\n this._myPosition = vec3_create();\r\n this._myRotationQuat = quat2_create();\r\n\r\n this._myPrevPosition = vec3_create();\r\n this._myPrevRotationQuat = quat_create();\r\n\r\n this._myLinearVelocity = vec3_create();\r\n this._myAngularVelocityRadians = vec3_create();\r\n\r\n this._myValid = false;\r\n this._myLinearVelocityEmulated = true;\r\n this._myAngularVelocityEmulated = true;\r\n\r\n this._myPrePoseUpdatedEventEmitter = new Emitter(); // Signature: listener(dt, pose, manualUpdate)\r\n this._myPoseUpdatedEmitter = new Emitter(); // Signature: listener(dt, pose, manualUpdate)\r\n this._myPostPoseUpdatedEventEmitter = new Emitter(); // Signature: listener(dt, pose, manualUpdate)\r\n\r\n this._myViewResetEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getEngine() {\r\n return this._myEngine;\r\n }\r\n\r\n // If the reference object is set, the transform will be converted using it as a parent,\r\n // otherwise the transform will be local, as if the parent/reference object was the identity transform\r\n setReferenceObject(referenceObject) {\r\n this._myReferenceObject = referenceObject;\r\n }\r\n\r\n getReferenceObject() {\r\n return this._myReferenceObject;\r\n }\r\n\r\n setForwardFixed(forwardFixed) {\r\n this._myForwardFixed = forwardFixed;\r\n }\r\n\r\n isForwardFixed() {\r\n return this._myForwardFixed;\r\n }\r\n\r\n setForceEmulatedVelocities(forceEmulatedVelocities) {\r\n this._myForceEmulatedVelocities = forceEmulatedVelocities;\r\n }\r\n\r\n isForceEmulatedVelocities() {\r\n return this._myForceEmulatedVelocities;\r\n }\r\n\r\n setUpdateOnViewReset(updateOnViewReset) {\r\n this._myUpdateOnViewReset = updateOnViewReset;\r\n }\r\n\r\n isUpdateOnViewReset() {\r\n return this._myUpdateOnViewReset;\r\n }\r\n\r\n getReferenceSpace() {\r\n return XRUtils.getReferenceSpace(this._myEngine);\r\n }\r\n\r\n getPosition(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotation(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getRotationDegrees(out, referenceObjectOverride);\r\n }\r\n\r\n getRotationDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotationRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getTransform(out = mat4_create(), referenceObjectOverride = undefined) {\r\n return this.getTransformMatrix(out, referenceObjectOverride);\r\n }\r\n\r\n getTransformMatrix(out = mat4_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @param {any} referenceObjectOverride\r\n * @return {any}\r\n */\r\n getTransformQuat(out = quat2_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getLinearVelocity(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getAngularVelocity(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getAngularVelocityDegrees(out, referenceObjectOverride);\r\n }\r\n\r\n getAngularVelocityDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getAngularVelocityRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n isValid() {\r\n return this._myValid;\r\n }\r\n\r\n isLinearVelocityEmulated() {\r\n return this._myLinearVelocityEmulated;\r\n }\r\n\r\n isAngularVelocityEmulated() {\r\n return this._myAngularVelocityEmulated;\r\n }\r\n\r\n registerPrePoseUpdatedEventEventListener(id, listener) {\r\n this._myPrePoseUpdatedEventEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPrePoseUpdatedEventEventListener(id) {\r\n this._myPrePoseUpdatedEventEmitter.remove(id);\r\n }\r\n\r\n registerPoseUpdatedEventListener(id, listener) {\r\n this._myPoseUpdatedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPoseUpdatedEventListener(id) {\r\n this._myPoseUpdatedEmitter.remove(id);\r\n }\r\n\r\n registerPostPoseUpdatedEventEventListener(id, listener) {\r\n this._myPostPoseUpdatedEventEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPostPoseUpdatedEventEventListener(id) {\r\n this._myPostPoseUpdatedEventEmitter.remove(id);\r\n }\r\n\r\n start() {\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, true, this._myEngine);\r\n }\r\n\r\n update(dt) {\r\n this._update(dt, true, false);\r\n }\r\n\r\n // Hooks\r\n\r\n _isReadyToGetPose() {\r\n return true;\r\n }\r\n\r\n _getPose(xrFrame) {\r\n return null;\r\n }\r\n\r\n _updateHook(dt, updateVelocity, xrPose) {\r\n\r\n }\r\n\r\n _onXRSessionStartHook(manualCall, session) {\r\n\r\n }\r\n\r\n _onXRSessionEndHook() {\r\n\r\n }\r\n\r\n _onViewResetHook() {\r\n\r\n }\r\n\r\n _destroyHook() {\r\n\r\n }\r\n\r\n // Hooks End\r\n\r\n _update(dt, updateVelocity, manualUpdate) {\r\n this._myPrevPosition.vec3_copy(this._myPosition);\r\n this._myPrevRotationQuat.quat_copy(this._myRotationQuat);\r\n\r\n let xrFrame = XRUtils.getFrame(this._myEngine);\r\n if (xrFrame && this._isReadyToGetPose()) {\r\n let xrPose = null;\r\n try {\r\n xrPose = this._getPose(xrFrame);\r\n } catch (error) {\r\n // Not handled, pose will be null\r\n }\r\n\r\n if (xrPose) {\r\n this._myPosition[0] = xrPose.transform.position.x;\r\n this._myPosition[1] = xrPose.transform.position.y;\r\n this._myPosition[2] = xrPose.transform.position.z;\r\n\r\n this._myRotationQuat[0] = xrPose.transform.orientation.x;\r\n this._myRotationQuat[1] = xrPose.transform.orientation.y;\r\n this._myRotationQuat[2] = xrPose.transform.orientation.z;\r\n this._myRotationQuat[3] = xrPose.transform.orientation.w;\r\n this._myRotationQuat.quat_normalize(this._myRotationQuat);\r\n\r\n if (updateVelocity) {\r\n if (xrPose.linearVelocity && !this._myForceEmulatedVelocities) {\r\n this._myLinearVelocity[0] = xrPose.linearVelocity.x;\r\n this._myLinearVelocity[1] = xrPose.linearVelocity.y;\r\n this._myLinearVelocity[2] = xrPose.linearVelocity.z;\r\n\r\n this._myLinearVelocityEmulated = false;\r\n } else {\r\n this._computeEmulatedLinearVelocity(dt);\r\n\r\n this._myLinearVelocityEmulated = true;\r\n }\r\n\r\n if (xrPose.angularVelocity && !this._myForceEmulatedVelocities) {\r\n this._myAngularVelocityRadians[0] = xrPose.angularVelocity.x;\r\n this._myAngularVelocityRadians[1] = xrPose.angularVelocity.y;\r\n this._myAngularVelocityRadians[2] = xrPose.angularVelocity.z;\r\n\r\n this._myAngularVelocityEmulated = false;\r\n } else {\r\n this._computeEmulatedAngularVelocity(dt);\r\n\r\n this._myAngularVelocityEmulated = true;\r\n }\r\n }\r\n\r\n this._myValid = true;\r\n } else {\r\n // Keep previous position and rotation but reset velocity because reasons\r\n\r\n if (updateVelocity) {\r\n this._myLinearVelocity[0] = 0;\r\n this._myLinearVelocity[1] = 0;\r\n this._myLinearVelocity[2] = 0;\r\n\r\n this._myAngularVelocityRadians[0] = 0;\r\n this._myAngularVelocityRadians[1] = 0;\r\n this._myAngularVelocityRadians[2] = 0;\r\n }\r\n\r\n this._myValid = false;\r\n this._myLinearVelocityEmulated = true;\r\n this._myAngularVelocityEmulated = true;\r\n }\r\n\r\n this._updateHook(dt, updateVelocity, xrPose);\r\n } else {\r\n // Keep previous position and rotation but reset velocity because reasons\r\n\r\n if (updateVelocity) {\r\n this._myLinearVelocity[0] = 0;\r\n this._myLinearVelocity[1] = 0;\r\n this._myLinearVelocity[2] = 0;\r\n\r\n this._myAngularVelocityRadians[0] = 0;\r\n this._myAngularVelocityRadians[1] = 0;\r\n this._myAngularVelocityRadians[2] = 0;\r\n }\r\n\r\n this._myValid = false;\r\n this._myLinearVelocityEmulated = true;\r\n this._myAngularVelocityEmulated = true;\r\n\r\n this._updateHook(dt, updateVelocity, null);\r\n }\r\n\r\n this._myPrePoseUpdatedEventEmitter.notify(dt, this, manualUpdate);\r\n this._myPoseUpdatedEmitter.notify(dt, this, manualUpdate);\r\n this._myPostPoseUpdatedEventEmitter.notify(dt, this, manualUpdate);\r\n }\r\n\r\n _computeEmulatedLinearVelocity(dt) {\r\n if (dt > 0) {\r\n this._myPosition.vec3_sub(this._myPrevPosition, this._myLinearVelocity);\r\n this._myLinearVelocity.vec3_scale(1 / dt, this._myLinearVelocity);\r\n } else {\r\n this._myLinearVelocity[0] = 0;\r\n this._myLinearVelocity[1] = 0;\r\n this._myLinearVelocity[2] = 0;\r\n }\r\n }\r\n\r\n _onXRSessionStart(manualCall, session) {\r\n let referenceSpace = XRUtils.getReferenceSpace(this._myEngine);\r\n\r\n if (referenceSpace.addEventListener != null) {\r\n this._myViewResetEventListener = this._onViewReset.bind(this);\r\n referenceSpace.addEventListener(\"reset\", this._myViewResetEventListener);\r\n }\r\n\r\n this._onXRSessionStartHook(manualCall, session);\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._onXRSessionEndHook();\r\n\r\n this._myViewResetEventListener = null;\r\n }\r\n\r\n _onViewReset() {\r\n if (this._myUpdateOnViewReset) {\r\n this._update(0, false, true);\r\n }\r\n\r\n this._onViewResetHook();\r\n }\r\n\r\n _computeEmulatedAngularVelocity() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._destroyHook();\r\n\r\n XRUtils.getReferenceSpace(this._myEngine)?.removeEventListener?.(\"reset\", this._myViewResetEventListener);\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nBasePose.prototype.getPosition = function () {\r\n let transform = mat4_create();\r\n return function getPosition(out = vec3_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.vec3_copy(this._myPosition);\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.vec3_convertPositionToWorld(referenceObject.pp_getTransform(transform), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getRotationDegrees = function () {\r\n let rotationQuat = quat_create();\r\n return function getRotationDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getRotationQuat(rotationQuat, referenceObjectOverride).quat_toDegrees(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getRotationRadians = function () {\r\n let rotationQuat = quat_create();\r\n return function getRotationRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getRotationQuat(rotationQuat, referenceObjectOverride).quat_toRadians(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getRotationQuat = function () {\r\n let playerRotationQuat = quat_create();\r\n let up = vec3_create();\r\n return function getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.quat_copy(this._myRotationQuat);\r\n\r\n if (this._myForwardFixed) {\r\n out.quat_rotateAxisRadians(Math.PI, out.quat_getUp(up), out);\r\n }\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.quat_toWorld(referenceObject.pp_getRotationQuat(playerRotationQuat), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getTransformMatrix = function () {\r\n let transformQuat = quat2_create();\r\n return function getTransformMatrix(out = mat4_create(), referenceObjectOverride = undefined) {\r\n return this.getTransformQuat(transformQuat, referenceObjectOverride).quat2_toMatrix(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getTransformQuat = function () {\r\n let rotationQuat = quat_create();\r\n let playerTransformQuat = quat2_create();\r\n return function getTransformQuat(out = quat2_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.quat2_identity();\r\n out.quat2_setPositionRotationQuat(this._myPosition, this.getRotationQuat(rotationQuat, referenceObjectOverride));\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.quat_toWorld(referenceObject.pp_getTransformQuat(playerTransformQuat), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getLinearVelocity = function () {\r\n let transform = mat4_create();\r\n return function getLinearVelocity(out = vec3_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.vec3_copy(this._myLinearVelocity);\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.vec3_convertDirectionToWorld(referenceObject.pp_getTransform(transform), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getAngularVelocityDegrees = function () {\r\n let velocityRadians = vec3_create();\r\n return function getAngularVelocityDegrees(out = vec3_create(), referenceObjectOverride = undefined) {\r\n return this.getAngularVelocityRadians(velocityRadians, referenceObjectOverride).vec3_toDegrees(out);\r\n };\r\n}();\r\n\r\nBasePose.prototype.getAngularVelocityRadians = function () {\r\n let transform = mat4_create();\r\n return function getAngularVelocityRadians(out = vec3_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.vec3_copy(this._myAngularVelocityRadians);\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.vec3_convertDirectionToWorld(referenceObject.pp_getTransform(transform), out);\r\n };\r\n}();\r\n\r\nBasePose.prototype._computeEmulatedAngularVelocity = function () {\r\n let rotationRadians = vec3_create();\r\n let prevRotationRadians = vec3_create();\r\n return function _computeEmulatedAngularVelocity(dt) {\r\n if (dt > 0) {\r\n rotationRadians = this._myRotationQuat.quat_toRadians(rotationRadians);\r\n prevRotationRadians = this._myPrevRotationQuat.quat_toRadians(prevRotationRadians);\r\n rotationRadians.vec3_sub(prevRotationRadians, this._myAngularVelocityRadians);\r\n this._myAngularVelocityRadians.vec3_scale(1 / dt, this._myAngularVelocityRadians);\r\n } else {\r\n this._myAngularVelocityRadians[0] = 0;\r\n this._myAngularVelocityRadians[1] = 0;\r\n this._myAngularVelocityRadians[2] = 0;\r\n }\r\n };\r\n}();", "import { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { Handedness, HandednessIndex, InputSourceType, TrackedHandJointID, TrackedHandJointIDIndex } from \"./input_types.js\";\r\n\r\nexport function getHandednessByIndex(index) {\r\n let handedness = null;\r\n\r\n switch (index) {\r\n case HandednessIndex.LEFT:\r\n handedness = Handedness.LEFT;\r\n break;\r\n case HandednessIndex.RIGHT:\r\n handedness = Handedness.RIGHT;\r\n break;\r\n }\r\n\r\n return handedness;\r\n}\r\n\r\nexport function getInputSource(handedness, inputSourceType = null, engine = Globals.getMainEngine()) {\r\n let inputSource = null;\r\n\r\n let xrSession = XRUtils.getSession(engine);\r\n if (xrSession != null && xrSession.inputSources != null) {\r\n for (let i = 0; i < xrSession.inputSources.length; i++) {\r\n let input = xrSession.inputSources[i];\r\n\r\n let correctType = (!inputSourceType) || (inputSourceType == InputSourceType.GAMEPAD && !input.hand) || (inputSourceType == InputSourceType.TRACKED_HAND && input.hand);\r\n if (correctType && input.handedness == handedness) {\r\n inputSource = input;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return inputSource;\r\n}\r\n\r\nexport function getInputSourceTypeByHandedness(handedness, engine) {\r\n let inputSource = InputUtils.getInputSource(handedness, undefined, engine);\r\n\r\n return InputUtils.getInputSourceType(inputSource);\r\n}\r\n\r\nexport function getInputSourceType(inputSource) {\r\n let inputSourceType = null;\r\n\r\n if (inputSource) {\r\n if (inputSource.hand) {\r\n inputSourceType = InputSourceType.TRACKED_HAND;\r\n } else {\r\n inputSourceType = InputSourceType.GAMEPAD;\r\n }\r\n }\r\n\r\n return inputSourceType;\r\n}\r\n\r\nexport function getOppositeHandedness(handedness) {\r\n let oppositeHandedness = null;\r\n\r\n switch (handedness) {\r\n case Handedness.LEFT:\r\n oppositeHandedness = Handedness.RIGHT;\r\n break;\r\n case Handedness.RIGHT:\r\n oppositeHandedness = Handedness.LEFT;\r\n break;\r\n }\r\n\r\n return oppositeHandedness;\r\n}\r\n\r\nexport function getJointIDByIndex(index) {\r\n let jointID = null;\r\n\r\n let jointIDKey = null;\r\n for (let jointIDIndexKey in TrackedHandJointIDIndex) {\r\n if (TrackedHandJointIDIndex[jointIDIndexKey] == index) {\r\n jointIDKey = jointIDIndexKey;\r\n break;\r\n }\r\n }\r\n\r\n if (jointIDKey != null) {\r\n jointID = TrackedHandJointID[jointIDKey];\r\n }\r\n\r\n return jointID;\r\n}\r\n\r\nexport let InputUtils = {\r\n getHandednessByIndex,\r\n getInputSource,\r\n getInputSourceTypeByHandedness,\r\n getInputSourceType,\r\n getOppositeHandedness,\r\n getJointIDByIndex\r\n};", "import { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { quat_create, vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Handedness, InputSourceType } from \"../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../cauldron/input_utils.js\";\r\nimport { BasePose, BasePoseParams } from \"./base_pose.js\";\r\n\r\nexport class HandPoseParams extends BasePoseParams {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n\r\n this.myFixTrackedHandRotation = true;\r\n }\r\n}\r\n\r\nexport class HandPose extends BasePose {\r\n\r\n constructor(handedness, handPoseParams = new HandPoseParams()) {\r\n super(handPoseParams);\r\n\r\n this._myInputSource = null;\r\n\r\n this._myHandedness = handedness;\r\n this._myFixTrackedHandRotation = handPoseParams.myFixTrackedHandRotation;\r\n\r\n this._myTrackedHand = false;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getInputSource() {\r\n return this._myInputSource;\r\n }\r\n\r\n getInputSourceType() {\r\n if (this._myInputSource == null) {\r\n return null;\r\n }\r\n\r\n return InputUtils.getInputSourceType(this._myInputSource);\r\n }\r\n\r\n isFixTrackedHandRotation() {\r\n return this._myFixTrackedHandRotation;\r\n }\r\n\r\n setFixTrackedHandRotation(fixTrackedHandRotation) {\r\n this.myFixTrackedHandRotation = fixTrackedHandRotation;\r\n }\r\n\r\n getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isReadyToGetPose() {\r\n return this._myInputSource != null;\r\n }\r\n\r\n _getPose(xrFrame) {\r\n return xrFrame.getPose(this._myInputSource.gripSpace, this.getReferenceSpace());\r\n }\r\n\r\n _onXRSessionStartHook(manualCall, session) {\r\n this._myInputSourcesChangeEventListener = () => {\r\n this._myInputSource = null;\r\n\r\n if (session.inputSources != null && session.inputSources.length > 0) {\r\n for (let i = 0; i < session.inputSources.length; i++) {\r\n let inputSource = session.inputSources[i];\r\n if (inputSource.handedness == this._myHandedness) {\r\n this._myInputSource = inputSource;\r\n this._myTrackedHand = InputUtils.getInputSourceType(this._myInputSource) == InputSourceType.TRACKED_HAND;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._myInputSourcesChangeEventListener();\r\n\r\n session.addEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n\r\n _onXRSessionEndHook() {\r\n this._myInputSource = null;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n _destroyHook() {\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nHandPose.prototype.getRotationQuat = function () {\r\n let playerRotationQuat = quat_create();\r\n let up = vec3_create();\r\n let right = vec3_create();\r\n let forward = vec3_create();\r\n return function getRotationQuat(out = quat_create(), referenceObjectOverride = undefined) {\r\n let referenceObject = referenceObjectOverride === undefined ? this._myReferenceObject : referenceObjectOverride;\r\n\r\n out.quat_copy(this._myRotationQuat);\r\n\r\n if (this._myForwardFixed) {\r\n out.quat_rotateAxisRadians(Math.PI, out.quat_getUp(up), out);\r\n }\r\n\r\n if (this._myFixTrackedHandRotation && this._myTrackedHand) {\r\n out.quat_rotateAxis(-60, out.quat_getRight(right), out);\r\n\r\n let forwardRotation = 20;\r\n forwardRotation = (this._myHandedness == Handedness.LEFT) ? forwardRotation : -forwardRotation;\r\n out.quat_rotateAxis(forwardRotation, out.quat_getForward(forward), out);\r\n }\r\n\r\n if (referenceObject == null) {\r\n return out;\r\n }\r\n\r\n return out.quat_toWorld(referenceObject.pp_getRotationQuat(playerRotationQuat), out);\r\n };\r\n}();", "import { BasePose } from \"./base_pose.js\";\r\n\r\nexport class HeadPose extends BasePose {\r\n _getPose(xrFrame) {\r\n return xrFrame.getViewerPose(this.getReferenceSpace());\r\n }\r\n}", "import { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { InputSourceType } from \"../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../cauldron/input_utils.js\";\r\nimport { BasePose, BasePoseParams } from \"./base_pose.js\";\r\n\r\nexport class TrackedHandJointPose extends BasePose {\r\n\r\n constructor(handedness, trackedHandJointID, basePoseParams = new BasePoseParams()) {\r\n super(basePoseParams);\r\n\r\n this._myInputSource = null;\r\n\r\n this._myHandedness = handedness;\r\n this._myTrackedHandJointID = trackedHandJointID;\r\n\r\n this._myJointRadius = 0;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getTrackedHandJointID() {\r\n return this._myTrackedHandJointID;\r\n }\r\n\r\n setTrackedHandJointID(trackedHandJointID) {\r\n this._myTrackedHandJointID = trackedHandJointID;\r\n }\r\n\r\n getJointRadius() {\r\n return this._myJointRadius;\r\n }\r\n\r\n _isReadyToGetPose() {\r\n return this._myInputSource != null;\r\n }\r\n\r\n _getPose(xrFrame) {\r\n return xrFrame.getJointPose(this._myInputSource.hand.get(this._myTrackedHandJointID), this.getReferenceSpace());\r\n }\r\n\r\n _updateHook(dt, updateVelocity, xrPose) {\r\n if (xrPose != null) {\r\n this._myJointRadius = xrPose.radius;\r\n }\r\n }\r\n\r\n _onXRSessionStartHook(manualCall, session) {\r\n this._myInputSourcesChangeEventListener = () => {\r\n this._myInputSource = null;\r\n\r\n if (session.inputSources != null && session.inputSources.length > 0) {\r\n\r\n for (let i = 0; i < session.inputSources.length; i++) {\r\n let inputSource = session.inputSources[i];\r\n if (inputSource.handedness == this._myHandedness) {\r\n if (InputUtils.getInputSourceType(inputSource) == InputSourceType.TRACKED_HAND) {\r\n this._myInputSource = inputSource;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._myInputSourcesChangeEventListener();\r\n\r\n session.addEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n\r\n _onXRSessionEndHook() {\r\n this._myInputSource = null;\r\n\r\n this._myInputSourcesChangeEventListener = null;\r\n }\r\n\r\n _destroyHook() {\r\n XRUtils.getSession(this.getEngine())?.removeEventListener(\"inputsourceschange\", this._myInputSourcesChangeEventListener);\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\nimport { TrackedHandJointID } from \"../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../cauldron/input_utils.js\";\r\nimport { BasePoseParams } from \"./base_pose.js\";\r\nimport { TrackedHandJointPose } from \"./tracked_hand_joint_pose.js\";\r\n\r\nexport class TrackedHandPoseParams extends BasePoseParams {\r\n\r\n constructor(addAllJointIDs = true, engine = Globals.getMainEngine()) {\r\n super(engine);\r\n\r\n this.myTrackedHandJointIDList = [];\r\n\r\n if (addAllJointIDs) {\r\n for (let key in TrackedHandJointID) {\r\n this.myTrackedHandJointIDList.push([TrackedHandJointID[key]]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class TrackedHandPose {\r\n\r\n constructor(handedness, trackedHandPoseParams = new TrackedHandPoseParams()) {\r\n this._myHandedness = handedness;\r\n\r\n this._myForwardFixed = trackedHandPoseParams.myForwardFixed;\r\n this._myForceEmulatedVelocities = trackedHandPoseParams.myForceEmulatedVelocities;\r\n this._myReferenceObject = trackedHandPoseParams.myReferenceObject;\r\n\r\n this._myEngine = trackedHandPoseParams.myEngine;\r\n\r\n this._myTrackedHandJointPoseParams = new BasePoseParams(this._myEngine);\r\n this._myTrackedHandJointPoseParams.myForwardFixed = this._myForwardFixed;\r\n this._myTrackedHandJointPoseParams.myForceEmulatedVelocities = this._myForceEmulatedVelocities;\r\n this._myTrackedHandJointPoseParams.myReferenceObject = this._myReferenceObject;\r\n\r\n this._myTrackedHandJointPoses = [];\r\n for (let jointID of trackedHandPoseParams.myTrackedHandJointIDList) {\r\n let trackedHandJointPose = new TrackedHandJointPose(this._myHandedness, jointID, this._myTrackedHandJointPoseParams);\r\n this._myTrackedHandJointPoses[jointID] = trackedHandJointPose;\r\n }\r\n }\r\n\r\n start() {\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.update(dt);\r\n }\r\n }\r\n\r\n getEngine() {\r\n this._myEngine;\r\n }\r\n\r\n getHandedness() {\r\n return this._myHandedness;\r\n }\r\n\r\n getJointPose(jointID) {\r\n return this._myTrackedHandJointPoses[jointID];\r\n }\r\n\r\n getJointPoseByIndex(jointIDIndex) {\r\n return this._myTrackedHandJointPoses[InputUtils.getJointIDByIndex(jointIDIndex)];\r\n }\r\n\r\n getJointPoses() {\r\n return this._myTrackedHandJointPoses;\r\n }\r\n\r\n addTrackedHandJointID(jointID) {\r\n if (!this._myTrackedHandJointPoses.pp_has(element => element.getTrackedHandJointID() == jointID)) {\r\n let trackedHandJointPose = new TrackedHandJointPose(this._myHandedness, jointID, this._myTrackedHandJointPoseParams);\r\n this._myTrackedHandJointPoses.push(trackedHandJointPose);\r\n }\r\n }\r\n\r\n removeTrackedHandJointID(jointID) {\r\n this._myTrackedHandJointPoses.pp_remove(element => element.getTrackedHandJointID() == jointID);\r\n }\r\n\r\n setReferenceObject(referenceObject) {\r\n this._myReferenceObject = referenceObject;\r\n this._myTrackedHandJointPoseParams.myReferenceObject = this._myReferenceObject;\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.setReferenceObject(referenceObject);\r\n }\r\n }\r\n\r\n getReferenceObject() {\r\n return this._myReferenceObject;\r\n }\r\n\r\n setForwardFixed(forwardFixed) {\r\n this._myForwardFixed = forwardFixed;\r\n this._myTrackedHandJointPoseParams.myForwardFixed = this._myForwardFixed;\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.setForwardFixed(forwardFixed);\r\n }\r\n }\r\n\r\n isForwardFixed() {\r\n return this._myForwardFixed;\r\n }\r\n\r\n setForceEmulatedVelocities(forceEmulatedVelocities) {\r\n this._myForceEmulatedVelocities = forceEmulatedVelocities;\r\n this._myTrackedHandJointPoseParams.myForceEmulatedVelocities = this._myForceEmulatedVelocities;\r\n for (let jointPoseKey in this._myTrackedHandJointPoses) {\r\n let jointPose = this._myTrackedHandJointPoses[jointPoseKey];\r\n jointPose.setForceEmulatedVelocities(forceEmulatedVelocities);\r\n }\r\n }\r\n\r\n isForceEmulatedVelocities() {\r\n return this._myForceEmulatedVelocities;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let jointPose of this._myTrackedHandJointPoses) {\r\n jointPose.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../cauldron/cauldron/timer.js\";\r\nimport { RaycastResults } from \"../../cauldron/physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../../cauldron/physics/physics_utils.js\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { mat4_create, quat_create, vec2_create, vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport let MouseButtonID = {\r\n LEFT: 0,\r\n MIDDLE: 1,\r\n RIGHT: 2\r\n};\r\n\r\n// #TODO Refactor Mouse/Keyboard/Gamepad and create a sort of parent ButtonHandler that have the base ButtonInfo and all of them inherit\r\nexport class Mouse {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myButtonInfos = {};\r\n this._myButtonInfosIDs = [];\r\n for (let key in MouseButtonID) {\r\n this._myButtonInfos[MouseButtonID[key]] = this._createButtonInfo();\r\n this._myButtonInfosIDs.push(MouseButtonID[key]);\r\n }\r\n\r\n this._myPreventContextMenuEventListener = this._preventContextMenu.bind(this);\r\n this._myPreventMiddleButtonScrollEventListener = this._preventMiddleButtonScroll.bind(this);\r\n\r\n this._myInternalMousePosition = vec2_create();\r\n this._myScreenSize = vec2_create();\r\n this._updateScreenSize();\r\n\r\n this._myResetMovingDelay = 0.15;\r\n this._myResetMovingTimer = new Timer(this._myResetMovingDelay, false);\r\n this._myMoving = false;\r\n\r\n this._myInsideView = false;\r\n this._myValid = false;\r\n\r\n this._myPointerUpOnPointerLeave = true;\r\n\r\n this._myContextMenuActive = true;\r\n this._myMiddleButtonScrollActive = true;\r\n\r\n this._myPointerID = null;\r\n this._myLastValidPointerEvent = null;\r\n\r\n this._myPointerEventValidCallbacks = {}; // Signature: callback(event)\r\n this._myPointerEventValidCallbacksIDs = [];\r\n\r\n this._myPointerMoveEventListener = null;\r\n this._myPointerDownEventListener = null;\r\n this._myPointerUpEventListener = null;\r\n this._myPointerLeaveEventListener = null;\r\n this._myPointerEnterEventListener = null;\r\n this._myMouseDownEventListener = null;\r\n this._myMouseUpEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n\r\n // Support Variables\r\n this._myProjectionMatrixInverse = mat4_create();\r\n this._myRotationQuat = quat_create();\r\n this._myOriginWorld = vec3_create();\r\n this._myDirectionWorld = vec3_create();\r\n }\r\n\r\n start() {\r\n this._myPointerMoveEventListener = this._onPointerAction.bind(this, this._onPointerMove.bind(this));\r\n document.body.addEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n this._myPointerDownEventListener = this._onPointerAction.bind(this, this._onPointerDown.bind(this));\r\n document.body.addEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n this._myPointerUpEventListener = this._onPointerAction.bind(this, this._onPointerUp.bind(this));\r\n document.body.addEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n this._myPointerLeaveEventListener = this._onPointerLeave.bind(this);\r\n document.body.addEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n this._myPointerEnterEventListener = this._onPointerEnter.bind(this);\r\n document.body.addEventListener(\"pointerenter\", this._myPointerEnterEventListener);\r\n\r\n // These are needed to being able to detect for example left and right click together, pointer only allow one down at a time\r\n this._myMouseDownEventListener = this._onMouseAction.bind(this, this._onPointerDown.bind(this));\r\n document.body.addEventListener(\"mousedown\", this._myMouseDownEventListener);\r\n this._myMouseUpEventListener = this._onMouseAction.bind(this, this._onPointerUp.bind(this));\r\n document.body.addEventListener(\"mouseup\", this._myMouseUpEventListener);\r\n }\r\n\r\n update(dt) {\r\n if (this._myResetMovingTimer.isRunning()) {\r\n this._myResetMovingTimer.update(dt);\r\n if (this._myResetMovingTimer.isDone()) {\r\n this._myResetMovingTimer.reset();\r\n this._myMoving = false;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n buttonInfo.myPressStart = buttonInfo.myPressStartToProcess;\r\n buttonInfo.myPressEnd = buttonInfo.myPressEndToProcess;\r\n buttonInfo.myPressStartToProcess = false;\r\n buttonInfo.myPressEndToProcess = false;\r\n }\r\n\r\n this._updateScreenSize();\r\n\r\n if (!this.isAnyButtonPressed() && !this._myMoving) {\r\n this._myPointerID = null;\r\n }\r\n\r\n if (this._myLastValidPointerEvent != null) {\r\n let lastValidPointerEventStillValid = this._isPointerEventValid(this._myLastValidPointerEvent);\r\n if (!lastValidPointerEventStillValid) {\r\n if (this._myInsideView) {\r\n this._onPointerLeave(this._myLastValidPointerEvent);\r\n }\r\n\r\n this._myLastValidPointerEvent = null;\r\n }\r\n }\r\n }\r\n\r\n isValid() {\r\n return this._myValid;\r\n }\r\n\r\n isButtonPressed(buttonID) {\r\n let pressed = false;\r\n\r\n if (this._myButtonInfosIDs[buttonID] != null) {\r\n pressed = this._myButtonInfos[buttonID].myPressed;\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n isAnyButtonPressed() {\r\n let pressed = false;\r\n\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n if (buttonInfo.myPressed) {\r\n pressed = true;\r\n break;\r\n }\r\n }\r\n\r\n return pressed;\r\n }\r\n\r\n isButtonPressStart(buttonID) {\r\n let pressStart = false;\r\n\r\n if (this._myButtonInfosIDs[buttonID] != null) {\r\n pressStart = this._myButtonInfos[buttonID].myPressStart;\r\n }\r\n\r\n return pressStart;\r\n }\r\n\r\n isButtonPressEnd(buttonID = null) {\r\n let pressEnd = false;\r\n\r\n if (this._myButtonInfosIDs[buttonID] != null) {\r\n pressEnd = this._myButtonInfos[buttonID].myPressEnd;\r\n }\r\n\r\n return pressEnd;\r\n }\r\n\r\n isMoving() {\r\n return this._myMoving;\r\n }\r\n\r\n isInsideView() {\r\n return this._myInsideView;\r\n }\r\n\r\n isTargetingRenderCanvas() {\r\n return this.isInsideView() && this._myLastValidPointerEvent != null && this._myLastValidPointerEvent.target == Globals.getCanvas(this._myEngine);\r\n }\r\n\r\n // The origin and direction are set by the mouse\r\n raycastWorld(raycastParams, raycastResults = new RaycastResults()) {\r\n this.getOriginWorld(raycastParams.myOrigin);\r\n this.getDirectionWorld(raycastParams.myDirection);\r\n raycastResults = PhysicsUtils.raycast(raycastParams, raycastResults, Globals.getPhysics(this._myEngine));\r\n return raycastResults;\r\n }\r\n\r\n getPositionScreen(out = vec2_create()) {\r\n let mousePosition = out;\r\n mousePosition[0] = this._myInternalMousePosition[0];\r\n mousePosition[1] = this._myScreenSize[1] - 1 - this._myInternalMousePosition[1];\r\n return mousePosition;\r\n }\r\n\r\n getPositionScreenNormalized(out = vec2_create()) {\r\n let mousePosition = out;\r\n mousePosition[0] = (this._myScreenSize[0] == 0) ? 0 : ((this._myInternalMousePosition[0] / this._myScreenSize[0]) * 2 - 1);\r\n mousePosition[1] = (this._myScreenSize[1] == 0) ? 0 : (((this._myScreenSize[1] - 1 - this._myInternalMousePosition[1]) / this._myScreenSize[1]) * 2 - 1);\r\n return mousePosition;\r\n }\r\n\r\n getScreenSize() {\r\n return this._myScreenSize;\r\n }\r\n\r\n getPositionWorld(distanceFromCamera, out = vec3_create()) {\r\n let originWorld = this.getOriginWorld(this._myOriginWorld);\r\n let directionWorld = this.getDirectionWorld(this._myDirectionWorld);\r\n\r\n out = originWorld.vec3_add(directionWorld.vec3_scale(distanceFromCamera, out), out);\r\n return out;\r\n }\r\n\r\n getOriginWorld(out = vec3_create()) {\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n Globals.getPlayerObjects(this._myEngine).myEyeLeft.pp_getPosition(out); // In theory mouse should not be used inside the session, but may make sense for AR which uses eye left\r\n } else {\r\n Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_getPosition(out);\r\n }\r\n\r\n return out;\r\n }\r\n\r\n getDirectionWorld(out = vec3_create()) {\r\n let right = this._myInternalMousePosition[0] / this._myScreenSize[0];\r\n let up = this._myInternalMousePosition[1] / this._myScreenSize[1];\r\n\r\n let directionLocal = out;\r\n directionLocal.vec3_set(right * 2 - 1, -up * 2 + 1, -1.0);\r\n\r\n let projectionMatrixInvert = this._myProjectionMatrixInverse;\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n projectionMatrixInvert = Globals.getPlayerObjects(this._myEngine).myEyeLeft.pp_getComponent(ViewComponent).projectionMatrix.mat4_invert(projectionMatrixInvert);\r\n } else {\r\n projectionMatrixInvert = Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_getComponent(ViewComponent).projectionMatrix.mat4_invert(projectionMatrixInvert);\r\n }\r\n\r\n directionLocal.vec3_transformMat4(projectionMatrixInvert, directionLocal);\r\n directionLocal.vec3_normalize(directionLocal);\r\n\r\n let directionWorld = directionLocal;\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n directionWorld = directionLocal.vec3_transformQuat(Globals.getPlayerObjects(this._myEngine).myEyeLeft.pp_getRotationQuat(this._myRotationQuat), directionLocal);\r\n } else {\r\n directionWorld = directionLocal.vec3_transformQuat(Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_getRotationQuat(this._myRotationQuat), directionLocal);\r\n }\r\n\r\n directionWorld.vec3_normalize(directionWorld);\r\n\r\n return out;\r\n }\r\n\r\n setTouchValid(touchValid) {\r\n let callbackID = \"pp_internal_touch_valid_callback\";\r\n if (touchValid) {\r\n this.removePointerEventValidCallback(callbackID);\r\n } else {\r\n this.addPointerEventValidCallback(callbackID, function (event) {\r\n return event.pointerType == \"mouse\";\r\n });\r\n }\r\n }\r\n\r\n setTargetOnlyRenderCanvas(targetOnlyRenderCanvas) {\r\n let callbackID = \"pp_internal_target_only_render_canvas_callback\";\r\n if (targetOnlyRenderCanvas) {\r\n this.addPointerEventValidCallback(callbackID, function (event) {\r\n return event.target == Globals.getCanvas(this._myEngine);\r\n });\r\n } else {\r\n this.removePointerEventValidCallback(callbackID);\r\n }\r\n }\r\n\r\n getLastValidPointerEvent() {\r\n return this._myLastValidPointerEvent;\r\n }\r\n\r\n // Can be used to specify that only some pointerType are valid (eg: mouse, touch, pen) or just some target (eg: Globals.getCanvas(this._myEngine))\r\n addPointerEventValidCallback(id, callback) {\r\n this._myPointerEventValidCallbacks[id] = callback;\r\n this._myPointerEventValidCallbacksIDs.push(id);\r\n }\r\n\r\n removePointerEventValidCallback(id) {\r\n delete this._myPointerEventValidCallbacks[id];\r\n this._myPointerEventValidCallbacksIDs.pp_removeEqual(id);\r\n }\r\n\r\n isPointerUpOnPointerLeave() {\r\n return this._myPointerUpOnPointerLeave;\r\n }\r\n\r\n setPointerUpOnPointerLeave(pointerUpOnPointerLeave) {\r\n this._myPointerUpOnPointerLeave = pointerUpOnPointerLeave;\r\n }\r\n\r\n isContextMenuActive() {\r\n return this._myContextMenuActive;\r\n }\r\n\r\n setContextMenuActive(active) {\r\n if (this._myContextMenuActive != active) {\r\n if (active) {\r\n document.body.removeEventListener(\"contextmenu\", this._myPreventContextMenuEventListener);\r\n } else {\r\n document.body.addEventListener(\"contextmenu\", this._myPreventContextMenuEventListener, false);\r\n }\r\n this._myContextMenuActive = active;\r\n }\r\n }\r\n\r\n isMiddleButtonScrollActive() {\r\n return this._myMiddleButtonScrollActive;\r\n }\r\n\r\n setMiddleButtonScrollActive(active) {\r\n if (this._myMiddleButtonScrollActive != active) {\r\n if (active) {\r\n document.body.removeEventListener(\"mousedown\", this._myPreventMiddleButtonScrollEventListener);\r\n } else {\r\n document.body.addEventListener(\"mousedown\", this._myPreventMiddleButtonScrollEventListener, false);\r\n }\r\n this._myMiddleButtonScrollActive = active;\r\n }\r\n }\r\n\r\n setResetMovingDelay(delay) {\r\n this._myResetMovingDelay = delay;\r\n }\r\n\r\n getResetMovingDelay() {\r\n return this._myResetMovingDelay;\r\n }\r\n\r\n _onPointerAction(actionCallback, event) {\r\n if (!this._isPointerEventIDValid(event)) return;\r\n\r\n if (!this._isPointerEventValid(event)) {\r\n if (this._myInsideView) {\r\n this._onPointerLeave(event);\r\n }\r\n return;\r\n }\r\n\r\n if (!this._myInsideView) {\r\n this._onPointerEnter(event);\r\n }\r\n\r\n actionCallback(event);\r\n\r\n this._updatePositionAndScreen(event);\r\n this._updatePointerData(event);\r\n }\r\n\r\n _onMouseAction(actionCallback, event) {\r\n if (!this._myInsideView) return;\r\n if (!this._isMouseAllowed()) return;\r\n if (!this._isPointerEventIDValid(this._myLastValidPointerEvent)) return;\r\n if (!this._isPointerEventValid(this._myLastValidPointerEvent)) return;\r\n\r\n actionCallback(event);\r\n }\r\n\r\n _onPointerMove(event) {\r\n this._myResetMovingTimer.start(this._myResetMovingDelay);\r\n this._myMoving = true;\r\n }\r\n\r\n _onPointerDown(event) {\r\n let buttonInfo = this._myButtonInfos[event.button];\r\n if (!buttonInfo.myPressed) {\r\n buttonInfo.myPressed = true;\r\n buttonInfo.myPressStartToProcess = true;\r\n }\r\n }\r\n\r\n _onPointerUp(event) {\r\n let buttonInfo = this._myButtonInfos[event.button];\r\n if (buttonInfo.myPressed) {\r\n buttonInfo.myPressed = false;\r\n buttonInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n\r\n _onPointerLeave(event) {\r\n if (!this._myInsideView || this._myLastValidPointerEvent == null || event.pointerId != this._myLastValidPointerEvent.pointerId) return;\r\n\r\n this._myInsideView = false;\r\n\r\n this._myMoving = false;\r\n\r\n if (this._myPointerUpOnPointerLeave) {\r\n for (let i = 0; i < this._myButtonInfosIDs.length; i++) {\r\n let id = this._myButtonInfosIDs[i];\r\n let buttonInfo = this._myButtonInfos[id];\r\n if (buttonInfo.myPressed) {\r\n buttonInfo.myPressed = false;\r\n buttonInfo.myPressEndToProcess = true;\r\n }\r\n }\r\n }\r\n\r\n this._myPointerID = null;\r\n }\r\n\r\n _onPointerEnter(event) {\r\n if ((this._myInsideView && this._myPointerID != null) || !this._isPointerEventIDValid(event) || !this._isPointerEventValid(event)) return;\r\n\r\n this._myInsideView = true;\r\n\r\n this._updatePositionAndScreen(event);\r\n this._updatePointerData(event);\r\n }\r\n\r\n _preventContextMenu(event) {\r\n if (!this._isPointerEventIDValid(event) || !this._isPointerEventValid(event)) return;\r\n\r\n event.preventDefault();\r\n }\r\n\r\n _preventMiddleButtonScroll(event) {\r\n if (!this._isPointerEventIDValid(event) || !this._isPointerEventValid(event)) return;\r\n\r\n if (event.button == 1) {\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n _updatePositionAndScreen(event) {\r\n this._updateScreenSize();\r\n this._myInternalMousePosition[0] = event.clientX;\r\n this._myInternalMousePosition[1] = event.clientY;\r\n\r\n this._myValid = true;\r\n }\r\n\r\n _updateScreenSize() {\r\n let bounds = document.body.getBoundingClientRect();\r\n this._myScreenSize[0] = bounds.width;\r\n this._myScreenSize[1] = bounds.height;\r\n }\r\n\r\n _updatePointerData(event) {\r\n this._myPointerID = event.pointerId;\r\n this._myLastValidPointerEvent = event;\r\n }\r\n\r\n _isPointerEventIDValid(event) {\r\n if (event == null) return false;\r\n\r\n return this._myPointerID == null || this._myPointerID == event.pointerId;\r\n }\r\n\r\n _isPointerEventValid(event) {\r\n if (event == null) return false;\r\n\r\n let valid = true;\r\n\r\n for (let i = 0; i < this._myPointerEventValidCallbacksIDs.length; i++) {\r\n let id = this._myPointerEventValidCallbacksIDs[i];\r\n let callback = this._myPointerEventValidCallbacks[id];\r\n if (!callback(event)) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n _isMouseAllowed() {\r\n // Mouse events are valid only if the last pointer event was a mouse (id==1)\r\n return this._myLastValidPointerEvent != null && this._myLastValidPointerEvent.pointerId == 1;\r\n }\r\n\r\n _createButtonInfo() {\r\n return { myPressed: false, myPressStart: false, myPressStartToProcess: false, myPressEnd: false, myPressEndToProcess: false, };\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n document.body.removeEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n document.body.removeEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n document.body.removeEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.removeEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n document.body.removeEventListener(\"pointerenter\", this._myPointerEnterEventListener);\r\n\r\n document.body.removeEventListener(\"mousedown\", this._myMouseDownEventListener);\r\n document.body.removeEventListener(\"mouseup\", this._myMouseUpEventListener);\r\n\r\n document.body.removeEventListener(\"contextmenu\", this._myPreventContextMenuEventListener);\r\n document.body.removeEventListener(\"mousedown\", this._myPreventMiddleButtonScrollEventListener);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class EnableToolComponent extends Component {\r\n static TypeName = \"pp-enable-tools\";\r\n static Properties = {\r\n _myEnable: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myToolEnabled = null;\r\n\r\n // Prevents double global from same engine\r\n if (!Globals.hasToolEnabled(this.engine)) {\r\n this._myToolEnabled = this._myEnable;\r\n\r\n Globals.setToolEnabled(this._myToolEnabled, this.engine);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myToolEnabled != null && Globals.isToolEnabled(this.engine) == this._myToolEnabled) {\r\n Globals.removeToolEnabled(this.engine);\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ConsoleVR } from \"../console_vr.js\";\r\n\r\nexport class InitConsoleVRComponent extends Component {\r\n static TypeName = \"pp-init-console-vr\";\r\n static Properties = {\r\n _myInit: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myConsoleVR = null;\r\n\r\n if (this._myInit) {\r\n // Prevents double global from same engine\r\n if (!Globals.hasConsoleVR(this.engine)) {\r\n this._myConsoleVR = new ConsoleVR(this.engine);\r\n\r\n Globals.setConsoleVR(this._myConsoleVR, this.engine);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myConsoleVR != null && Globals.getConsoleVR(this.engine) == this._myConsoleVR) {\r\n Globals.removeConsoleVR(this.engine);\r\n }\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _myConsoleOriginalLog = console.log;\r\nlet _myConsoleOriginalError = console.error;\r\nlet _myConsoleOriginalWarn = console.warn;\r\nlet _myConsoleOriginalInfo = console.info;\r\nlet _myConsoleOriginalDebug = console.debug;\r\nlet _myConsoleOriginalAssert = console.assert;\r\nlet _myConsoleOriginalClear = console.clear;\r\n\r\nexport function log(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getLog(engine).apply(console, args);\r\n}\r\n\r\nexport function error(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getError(engine).apply(console, args);\r\n}\r\n\r\nexport function warn(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getWarn(engine).apply(console, args);\r\n}\r\n\r\nexport function info(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getInfo(engine).apply(console, args);\r\n}\r\n\r\nexport function debug(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getDebug(engine).apply(console, args);\r\n}\r\n\r\nexport function assert(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getAssert(engine).apply(console, args);\r\n}\r\n\r\nexport function clear(engine = Globals.getMainEngine(), ...args) {\r\n return ConsoleOriginalFunctions.getClear(engine).apply(console, args);\r\n}\r\n\r\nexport function getLog(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalLog;\r\n}\r\n\r\nexport function getError(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalError;\r\n}\r\n\r\nexport function getWarn(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalWarn;\r\n}\r\n\r\nexport function getInfo(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalInfo;\r\n}\r\n\r\nexport function getDebug(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalDebug;\r\n}\r\n\r\nexport function getAssert(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalAssert;\r\n}\r\n\r\nexport function getClear(engine = Globals.getMainEngine()) {\r\n return _myConsoleOriginalClear;\r\n}\r\n\r\nexport let ConsoleOriginalFunctions = {\r\n log,\r\n error,\r\n warn,\r\n info,\r\n debug,\r\n assert,\r\n clear,\r\n getLog,\r\n getError,\r\n getWarn,\r\n getInfo,\r\n getDebug,\r\n getAssert,\r\n getClear\r\n};", "import { Globals } from \"../../pp/globals.js\";\r\nimport { ConsoleOriginalFunctions } from \"./console_original_functions.js\";\r\n\r\nexport class ConsoleVR {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n this._myForwardToBrowserConsole = true;\r\n }\r\n\r\n log(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.log(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n error(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.error(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n warn(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.warn(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n info(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.info(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n debug(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.debug(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n assert(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.assert(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n clear(...args) {\r\n if (this._myForwardToBrowserConsole) {\r\n ConsoleOriginalFunctions.clear(this._myEngine, ...args);\r\n }\r\n }\r\n\r\n setForwardToBrowserConsole(forwardToBrowserConsole) {\r\n this._myForwardToBrowserConsole = forwardToBrowserConsole;\r\n }\r\n\r\n isForwardToBrowserConsole() {\r\n return this._myForwardToBrowserConsole;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneVariables } from \"../easy_tune_variables.js\";\r\n\r\nexport class InitEasyTuneVariablesComponent extends Component {\r\n static TypeName = \"pp-init-easy-tune-variables\";\r\n static Properties = {\r\n _myInit: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myEasyTuneVariables = null;\r\n\r\n if (this._myInit) {\r\n // Prevents double global from same engine\r\n if (!Globals.hasEasyTuneVariables(this.engine)) {\r\n this._myEasyTuneVariables = new EasyTuneVariables();\r\n\r\n Globals.setEasyTuneVariables(this._myEasyTuneVariables, this.engine);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myEasyTuneVariables != null && Globals.getEasyTuneVariables(this.engine) == this._myEasyTuneVariables) {\r\n Globals.removeEasyTuneVariables(this.engine);\r\n }\r\n }\r\n}", "export class EasyTuneVariables {\r\n\r\n constructor() {\r\n this._myVariables = new Map();\r\n }\r\n\r\n add(variable, overwriteCurrentOne = false) {\r\n if (overwriteCurrentOne || !this._myVariables.has(variable.getName())) {\r\n this._myVariables.set(variable.getName(), variable);\r\n }\r\n }\r\n\r\n remove(variableName) {\r\n this._myVariables.delete(variableName);\r\n }\r\n\r\n get(variableName) {\r\n let variable = this._myVariables.get(variableName);\r\n if (variable) {\r\n return variable.getValue();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n set(variableName, value, resetDefaultValue = false) {\r\n let variable = this._myVariables.get(variableName);\r\n if (variable) {\r\n variable.setValue(value, resetDefaultValue);\r\n }\r\n }\r\n\r\n has(variableName) {\r\n return this._myVariables.has(variableName);\r\n }\r\n\r\n length() {\r\n return this._myVariables.size;\r\n }\r\n\r\n isWidgetCurrentVariable(variableName) {\r\n let variable = this._myVariables.get(variableName);\r\n if (variable) {\r\n return variable.isWidgetCurrentVariable();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getEasyTuneVariable(variableName) {\r\n return this._myVariables.get(variableName);\r\n }\r\n\r\n getEasyTuneVariablesList() {\r\n return Array.from(this._myVariables.values());\r\n }\r\n\r\n getEasyTuneVariablesNames() {\r\n return Array.from(this._myVariables.keys());\r\n }\r\n\r\n fromJSON(json, resetDefaultValue = false, manualImport = false) {\r\n let objectJSON = JSON.parse(json);\r\n\r\n for (let variable of this._myVariables.values()) {\r\n if ((variable.isManualImportEnabled() && manualImport) || (variable.isAutoImportEnabled() && !manualImport)) {\r\n let variableName = variable.getName();\r\n if (Object.hasOwn(objectJSON, variableName)) {\r\n let variableValueJSON = objectJSON[variableName];\r\n variable.fromJSON(variableValueJSON, resetDefaultValue);\r\n }\r\n }\r\n }\r\n }\r\n\r\n toJSON() {\r\n let objectJSON = {};\r\n\r\n for (let variable of this._myVariables.values()) {\r\n if (variable.isExportEnabled()) {\r\n objectJSON[variable.getName()] = variable.toJSON();\r\n }\r\n }\r\n\r\n return JSON.stringify(objectJSON);\r\n }\r\n\r\n registerValueChangedEventListener(variableName, callbackID, callback) {\r\n this._myVariables.get(variableName).registerValueChangedEventListener(callbackID, callback);\r\n }\r\n\r\n unregisterValueChangedEventListener(variableName, callbackID, callback) {\r\n this._myVariables.get(variableName).unregisterValueChangedEventListener(callbackID);\r\n }\r\n}", "import { ARCamera8thwall, Cursor, CursorTarget, DebugObject, DeviceOrientationLook, FingerCursor, FixedFoveation, HandTracking, HitTestLocation, HowlerAudioListener, HowlerAudioSource, ImageTexture, MouseLookComponent, PlayerHeight, TargetFramerate, TeleportComponent, Trail, TwoJointIkSolver, VideoTexture, VrModeActiveSwitch, Vrm, WasdControlsComponent } from \"@wonderlandengine/components\";\r\n\r\nexport function registerWLComponents(engine) {\r\n engine.registerComponent(\r\n ARCamera8thwall,\r\n Cursor,\r\n CursorTarget,\r\n DebugObject,\r\n DeviceOrientationLook,\r\n FingerCursor,\r\n FixedFoveation,\r\n HandTracking,\r\n HitTestLocation,\r\n HowlerAudioListener,\r\n HowlerAudioSource,\r\n ImageTexture,\r\n MouseLookComponent,\r\n PlayerHeight,\r\n TargetFramerate,\r\n TeleportComponent,\r\n Trail,\r\n TwoJointIkSolver,\r\n VideoTexture,\r\n VrModeActiveSwitch,\r\n Vrm,\r\n WasdControlsComponent\r\n );\r\n}", "import { AnimationComponent, CollisionComponent, InputComponent, LightComponent, MeshComponent, PhysXComponent, TextComponent, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { ARCamera8thwall, Anchor, Cursor, CursorTarget, DebugObject, DeviceOrientationLook, FingerCursor, FixedFoveation, HandTracking, HitTestLocation, HowlerAudioListener, HowlerAudioSource, ImageTexture, MouseLookComponent, PlaneDetection, PlayerHeight, TargetFramerate, TeleportComponent, Trail, TwoJointIkSolver, VideoTexture, VrModeActiveSwitch, Vrm, WasdControlsComponent } from \"@wonderlandengine/components\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { DefaultWLComponentCloneCallbacks } from \"./default_wl_component_clone_callbacks.js\";\r\nimport { ObjectUtils } from \"./object_utils.js\";\r\n\r\nlet _myCloneCallbacks = new WeakMap(); // Signature: callback(componentToClone, targetObject, useDefaultCloneAsFallback, deeCloneParams, customCloneParams)\r\nlet _myClonePostProcessCallbacks = new WeakMap(); // Signature: callback(componentToClone, clonedComponent, deeCloneParams, customCloneParams)\r\n\r\nexport class DeepCloneParams {\r\n\r\n constructor() {\r\n this._myDeepCloneComponents = false;\r\n this._myDeepCloneOverrideComponentsMap = new Map();\r\n this._myDeepCloneOverrideComponentsVariablesMap = new Map();\r\n }\r\n\r\n // The implementation is component dependant, not every component implements the deep clone\r\n setDeepCloneComponents(deepClone) {\r\n this._myDeepCloneComponents = deepClone;\r\n }\r\n\r\n // This value override the deep clone components value\r\n // The implementation is component dependant, not every component implements the deep clone\r\n setDeepCloneComponent(componentName, deepClone) {\r\n this._myDeepCloneOverrideComponentsMap.set(componentName, deepClone);\r\n }\r\n\r\n // This value override both the deep clone components value and the deep clone component override one\r\n // The implementation is component dependant, not every component variable override is taken into consideration\r\n setDeepCloneComponentVariable(componentName, variableName, deepClone) {\r\n let componentsVariablesMap = null;\r\n\r\n if (!this._myDeepCloneOverrideComponentsVariablesMap.has(componentName)) {\r\n this._myDeepCloneOverrideComponentsVariablesMap.set(componentName, new Map());\r\n }\r\n\r\n componentsVariablesMap = this._myDeepCloneOverrideComponentsVariablesMap.get(componentName);\r\n\r\n componentsVariablesMap.set(variableName, deepClone);\r\n }\r\n\r\n isDeepCloneComponent(componentName) {\r\n let deepCloneOverride = this._myDeepCloneOverrideComponentsMap.get(componentName);\r\n\r\n if (deepCloneOverride != null) {\r\n return deepCloneOverride;\r\n }\r\n\r\n return this._myDeepCloneComponents;\r\n }\r\n\r\n isDeepCloneComponentVariable(componentName, variableName) {\r\n let componentsVariablesMap = this._myDeepCloneOverrideComponentsVariablesMap.get(componentName);\r\n if (componentsVariablesMap != null) {\r\n let deepCloneOverride = componentsVariablesMap.get(variableName);\r\n if (deepCloneOverride != null) {\r\n return deepCloneOverride;\r\n }\r\n }\r\n\r\n return this.isDeepCloneComponent(componentName);\r\n }\r\n}\r\n\r\nexport class CustomCloneParams {\r\n\r\n constructor() {\r\n this._myParams = new Map();\r\n }\r\n\r\n addParam(name, value) {\r\n this._myParams.set(name, value);\r\n }\r\n\r\n removeParam(name) {\r\n this._myParams.delete(name);\r\n }\r\n\r\n getParam(name) {\r\n this._myParams.get(name);\r\n }\r\n\r\n hasParam(name) {\r\n this._myParams.has(name);\r\n }\r\n}\r\n\r\nexport function isWLComponent(classOrType) {\r\n return ComponentUtils.isWLNativeComponent(classOrType) || ComponentUtils.isWLJavascriptComponent(classOrType);\r\n}\r\n\r\nexport function isWLNativeComponent(classOrType) {\r\n let wlNative = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (ComponentUtils.getWLNativeComponentTypes().includes(type)) {\r\n wlNative = true;\r\n }\r\n\r\n return wlNative;\r\n}\r\n\r\nexport function isWLJavascriptComponent(classOrType) {\r\n let wlJavascript = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (ComponentUtils.getWLJavascriptComponentTypes().includes(type)) {\r\n wlJavascript = true;\r\n }\r\n\r\n return wlJavascript;\r\n}\r\n\r\nexport function getWLNativeComponentTypes() {\r\n return _myWLNativeComponentTypes;\r\n}\r\n\r\nexport function getWLJavascriptComponentTypes() {\r\n return _myWLJavascriptComponentTypes;\r\n}\r\n\r\nexport function getTypeFromClassOrType(classOrType) {\r\n if (classOrType == null) return;\r\n\r\n let type = classOrType;\r\n if (classOrType.TypeName != null) {\r\n type = classOrType.TypeName;\r\n }\r\n\r\n return type;\r\n}\r\n\r\nexport function getClassFromType(type, engine = Globals.getMainEngine()) {\r\n let classToReturn = null;\r\n\r\n if (ComponentUtils.isWLNativeComponent(type)) {\r\n if (ComponentUtils.isWLNativeComponentRegistered(type, engine)) {\r\n switch (type) {\r\n case AnimationComponent.TypeName:\r\n classToReturn = AnimationComponent;\r\n break;\r\n case CollisionComponent.TypeName:\r\n classToReturn = CollisionComponent;\r\n break;\r\n case InputComponent.TypeName:\r\n classToReturn = InputComponent;\r\n break;\r\n case LightComponent.TypeName:\r\n classToReturn = LightComponent;\r\n break;\r\n case MeshComponent.TypeName:\r\n classToReturn = MeshComponent;\r\n break;\r\n case PhysXComponent.TypeName:\r\n classToReturn = PhysXComponent;\r\n break;\r\n case TextComponent.TypeName:\r\n classToReturn = TextComponent;\r\n break;\r\n case ViewComponent.TypeName:\r\n classToReturn = ViewComponent;\r\n break;\r\n default:\r\n classToReturn = null;\r\n }\r\n }\r\n } else {\r\n classToReturn = ComponentUtils.getJavascriptComponentClass(type, engine);\r\n }\r\n\r\n return classToReturn;\r\n}\r\n\r\nexport function isRegistered(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return ComponentUtils.getClassFromType(type, engine) != null;\r\n}\r\n\r\nexport function getJavascriptComponentInstances(engine = Globals.getMainEngine()) {\r\n return Globals.getWASM(engine)._components;\r\n}\r\n\r\nexport function getJavascriptComponentClass(type, engine = Globals.getMainEngine()) {\r\n return ComponentUtils.getJavascriptComponentClassesByIndex(engine)[ComponentUtils.getJavascriptComponentTypeIndex(type, engine)];\r\n}\r\n\r\nexport function getJavascriptComponentClassesByIndex(engine = Globals.getMainEngine()) {\r\n return Globals.getWASM(engine)._componentTypes;\r\n}\r\n\r\nexport function getJavascriptComponentTypeIndex(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return ComponentUtils.getJavascriptComponentTypeIndexes(engine)[type];\r\n}\r\n\r\nexport function getJavascriptComponentTypeIndexes(engine = Globals.getMainEngine()) {\r\n return Globals.getWASM(engine)._componentTypeIndices;\r\n}\r\n\r\nexport function getJavascriptComponentTypeFromIndex(typeIndex, engine = Globals.getMainEngine()) {\r\n let type = null;\r\n\r\n let componentClass = ComponentUtils.getJavascriptComponentClassesByIndex(engine)[typeIndex];\r\n if (componentClass != null) {\r\n type = componentClass.TypeName;\r\n }\r\n\r\n return type;\r\n}\r\n\r\nexport function isWLNativeComponentRegistered(classOrType, engine = Globals.getMainEngine()) {\r\n let wasm = Globals.getWASM(engine);\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return wasm._wl_get_component_manager_index(wasm.tempUTF8(type)) >= 0;\r\n}\r\n\r\nexport function isCloneable(classOrType, defaultCloneValid = false, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return defaultCloneValid || ComponentUtils.hasCloneCallback(type, engine) || ComponentUtils.getClassFromType(type, engine)?.prototype.pp_clone != null;\r\n}\r\n\r\nexport function hasClonePostProcess(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n return ComponentUtils.hasClonePostProcessCallback(type, engine) || ComponentUtils.getClassFromType(type, engine)?.prototype.pp_clonePostProcess != null;\r\n}\r\n\r\nexport function clone(componentToClone, targetObject, deeCloneParams, customCloneParams, useDefaultCloneAsFallback = false, defaultCloneAutoStartIfNotActive = true) {\r\n let clonedComponent = null;\r\n\r\n let cloneCallback = ComponentUtils.getCloneCallback(componentToClone.type, ObjectUtils.getEngine(componentToClone.object));\r\n\r\n if (cloneCallback != null) {\r\n clonedComponent = cloneCallback(componentToClone, targetObject, deeCloneParams, customCloneParams);\r\n } else if (componentToClone.pp_clone != null) {\r\n clonedComponent = componentToClone.pp_clone(targetObject, deeCloneParams, customCloneParams);\r\n } else if (useDefaultCloneAsFallback) {\r\n clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject, defaultCloneAutoStartIfNotActive);\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function clonePostProcess(componentToClone, clonedComponent, deeCloneParams, customCloneParams) {\r\n let clonePostProcessCallback = ComponentUtils.getClonePostProcessCallback(componentToClone.type, ObjectUtils.getEngine(componentToClone.object));\r\n\r\n if (clonePostProcessCallback != null) {\r\n clonePostProcessCallback(componentToClone, clonedComponent, deeCloneParams, customCloneParams);\r\n } else if (componentToClone.pp_clonePostProcess != null) {\r\n componentToClone.pp_clonePostProcess(clonedComponent, deeCloneParams, customCloneParams);\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function cloneDefault(componentToClone, targetObject, autoStartIfNotActive = true) {\r\n let clonedComponent = ObjectUtils.addComponent(targetObject, componentToClone.type, componentToClone);\r\n\r\n // Trigger start, which otherwise would be called later, on first activation\r\n if (autoStartIfNotActive && !clonedComponent.active) {\r\n clonedComponent.active = true;\r\n clonedComponent.active = false;\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function setCloneCallback(classOrType, callback, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (!_myCloneCallbacks.has(engine)) {\r\n _myCloneCallbacks.set(engine, new Map());\r\n }\r\n\r\n _myCloneCallbacks.get(engine).set(type, callback);\r\n}\r\n\r\nexport function removeCloneCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (_myCloneCallbacks.has(engine)) {\r\n _myCloneCallbacks.get(engine).delete(type);\r\n }\r\n}\r\n\r\nexport function getCloneCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let callback = null;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myCloneCallbacks.has(engine)) {\r\n callback = _myCloneCallbacks.get(engine).get(type);\r\n }\r\n\r\n return callback;\r\n}\r\n\r\nexport function hasCloneCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let hasCallback = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myCloneCallbacks.has(engine)) {\r\n hasCallback = _myCloneCallbacks.get(engine).has(type);\r\n }\r\n\r\n return hasCallback;\r\n}\r\n\r\nexport function setClonePostProcessCallback(classOrType, callback, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (!_myClonePostProcessCallbacks.has(engine)) {\r\n _myClonePostProcessCallbacks.set(engine, new Map());\r\n }\r\n\r\n _myClonePostProcessCallbacks.get(engine).set(type, callback);\r\n}\r\n\r\nexport function removeClonePostProcessCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n if (_myClonePostProcessCallbacks.has(engine)) {\r\n _myClonePostProcessCallbacks.get(engine).delete(type);\r\n }\r\n}\r\n\r\nexport function getClonePostProcessCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let callback = null;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myClonePostProcessCallbacks.has(engine)) {\r\n callback = _myClonePostProcessCallbacks.get(engine).get(type);\r\n }\r\n\r\n return callback;\r\n}\r\n\r\nexport function hasClonePostProcessCallback(classOrType, engine = Globals.getMainEngine()) {\r\n let hasCallback = false;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n if (_myClonePostProcessCallbacks.has(engine)) {\r\n hasCallback = _myClonePostProcessCallbacks.get(engine).has(type);\r\n }\r\n\r\n return hasCallback;\r\n}\r\n\r\n\r\nexport function getDefaultWLComponentCloneCallback(classOrType) {\r\n let callback = null;\r\n\r\n let type = ComponentUtils.getTypeFromClassOrType(classOrType);\r\n\r\n switch (type) {\r\n case MeshComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.cloneMesh;\r\n break;\r\n case CollisionComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.cloneCollision;\r\n break;\r\n case TextComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.cloneText;\r\n break;\r\n case PhysXComponent.TypeName:\r\n callback = DefaultWLComponentCloneCallbacks.clonePhysX;\r\n break;\r\n default:\r\n callback = null;\r\n }\r\n\r\n return callback;\r\n}\r\n\r\n\r\nexport function hasDefaultWLComponentCloneCallback(classOrType) {\r\n return ComponentUtils.getDefaultWLComponentCloneCallback(classOrType) != null;\r\n}\r\n\r\n\r\nexport function setDefaultWLComponentCloneCallbacks(engine = Globals.getMainEngine()) {\r\n for (let nativeType of ComponentUtils.getWLNativeComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(nativeType);\r\n if (cloneCallback != null) {\r\n ComponentUtils.setCloneCallback(nativeType, cloneCallback, engine);\r\n }\r\n }\r\n\r\n for (let javascriptType of ComponentUtils.getWLJavascriptComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(javascriptType);\r\n if (cloneCallback != null) {\r\n ComponentUtils.setCloneCallback(javascriptType, cloneCallback, engine);\r\n }\r\n }\r\n}\r\n\r\nexport function removeDefaultWLComponentCloneCallbacks(engine = Globals.getMainEngine()) {\r\n for (let nativeType of ComponentUtils.getWLNativeComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(nativeType);\r\n if (cloneCallback != null) {\r\n if (ComponentUtils.getCloneCallback(nativeType, engine) == cloneCallback) {\r\n ComponentUtils.removeCloneCallback(nativeType, engine);\r\n }\r\n }\r\n }\r\n\r\n for (let javascriptType of ComponentUtils.getWLNativeComponentTypes()) {\r\n let cloneCallback = ComponentUtils.getDefaultWLComponentCloneCallback(javascriptType);\r\n if (cloneCallback != null) {\r\n if (ComponentUtils.getCloneCallback(javascriptType, engine) == cloneCallback) {\r\n ComponentUtils.removeCloneCallback(javascriptType, engine);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport let ComponentUtils = {\r\n isWLComponent,\r\n isWLNativeComponent,\r\n isWLJavascriptComponent,\r\n getWLNativeComponentTypes,\r\n getWLJavascriptComponentTypes,\r\n getTypeFromClassOrType,\r\n getClassFromType,\r\n isRegistered,\r\n\r\n getJavascriptComponentInstances,\r\n getJavascriptComponentClass,\r\n getJavascriptComponentClassesByIndex,\r\n getJavascriptComponentTypeIndex,\r\n getJavascriptComponentTypeIndexes,\r\n getJavascriptComponentTypeFromIndex,\r\n isWLNativeComponentRegistered,\r\n\r\n isCloneable,\r\n hasClonePostProcess,\r\n clone,\r\n clonePostProcess,\r\n cloneDefault,\r\n\r\n setCloneCallback,\r\n removeCloneCallback,\r\n getCloneCallback,\r\n hasCloneCallback,\r\n setClonePostProcessCallback,\r\n removeClonePostProcessCallback,\r\n getClonePostProcessCallback,\r\n hasClonePostProcessCallback,\r\n\r\n setDefaultWLComponentCloneCallbacks,\r\n removeDefaultWLComponentCloneCallbacks,\r\n getDefaultWLComponentCloneCallback,\r\n hasDefaultWLComponentCloneCallback\r\n};\r\n\r\n\r\n\r\nlet _myWLNativeComponentTypes = [\r\n AnimationComponent.TypeName,\r\n CollisionComponent.TypeName,\r\n InputComponent.TypeName,\r\n LightComponent.TypeName,\r\n MeshComponent.TypeName,\r\n PhysXComponent.TypeName,\r\n TextComponent.TypeName,\r\n ViewComponent.TypeName\r\n];\r\n\r\nlet _myWLJavascriptComponentTypes = [\r\n ARCamera8thwall.TypeName,\r\n Anchor.TypeName,\r\n Cursor.TypeName,\r\n CursorTarget.TypeName,\r\n DebugObject.TypeName,\r\n DeviceOrientationLook.TypeName,\r\n FingerCursor.TypeName,\r\n FixedFoveation.TypeName,\r\n HandTracking.TypeName,\r\n HitTestLocation.TypeName,\r\n HowlerAudioListener.TypeName,\r\n HowlerAudioSource.TypeName,\r\n ImageTexture.TypeName,\r\n MouseLookComponent.TypeName,\r\n PlaneDetection.TypeName,\r\n PlayerHeight.TypeName,\r\n TargetFramerate.TypeName,\r\n TeleportComponent.TypeName,\r\n Trail.TypeName,\r\n TwoJointIkSolver.TypeName,\r\n VideoTexture.TypeName,\r\n VrModeActiveSwitch.TypeName,\r\n Vrm.TypeName,\r\n WasdControlsComponent.TypeName\r\n];", "import { MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils, DeepCloneParams } from \"./component_utils.js\";\r\nimport { MeshUtils } from \"./mesh_utils.js\";\r\n\r\nexport function cloneMesh(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject, true);\r\n\r\n if (deepCloneParams.isDeepCloneComponentVariable(MeshComponent.TypeName, \"material\")) {\r\n if (componentToClone.material != null) {\r\n clonedComponent.material = componentToClone.material.clone();\r\n }\r\n }\r\n\r\n if (deepCloneParams.isDeepCloneComponentVariable(MeshComponent.TypeName, \"mesh\")) {\r\n clonedComponent.mesh = MeshUtils.clone(componentToClone.mesh);\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function cloneCollision(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject);\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function cloneText(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject);\r\n\r\n if (deepCloneParams.isDeepCloneComponentVariable(TextComponent.TypeName, \"material\")) {\r\n if (componentToClone.material != null) {\r\n clonedComponent.material = componentToClone.material.clone();\r\n }\r\n }\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport function clonePhysX(componentToClone, targetObject, deepCloneParams = new DeepCloneParams(), customCloneParams = null) {\r\n let clonedComponent = ComponentUtils.cloneDefault(componentToClone, targetObject);\r\n\r\n return clonedComponent;\r\n}\r\n\r\nexport let DefaultWLComponentCloneCallbacks = {\r\n cloneMesh,\r\n cloneCollision,\r\n cloneText,\r\n clonePhysX\r\n};", "import { Component, Object3D, Scene, WonderlandEngine, type ComponentConstructor } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Matrix3, Matrix4, Quaternion, Quaternion2, Vector3 } from \"../../type_definitions/array_type_definitions.js\";\r\nimport { Mat3Utils } from \"../../utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../utils/array/quat_utils.js\";\r\nimport { Vec3Utils } from \"../../utils/array/vec3_utils.js\";\r\nimport { MathUtils } from \"../../utils/math_utils.js\";\r\nimport { ComponentUtils, CustomCloneParams, DeepCloneParams } from \"./component_utils.js\";\r\n\r\nexport class CloneParams {\r\n\r\n /** Defaults to the object to clone parent, null can be used to specify u want the scene root as the parent */\r\n public myCloneParent: Object3D | null | undefined = undefined;\r\n\r\n\r\n /** Ignores components that are not clonable */\r\n public myIgnoreNonCloneable: boolean = false;\r\n /** All components are ignored, cloning only the object hierarchy */\r\n public myIgnoreComponents: boolean = false;\r\n /** Clones only the given object without the descendants */\r\n public myIgnoreDescendants: boolean = false;\r\n\r\n\r\n /** Ignores all component types in this list (example: `[\"mesh\"]`), has lower priority over `myComponentsToInclude` */\r\n public myComponentsToIgnore: string[] = [];\r\n /** Clones only the component types in this list (example: `[\"mesh\"]`), has higher priority over `myComponentsToIgnore`, if empty it's ignored */\r\n public myComponentsToInclude: string[] = [];\r\n /** Returns true if the component must be ignored. It's called after the previous filters */\r\n public myIgnoreComponentCallback: ((component: Component) => boolean) | null = null;\r\n\r\n\r\n /** Ignores all the objects in this list, has lower priority over `myDescendantsToInclude` */\r\n public myDescendantsToIgnore: Object3D[] = [];\r\n /** Clones only the objects in this list, has higher priority over `myDescendantsToIgnore`, if empty it's ignored */\r\n public myDescendantsToInclude: Object3D[] = [];\r\n /** Returns true if the object must be ignored. It's called after the previous filters */\r\n public myIgnoreDescendantCallback: ((component: Object3D) => boolean) | null = null;\r\n\r\n\r\n /** Uses the default component clone function */\r\n public myUseDefaultComponentClone: boolean = false;\r\n /** Uses the default component clone function only as fallback, that is if there is no custom component clone */\r\n public myUseDefaultComponentCloneAsFallback: boolean = false;\r\n /** Automatically starts the component even if it's cloned not activated, keeping it not active. This also triggers `onActivate` and `onDeactivate` once */\r\n public myDefaultComponentCloneAutoStartIfNotActive: boolean = true;\r\n\r\n\r\n /** Uses the default object clone function, ignoring all the other clone settings but `myCloneParent` and `myDefaultComponentCloneAutoStartIfNotActive` */\r\n public myUseDefaultObjectClone: boolean = false;\r\n /** Uses the default object clone function only as fallback, that is if the object is not PP cloneable */\r\n public myUseDefaultObjectCloneAsFallback: boolean = false;\r\n\r\n\r\n /** Used to specify if the object components must be deep cloned or not, you can also override the behavior for specific components and variables */\r\n public myComponentDeepCloneParams: DeepCloneParams = new DeepCloneParams();\r\n\r\n\r\n /** This class can be filled with whatever custom paramater the component clone functions could need */\r\n public myComponentCustomCloneParams: CustomCloneParams = new CustomCloneParams();\r\n}\r\n\r\n// GETTER\r\n\r\n// Position\r\n\r\nexport function getPosition(object: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPositionWorld(object, outPosition);\r\n}\r\n\r\nexport function getPositionWorld(object: Readonly, outPosition: T = Vec3Utils.create()): T {\r\n object.getPositionWorld(outPosition);\r\n return outPosition;\r\n}\r\n\r\nexport function getPositionLocal(object: Readonly, outPosition: T = Vec3Utils.create()): T {\r\n object.getPositionLocal(outPosition);\r\n return outPosition;\r\n}\r\n\r\n// Rotation\r\n\r\nexport function getRotation(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorld(object, outRotation);\r\n}\r\n\r\nexport function getRotationDegrees(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldDegrees(object, outRotation);\r\n}\r\n\r\nexport function getRotationRadians(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldRadians(object, outRotation);\r\n}\r\n\r\nexport function getRotationMatrix(object: Readonly): Matrix3;\r\nexport function getRotationMatrix(object: Readonly, outRotation: T): T;\r\nexport function getRotationMatrix(object: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationWorldMatrix(object, outRotation!);\r\n}\r\n\r\nexport function getRotationQuat(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldQuat(object, outRotation);\r\n}\r\n\r\n// Rotation World\r\n\r\nexport function getRotationWorld(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldDegrees(object, outRotation);\r\n}\r\n\r\nexport function getRotationWorldDegrees(object: Readonly, outRotation?: T): T {\r\n outRotation = ObjectUtils.getRotationWorldRadians(object, outRotation);\r\n outRotation = Vec3Utils.toDegrees(outRotation, outRotation);\r\n return outRotation!;\r\n}\r\n\r\nexport const getRotationWorldRadians = function () {\r\n const quat = QuatUtils.create();\r\n return function getRotationWorldRadians(object: Readonly, outRotation: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.toRadians(quat, outRotation);\r\n return outRotation;\r\n };\r\n}();\r\n\r\nexport const getRotationWorldMatrix = function () {\r\n const quat = QuatUtils.create();\r\n\r\n function getRotationWorldMatrix(object: Readonly): Matrix3;\r\n function getRotationWorldMatrix(object: Readonly, outRotation: T): T;\r\n function getRotationWorldMatrix(object: Readonly, outRotation: Matrix3 | T = Mat3Utils.create()): Matrix3 | T {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.toMatrix(quat, outRotation);\r\n return outRotation;\r\n }\r\n\r\n return getRotationWorldMatrix;\r\n}();\r\n\r\nexport function getRotationWorldQuat(object: Readonly, outRotation: T = QuatUtils.create()): T {\r\n object.getRotationWorld(outRotation);\r\n return outRotation;\r\n}\r\n\r\n// Rotation Local\r\n\r\nexport function getRotationLocal(object: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalDegrees(object, outRotation);\r\n}\r\n\r\nexport function getRotationLocalDegrees(object: Readonly, outRotation?: T): T {\r\n outRotation = ObjectUtils.getRotationLocalRadians(object, outRotation);\r\n outRotation = Vec3Utils.toDegrees(outRotation, outRotation);\r\n return outRotation!;\r\n}\r\n\r\nexport const getRotationLocalRadians = function () {\r\n const quat = QuatUtils.create();\r\n return function getRotationLocalRadians(object: Readonly, outRotation: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.toRadians(quat, outRotation);\r\n return outRotation;\r\n };\r\n}();\r\n\r\nexport const getRotationLocalMatrix = function () {\r\n const quat = QuatUtils.create();\r\n\r\n function getRotationLocalMatrix(object: Readonly): Matrix3;\r\n function getRotationLocalMatrix(object: Readonly, outRotation: T): T;\r\n function getRotationLocalMatrix(object: Readonly, outRotation: Matrix3 | T = Mat3Utils.create()): Matrix3 | T {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.toMatrix(quat, outRotation);\r\n return outRotation;\r\n }\r\n\r\n return getRotationLocalMatrix;\r\n}();\r\n\r\nexport function getRotationLocalQuat(object: Readonly, outRotation: T = QuatUtils.create()): T {\r\n object.getRotationLocal(outRotation);\r\n return outRotation;\r\n}\r\n\r\n// Scale\r\n\r\nexport function getScale(object: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScaleWorld(object, outScale);\r\n}\r\n\r\nexport function getScaleWorld(object: Readonly, outScale: T = Vec3Utils.create()): T {\r\n object.getScalingWorld(outScale);\r\n return outScale;\r\n}\r\n\r\nexport function getScaleLocal(object: Readonly, outScale: T = Vec3Utils.create()): T {\r\n object.getScalingLocal(outScale);\r\n return outScale;\r\n}\r\n\r\n// Transform\r\n\r\nexport function getTransform(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorld(object, outTransform);\r\n}\r\n\r\nexport function getTransformMatrix(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldMatrix(object, outTransform);\r\n}\r\n\r\nexport function getTransformQuat(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldQuat(object, outTransform);\r\n}\r\n\r\n// Transform World\r\n\r\nexport function getTransformWorld(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldMatrix(object, outTransform);\r\n}\r\n\r\nexport const getTransformWorldMatrix = function () {\r\n const transformQuat = Quat2Utils.create();\r\n const scale = Vec3Utils.create();\r\n return function getTransformWorldMatrix(object: Readonly, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformWorldQuat(object, transformQuat);\r\n ObjectUtils.getScaleWorld(object, scale);\r\n Mat4Utils.fromQuat(transformQuat, outTransform);\r\n Mat4Utils.scale(outTransform, scale, outTransform);\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport function getTransformWorldQuat(object: Readonly, outTransform: T = Quat2Utils.create()): T {\r\n object.getTransformWorld(outTransform);\r\n return outTransform;\r\n}\r\n\r\n// Transform Local\r\n\r\nexport function getTransformLocal(object: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocalMatrix(object, outTransform);\r\n}\r\n\r\nexport const getTransformLocalMatrix = function () {\r\n const transformQuat = Quat2Utils.create();\r\n const scale = Vec3Utils.create();\r\n return function getTransformLocalMatrix(object: Readonly, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformLocalQuat(object, transformQuat);\r\n ObjectUtils.getScaleLocal(object, scale);\r\n Mat4Utils.fromQuat(transformQuat, outTransform);\r\n Mat4Utils.scale(outTransform, scale, outTransform);\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport function getTransformLocalQuat(object: Readonly, outTransform: T = Quat2Utils.create()): T {\r\n object.getTransformLocal(outTransform);\r\n return outTransform;\r\n}\r\n\r\n// Axes\r\n\r\nexport function getAxes(object: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxesWorld(object, outAxes);\r\n}\r\n\r\nexport function getAxesWorld(object: Readonly, outAxes: [Vector3, Vector3, Vector3] = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]): [Vector3, Vector3, Vector3] {\r\n ObjectUtils.getLeftWorld(object, outAxes[0]);\r\n ObjectUtils.getUpWorld(object, outAxes[1]);\r\n ObjectUtils.getForwardWorld(object, outAxes[2]);\r\n return outAxes;\r\n}\r\n\r\nexport function getAxesLocal(object: Readonly, outAxes: [Vector3, Vector3, Vector3] = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]): [Vector3, Vector3, Vector3] {\r\n ObjectUtils.getLeftLocal(object, outAxes[0]);\r\n ObjectUtils.getUpLocal(object, outAxes[1]);\r\n ObjectUtils.getForwardLocal(object, outAxes[2]);\r\n return outAxes;\r\n}\r\n\r\n// Forward\r\n\r\nexport function getForward(object: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForwardWorld(object, outForward);\r\n}\r\n\r\nexport const getForwardWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getForwardWorld(object: Readonly, outForward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outForward[0] = rotation[6];\r\n outForward[1] = rotation[7];\r\n outForward[2] = rotation[8];\r\n return outForward;\r\n };\r\n}();\r\n\r\nexport const getForwardLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getForwardLocal(object: Readonly, outForward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outForward[0] = rotation[6];\r\n outForward[1] = rotation[7];\r\n outForward[2] = rotation[8];\r\n return outForward;\r\n };\r\n}();\r\n\r\n// Backward\r\n\r\nexport function getBackward(object: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackwardWorld(object, outBackward);\r\n}\r\n\r\nexport const getBackwardWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getBackwardWorld(object: Readonly, outBackward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outBackward[0] = -rotation[6];\r\n outBackward[1] = -rotation[7];\r\n outBackward[2] = -rotation[8];\r\n return outBackward;\r\n };\r\n}();\r\n\r\nexport const getBackwardLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getBackwardLocal(object: Readonly, outBackward: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outBackward[0] = -rotation[6];\r\n outBackward[1] = -rotation[7];\r\n outBackward[2] = -rotation[8];\r\n return outBackward;\r\n };\r\n}();\r\n\r\n// Up\r\n\r\nexport function getUp(object: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUpWorld(object, outUp);\r\n}\r\n\r\nexport const getUpWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getUpWorld(object: Readonly, outUp: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outUp[0] = rotation[3];\r\n outUp[1] = rotation[4];\r\n outUp[2] = rotation[5];\r\n return outUp;\r\n };\r\n}();\r\n\r\nexport const getUpLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getUpLocal(object: Readonly, outUp: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outUp[0] = rotation[3];\r\n outUp[1] = rotation[4];\r\n outUp[2] = rotation[5];\r\n return outUp;\r\n };\r\n}();\r\n\r\n// Down\r\n\r\nexport function getDown(object: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDownWorld(object, outDown);\r\n}\r\n\r\nexport const getDownWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getDownWorld(object: Readonly, outDown: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outDown[0] = -rotation[3];\r\n outDown[1] = -rotation[4];\r\n outDown[2] = -rotation[5];\r\n return outDown;\r\n };\r\n}();\r\n\r\nexport const getDownLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getDownLocal(object: Readonly, outDown: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outDown[0] = -rotation[3];\r\n outDown[1] = -rotation[4];\r\n outDown[2] = -rotation[5];\r\n return outDown;\r\n };\r\n}();\r\n\r\n// Left\r\n\r\nexport function getLeft(object: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeftWorld(object, outLeft);\r\n}\r\n\r\nexport const getLeftWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getLeftWorld(object: Readonly, outLeft: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outLeft[0] = rotation[0];\r\n outLeft[1] = rotation[1];\r\n outLeft[2] = rotation[2];\r\n return outLeft;\r\n };\r\n}();\r\n\r\nexport const getLeftLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getLeftLocal(object: Readonly, outLeft: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outLeft[0] = rotation[0];\r\n outLeft[1] = rotation[1];\r\n outLeft[2] = rotation[2];\r\n return outLeft;\r\n };\r\n}();\r\n\r\n// Right\r\n\r\nexport function getRight(object: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRightWorld(object, outRight);\r\n}\r\n\r\nexport const getRightWorld = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getRightWorld(object: Readonly, outRight: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldMatrix(object, rotation);\r\n outRight[0] = -rotation[0];\r\n outRight[1] = -rotation[1];\r\n outRight[2] = -rotation[2];\r\n return outRight;\r\n };\r\n}();\r\n\r\nexport const getRightLocal = function () {\r\n const rotation = Mat3Utils.create();\r\n return function getRightLocal(object: Readonly, outRight: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationLocalMatrix(object, rotation);\r\n outRight[0] = -rotation[0];\r\n outRight[1] = -rotation[1];\r\n outRight[2] = -rotation[2];\r\n return outRight;\r\n };\r\n}();\r\n\r\n// SETTER\r\n\r\n// Position\r\n\r\nexport function setPosition(object: Object3D, position: Vector3): Object3D {\r\n return ObjectUtils.setPositionWorld(object, position);\r\n}\r\n\r\nexport function setPositionWorld(object: Object3D, position: Vector3): Object3D {\r\n return object.setPositionWorld(position);\r\n}\r\n\r\nexport function setPositionLocal(object: Object3D, position: Vector3): Object3D {\r\n return object.setPositionLocal(position);\r\n}\r\n\r\n// Rotation\r\n\r\nexport function setRotation(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorld(object, rotation);\r\n}\r\n\r\nexport function setRotationDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorldDegrees(object, rotation);\r\n}\r\n\r\nexport function setRotationRadians(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorldRadians(object, rotation);\r\n}\r\n\r\nexport function setRotationMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n return ObjectUtils.setRotationWorldMatrix(object, rotation);\r\n}\r\n\r\nexport function setRotationQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return ObjectUtils.setRotationWorldQuat(object, rotation);\r\n}\r\n\r\n// Rotation World\r\n\r\nexport function setRotationWorld(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationWorldDegrees(object, rotation);\r\n}\r\n\r\nexport const setRotationWorldDegrees = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationWorldDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, quat);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setRotationWorldRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function setRotationWorldRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.setRotationWorldDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const setRotationWorldMatrix = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationWorldMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, quat);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport function setRotationWorldQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return object.setRotationWorld(rotation);\r\n}\r\n\r\n// Rotation Local\r\n\r\nexport function setRotationLocal(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.setRotationLocalDegrees(object, rotation);\r\n}\r\n\r\nexport const setRotationLocalDegrees = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationLocalDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, quat);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setRotationLocalRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function setRotationLocalRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.setRotationLocalDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const setRotationLocalMatrix = function () {\r\n const quat = QuatUtils.create();\r\n return function setRotationLocalMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, quat);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport function setRotationLocalQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return object.setRotationLocal(rotation);\r\n}\r\n\r\n// Scale\r\n\r\nexport function setScale(object: Object3D, scale: Vector3): Object3D;\r\nexport function setScale(object: Object3D, uniformScale: number): Object3D;\r\nexport function setScale(object: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScaleWorld(object, scale as Vector3);\r\n}\r\n\r\nexport const setScaleWorld = function () {\r\n const vector = Vec3Utils.create();\r\n\r\n function setScaleWorld(object: Object3D, scale: Vector3): Object3D;\r\n function setScaleWorld(object: Object3D, uniformScale: number): Object3D;\r\n function setScaleWorld(object: Object3D, scale: Vector3 | number): Object3D {\r\n if (isNaN(scale as number)) {\r\n return object.setScalingWorld(scale as Vector3);\r\n } else {\r\n Vec3Utils.set(vector, scale);\r\n return object.setScalingWorld(vector);\r\n }\r\n }\r\n\r\n return setScaleWorld;\r\n}();\r\n\r\nexport const setScaleLocal = function () {\r\n const vector = Vec3Utils.create();\r\n\r\n function setScaleLocal(object: Object3D, scale: Vector3): Object3D;\r\n function setScaleLocal(object: Object3D, uniformScale: number): Object3D;\r\n function setScaleLocal(object: Object3D, scale: Vector3 | number): Object3D {\r\n if (isNaN(scale as number)) {\r\n return object.setScalingLocal(scale as Vector3);\r\n } else {\r\n Vec3Utils.set(vector, scale);\r\n return object.setScalingLocal(vector);\r\n }\r\n }\r\n\r\n return setScaleLocal;\r\n}();\r\n\r\n// Axes \r\n\r\nexport function setAxes(object: Object3D, left?: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n return ObjectUtils.setAxesWorld(object, left, up, forward);\r\n}\r\n\r\nexport function setAxesWorld(object: Object3D, left?: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n if (forward != null) {\r\n return ObjectUtils.setForwardWorld(object, forward, up, left);\r\n } else if (up != null) {\r\n return ObjectUtils.setUpWorld(object, up, forward, left);\r\n } else if (left != null) {\r\n return ObjectUtils.setLeftWorld(object, left, up, forward);\r\n }\r\n\r\n return object;\r\n}\r\n\r\nexport function setAxesLocal(object: Object3D, left?: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n if (forward != null) {\r\n return ObjectUtils.setForwardLocal(object, forward, up, left);\r\n } else if (up != null) {\r\n return ObjectUtils.setUpLocal(object, up, forward, left);\r\n } else if (left != null) {\r\n return ObjectUtils.setLeftLocal(object, left, up, forward);\r\n }\r\n\r\n return object;\r\n}\r\n\r\n// Forward\r\n\r\nexport function setForward(object: Object3D, forward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setForwardWorld(object, forward, up, left);\r\n}\r\n\r\nexport const setForwardWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setForwardWorld(object: Object3D, forward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setForward(quat, forward, up, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setForwardLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setForwardLocal(object: Object3D, forward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setForward(quat, forward, up, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Backward\r\n\r\nexport function setBackward(object: Object3D, backward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setBackwardWorld(object, backward, up, left);\r\n}\r\n\r\nexport const setBackwardWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setBackwardWorld(object: Object3D, backward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setBackward(quat, backward, up, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setBackwardLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setBackwardLocal(object: Object3D, backward: Vector3, up?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setBackward(quat, backward, up, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Up\r\n\r\nexport function setUp(object: Object3D, up: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setUpWorld(object, up, forward, left);\r\n}\r\n\r\nexport const setUpWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setUpWorld(object: Object3D, up: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setUp(quat, up, forward, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setUpLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setUpLocal(object: Object3D, up: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setUp(quat, up, forward, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Down\r\n\r\nexport function setDown(object: Object3D, down: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n return ObjectUtils.setDownWorld(object, down, forward, left);\r\n}\r\n\r\nexport const setDownWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setDownWorld(object: Object3D, down: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setDown(quat, down, forward, left);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setDownLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setDownLocal(object: Object3D, down: Vector3, forward?: Vector3, left?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setDown(quat, down, forward, left);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Left\r\n\r\nexport function setLeft(object: Object3D, left: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n return ObjectUtils.setLeftWorld(object, left, up, forward);\r\n}\r\n\r\nexport const setLeftWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setLeftWorld(object: Object3D, left: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setLeft(quat, left, up, forward);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setLeftLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setLeftLocal(object: Object3D, left: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setLeft(quat, left, up, forward);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Right\r\n\r\nexport function setRight(object: Object3D, right: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n return ObjectUtils.setRightWorld(object, right, up, forward);\r\n}\r\n\r\nexport const setRightWorld = function () {\r\n const quat = QuatUtils.create();\r\n return function setRightWorld(object: Object3D, right: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, quat);\r\n QuatUtils.setRight(quat, right, up, forward);\r\n return ObjectUtils.setRotationWorldQuat(object, quat);\r\n };\r\n}();\r\n\r\nexport const setRightLocal = function () {\r\n const quat = QuatUtils.create();\r\n return function setRightLocal(object: Object3D, right: Vector3, up?: Vector3, forward?: Vector3): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, quat);\r\n QuatUtils.setRight(quat, right, up, forward);\r\n return ObjectUtils.setRotationLocalQuat(object, quat);\r\n };\r\n}();\r\n\r\n// Transform\r\n\r\nexport function setTransform(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformWorld(object, transform);\r\n}\r\n\r\nexport function setTransformMatrix(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformWorldMatrix(object, transform);\r\n}\r\n\r\nexport function setTransformQuat(object: Object3D, transform: Quaternion2): Object3D {\r\n return ObjectUtils.setTransformWorldQuat(object, transform);\r\n}\r\n\r\n// Transform World\r\n\r\nexport function setTransformWorld(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformWorldMatrix(object, transform);\r\n}\r\n\r\nexport const setTransformWorldMatrix = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n const scale = Vec3Utils.create();\r\n const transformMatrixNoScale = Mat4Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function setTransformWorldMatrix(object: Object3D, transform: Matrix4): Object3D {\r\n Mat4Utils.getPosition(transform, position);\r\n Mat4Utils.getScale(transform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(transform, inverseScale, transformMatrixNoScale);\r\n Mat4Utils.getRotationQuat(transformMatrixNoScale, rotation);\r\n QuatUtils.normalize(rotation, rotation);\r\n ObjectUtils.setScaleWorld(object, scale);\r\n ObjectUtils.setRotationWorldQuat(object, rotation);\r\n ObjectUtils.setPositionWorld(object, position);\r\n\r\n return object;\r\n };\r\n}();\r\n\r\nexport function setTransformWorldQuat(object: Object3D, transform: Quaternion2): Object3D {\r\n return object.setTransformWorld(transform);\r\n}\r\n\r\n// Transform Local\r\n\r\nexport function setTransformLocal(object: Object3D, transform: Matrix4): Object3D {\r\n return ObjectUtils.setTransformLocalMatrix(object, transform);\r\n}\r\n\r\nexport const setTransformLocalMatrix = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n const scale = Vec3Utils.create();\r\n const transformMatrixNoScale = Mat4Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function setTransformLocalMatrix(object: Object3D, transform: Matrix4): Object3D {\r\n Mat4Utils.getPosition(transform, position);\r\n Mat4Utils.getScale(transform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(transform, inverseScale, transformMatrixNoScale);\r\n Mat4Utils.getRotationQuat(transformMatrixNoScale, rotation);\r\n QuatUtils.normalize(rotation, rotation);\r\n ObjectUtils.setScaleLocal(object, scale);\r\n ObjectUtils.setRotationLocalQuat(object, rotation);\r\n ObjectUtils.setPositionLocal(object, position);\r\n\r\n return object;\r\n };\r\n}();\r\n\r\nexport function setTransformLocalQuat(object: Object3D, transform: Quaternion2): Object3D {\r\n return object.setTransformLocal(transform);\r\n}\r\n\r\n// RESET\r\n\r\n// Position\r\n\r\nexport function resetPosition(object: Object3D): Object3D {\r\n return ObjectUtils.resetPositionWorld(object);\r\n}\r\n\r\nexport const resetPositionWorld = function () {\r\n const zero = Vec3Utils.create();\r\n return function resetPositionWorld(object: Object3D): Object3D {\r\n return ObjectUtils.setPositionWorld(object, zero);\r\n };\r\n}();\r\n\r\nexport const resetPositionLocal = function () {\r\n const zero = Vec3Utils.create();\r\n return function resetPositionLocal(object: Object3D): Object3D {\r\n return ObjectUtils.setPositionLocal(object, zero);\r\n };\r\n}();\r\n\r\n// Rotation\r\n\r\nexport function resetRotation(object: Object3D): Object3D {\r\n return ObjectUtils.resetRotationWorld(object);\r\n}\r\n\r\nexport const resetRotationWorld = function () {\r\n const identity = QuatUtils.create();\r\n return function resetRotationWorld(object: Object3D): Object3D {\r\n return ObjectUtils.setRotationWorldQuat(object, identity);\r\n };\r\n}();\r\n\r\nexport const resetRotationLocal = function () {\r\n const identity = QuatUtils.create();\r\n return function resetRotationLocal(object: Object3D): Object3D {\r\n return ObjectUtils.setRotationLocalQuat(object, identity);\r\n };\r\n}();\r\n\r\n// Scale\r\n\r\nexport function resetScale(object: Object3D): Object3D {\r\n return ObjectUtils.resetScaleWorld(object);\r\n}\r\n\r\nexport const resetScaleWorld = function () {\r\n const one = Vec3Utils.create(1);\r\n return function resetScaleWorld(object: Object3D): Object3D {\r\n return ObjectUtils.setScaleWorld(object, one);\r\n };\r\n}();\r\n\r\nexport const resetScaleLocal = function () {\r\n const one = Vec3Utils.create(1);\r\n return function resetScaleLocal(object: Object3D): Object3D {\r\n return ObjectUtils.setScaleLocal(object, one);\r\n };\r\n}();\r\n\r\n// Transform\r\n\r\nexport function resetTransform(object: Object3D): Object3D {\r\n return ObjectUtils.resetTransformWorld(object);\r\n}\r\n\r\nexport function resetTransformWorld(object: Object3D): Object3D {\r\n ObjectUtils.resetScaleWorld(object);\r\n ObjectUtils.resetRotationWorld(object);\r\n ObjectUtils.resetPositionWorld(object);\r\n\r\n return object;\r\n}\r\n\r\nexport function resetTransformLocal(object: Object3D): Object3D {\r\n ObjectUtils.resetScaleLocal(object);\r\n ObjectUtils.resetRotationLocal(object);\r\n ObjectUtils.resetPositionLocal(object);\r\n\r\n return object;\r\n}\r\n\r\n// TRANSFORMATIONS\r\n\r\n// Translate\r\n\r\nexport function translate(object: Object3D, translation: Vector3): Object3D {\r\n return ObjectUtils.translateWorld(object, translation);\r\n}\r\n\r\nexport function translateWorld(object: Object3D, translation: Vector3): Object3D {\r\n return object.translateWorld(translation);\r\n}\r\n\r\nexport function translateLocal(object: Object3D, translation: Vector3): Object3D {\r\n return object.translateLocal(translation);\r\n}\r\n\r\nexport function translateObject(object: Object3D, translation: Vector3): Object3D {\r\n return object.translateObject(translation);\r\n}\r\n\r\n// Translate Axis\r\n\r\nexport function translateAxis(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n return ObjectUtils.translateAxisWorld(object, amount, direction);\r\n}\r\n\r\nexport const translateAxisWorld = function () {\r\n const translation = Vec3Utils.create();\r\n return function translateAxisWorld(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n Vec3Utils.scale(direction, amount, translation);\r\n return ObjectUtils.translateWorld(object, translation);\r\n };\r\n}();\r\n\r\nexport const translateAxisLocal = function () {\r\n const translation = Vec3Utils.create();\r\n return function translateAxisLocal(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n Vec3Utils.scale(direction, amount, translation);\r\n return ObjectUtils.translateLocal(object, translation);\r\n };\r\n}();\r\n\r\nexport const translateAxisObject = function () {\r\n const translation = Vec3Utils.create();\r\n return function translateAxisObject(object: Object3D, amount: number, direction: Vector3): Object3D {\r\n Vec3Utils.scale(direction, amount, translation);\r\n return ObjectUtils.translateObject(object, translation);\r\n };\r\n}();\r\n\r\n// Rotate\r\n\r\nexport function rotate(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorld(object, rotation);\r\n}\r\n\r\nexport function rotateDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorldDegrees(object, rotation);\r\n}\r\n\r\nexport function rotateRadians(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorldRadians(object, rotation);\r\n}\r\n\r\nexport function rotateMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n return ObjectUtils.rotateWorldMatrix(object, rotation);\r\n}\r\n\r\nexport function rotateQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return ObjectUtils.rotateWorldQuat(object, rotation);\r\n}\r\n\r\n// Rotate World\r\n\r\nexport function rotateWorld(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateWorldDegrees(object, rotation);\r\n}\r\n\r\nexport const rotateWorldDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateWorldDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateWorldQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateWorldRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateWorldRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateWorldDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const rotateWorldMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateWorldMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateWorldQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateWorldQuat = function () {\r\n const currentRotationQuat = QuatUtils.create();\r\n return function rotateWorldQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n ObjectUtils.getRotationWorldQuat(object, currentRotationQuat);\r\n QuatUtils.mul(rotation, currentRotationQuat, currentRotationQuat);\r\n QuatUtils.normalize(currentRotationQuat, currentRotationQuat);\r\n return ObjectUtils.setRotationWorldQuat(object, currentRotationQuat);\r\n };\r\n}();\r\n\r\n// Rotate Local\r\n\r\nexport function rotateLocal(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateLocalDegrees(object, rotation);\r\n}\r\n\r\nexport const rotateLocalDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateLocalDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateLocalQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateLocalRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateLocalRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateLocalDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const rotateLocalMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateLocalMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateLocalQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateLocalQuat = function () {\r\n const currentRotationQuat = QuatUtils.create();\r\n return function rotateLocalQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n ObjectUtils.getRotationLocalQuat(object, currentRotationQuat);\r\n QuatUtils.mul(rotation, currentRotationQuat, currentRotationQuat);\r\n QuatUtils.normalize(currentRotationQuat, currentRotationQuat);\r\n return ObjectUtils.setRotationLocalQuat(object, currentRotationQuat);\r\n };\r\n}();\r\n\r\n// Rotate Object\r\n\r\nexport function rotateObject(object: Object3D, rotation: Vector3): Object3D {\r\n return ObjectUtils.rotateObjectDegrees(object, rotation);\r\n}\r\n\r\nexport const rotateObjectDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateObjectDegrees(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateObjectQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport const rotateObjectRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateObjectRadians(object: Object3D, rotation: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateObjectDegrees(object, degreesRotation);\r\n };\r\n}();\r\n\r\nexport const rotateObjectMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateObjectMatrix(object: Object3D, rotation: Matrix3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateObjectQuat(object, rotationQuat);\r\n };\r\n}();\r\n\r\nexport function rotateObjectQuat(object: Object3D, rotation: Quaternion): Object3D {\r\n return object.rotateObject(rotation);\r\n}\r\n\r\n// Rotate Axis\r\n\r\nexport function rotateAxis(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorld(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldRadians(object, angle, axis);\r\n}\r\n\r\n// Rotate Axis World\r\n\r\nexport function rotateAxisWorld(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisWorldDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisWorldRadians(object, MathUtils.toRadians(angle), axis);\r\n}\r\n\r\nexport const rotateAxisWorldRadians = function () {\r\n const rotation = QuatUtils.create();\r\n return function rotateAxisWorldRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n QuatUtils.fromAxisRadians(angle, axis, rotation);\r\n return ObjectUtils.rotateWorldQuat(object, rotation);\r\n };\r\n}();\r\n\r\n// Rotate Axis Local\r\n\r\nexport function rotateAxisLocal(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisLocalDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisLocalDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisLocalRadians(object, MathUtils.toRadians(angle), axis);\r\n}\r\n\r\nexport const rotateAxisLocalRadians = function () {\r\n const rotation = QuatUtils.create();\r\n return function rotateAxisLocalRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n QuatUtils.fromAxisRadians(angle, axis, rotation);\r\n return ObjectUtils.rotateLocalQuat(object, rotation);\r\n };\r\n}();\r\n\r\n// Rotate Axis Object\r\n\r\nexport function rotateAxisObject(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisObjectDegrees(object, angle, axis);\r\n}\r\n\r\nexport function rotateAxisObjectDegrees(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n return ObjectUtils.rotateAxisObjectRadians(object, MathUtils.toRadians(angle), axis);\r\n}\r\n\r\nexport const rotateAxisObjectRadians = function () {\r\n const rotation = QuatUtils.create();\r\n return function rotateAxisObjectRadians(object: Object3D, angle: number, axis: Vector3): Object3D {\r\n QuatUtils.fromAxisRadians(angle, axis, rotation);\r\n return ObjectUtils.rotateObjectQuat(object, rotation);\r\n };\r\n}();\r\n\r\n// Rotate Around\r\n\r\nexport function rotateAround(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorld(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldDegrees(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldRadians(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldMatrix(object, rotation, origin);\r\n}\r\n\r\nexport function rotateAroundQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldQuat(object, rotation, origin);\r\n}\r\n\r\n// Rotate Around World\r\n\r\nexport function rotateAroundWorld(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundWorldDegrees(object, rotation, origin);\r\n}\r\n\r\nexport const rotateAroundWorldDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundWorldDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateAroundWorldQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundWorldRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateAroundWorldRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateAroundWorldDegrees(object, degreesRotation, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundWorldMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundWorldMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateAroundWorldQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundWorldQuat = function () {\r\n const axis = Vec3Utils.create();\r\n return function rotateAroundWorldQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n QuatUtils.getAxis(rotation, axis);\r\n const angle = QuatUtils.getAngleRadians(rotation,);\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, axis, origin);\r\n };\r\n}();\r\n\r\n// Rotate Around Local\r\n\r\nexport function rotateAroundLocal(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundLocalDegrees(object, rotation, origin);\r\n}\r\n\r\nexport const rotateAroundLocalDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundLocalDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateAroundLocalQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundLocalRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateAroundLocalRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateAroundLocalDegrees(object, degreesRotation, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundLocalMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundLocalMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateAroundLocalQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundLocalQuat = function () {\r\n const axis = Vec3Utils.create();\r\n return function rotateAroundLocalQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n QuatUtils.getAxis(rotation, axis);\r\n const angle = QuatUtils.getAngleRadians(rotation,);\r\n return ObjectUtils.rotateAroundAxisLocalRadians(object, angle, axis, origin);\r\n };\r\n}();\r\n\r\n// Rotate Around Object\r\n\r\nexport function rotateAroundObject(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundObjectDegrees(object, rotation, origin);\r\n}\r\n\r\nexport const rotateAroundObjectDegrees = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundObjectDegrees(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.degreesToQuat(rotation, rotationQuat);\r\n return ObjectUtils.rotateAroundObjectQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundObjectRadians = function () {\r\n const degreesRotation = Vec3Utils.create();\r\n return function rotateAroundObjectRadians(object: Object3D, rotation: Vector3, origin: Vector3): Object3D {\r\n Vec3Utils.toDegrees(rotation, degreesRotation);\r\n return ObjectUtils.rotateAroundObjectDegrees(object, degreesRotation, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundObjectMatrix = function () {\r\n const rotationQuat = QuatUtils.create();\r\n return function rotateAroundObjectMatrix(object: Object3D, rotation: Matrix3, origin: Vector3): Object3D {\r\n Mat3Utils.toQuat(rotation, rotationQuat);\r\n QuatUtils.normalize(rotationQuat, rotationQuat);\r\n return ObjectUtils.rotateAroundObjectQuat(object, rotationQuat, origin);\r\n };\r\n}();\r\n\r\nexport const rotateAroundObjectQuat = function () {\r\n const axis = Vec3Utils.create();\r\n return function rotateAroundObjectQuat(object: Object3D, rotation: Quaternion, origin: Vector3): Object3D {\r\n QuatUtils.getAxis(rotation, axis);\r\n const angle = QuatUtils.getAngleRadians(rotation,);\r\n return ObjectUtils.rotateAroundAxisObjectRadians(object, angle, axis, origin);\r\n };\r\n}();\r\n\r\n// Rotate Around Axis\r\n\r\nexport function rotateAroundAxis(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorld(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, axis, origin);\r\n}\r\n\r\n// Rotate Around Axis World\r\n\r\nexport function rotateAroundAxisWorld(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisWorldDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, MathUtils.toRadians(angle), axis, origin);\r\n}\r\n\r\nexport const rotateAroundAxisWorldRadians = function () {\r\n const transformToRotate = Quat2Utils.create();\r\n const transformToRotateConjugate = Quat2Utils.create();\r\n const transformQuat = Quat2Utils.create();\r\n const defaultQuat = QuatUtils.create();\r\n return function rotateAroundAxisWorldRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n Quat2Utils.setPositionRotationQuat(transformToRotate, origin, defaultQuat);\r\n ObjectUtils.getTransformWorldQuat(object, transformQuat);\r\n Quat2Utils.conjugate(transformToRotate, transformToRotateConjugate);\r\n Quat2Utils.mul(transformToRotateConjugate, transformQuat, transformQuat);\r\n Quat2Utils.rotateAxisRadians(transformToRotate, angle, axis, transformToRotate);\r\n Quat2Utils.mul(transformToRotate, transformQuat, transformQuat);\r\n return ObjectUtils.setTransformWorldQuat(object, transformQuat);\r\n };\r\n}();\r\n\r\n// Rotate Around Axis Local\r\n\r\nexport function rotateAroundAxisLocal(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisLocalDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalRadians(object, MathUtils.toRadians(angle), axis, origin);\r\n}\r\n\r\nexport const rotateAroundAxisLocalRadians = function () {\r\n const convertedPosition = Vec3Utils.create();\r\n const convertedAxis = Vec3Utils.create();\r\n return function rotateAroundAxisLocalRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n ObjectUtils.convertPositionLocalToWorld(object, origin, convertedPosition);\r\n ObjectUtils.convertDirectionLocalToWorld(object, axis, convertedAxis);\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, convertedAxis, convertedPosition);\r\n };\r\n}();\r\n\r\n// Rotate Around Axis Object\r\n\r\nexport function rotateAroundAxisObject(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectDegrees(object, angle, axis, origin);\r\n}\r\n\r\nexport function rotateAroundAxisObjectDegrees(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectRadians(object, MathUtils.toRadians(angle), axis, origin);\r\n}\r\n\r\nexport const rotateAroundAxisObjectRadians = function () {\r\n const convertedPosition = Vec3Utils.create();\r\n const convertedAxis = Vec3Utils.create();\r\n return function rotateAroundAxisObjectRadians(object: Object3D, angle: number, axis: Vector3, origin: Vector3): Object3D {\r\n ObjectUtils.convertPositionObjectToWorld(object, origin, convertedPosition);\r\n ObjectUtils.convertDirectionObjectToWorld(object, axis, convertedAxis);\r\n return ObjectUtils.rotateAroundAxisWorldRadians(object, angle, convertedAxis, convertedPosition);\r\n };\r\n}();\r\n\r\n// Scale\r\n\r\n// #TODO For now it does not really make sense in WL to scale in world space or parent space\r\n// so there is no scale default function\r\n\r\nexport const scaleObject = function () {\r\n const vector = Vec3Utils.create();\r\n\r\n function scaleObject(object: Object3D, scale: Vector3): Object3D;\r\n function scaleObject(object: Object3D, uniformScale: number): Object3D;\r\n function scaleObject(object: Object3D, scale: Vector3 | number): Object3D {\r\n if (isNaN(scale as number)) {\r\n return object.scaleLocal(scale as Vector3);\r\n } else {\r\n Vec3Utils.set(vector, scale);\r\n return object.scaleLocal(vector);\r\n }\r\n }\r\n\r\n return scaleObject;\r\n}();\r\n\r\n// Look At\r\n\r\nexport function lookAt(object: Object3D, position: Vector3, up: Vector3): Object3D {\r\n return ObjectUtils.lookAtWorld(object, position, up);\r\n}\r\n\r\nexport const lookAtWorld = function () {\r\n const direction = Vec3Utils.create();\r\n return function lookAtWorld(object: Object3D, position: Vector3, up: Vector3): Object3D {\r\n ObjectUtils.getPositionWorld(object, direction);\r\n Vec3Utils.sub(position, direction, direction);\r\n return ObjectUtils.lookToWorld(object, direction, up);\r\n };\r\n}();\r\n\r\nexport const lookAtLocal = function () {\r\n const direction = Vec3Utils.create();\r\n return function lookAtLocal(object: Object3D, position: Vector3, up: Vector3): Object3D {\r\n ObjectUtils.getPositionLocal(object, direction);\r\n Vec3Utils.sub(position, direction, direction);\r\n return ObjectUtils.lookToLocal(object, direction, up);\r\n };\r\n}();\r\n\r\nexport function lookTo(object: Object3D, direction: Vector3, up: Vector3): Object3D {\r\n return ObjectUtils.lookToWorld(object, direction, up);\r\n}\r\n\r\nexport const lookToWorld: (object: Object3D, direction: Vector3, up?: Vector3) => Object3D = function () {\r\n const internalUp = Vec3Utils.create();\r\n return function lookToWorld(object: Object3D, direction: Vector3, up: Vector3 = ObjectUtils.getUpWorld(object, internalUp)): Object3D {\r\n return ObjectUtils.setForwardWorld(object, direction, up);\r\n };\r\n}();\r\n\r\nexport const lookToLocal: (object: Object3D, direction: Vector3, up?: Vector3) => Object3D = function () {\r\n const internalUp = Vec3Utils.create();\r\n return function lookToLocal(object: Object3D, direction: Vector3, up: Vector3 = ObjectUtils.getUpLocal(object, internalUp)): Object3D {\r\n return ObjectUtils.setForwardLocal(object, direction, up);\r\n };\r\n}();\r\n\r\n// EXTRA\r\n\r\n// Convert Vector Object World\r\n\r\nexport const convertPositionObjectToWorld = function () {\r\n const matrix = Mat4Utils.create();\r\n return function convertPositionObjectToWorld(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, matrix);\r\n Vec3Utils.transformMat4(position, matrix, outPosition);\r\n return outPosition;\r\n };\r\n}();\r\n\r\nexport const convertDirectionObjectToWorld = function () {\r\n const rotation = QuatUtils.create();\r\n return function convertDirectionObjectToWorld(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n Vec3Utils.transformQuat(direction, rotation, outDirection);\r\n return outDirection;\r\n };\r\n}();\r\n\r\nexport const convertPositionWorldToObject = function () {\r\n const matrix = Mat4Utils.create();\r\n return function convertPositionWorldToObject(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, matrix);\r\n Mat4Utils.invert(matrix, matrix);\r\n Vec3Utils.transformMat4(position, matrix, outPosition);\r\n return outPosition;\r\n };\r\n}();\r\n\r\nexport const convertDirectionWorldToObject = function () {\r\n const rotation = QuatUtils.create();\r\n return function convertDirectionWorldToObject(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n Vec3Utils.transformQuat(direction, rotation, outDirection);\r\n return outDirection;\r\n };\r\n}();\r\n\r\n// Convert Vector Local World\r\n\r\nexport function convertPositionLocalToWorld(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertPositionObjectToWorld(ObjectUtils.getParent(object)!, position, outPosition);\r\n } else {\r\n Vec3Utils.copy(position, outPosition);\r\n }\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionLocalToWorld(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertDirectionObjectToWorld(ObjectUtils.getParent(object)!, direction, outDirection);\r\n } else {\r\n Vec3Utils.copy(direction, outDirection);\r\n }\r\n return outDirection;\r\n}\r\n\r\nexport function convertPositionWorldToLocal(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertPositionWorldToObject(ObjectUtils.getParent(object)!, position, outPosition);\r\n } else {\r\n Vec3Utils.copy(position, outPosition);\r\n }\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionWorldToLocal(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertDirectionWorldToObject(ObjectUtils.getParent(object)!, direction, outDirection);\r\n } else {\r\n Vec3Utils.copy(direction, outDirection);\r\n }\r\n return outDirection;\r\n}\r\n\r\n// Convert Vector Local Object\r\n\r\n// I need to use the converson to world and then local also use the parent scale that changes the position in local space\r\n\r\nexport function convertPositionObjectToLocal(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertPositionObjectToWorld(object, position, outPosition);\r\n ObjectUtils.convertPositionWorldToLocal(object, outPosition, outPosition);\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionObjectToLocal(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertDirectionObjectToWorld(object, direction, outDirection);\r\n ObjectUtils.convertDirectionWorldToLocal(object, outDirection, outDirection);\r\n return outDirection;\r\n}\r\n\r\nexport function convertPositionLocalToObject(object: Readonly, position: Vector3, outPosition: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertPositionLocalToWorld(object, position, outPosition);\r\n ObjectUtils.convertPositionWorldToObject(object, outPosition, outPosition);\r\n return outPosition;\r\n}\r\n\r\nexport function convertDirectionLocalToObject(object: Readonly, direction: Vector3, outDirection: T = Vec3Utils.create()): T {\r\n ObjectUtils.convertDirectionLocalToWorld(object, direction, outDirection);\r\n ObjectUtils.convertDirectionWorldToObject(object, outDirection, outDirection);\r\n return outDirection;\r\n}\r\n\r\n// Convert Transform Object World\r\n\r\nexport function convertTransformObjectToWorld(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorldMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport const convertTransformObjectToWorldMatrix = function () {\r\n const convertTransform = Mat4Utils.create();\r\n const position = Vec3Utils.create();\r\n const scale = Vec3Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function convertTransformObjectToWorldMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, convertTransform);\r\n if (ObjectUtils.hasUniformScaleWorld(object)) {\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n } else {\r\n Vec3Utils.set(position, transform[12], transform[13], transform[14]);\r\n ObjectUtils.convertPositionObjectToWorld(object, position, position);\r\n\r\n Mat4Utils.getScale(convertTransform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(convertTransform, inverseScale, convertTransform);\r\n\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n Mat4Utils.scale(outTransform, scale, outTransform);\r\n\r\n outTransform[12] = position[0];\r\n outTransform[13] = position[1];\r\n outTransform[14] = position[2];\r\n outTransform[15] = 1;\r\n }\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport const convertTransformObjectToWorldQuat = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n return function convertTransformObjectToWorldQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n QuatUtils.mul(rotation, transform, rotation);\r\n Quat2Utils.getPosition(transform, position);\r\n ObjectUtils.convertPositionObjectToWorld(object, position, position);\r\n Quat2Utils.setPositionRotationQuat(outTransform, position, rotation);\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport function convertTransformWorldToObject(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObjectMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport const convertTransformWorldToObjectMatrix = function () {\r\n const convertTransform = Mat4Utils.create();\r\n const position = Vec3Utils.create();\r\n const scale = Vec3Utils.create();\r\n const inverseScale = Vec3Utils.create();\r\n const one = Vec3Utils.create(1);\r\n return function convertTransformWorldToObjectMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.getTransformWorldMatrix(object, convertTransform);\r\n if (ObjectUtils.hasUniformScaleWorld(object)) {\r\n Mat4Utils.invert(convertTransform, convertTransform);\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n } else {\r\n Vec3Utils.set(position, transform[12], transform[13], transform[14]);\r\n ObjectUtils.convertPositionWorldToObject(object, position, position);\r\n\r\n Mat4Utils.getScale(convertTransform, scale);\r\n Vec3Utils.div(one, scale, inverseScale);\r\n Mat4Utils.scale(convertTransform, inverseScale, convertTransform);\r\n\r\n Mat4Utils.invert(convertTransform, convertTransform);\r\n Mat4Utils.mul(convertTransform, transform, outTransform);\r\n Mat4Utils.scale(outTransform, inverseScale, outTransform);\r\n\r\n outTransform[12] = position[0];\r\n outTransform[13] = position[1];\r\n outTransform[14] = position[2];\r\n outTransform[15] = 1;\r\n }\r\n return outTransform;\r\n };\r\n}();\r\n\r\nexport const convertTransformWorldToObjectQuat = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n return function convertTransformWorldToObjectQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n QuatUtils.conjugate(rotation, rotation);\r\n QuatUtils.mul(rotation, transform, rotation);\r\n Quat2Utils.getPosition(transform, position);\r\n ObjectUtils.convertPositionWorldToObject(object, position, position);\r\n Quat2Utils.setPositionRotationQuat(outTransform, position, rotation);\r\n return outTransform;\r\n };\r\n}();\r\n\r\n// Convert Transform Local World\r\n\r\nexport function convertTransformLocalToWorld(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorldMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformLocalToWorldMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformObjectToWorldMatrix(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Mat4Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformLocalToWorldQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformObjectToWorldQuat(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Quat2Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformWorldToLocal(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocalMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformWorldToLocalMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformWorldToObjectMatrix(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Mat4Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformWorldToLocalQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n if (ObjectUtils.getParent(object) != null) {\r\n ObjectUtils.convertTransformWorldToObjectQuat(ObjectUtils.getParent(object)!, transform, outTransform);\r\n } else {\r\n Quat2Utils.copy(transform, outTransform);\r\n }\r\n return outTransform;\r\n}\r\n\r\n// Convert Transform Object Local\r\n\r\n// I need to use the conversion to world and then local to also use the parent scale that changes the position in local space\r\n\r\nexport function convertTransformObjectToLocal(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocalMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformObjectToLocalMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.convertTransformObjectToWorldMatrix(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToLocalMatrix(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformObjectToLocalQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.convertTransformObjectToWorldQuat(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToLocalQuat(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformLocalToObject(object: Readonly, transform: Matrix4, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObjectMatrix(object, transform, outTransform);\r\n}\r\n\r\nexport function convertTransformLocalToObjectMatrix(object: Readonly, transform: Matrix4, outTransform: T = Mat4Utils.create()): T {\r\n ObjectUtils.convertTransformLocalToWorldMatrix(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToObjectMatrix(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\nexport function convertTransformLocalToObjectQuat(object: Readonly, transform: Quaternion2, outTransform: T = Quat2Utils.create()): T {\r\n ObjectUtils.convertTransformLocalToWorldQuat(object, transform, outTransform);\r\n ObjectUtils.convertTransformWorldToObjectQuat(object, outTransform, outTransform);\r\n return outTransform;\r\n}\r\n\r\n// Parent\r\n\r\nexport const setParent = function () {\r\n const position = Vec3Utils.create();\r\n const rotation = QuatUtils.create();\r\n const scale = Vec3Utils.create();\r\n return function setParent(object: Object3D, newParent: Object3D, keepTransformWorld: boolean = true): Object3D {\r\n if (!keepTransformWorld) {\r\n object.parent = newParent;\r\n } else {\r\n ObjectUtils.getPositionWorld(object, position);\r\n ObjectUtils.getRotationWorldQuat(object, rotation);\r\n ObjectUtils.getScaleWorld(object, scale);\r\n object.parent = newParent;\r\n ObjectUtils.setScaleWorld(object, scale);\r\n ObjectUtils.setRotationWorldQuat(object, rotation);\r\n ObjectUtils.setPositionWorld(object, position);\r\n }\r\n\r\n return object;\r\n };\r\n}();\r\n\r\nexport function getParent(object: Readonly): Object3D | null {\r\n return object.parent;\r\n}\r\n\r\n// Component\r\n\r\nexport function addComponent(object: Object3D, classOrType: ComponentConstructor | string, paramsOrActive?: Record | boolean, active?: boolean): T | null {\r\n let params: Record | undefined = undefined;\r\n\r\n if (typeof paramsOrActive == \"boolean\") {\r\n params = {};\r\n params[\"active\"] = paramsOrActive;\r\n } else {\r\n if (paramsOrActive != null) {\r\n params = paramsOrActive;\r\n }\r\n\r\n if (active != null) {\r\n if (params == null) {\r\n params = {};\r\n }\r\n\r\n params[\"active\"] = active;\r\n }\r\n }\r\n\r\n return object.addComponent(classOrType as ComponentConstructor, params);\r\n}\r\n\r\nexport function getComponent(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return ObjectUtils.getComponentHierarchy(object, classOrType, index);\r\n}\r\n\r\nexport function getComponentSelf(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return object.getComponent(classOrType as ComponentConstructor, index);\r\n}\r\n\r\nexport function getComponentHierarchy(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return ObjectUtils.getComponentHierarchyBreadth(object, classOrType, index);\r\n}\r\n\r\nexport function getComponentHierarchyBreadth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentHierarchyDepth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentDescendants(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n return ObjectUtils.getComponentDescendantsBreadth(object, classOrType, index);\r\n}\r\n\r\nexport function getComponentDescendantsBreadth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentDescendantsDepth(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponentChildren(object: Readonly, classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getComponentObjects(objects, classOrType, index);\r\n}\r\n\r\nexport function getComponents(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchy(object, classOrType);\r\n}\r\n\r\nexport function getComponentsSelf(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return object.getComponents(classOrType as ComponentConstructor);\r\n}\r\n\r\nexport function getComponentsHierarchy(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchyBreadth(object, classOrType);\r\n}\r\n\r\nexport function getComponentsHierarchyBreadth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsHierarchyDepth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsDescendants(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendantsBreadth(object, classOrType);\r\n}\r\n\r\nexport function getComponentsDescendantsBreadth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsDescendantsDepth(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\nexport function getComponentsChildren(object: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getComponentsObjects(objects, classOrType);\r\n}\r\n\r\n// Active\r\n\r\nexport function setActive(object: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchy(object, active);\r\n}\r\n\r\nexport function setActiveSelf(object: Object3D, active: boolean): Object3D {\r\n object.active = active;\r\n return object;\r\n}\r\n\r\nexport function setActiveHierarchy(object: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchyBreadth(object, active);\r\n}\r\n\r\nexport function setActiveHierarchyBreadth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveHierarchyDepth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveDescendants(object: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendantsBreadth(object, active);\r\n}\r\n\r\nexport function setActiveDescendantsBreadth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveDescendantsDepth(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\nexport function setActiveChildren(object: Object3D, active: boolean): Object3D {\r\n const objects = ObjectUtils.getChildren(object);\r\n ObjectUtils.setActiveObjects(objects, active);\r\n\r\n return object;\r\n}\r\n\r\n// Uniform Scale\r\n\r\nexport function hasUniformScale(object: Readonly): boolean {\r\n return ObjectUtils.hasUniformScaleWorld(object);\r\n}\r\n\r\nexport const hasUniformScaleWorld = function () {\r\n const scale = Vec3Utils.create();\r\n return function hasUniformScaleWorld(object: Readonly): boolean {\r\n ObjectUtils.getScaleWorld(object, scale);\r\n return Math.abs(scale[0] - scale[1]) < MathUtils.EPSILON && Math.abs(scale[1] - scale[2]) < MathUtils.EPSILON && Math.abs(scale[0] - scale[2]) < MathUtils.EPSILON;\r\n };\r\n}();\r\n\r\nexport const hasUniformScaleLocal = function () {\r\n const scale = Vec3Utils.create();\r\n return function hasUniformScaleLocal(object: Readonly): boolean {\r\n ObjectUtils.getScaleLocal(object, scale);\r\n return Math.abs(scale[0] - scale[1]) < MathUtils.EPSILON && Math.abs(scale[1] - scale[2]) < MathUtils.EPSILON && Math.abs(scale[0] - scale[2]) < MathUtils.EPSILON;\r\n };\r\n}();\r\n\r\n// Clone\r\n\r\nexport const clone = function () {\r\n const scale = Vec3Utils.create();\r\n const transformQuat = Quat2Utils.create();\r\n return function clone(object: Readonly, cloneParams: CloneParams = new CloneParams()): Object3D | null {\r\n let clonedObject = null;\r\n\r\n const cloneParent = cloneParams.myCloneParent === undefined ? ObjectUtils.getParent(object) : cloneParams.myCloneParent;\r\n\r\n if (cloneParams.myUseDefaultObjectClone) {\r\n clonedObject = object.clone(cloneParent);\r\n\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive) {\r\n const clonedComponents = ObjectUtils.getComponents(clonedObject);\r\n for (const clonedComponent of clonedComponents) {\r\n\r\n // Trigger start, which otherwise would be called later, on first activation\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive && !clonedComponent.active) {\r\n clonedComponent.active = true;\r\n clonedComponent.active = false;\r\n }\r\n }\r\n }\r\n } else if (ObjectUtils.isCloneable(object, cloneParams)) {\r\n const objectsToCloneData: [Object3D | null, Readonly][] = [];\r\n objectsToCloneData.push([cloneParent, object]);\r\n\r\n // Create the object hierarchy\r\n const objectsToCloneComponentsData: [Readonly, Object3D][] = [];\r\n while (objectsToCloneData.length > 0) {\r\n const cloneData = objectsToCloneData.shift();\r\n const parent = cloneData![0];\r\n const objectToClone = cloneData![1];\r\n\r\n const currentClonedObject = (parent != null) ? ObjectUtils.addObject(parent) : ObjectUtils.addObject(Globals.getRootObject(ObjectUtils.getEngine(object))!);\r\n ObjectUtils.setName(currentClonedObject, ObjectUtils.getName(objectToClone));\r\n\r\n ObjectUtils.setScaleLocal(currentClonedObject, ObjectUtils.getScaleLocal(objectToClone, scale));\r\n ObjectUtils.setTransformLocalQuat(currentClonedObject, ObjectUtils.getTransformLocalQuat(objectToClone, transformQuat));\r\n\r\n if (!cloneParams.myIgnoreComponents) {\r\n objectsToCloneComponentsData.push([objectToClone, currentClonedObject]);\r\n }\r\n\r\n if (!cloneParams.myIgnoreDescendants) {\r\n for (const child of ObjectUtils.getChildren(objectToClone)) {\r\n let cloneDescendant = false;\r\n if (cloneParams.myDescendantsToInclude.length > 0) {\r\n cloneDescendant = cloneParams.myDescendantsToInclude.find(descendantToInclude => ObjectUtils.equals(descendantToInclude, child)) != null;\r\n } else {\r\n cloneDescendant = cloneParams.myDescendantsToIgnore.find(descendantToIgnore => ObjectUtils.equals(descendantToIgnore, child)) == null;\r\n }\r\n\r\n if (cloneDescendant && cloneParams.myIgnoreDescendantCallback != null) {\r\n cloneDescendant = !cloneParams.myIgnoreDescendantCallback(child);\r\n }\r\n\r\n if (cloneDescendant) {\r\n objectsToCloneData.push([currentClonedObject, child]);\r\n }\r\n }\r\n }\r\n\r\n if (clonedObject == null) {\r\n clonedObject = currentClonedObject;\r\n }\r\n }\r\n\r\n // Get the components to clone\r\n const componentsToCloneData: [Component, Object3D][] = [];\r\n while (objectsToCloneComponentsData.length > 0) {\r\n const cloneData = objectsToCloneComponentsData.shift();\r\n const objectToClone = cloneData![0];\r\n const currentClonedObject = cloneData![1];\r\n\r\n const components = ObjectUtils.getComponentsSelf(objectToClone);\r\n for (const component of components) {\r\n if (ComponentUtils.isCloneable(component.type, cloneParams.myUseDefaultComponentClone || cloneParams.myUseDefaultComponentCloneAsFallback, ObjectUtils.getEngine(object))) {\r\n let cloneComponent = false;\r\n if (cloneParams.myComponentsToInclude.length > 0) {\r\n cloneComponent = cloneParams.myComponentsToInclude.indexOf(component.type) != -1;\r\n } else {\r\n cloneComponent = cloneParams.myComponentsToIgnore.indexOf(component.type) == -1;\r\n }\r\n\r\n if (cloneComponent && cloneParams.myIgnoreComponentCallback != null) {\r\n cloneComponent = !cloneParams.myIgnoreComponentCallback(component);\r\n }\r\n\r\n if (cloneComponent) {\r\n componentsToCloneData.push([component, currentClonedObject]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Clone the components\r\n const componentsToPostProcessData: [Component, Component][] = [];\r\n while (componentsToCloneData.length > 0) {\r\n const cloneData = componentsToCloneData.shift();\r\n const componentToClone = cloneData![0];\r\n const currentClonedObject = cloneData![1];\r\n let clonedComponent = null;\r\n\r\n if (!cloneParams.myUseDefaultComponentClone) {\r\n clonedComponent = ComponentUtils.clone(componentToClone, currentClonedObject, cloneParams.myComponentDeepCloneParams, cloneParams.myComponentCustomCloneParams, cloneParams.myUseDefaultComponentCloneAsFallback, cloneParams.myDefaultComponentCloneAutoStartIfNotActive);\r\n } else {\r\n clonedComponent = ComponentUtils.cloneDefault(componentToClone, currentClonedObject, cloneParams.myDefaultComponentCloneAutoStartIfNotActive);\r\n }\r\n\r\n if (clonedComponent != null) {\r\n if (ComponentUtils.hasClonePostProcess(componentToClone.type, ObjectUtils.getEngine(object))) {\r\n componentsToPostProcessData.push([componentToClone, clonedComponent]);\r\n }\r\n }\r\n }\r\n\r\n // Clone post process\r\n // Can be useful if you have to get some data from other components in the hierarchy which have now been created\r\n while (componentsToPostProcessData.length > 0) {\r\n const cloneData = componentsToPostProcessData.shift();\r\n const componentToClone = cloneData![0];\r\n const currentClonedComponent = cloneData![1];\r\n\r\n ComponentUtils.clonePostProcess(componentToClone, currentClonedComponent, cloneParams.myComponentDeepCloneParams, cloneParams.myComponentCustomCloneParams);\r\n }\r\n } else if (cloneParams.myUseDefaultObjectCloneAsFallback) {\r\n clonedObject = object.clone(cloneParent);\r\n\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive) {\r\n const clonedComponents = ObjectUtils.getComponents(clonedObject);\r\n for (const clonedComponent of clonedComponents) {\r\n // Trigger start, which otherwise would be called later, on first activation\r\n if (cloneParams.myDefaultComponentCloneAutoStartIfNotActive && !clonedComponent.active) {\r\n clonedComponent.active = true;\r\n clonedComponent.active = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return clonedObject;\r\n };\r\n}();\r\n\r\nexport function isCloneable(object: Readonly, cloneParams: CloneParams = new CloneParams()): boolean {\r\n if (cloneParams.myIgnoreNonCloneable || cloneParams.myIgnoreComponents || cloneParams.myUseDefaultComponentClone || cloneParams.myUseDefaultComponentCloneAsFallback) {\r\n return true;\r\n }\r\n\r\n let cloneable = true;\r\n\r\n const objectsToClone: Readonly[] = [];\r\n objectsToClone.push(object);\r\n\r\n while (cloneable && objectsToClone.length > 0) {\r\n const objectToClone = objectsToClone.shift()!;\r\n\r\n const components = ObjectUtils.getComponentsSelf(objectToClone);\r\n for (const component of components) {\r\n let cloneComponent = false;\r\n if (cloneParams.myComponentsToInclude.length > 0) {\r\n cloneComponent = cloneParams.myComponentsToInclude.indexOf(component.type) != -1;\r\n } else {\r\n cloneComponent = cloneParams.myComponentsToIgnore.indexOf(component.type) == -1;\r\n }\r\n\r\n if (cloneComponent && cloneParams.myIgnoreComponentCallback != null) {\r\n cloneComponent = !cloneParams.myIgnoreComponentCallback(component);\r\n }\r\n\r\n if (cloneComponent && !ComponentUtils.isCloneable(component.type, false, ObjectUtils.getEngine(object))) {\r\n cloneable = false;\r\n break;\r\n }\r\n }\r\n\r\n if (cloneable && !cloneParams.myIgnoreDescendants) {\r\n for (const child of ObjectUtils.getChildren(objectToClone)) {\r\n let cloneDescendant = false;\r\n if (cloneParams.myDescendantsToInclude.length > 0) {\r\n cloneDescendant = cloneParams.myDescendantsToInclude.find(descendantToInclude => ObjectUtils.equals(descendantToInclude, child)) != null;\r\n } else {\r\n cloneDescendant = cloneParams.myDescendantsToIgnore.find(descendantToInclude => ObjectUtils.equals(descendantToInclude, child)) == null;\r\n }\r\n\r\n if (cloneDescendant && cloneParams.myIgnoreDescendantCallback != null) {\r\n cloneDescendant = !cloneParams.myIgnoreDescendantCallback(child);\r\n }\r\n\r\n if (cloneDescendant) {\r\n objectsToClone.push(child);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cloneable;\r\n}\r\n\r\n// To String\r\n\r\nexport function toString(object: Readonly): string {\r\n return ObjectUtils.toStringCompact(object);\r\n}\r\n\r\nexport const toStringExtended = function () {\r\n const tab = \" \";\r\n const newLine = \"\\n\";\r\n const startObject = \"{\";\r\n const endObject = \"}\";\r\n const nameLabel = \"name: \";\r\n const idLabel = \"id: \";\r\n const componentsLabel = \"components: \";\r\n const typeLabel = \"type: \";\r\n const childrenLabel = \"children: \";\r\n const startComponents = \"[\";\r\n const endComponents = \"]\";\r\n const startChildren = startComponents;\r\n const endChildren = endComponents;\r\n const separator = \",\";\r\n const newLineTab = newLine.concat(tab, tab);\r\n return function toStringExtended(object: Readonly): string {\r\n let objectString = \"\";\r\n objectString = objectString.concat(startObject, newLine);\r\n\r\n const components = ObjectUtils.getComponentsSelf(object);\r\n const children = ObjectUtils.getChildren(object);\r\n const name = ObjectUtils.getName(object);\r\n\r\n if (components.length > 0 || children.length > 0 || name.length > 0) {\r\n objectString = objectString.concat(tab, idLabel, ObjectUtils.getID(object).toString(), separator, newLine);\r\n } else {\r\n objectString = objectString.concat(tab, idLabel, ObjectUtils.getID(object).toString(), newLine);\r\n }\r\n\r\n if (name.length > 0) {\r\n if (components.length > 0 || children.length > 0) {\r\n objectString = objectString.concat(tab, nameLabel, ObjectUtils.getName(object), separator, newLine);\r\n } else {\r\n objectString = objectString.concat(tab, nameLabel, ObjectUtils.getName(object), newLine);\r\n }\r\n }\r\n\r\n if (components.length > 0) {\r\n objectString = objectString.concat(tab, componentsLabel, newLine, tab, startComponents, newLine);\r\n for (let i = 0; i < components.length; i++) {\r\n const component = components[i];\r\n\r\n objectString = objectString.concat(tab, tab, startObject, newLine);\r\n objectString = objectString.concat(tab, tab, tab, typeLabel, component.type, separator, newLine);\r\n objectString = objectString.concat(tab, tab, tab, idLabel, component._id.toString(), separator, newLine);\r\n objectString = objectString.concat(tab, tab, endObject);\r\n\r\n if (i != components.length - 1) {\r\n objectString = objectString.concat(separator, newLine);\r\n } else {\r\n objectString = objectString.concat(newLine);\r\n }\r\n }\r\n\r\n if (children.length > 0) {\r\n objectString = objectString.concat(tab, endComponents, separator, newLine);\r\n } else {\r\n objectString = objectString.concat(tab, endComponents, newLine);\r\n }\r\n }\r\n\r\n if (children.length > 0) {\r\n objectString = objectString.concat(tab, childrenLabel, newLine, tab, startChildren, newLine);\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n\r\n let childString = ObjectUtils.toStringExtended(child);\r\n childString = childString.replaceAll(newLine, newLineTab);\r\n childString = tab.concat(tab, childString);\r\n objectString = objectString.concat(childString);\r\n\r\n if (i != children.length - 1) {\r\n objectString = objectString.concat(separator, newLine);\r\n } else {\r\n objectString = objectString.concat(newLine);\r\n }\r\n }\r\n objectString = objectString.concat(tab, endChildren, newLine);\r\n }\r\n\r\n objectString = objectString.concat(endObject);\r\n\r\n return objectString;\r\n };\r\n}();\r\n\r\nexport const toStringCompact = function () {\r\n const tab = \" \";\r\n const newLine = \"\\n\";\r\n const emptyName = \"\";\r\n const nameLabel = \"name: \";\r\n const componentsLabel = \"components: \";\r\n const separator = \", \";\r\n const newLineTab = newLine.concat(tab);\r\n return function toStringCompact(object: Readonly): string {\r\n let objectString = \"\";\r\n\r\n const name = ObjectUtils.getName(object);\r\n if (name.length > 0) {\r\n objectString = objectString.concat(nameLabel, name);\r\n } else {\r\n objectString = objectString.concat(nameLabel, emptyName);\r\n }\r\n\r\n const components = ObjectUtils.getComponentsSelf(object);\r\n if (components.length > 0) {\r\n objectString = objectString.concat(separator, componentsLabel);\r\n for (let i = 0; i < components.length; i++) {\r\n const component = components[i];\r\n\r\n objectString = objectString.concat(component.type);\r\n\r\n if (i != components.length - 1) {\r\n objectString = objectString.concat(separator);\r\n }\r\n }\r\n }\r\n\r\n const children = ObjectUtils.getChildren(object);\r\n if (children.length > 0) {\r\n objectString = objectString.concat(newLine);\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n\r\n let childString = ObjectUtils.toStringCompact(child);\r\n childString = childString.replaceAll(newLine, newLineTab);\r\n childString = tab.concat(childString);\r\n objectString = objectString.concat(childString);\r\n\r\n if (i != children.length - 1) {\r\n objectString = objectString.concat(newLine);\r\n }\r\n }\r\n }\r\n\r\n return objectString;\r\n };\r\n}();\r\n\r\n// Get Object By Name\r\n\r\nexport function getObjectByName(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchy(object, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameHierarchy(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchyBreadth(object, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameHierarchyBreadth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameHierarchyDepth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameDescendants(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendantsBreadth(object, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameDescendantsBreadth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameDescendantsDepth(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectByNameChildren(object: Readonly, name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getObjectByNameObjects(objects, name, isRegex, index);\r\n}\r\n\r\nexport function getObjectsByName(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchy(object, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameHierarchy(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchyBreadth(object, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameHierarchyBreadth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameHierarchyDepth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameDescendants(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendantsBreadth(object, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameDescendantsBreadth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameDescendantsDepth(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\nexport function getObjectsByNameChildren(object: Readonly, name: string, isRegex: boolean = false): Object3D[] {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getObjectsByNameObjects(objects, name, isRegex);\r\n}\r\n\r\n// Get Object By ID\r\n\r\nexport function getObjectByID(object: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchy(object, id);\r\n}\r\n\r\nexport function getObjectByIDHierarchy(object: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchyBreadth(object, id);\r\n}\r\n\r\nexport function getObjectByIDHierarchyBreadth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyBreadth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDHierarchyDepth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getHierarchyDepth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDDescendants(object: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendantsBreadth(object, id);\r\n}\r\n\r\nexport function getObjectByIDDescendantsBreadth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsBreadth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDDescendantsDepth(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getDescendantsDepth(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\nexport function getObjectByIDChildren(object: Readonly, id: number): Object3D | null {\r\n const objects = ObjectUtils.getChildren(object);\r\n return ObjectUtils.getObjectByIDObjects(objects, id);\r\n}\r\n\r\n// Get Hierarchy\r\n\r\nexport function getHierarchy(object: Readonly): Object3D[] {\r\n return ObjectUtils.getHierarchyBreadth(object);\r\n}\r\n\r\nexport function getHierarchyBreadth(object: Readonly): Object3D[] {\r\n const hierarchy = ObjectUtils.getDescendantsBreadth(object);\r\n\r\n hierarchy.unshift(object as Object3D);\r\n\r\n return hierarchy;\r\n}\r\n\r\nexport function getHierarchyDepth(object: Readonly): Object3D[] {\r\n const hierarchy = ObjectUtils.getDescendantsDepth(object);\r\n\r\n hierarchy.unshift(object as Object3D);\r\n\r\n return hierarchy;\r\n}\r\n\r\nexport function getDescendants(object: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendantsBreadth(object);\r\n}\r\n\r\nexport function getDescendantsBreadth(object: Readonly): Object3D[] {\r\n const descendants: Object3D[] = [];\r\n\r\n const descendantsQueue = ObjectUtils.getChildren(object);\r\n\r\n while (descendantsQueue.length > 0) {\r\n const descendant = descendantsQueue.shift()!;\r\n descendants.push(descendant);\r\n for (const child of ObjectUtils.getChildren(descendant)) {\r\n descendantsQueue.push(child);\r\n }\r\n }\r\n\r\n return descendants;\r\n}\r\n\r\nexport function getDescendantsDepth(object: Readonly): Object3D[] {\r\n const descendants: Object3D[] = [];\r\n\r\n const children = ObjectUtils.getChildren(object);\r\n\r\n for (const child of children) {\r\n descendants.push(child);\r\n\r\n const childDescendants = ObjectUtils.getDescendantsDepth(child);\r\n for (let i = 0; i < childDescendants.length; i++) {\r\n descendants.push(childDescendants[i]);\r\n }\r\n }\r\n\r\n return descendants;\r\n}\r\n\r\nexport function getChildren(object: Readonly): Object3D[] {\r\n return object.children;\r\n}\r\n\r\nexport function getSelf(object: Readonly): Object3D {\r\n return object as Object3D;\r\n}\r\n\r\n// Cauldron\r\n\r\nexport function addObject(object: Object3D): Object3D {\r\n return Globals.getScene(ObjectUtils.getEngine(object)).addObject(object);\r\n}\r\n\r\nexport function getName(object: Readonly): string {\r\n return object.name;\r\n}\r\n\r\nexport function setName(object: Object3D, name: string): Object3D {\r\n object.name = name;\r\n return object;\r\n}\r\n\r\nexport function getEngine(object: Readonly): WonderlandEngine {\r\n return object.engine;\r\n}\r\n\r\nexport function getID(object: Readonly): number {\r\n return object.objectId;\r\n}\r\n\r\nexport function markDirty(object: Object3D): Object3D {\r\n object.setDirty();\r\n return object;\r\n}\r\n\r\nexport function isTransformChanged(object: Readonly): boolean {\r\n return object.changed;\r\n}\r\n\r\nexport function equals(first: Readonly, second: Readonly): boolean {\r\n return first.equals(second as Object3D);\r\n}\r\n\r\nexport function destroy(object: Object3D): void {\r\n let destroyReturnValue = undefined;\r\n\r\n try {\r\n destroyReturnValue = object.destroy();\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n\r\n return destroyReturnValue;\r\n}\r\n\r\nexport function reserveObjects(object: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsHierarchy(object, count);\r\n}\r\n\r\nexport function reserveObjectsSelf(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapSelf(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function reserveObjectsHierarchy(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapHierarchy(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function reserveObjectsDescendants(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapDescendants(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function reserveObjectsChildren(object: Readonly, count: number): Object3D {\r\n const componentsAmountMap = ObjectUtils.getComponentsAmountMapChildren(object);\r\n _reserveObjects(count, componentsAmountMap, Globals.getScene(ObjectUtils.getEngine(object)));\r\n\r\n return object as Object3D;\r\n}\r\n\r\nexport function getComponentsAmountMap(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n return ObjectUtils.getComponentsAmountMapHierarchy(object, outComponentsAmountMap);\r\n}\r\n\r\nexport function getComponentsAmountMapSelf(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n let objectsAmount = outComponentsAmountMap.get(\"object\");\r\n if (objectsAmount == null) {\r\n objectsAmount = 0;\r\n }\r\n objectsAmount += 1;\r\n outComponentsAmountMap.set(\"object\", objectsAmount);\r\n\r\n const components = ObjectUtils.getComponentsSelf(object);\r\n for (const component of components) {\r\n const type = component.type;\r\n let typeAmount = outComponentsAmountMap.get(type);\r\n if (typeAmount == null) {\r\n typeAmount = 0;\r\n }\r\n typeAmount += 1;\r\n outComponentsAmountMap.set(type, typeAmount);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\nexport function getComponentsAmountMapHierarchy(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n const hierarchy = ObjectUtils.getHierarchy(object);\r\n\r\n for (const hierarchyObject of hierarchy) {\r\n ObjectUtils.getComponentsAmountMapSelf(hierarchyObject, outComponentsAmountMap);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\nexport function getComponentsAmountMapDescendants(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n const descendants = ObjectUtils.getDescendants(object);\r\n\r\n for (const descendant of descendants) {\r\n ObjectUtils.getComponentsAmountMapSelf(descendant, outComponentsAmountMap);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\nexport function getComponentsAmountMapChildren(object: Readonly, outComponentsAmountMap: Map = new Map()): Map {\r\n const children = ObjectUtils.getChildren(object);\r\n\r\n for (const child of children) {\r\n ObjectUtils.getComponentsAmountMapSelf(child, outComponentsAmountMap);\r\n }\r\n\r\n return outComponentsAmountMap;\r\n}\r\n\r\n// GLOBALS\r\n\r\nexport function getComponentObjects(objects: Object3D[], classOrType: ComponentConstructor | string, index: number = 0): T | null {\r\n let component = null;\r\n\r\n for (const object of objects) {\r\n component = object.getComponent(classOrType as ComponentConstructor, index);\r\n\r\n if (component != null) {\r\n break;\r\n }\r\n }\r\n\r\n return component;\r\n}\r\n\r\nexport function getComponentsObjects(objects: Object3D[], classOrType?: ComponentConstructor | string): T[] {\r\n const components: T[] = [];\r\n\r\n for (const currentObject of objects) {\r\n const currentObjectComponents = currentObject.getComponents(classOrType as ComponentConstructor);\r\n\r\n for (let i = 0; i < currentObjectComponents.length; i++) {\r\n components.push(currentObjectComponents[i]);\r\n }\r\n }\r\n\r\n return components;\r\n}\r\n\r\nexport function setActiveObjects(objects: Object3D[], active: boolean): void {\r\n for (const currentObject of objects) {\r\n currentObject.active = active;\r\n }\r\n}\r\n\r\nexport function getObjectByNameObjects(objects: Object3D[], name: string, isRegex: boolean = false, index: number = 0): Object3D | null {\r\n let objectFound = null;\r\n\r\n let currentIndex = index;\r\n for (const currentObject of objects) {\r\n const objectName = ObjectUtils.getName(currentObject);\r\n if ((!isRegex && objectName == name) || (isRegex && objectName.match(name) != null)) {\r\n if (currentIndex == 0) {\r\n objectFound = currentObject;\r\n break;\r\n }\r\n\r\n currentIndex--;\r\n }\r\n }\r\n\r\n return objectFound;\r\n}\r\n\r\nexport function getObjectsByNameObjects(objects: Object3D[], name: string, isRegex: boolean = false): Object3D[] {\r\n const objectsFound: Object3D[] = [];\r\n\r\n for (const currentObject of objects) {\r\n const objectName = ObjectUtils.getName(currentObject);\r\n if ((!isRegex && objectName == name) || (isRegex && objectName.match(name) != null)) {\r\n objectsFound.push(currentObject);\r\n }\r\n }\r\n\r\n return objectsFound;\r\n}\r\n\r\nexport function getObjectByIDObjects(objects: Object3D[], id: number, index: number = 0): Object3D | null {\r\n let objectFound = null;\r\n\r\n let currentIndex = index;\r\n for (const currentObject of objects) {\r\n if (ObjectUtils.getID(currentObject) == id) {\r\n if (currentIndex == 0) {\r\n objectFound = currentObject;\r\n break;\r\n }\r\n\r\n currentIndex--;\r\n }\r\n }\r\n\r\n return objectFound;\r\n}\r\n\r\nexport function getObjectsByIDObjects(objects: Object3D[], id: number): Object3D[] {\r\n const objectsFound: Object3D[] = [];\r\n\r\n for (const currentObject of objects) {\r\n if (ObjectUtils.getID(currentObject) == id) {\r\n objectsFound.push(currentObject);\r\n }\r\n }\r\n\r\n return objectsFound;\r\n}\r\n\r\nexport function wrapObject(id: number, engine: WonderlandEngine | null = Globals.getMainEngine()): Object3D | null {\r\n return engine != null ? engine.wrapObject(id) : null;\r\n}\r\n\r\nexport const ObjectUtils = {\r\n getPosition,\r\n getPositionWorld,\r\n getPositionLocal,\r\n getRotation,\r\n getRotationDegrees,\r\n getRotationRadians,\r\n getRotationMatrix,\r\n getRotationQuat,\r\n getRotationWorld,\r\n getRotationWorldDegrees,\r\n getRotationWorldRadians,\r\n getRotationWorldMatrix,\r\n getRotationWorldQuat,\r\n getRotationLocal,\r\n getRotationLocalDegrees,\r\n getRotationLocalRadians,\r\n getRotationLocalMatrix,\r\n getRotationLocalQuat,\r\n getScale,\r\n getScaleWorld,\r\n getScaleLocal,\r\n getTransform,\r\n getTransformMatrix,\r\n getTransformQuat,\r\n getTransformWorld,\r\n getTransformWorldMatrix,\r\n getTransformWorldQuat,\r\n getTransformLocal,\r\n getTransformLocalMatrix,\r\n getTransformLocalQuat,\r\n getAxes,\r\n getAxesWorld,\r\n getAxesLocal,\r\n getForward,\r\n getForwardWorld,\r\n getForwardLocal,\r\n getBackward,\r\n getBackwardWorld,\r\n getBackwardLocal,\r\n getUp,\r\n getUpWorld,\r\n getUpLocal,\r\n getDown,\r\n getDownWorld,\r\n getDownLocal,\r\n getLeft,\r\n getLeftWorld,\r\n getLeftLocal,\r\n getRight,\r\n getRightWorld,\r\n getRightLocal,\r\n setPosition,\r\n setPositionWorld,\r\n setPositionLocal,\r\n setRotation,\r\n setRotationDegrees,\r\n setRotationRadians,\r\n setRotationMatrix,\r\n setRotationQuat,\r\n setRotationWorld,\r\n setRotationWorldDegrees,\r\n setRotationWorldRadians,\r\n setRotationWorldMatrix,\r\n setRotationWorldQuat,\r\n setRotationLocal,\r\n setRotationLocalDegrees,\r\n setRotationLocalRadians,\r\n setRotationLocalMatrix,\r\n setRotationLocalQuat,\r\n setScale,\r\n setScaleWorld,\r\n setScaleLocal,\r\n setAxes,\r\n setAxesWorld,\r\n setAxesLocal,\r\n setForward,\r\n setForwardWorld,\r\n setForwardLocal,\r\n setBackward,\r\n setBackwardWorld,\r\n setBackwardLocal,\r\n setUp,\r\n setUpWorld,\r\n setUpLocal,\r\n setDown,\r\n setDownWorld,\r\n setDownLocal,\r\n setLeft,\r\n setLeftWorld,\r\n setLeftLocal,\r\n setRight,\r\n setRightWorld,\r\n setRightLocal,\r\n setTransform,\r\n setTransformMatrix,\r\n setTransformQuat,\r\n setTransformWorld,\r\n setTransformWorldMatrix,\r\n setTransformWorldQuat,\r\n setTransformLocal,\r\n setTransformLocalMatrix,\r\n setTransformLocalQuat,\r\n resetPosition,\r\n resetPositionWorld,\r\n resetPositionLocal,\r\n resetRotation,\r\n resetRotationWorld,\r\n resetRotationLocal,\r\n resetScale,\r\n resetScaleWorld,\r\n resetScaleLocal,\r\n resetTransform,\r\n resetTransformWorld,\r\n resetTransformLocal,\r\n translate,\r\n translateWorld,\r\n translateLocal,\r\n translateObject,\r\n translateAxis,\r\n translateAxisWorld,\r\n translateAxisLocal,\r\n translateAxisObject,\r\n rotate,\r\n rotateDegrees,\r\n rotateRadians,\r\n rotateMatrix,\r\n rotateQuat,\r\n rotateWorld,\r\n rotateWorldDegrees,\r\n rotateWorldRadians,\r\n rotateWorldMatrix,\r\n rotateWorldQuat,\r\n rotateLocal,\r\n rotateLocalDegrees,\r\n rotateLocalRadians,\r\n rotateLocalMatrix,\r\n rotateLocalQuat,\r\n rotateObject,\r\n rotateObjectDegrees,\r\n rotateObjectRadians,\r\n rotateObjectMatrix,\r\n rotateObjectQuat,\r\n rotateAxis,\r\n rotateAxisDegrees,\r\n rotateAxisRadians,\r\n rotateAxisWorld,\r\n rotateAxisWorldDegrees,\r\n rotateAxisWorldRadians,\r\n rotateAxisLocal,\r\n rotateAxisLocalDegrees,\r\n rotateAxisLocalRadians,\r\n rotateAxisObject,\r\n rotateAxisObjectDegrees,\r\n rotateAxisObjectRadians,\r\n rotateAround,\r\n rotateAroundDegrees,\r\n rotateAroundRadians,\r\n rotateAroundMatrix,\r\n rotateAroundQuat,\r\n rotateAroundWorld,\r\n rotateAroundWorldDegrees,\r\n rotateAroundWorldRadians,\r\n rotateAroundWorldMatrix,\r\n rotateAroundWorldQuat,\r\n rotateAroundLocal,\r\n rotateAroundLocalDegrees,\r\n rotateAroundLocalRadians,\r\n rotateAroundLocalMatrix,\r\n rotateAroundLocalQuat,\r\n rotateAroundObject,\r\n rotateAroundObjectDegrees,\r\n rotateAroundObjectRadians,\r\n rotateAroundObjectMatrix,\r\n rotateAroundObjectQuat,\r\n rotateAroundAxis,\r\n rotateAroundAxisDegrees,\r\n rotateAroundAxisRadians,\r\n rotateAroundAxisWorld,\r\n rotateAroundAxisWorldDegrees,\r\n rotateAroundAxisWorldRadians,\r\n rotateAroundAxisLocal,\r\n rotateAroundAxisLocalDegrees,\r\n rotateAroundAxisLocalRadians,\r\n rotateAroundAxisObject,\r\n rotateAroundAxisObjectDegrees,\r\n rotateAroundAxisObjectRadians,\r\n scaleObject,\r\n lookAt,\r\n lookAtWorld,\r\n lookAtLocal,\r\n lookTo,\r\n lookToWorld,\r\n lookToLocal,\r\n convertPositionObjectToWorld,\r\n convertDirectionObjectToWorld,\r\n convertPositionWorldToObject,\r\n convertDirectionWorldToObject,\r\n convertPositionLocalToWorld,\r\n convertDirectionLocalToWorld,\r\n convertPositionWorldToLocal,\r\n convertDirectionWorldToLocal,\r\n convertPositionObjectToLocal,\r\n convertDirectionObjectToLocal,\r\n convertPositionLocalToObject,\r\n convertDirectionLocalToObject,\r\n convertTransformObjectToWorld,\r\n convertTransformObjectToWorldMatrix,\r\n convertTransformObjectToWorldQuat,\r\n convertTransformWorldToObject,\r\n convertTransformWorldToObjectMatrix,\r\n convertTransformWorldToObjectQuat,\r\n convertTransformLocalToWorld,\r\n convertTransformLocalToWorldMatrix,\r\n convertTransformLocalToWorldQuat,\r\n convertTransformWorldToLocal,\r\n convertTransformWorldToLocalMatrix,\r\n convertTransformWorldToLocalQuat,\r\n convertTransformObjectToLocal,\r\n convertTransformObjectToLocalMatrix,\r\n convertTransformObjectToLocalQuat,\r\n convertTransformLocalToObject,\r\n convertTransformLocalToObjectMatrix,\r\n convertTransformLocalToObjectQuat,\r\n setParent,\r\n getParent,\r\n addComponent,\r\n getComponent,\r\n getComponentSelf,\r\n getComponentHierarchy,\r\n getComponentHierarchyBreadth,\r\n getComponentHierarchyDepth,\r\n getComponentDescendants,\r\n getComponentDescendantsBreadth,\r\n getComponentDescendantsDepth,\r\n getComponentChildren,\r\n getComponents,\r\n getComponentsSelf,\r\n getComponentsHierarchy,\r\n getComponentsHierarchyBreadth,\r\n getComponentsHierarchyDepth,\r\n getComponentsDescendants,\r\n getComponentsDescendantsBreadth,\r\n getComponentsDescendantsDepth,\r\n getComponentsChildren,\r\n setActive,\r\n setActiveSelf,\r\n setActiveHierarchy,\r\n setActiveHierarchyBreadth,\r\n setActiveHierarchyDepth,\r\n setActiveDescendants,\r\n setActiveDescendantsBreadth,\r\n setActiveDescendantsDepth,\r\n setActiveChildren,\r\n hasUniformScale,\r\n hasUniformScaleWorld,\r\n hasUniformScaleLocal,\r\n clone,\r\n isCloneable,\r\n toString,\r\n toStringExtended,\r\n toStringCompact,\r\n getObjectByName,\r\n getObjectByNameHierarchy,\r\n getObjectByNameHierarchyBreadth,\r\n getObjectByNameHierarchyDepth,\r\n getObjectByNameDescendants,\r\n getObjectByNameDescendantsBreadth,\r\n getObjectByNameDescendantsDepth,\r\n getObjectByNameChildren,\r\n getObjectsByName,\r\n getObjectsByNameHierarchy,\r\n getObjectsByNameHierarchyBreadth,\r\n getObjectsByNameHierarchyDepth,\r\n getObjectsByNameDescendants,\r\n getObjectsByNameDescendantsBreadth,\r\n getObjectsByNameDescendantsDepth,\r\n getObjectsByNameChildren,\r\n getObjectByID,\r\n getObjectByIDHierarchy,\r\n getObjectByIDHierarchyBreadth,\r\n getObjectByIDHierarchyDepth,\r\n getObjectByIDDescendants,\r\n getObjectByIDDescendantsBreadth,\r\n getObjectByIDDescendantsDepth,\r\n getObjectByIDChildren,\r\n getHierarchy,\r\n getHierarchyBreadth,\r\n getHierarchyDepth,\r\n getDescendants,\r\n getDescendantsBreadth,\r\n getDescendantsDepth,\r\n getChildren,\r\n getSelf,\r\n addObject,\r\n getName,\r\n setName,\r\n getEngine,\r\n getID,\r\n markDirty,\r\n isTransformChanged,\r\n equals,\r\n destroy,\r\n reserveObjects,\r\n reserveObjectsSelf,\r\n reserveObjectsHierarchy,\r\n reserveObjectsDescendants,\r\n reserveObjectsChildren,\r\n getComponentsAmountMap,\r\n getComponentsAmountMapSelf,\r\n getComponentsAmountMapHierarchy,\r\n getComponentsAmountMapDescendants,\r\n getComponentsAmountMapChildren,\r\n getComponentObjects,\r\n getComponentsObjects,\r\n setActiveObjects,\r\n getObjectByNameObjects,\r\n getObjectsByNameObjects,\r\n getObjectByIDObjects,\r\n getObjectsByIDObjects,\r\n wrapObject\r\n} as const;\r\n\r\n\r\n\r\nfunction _reserveObjects(count: number, componentsAmountMap: Readonly>, scene: Scene): void {\r\n if (componentsAmountMap.has(\"object\")) {\r\n const objectsToReserve = componentsAmountMap.get(\"object\")! * count;\r\n\r\n const componentsToReserve: Record = {};\r\n for (const [componentName, componentCount] of componentsAmountMap.entries()) {\r\n if (componentName != \"object\") {\r\n componentsToReserve[componentName] = componentCount * count;\r\n }\r\n }\r\n\r\n scene.reserveObjects(objectsToReserve, componentsToReserve);\r\n }\r\n}", "import { ArrayUtils } from \"./array/array_utils.js\";\r\n\r\nexport function getObjectPrototypes(object) {\r\n let prototypes = [];\r\n\r\n prototypes.push(object);\r\n\r\n let objectProto = Object.getPrototypeOf(object);\r\n while (objectProto != null) {\r\n ArrayUtils.pushUnique(prototypes, objectProto);\r\n objectProto = Object.getPrototypeOf(objectProto);\r\n }\r\n\r\n let prototypesToCheck = [object];\r\n while (prototypesToCheck.length > 0) {\r\n let prototypeToCheck = prototypesToCheck.shift();\r\n if (prototypeToCheck != null) {\r\n ArrayUtils.pushUnique(prototypes, prototypeToCheck);\r\n\r\n ArrayUtils.pushUnique(prototypesToCheck, Object.getPrototypeOf(prototypeToCheck));\r\n\r\n try {\r\n ArrayUtils.pushUnique(prototypesToCheck, prototypeToCheck.prototype);\r\n } catch (error) {\r\n // Ignored\r\n }\r\n }\r\n }\r\n\r\n return prototypes;\r\n}\r\n\r\nexport function getObjectPropertyNames(object) {\r\n let propertyNames = [];\r\n\r\n let prototypes = JSUtils.getObjectPrototypes(object);\r\n\r\n for (let prototype of prototypes) {\r\n if (prototype != null) {\r\n let ownPropertyNames = Object.getOwnPropertyNames(prototype);\r\n for (let ownPropertyName of ownPropertyNames) {\r\n ArrayUtils.pushUnique(propertyNames, ownPropertyName);\r\n }\r\n }\r\n }\r\n\r\n return propertyNames;\r\n}\r\n\r\nexport function getObjectPropertyDescriptor(object, propertyName) {\r\n let propertyDescriptor = null;\r\n\r\n let propertyParent = JSUtils.getObjectPropertyOwnParent(object, propertyName);\r\n\r\n if (propertyParent != null) {\r\n propertyDescriptor = Object.getOwnPropertyDescriptor(propertyParent, propertyName);\r\n }\r\n\r\n return propertyDescriptor;\r\n}\r\n\r\nexport function getObjectProperty(object, propertyName) {\r\n let property = undefined;\r\n\r\n let propertyDescriptor = JSUtils.getObjectPropertyDescriptor(object, propertyName);\r\n if (propertyDescriptor != null) {\r\n if (propertyDescriptor.get != null) {\r\n property = propertyDescriptor.get.bind(object)();\r\n } else {\r\n property = propertyDescriptor.value;\r\n }\r\n }\r\n\r\n return property;\r\n}\r\n\r\nexport function setObjectProperty(valueToSet, object, propertyName) {\r\n let propertyDescriptor = JSUtils.getObjectPropertyDescriptor(object, propertyName);\r\n\r\n let setUsed = false;\r\n if (propertyDescriptor != null) {\r\n if (propertyDescriptor.set != null) {\r\n setUsed = true;\r\n\r\n propertyDescriptor.set.bind(object)(valueToSet);\r\n }\r\n }\r\n\r\n if (!setUsed) {\r\n let propertyParent = JSUtils.getObjectPropertyOwnParent(object, propertyName);\r\n if (propertyParent == null) {\r\n propertyParent = object;\r\n }\r\n\r\n Object.defineProperty(propertyParent, propertyName, {\r\n value: valueToSet\r\n });\r\n }\r\n}\r\n\r\nexport function getObjectPropertyOwnParent(object, propertyName) {\r\n let parent = null;\r\n\r\n let parents = JSUtils.getObjectPropertyOwnParents(object, propertyName);\r\n if (parents.length > 0) {\r\n parent = parents[0];\r\n }\r\n\r\n return parent;\r\n}\r\n\r\nexport function getObjectPropertyOwnParents(object, propertyName) {\r\n let parents = [];\r\n\r\n let possibleParents = JSUtils.getObjectPrototypes(object);\r\n\r\n for (let possibleParent of possibleParents) {\r\n let propertyNames = Object.getOwnPropertyNames(possibleParent);\r\n if (ArrayUtils.hasEqual(propertyNames, propertyName)) {\r\n parents.push(possibleParent);\r\n }\r\n }\r\n\r\n return parents;\r\n}\r\n\r\nexport function getObjectFromPath(path, pathStartObject = window) {\r\n let object = null;\r\n\r\n let objectName = JSUtils.getObjectNameFromPath(path);\r\n if (objectName != null) {\r\n object = JSUtils.getObjectProperty(JSUtils.getObjectParentFromPath(path, pathStartObject), objectName);\r\n }\r\n\r\n return object;\r\n}\r\n\r\nexport function getObjectNameFromPath(path) {\r\n let objectName = null;\r\n\r\n if (path != null) {\r\n let pathSplit = path.split(\".\");\r\n if (pathSplit.length > 0) {\r\n objectName = pathSplit[pathSplit.length - 1];\r\n }\r\n }\r\n\r\n return objectName;\r\n}\r\n\r\nexport function getObjectParentFromPath(path, pathStartObject = window) {\r\n let pathSplit = path.split(\".\");\r\n let currentParent = pathStartObject;\r\n for (let i = 0; i < pathSplit.length - 1; i++) {\r\n currentParent = JSUtils.getObjectProperty(currentParent, pathSplit[i]);\r\n }\r\n\r\n return currentParent;\r\n}\r\n\r\nexport function overwriteObjectProperty(newProperty, object, propertyName, overwriteOnOwnParent = true, jsObjectFunctionsSpecialOverwrite = false, logEnabled = false) {\r\n let success = false;\r\n\r\n try {\r\n let propertyOwnParent = JSUtils.getObjectPropertyOwnParent(object, propertyName);\r\n if (propertyOwnParent != null) {\r\n let originalPropertyDescriptor = Object.getOwnPropertyDescriptor(propertyOwnParent, propertyName);\r\n\r\n if (originalPropertyDescriptor != null) {\r\n let originalProperty = JSUtils.getObjectProperty(propertyOwnParent, propertyName);\r\n JSUtils.copyObjectProperties(originalProperty, newProperty, true, jsObjectFunctionsSpecialOverwrite, logEnabled);\r\n\r\n let overwriteTarget = object;\r\n if (overwriteOnOwnParent) {\r\n overwriteTarget = propertyOwnParent;\r\n }\r\n\r\n Object.defineProperty(overwriteTarget, propertyName, {\r\n value: newProperty,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n writable: originalPropertyDescriptor.writable,\r\n configurable: originalPropertyDescriptor.configurable\r\n });\r\n\r\n success = true;\r\n } else {\r\n Object.defineProperty(object, propertyName, {\r\n value: newProperty\r\n });\r\n\r\n success = true;\r\n }\r\n } else {\r\n Object.defineProperty(object, propertyName, {\r\n value: newProperty\r\n });\r\n\r\n success = true;\r\n }\r\n } catch (error) {\r\n if (logEnabled) {\r\n console.error(\"Property:\", propertyName, \"of:\", object, \"can't be overwritten.\");\r\n }\r\n }\r\n\r\n return success;\r\n}\r\n\r\nexport function copyObjectProperties(fromObject, toObject, cleanCopy = false, jsObjectFunctionsSpecialCopy = false, logEnabled = false) {\r\n if (fromObject != null) {\r\n if (cleanCopy) {\r\n JSUtils.cleanObjectProperties(toObject);\r\n }\r\n\r\n Object.setPrototypeOf(toObject, Object.getPrototypeOf(fromObject));\r\n\r\n let fromObjectPropertyNames = Object.getOwnPropertyNames(fromObject);\r\n for (let fromObjectPropertyName of fromObjectPropertyNames) {\r\n try {\r\n let fromObjectPropertyDescriptor = Object.getOwnPropertyDescriptor(fromObject, fromObjectPropertyName);\r\n\r\n Object.defineProperty(toObject, fromObjectPropertyName, {\r\n value: fromObjectPropertyDescriptor.value,\r\n enumerable: fromObjectPropertyDescriptor.enumerable,\r\n writable: fromObjectPropertyDescriptor.writable,\r\n configurable: fromObjectPropertyDescriptor.configurable\r\n });\r\n } catch (error) {\r\n if (logEnabled) {\r\n console.error(\"Property:\", fromObjectPropertyName, \"of:\", fromObject.name, \"can't be overwritten.\");\r\n }\r\n }\r\n }\r\n\r\n if (jsObjectFunctionsSpecialCopy) {\r\n _jsObjectFunctionsSpecialCopy(fromObject, toObject);\r\n }\r\n }\r\n}\r\n\r\nexport function cleanObjectProperties(object) {\r\n let objectNames = Object.getOwnPropertyNames(object);\r\n ArrayUtils.pushUnique(objectNames, \"__proto__\");\r\n\r\n for (let objectName of objectNames) {\r\n try {\r\n Object.defineProperty(object, objectName, {\r\n value: undefined\r\n });\r\n } catch (error) {\r\n // Ignored\r\n }\r\n\r\n try {\r\n delete object[objectName];\r\n } catch (error) {\r\n // Ignored\r\n }\r\n }\r\n\r\n Object.setPrototypeOf(object, null);\r\n}\r\n\r\nexport function doesObjectPropertyUseAccessors(object, propertyName) {\r\n let propertyUseAccessors = false;\r\n\r\n let propertyDescriptor = JSUtils.getObjectPropertyDescriptor(object, propertyName);\r\n\r\n if (propertyDescriptor != null && (propertyDescriptor.get != null || propertyDescriptor.set != null)) {\r\n propertyUseAccessors = true;\r\n }\r\n\r\n return propertyUseAccessors;\r\n}\r\n\r\nexport function isFunctionByName(functionParent, functionName) {\r\n let isFunctionResult = false;\r\n\r\n let functionProperty = JSUtils.getObjectProperty(functionParent, functionName);\r\n if (functionProperty != null) {\r\n isFunctionResult = JSUtils.isFunction(functionProperty);\r\n }\r\n\r\n return isFunctionResult;\r\n}\r\n\r\nexport function isClassByName(classParent, className) {\r\n let isClassResult = false;\r\n\r\n let classProperty = JSUtils.getObjectProperty(classParent, className);\r\n if (classProperty != null) {\r\n isClassResult = JSUtils.isClass(classProperty);\r\n }\r\n\r\n return isClassResult;\r\n}\r\n\r\nexport function isObjectByName(objectParent, objectName) {\r\n let isObjectResult = false;\r\n\r\n let objectProperty = JSUtils.getObjectProperty(objectParent, objectName);\r\n if (objectProperty != null) {\r\n isObjectResult = JSUtils.isObject(objectProperty);\r\n }\r\n\r\n return isObjectResult;\r\n}\r\n\r\nexport function isFunction(property) {\r\n return typeof property == \"function\" && !JSUtils.isClass(property);\r\n}\r\n\r\nexport let isClass = function () {\r\n let checkClassRegex = new RegExp(\"^class\");\r\n return function isClass(property) {\r\n return typeof property == \"function\" &&\r\n property.prototype != null && typeof property.prototype.constructor == \"function\" &&\r\n property.toString != null && typeof property.toString == \"function\" && property.toString()?.match(checkClassRegex) != null;\r\n };\r\n}();\r\n\r\nexport function isObject(property) {\r\n return typeof property == \"object\";\r\n}\r\n\r\nexport let JSUtils = {\r\n getObjectPrototypes,\r\n getObjectPropertyNames,\r\n getObjectPropertyDescriptor,\r\n getObjectProperty,\r\n setObjectProperty,\r\n getObjectPropertyOwnParent,\r\n getObjectPropertyOwnParents,\r\n getObjectFromPath,\r\n getObjectNameFromPath,\r\n getObjectParentFromPath,\r\n overwriteObjectProperty,\r\n copyObjectProperties,\r\n cleanObjectProperties,\r\n doesObjectPropertyUseAccessors,\r\n isFunctionByName,\r\n isClassByName,\r\n isObjectByName,\r\n isFunction,\r\n isClass,\r\n isObject\r\n};\r\n\r\n\r\n\r\nfunction _jsObjectFunctionsSpecialCopy(fromObject, toObject) {\r\n try {\r\n if (typeof toObject == \"function\" && typeof fromObject == \"function\") {\r\n let functionsToOverwrite = [\"toString\", \"toLocaleString\", \"valueOf\"];\r\n\r\n for (let functionToOverwrite of functionsToOverwrite) {\r\n let propertyDescriptorToOverwrite = JSUtils.getObjectPropertyDescriptor(fromObject, functionToOverwrite);\r\n\r\n if (propertyDescriptorToOverwrite != null && propertyDescriptorToOverwrite.value != null &&\r\n (propertyDescriptorToOverwrite.value == Object[functionToOverwrite])) {\r\n let valueToReturn = Object[functionToOverwrite].bind(fromObject)();\r\n let overwrittenFunction = function () { return valueToReturn; };\r\n JSUtils.overwriteObjectProperty(overwrittenFunction, toObject, functionToOverwrite, false, false);\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // Ignored\r\n }\r\n}", "import { JSUtils } from \"../../cauldron/utils/js_utils.js\";\r\n\r\nexport function injectProperties(fromReference: Record, toReference: object, enumerable: boolean = true, writable: boolean = true, configurable: boolean = true, keepOriginalDescriptorAttributes: boolean = true, bindThisAsFirstParam: boolean = false, prefix?: string, functionNamesToExclude: Readonly = []): void {\r\n const ownPropertyNames = Object.getOwnPropertyNames(fromReference);\r\n for (const ownPropertyName of ownPropertyNames) {\r\n if (functionNamesToExclude.includes(ownPropertyName)) continue;\r\n\r\n let enumerableToUse: boolean | undefined = enumerable;\r\n let writableToUse: boolean | undefined = writable;\r\n let configurableToUse: boolean | undefined = configurable;\r\n\r\n if (keepOriginalDescriptorAttributes) {\r\n const originalDescriptor = Object.getOwnPropertyDescriptor(toReference, ownPropertyName);\r\n if (originalDescriptor != null) {\r\n enumerableToUse = originalDescriptor.enumerable;\r\n writableToUse = originalDescriptor.writable;\r\n configurableToUse = originalDescriptor.configurable;\r\n }\r\n }\r\n\r\n let adjustedPropertyName = ownPropertyName;\r\n if (prefix != null) {\r\n if (adjustedPropertyName.length > 0 && adjustedPropertyName[0] == adjustedPropertyName[0].toUpperCase()) {\r\n adjustedPropertyName = prefix.toUpperCase() + adjustedPropertyName;\r\n } else {\r\n adjustedPropertyName = prefix + adjustedPropertyName;\r\n }\r\n }\r\n\r\n const propertyDescriptor = Object.getOwnPropertyDescriptor(fromReference, ownPropertyName);\r\n const useAccessors = propertyDescriptor != null && (propertyDescriptor.get != null || propertyDescriptor.set != null);\r\n\r\n if (!useAccessors) {\r\n let adjustedProperyValue = fromReference[ownPropertyName];\r\n\r\n if (bindThisAsFirstParam && JSUtils.isFunction(adjustedProperyValue)) {\r\n const originalFunction = fromReference[ownPropertyName];\r\n adjustedProperyValue = function (this: any, ...args: any[]) {\r\n return originalFunction(this, ...args);\r\n };\r\n\r\n Object.defineProperty(adjustedProperyValue, \"name\", {\r\n value: adjustedPropertyName\r\n });\r\n }\r\n\r\n Object.defineProperty(toReference, adjustedPropertyName, {\r\n value: adjustedProperyValue,\r\n enumerable: enumerableToUse,\r\n writable: writableToUse,\r\n configurable: configurableToUse\r\n });\r\n } else {\r\n Object.defineProperty(toReference, adjustedPropertyName, {\r\n get: propertyDescriptor.get,\r\n set: propertyDescriptor.set,\r\n enumerable: enumerableToUse,\r\n configurable: configurableToUse\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const PluginUtils = {\r\n injectProperties\r\n} as const;", "export const ARRAY_LIKE_CLASSES = [\r\n Array,\r\n Uint8ClampedArray,\r\n Uint8Array,\r\n Uint16Array,\r\n Uint32Array,\r\n Int8Array,\r\n Int16Array,\r\n Int32Array,\r\n Float32Array,\r\n Float64Array\r\n] as const;\r\n\r\nexport const ArrayExtensionUtils = {\r\n ARRAY_LIKE_CLASSES\r\n} as const;", "import { ArrayLike } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { ArrayUtils } from \"../../../../cauldron/utils/array/array_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./array_type_extension.js\";\r\n\r\nexport function initArrayExtension(): void {\r\n _initArrayLikeExtensionProtoypes();\r\n _initArrayExtensionProtoype();\r\n}\r\n\r\nfunction _initArrayLikeExtensionProtoypes(): void {\r\n\r\n const arrayLikeExtension: Record = {};\r\n\r\n arrayLikeExtension.pp_copy = function pp_copy, T>(this: ArrayType, array: Readonly>, copyCallback?: (arrayElement: T, thisElement: T) => T): ArrayType {\r\n return ArrayUtils.copy(array, this, copyCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_clone = function pp_clone, T>(this: Readonly, cloneCallback?: (elementToClone: T) => T): ArrayType {\r\n return ArrayUtils.clone(this, cloneCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_equals = function pp_equals(this: Readonly>, array: Readonly>, elementsEqualCallback?: (thisElement: T, arrayElement: T) => boolean): boolean {\r\n return ArrayUtils.equals(this, array, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_first = function pp_first(this: Readonly>): T | undefined {\r\n return ArrayUtils.first(this);\r\n };\r\n\r\n arrayLikeExtension.pp_last = function pp_last(this: Readonly>): T | undefined {\r\n return ArrayUtils.last(this);\r\n };\r\n\r\n arrayLikeExtension.pp_has = function pp_has(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): boolean {\r\n return ArrayUtils.has(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_hasEqual = function pp_hasEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): boolean {\r\n return ArrayUtils.hasEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_find = function pp_find(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n return ArrayUtils.find(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findIndex = function pp_findIndex(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number {\r\n return ArrayUtils.findIndex(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAll = function pp_findAll(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n return ArrayUtils.findAll(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAllIndexes = function pp_findAllIndexes(this: Readonly>, callback: (elementToCheck: T, elementIndex: number) => boolean): number[] {\r\n return ArrayUtils.findAllIndexes(this, callback);\r\n };\r\n\r\n arrayLikeExtension.pp_findEqual = function pp_findEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T | undefined {\r\n return ArrayUtils.findEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAllEqual = function pp_findAllEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): T[] {\r\n return ArrayUtils.findAllEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_findIndexEqual = function pp_findIndexEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number {\r\n return ArrayUtils.findIndexEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n arrayLikeExtension.pp_findAllIndexesEqual = function pp_findAllIndexesEqual(this: Readonly>, elementToFind: T, elementsEqualCallback?: (elementToCheck: T, elementToFind: T) => boolean): number[] {\r\n return ArrayUtils.findAllIndexesEqual(this, elementToFind, elementsEqualCallback);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(arrayLikeExtension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}\r\n\r\nfunction _initArrayExtensionProtoype(): void {\r\n\r\n const arrayExtension: Record = {};\r\n\r\n arrayExtension.pp_remove = function pp_remove(this: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T | undefined {\r\n return ArrayUtils.remove(this, callback);\r\n };\r\n\r\n arrayExtension.pp_removeIndex = function pp_removeIndex(this: T[], index: number): T | undefined {\r\n return ArrayUtils.removeIndex(this, index);\r\n };\r\n\r\n arrayExtension.pp_removeAll = function pp_removeAll(this: T[], callback: (elementToCheck: T, elementIndex: number) => boolean): T[] {\r\n return ArrayUtils.removeAll(this, callback);\r\n };\r\n\r\n arrayExtension.pp_removeAllIndexes = function pp_removeAllIndexes(this: T[], indexes: number[]): T[] {\r\n return ArrayUtils.removeAllIndexes(this, indexes);\r\n };\r\n\r\n arrayExtension.pp_removeEqual = function pp_removeEqual(this: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T | undefined {\r\n return ArrayUtils.removeEqual(this, elementToRemove, elementsEqualCallback);\r\n };\r\n\r\n arrayExtension.pp_removeAllEqual = function pp_removeAllEqual(this: T[], elementToRemove: T, elementsEqualCallback?: (elementToCheck: T, elementToRemove: T) => boolean): T[] {\r\n return ArrayUtils.removeAllEqual(this, elementToRemove, elementsEqualCallback);\r\n };\r\n\r\n arrayExtension.pp_clear = function pp_clear(this: T[]): T[] {\r\n return ArrayUtils.clear(this);\r\n };\r\n\r\n arrayExtension.pp_pushUnique = function pp_pushUnique(this: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n return ArrayUtils.pushUnique(this, elementToAdd, elementsEqualCallback);\r\n };\r\n\r\n arrayExtension.pp_unshiftUnique = function pp_unshiftUnique(this: T[], elementToAdd: T, elementsEqualCallback?: (elementToCheck: T, elementToAdd: T) => boolean): number {\r\n return ArrayUtils.unshiftUnique(this, elementToAdd, elementsEqualCallback);\r\n };\r\n\r\n PluginUtils.injectProperties(arrayExtension, Array.prototype, false, true, true);\r\n}", "/*\r\n * How to use\r\n * \r\n * Warning: The extension is a WIP so not all the functions are available for all kinds of vector.\r\n * \r\n * By default rotations are in Degrees and transforms are Matrix 4 (and not Quat 2) \r\n * For functions that work with rotations, Matrix means Matrix 3 and Quat means Quat\r\n * For functions that work with transforms, Matrix means Matrix 4 and Quat means Quat 2\r\n * \r\n * For rotations u can add a suffix like Degrees/Radians/Quat/Matrix to use a specific version, example:\r\n * - vec3_rotateAroundRadians\r\n * - vec3_degreesAddRotationDegrees\r\n * \r\n * For transform u can add a suffix like Quat/Matrix to use a specific version, example:\r\n * - vec3_convertPositionToWorldMatrix\r\n * - vec3_convertDirectionToWorldQuat\r\n * \r\n * Some vec3 functions let u add a prefix to specify if the vec3 represent a rotation in degrees or radians, where degrees is the default:\r\n * - vec3_toQuat\r\n * - vec3_degreesToQuat\r\n * - vec3_radiansToQuat\r\n * - vec3_degreesAddRotation\r\n * \r\n * Rotation operations return a rotation of the same kind of the starting variable:\r\n * - vec3_degreesAddRotationQuat -> returns a rotation in degrees\r\n * - quat_addRotationDegrees -> returns a rotation in quat\r\n * \r\n * The functions leave u the choice of forwarding an out parameter or just get the return value, example:\r\n * - let quat = this.vec3_toQuat()\r\n * - this.vec3_toQuat(quat)\r\n * - the out parameter is always the last one\r\n * \r\n * List of functions:\r\n * Notes:\r\n * - If a group of functions starts with ○ it means it modifies the variable itself\r\n * - The suffixes (like Matrix or Radians) or prefixes (like degrees) are omitted \r\n * \r\n * CREATION (u can call these functions without any object):\r\n * - vec2_create\r\n * - vec3_create\r\n * - vec4_create\r\n * - quat_create\r\n * - quat2_create\r\n * - mat3_create\r\n * - mat4_create \r\n * \r\n * GENERIC VECTOR (array with only numbers):\r\n * ° vec_zero\r\n * - vec_isZero\r\n * - vec_scale\r\n * - vec_round / vec_floor / vec_ceil / vec_clamp\r\n * - vec_log / vec_error / vec_warn \r\n * - vec_equals \r\n * \r\n * VECTOR 2:\r\n * ○ vec2_set / vec2_copy / vec2_zero\r\n * - vec2_clone \r\n * - vec2_normalize\r\n * - vec2_length\r\n * - vec2_isZero\r\n * \r\n * VECTOR 3:\r\n * ○ vec3_set / vec3_copy / vec3_zero\r\n * - vec3_clone \r\n * - vec3_normalize / vec3_negate\r\n * - vec3_isNormalized / vec3_isZero\r\n * - vec3_length / vec3_lengthSquared / vec3_lengthSigned\r\n * - vec3_distance / vec3_distanceSquared\r\n * - vec3_add / vec3_sub / vec3_mul / vec3_div / vec3_scale / vec3_dot\r\n * - vec3_equals\r\n * - vec3_transformQuat / vec3_transformMat3 / vec3_transformMat4\r\n * - vec3_componentAlongAxis / vec3_removeComponentAlongAxis / vec3_copyComponentAlongAxis / vec3_valueAlongAxis \r\n * - vec3_isConcordant\r\n * - vec3_isFartherAlongAxis\r\n * - vec3_isToTheRight\r\n * - vec3_isOnAxis\r\n * - vec3_isOnPlane\r\n * - vec3_signTo\r\n * - vec3_projectOnAxis / vec3_projectOnAxisAlongAxis\r\n * - vec3_projectOnPlane / vec3_projectOnPlaneAlongAxis\r\n * - vec3_convertPositionToWorld / vec3_convertPositionToLocal \r\n * - vec3_convertDirectionToWorld / vec3_convertDirectionToLocal \r\n * - vec3_angle / vec3_angleSigned / vec3_anglePivoted\r\n * - vec3_rotate / vec3_rotateAxis / vec3_rotateAround / vec3_rotateAroundAxis\r\n * - vec3_rotationTo / vec3_rotationToPivoted\r\n * - vec3_toRadians / vec3_toDegrees / vec3_toQuat / vec3_toMatrix\r\n * - vec3_addRotation \r\n * - vec3_lerp / vec3_interpolate \r\n * - vec3_perpendicularRandom \r\n * \r\n * VECTOR 4:\r\n * ○ vec4_set / vec4_copy\r\n * - vec4_clone \r\n * \r\n * QUAT:\r\n * ○ quat_set / quat_copy / quat_identity\r\n * - quat_clone \r\n * - quat_normalize / quat_invert / quat_conjugate\r\n * - quat_isNormalized\r\n * - quat_length / quat_lengthSquared\r\n * - quat_mul\r\n * - quat_getAxis / quat_getAngle / quat_getAxisScaled\r\n * - quat_getAxes / quat_getRight / quat_getUp / quat_getForward / quat_getLeft / quat_getDown / quat_getBackward\r\n * ○ quat_setAxes / quat_setRight / quat_setUp / quat_setForward / quat_setLeft / quat_setDown / quat_setBackward\r\n * - quat_toWorld / quat_toLocal\r\n * - quat_rotate / quat_rotateAxis \r\n * - quat_rotationTo \r\n * - quat_rotationAroundAxis \r\n * - quat_getTwist / quat_getSwing / quat_getTwistFromSwing / quat_getSwingFromTwist / quat_fromTwistSwing\r\n * ○ quat_fromRadians / quat_fromDegrees / quat_fromAxis / quat_fromAxes\r\n * - quat_toRadians / quat_toDegrees / quat_toMatrix\r\n * - quat_addRotation / quat_subRotation\r\n * - quat_lerp / quat_interpolate / quat_slerp / quat_sinterpolate\r\n * \r\n * QUAT 2:\r\n * ○ quat2_set / quat2_copy / quat2_identity\r\n * - quat2_normalize / quat2_invert / quat2_conjugate\r\n * - quat2_isNormalized\r\n * - quat2_length / quat2_lengthSquared\r\n * - quat2_mul\r\n * - quat2_getPosition / quat2_getRotation\r\n * ○ quat2_setPosition / quat2_setRotation / quat2_setPositionRotation\r\n * - quat2_getAxes / quat2_getRight / quat2_getUp / quat2_getForward / quat2_getLeft / quat2_getDown / quat2_getBackward\r\n * - quat2_toWorld / quat2_toLocal\r\n * - quat2_rotateAxis \r\n * - quat2_toMatrix\r\n * ○ quat2_fromMatrix\r\n * - quat2_lerp / quat2_interpolate / quat2_slerp / quat2_sinterpolate\r\n * \r\n * MATRIX 3:\r\n * ○ mat3_set\r\n * - mat3_toDegrees / mat3_toRadians / mat3_toQuat\r\n * - mat3_fromAxes\r\n * \r\n * MATRIX 4:\r\n * ○ mat4_set / mat4_copy / mat4_identity\r\n * - mat4_clone\r\n * - mat4_invert\r\n * - mat_mul / mat4_scale\r\n * - mat4_getPosition / mat4_getRotation / mat4_getScale\r\n * ○ mat4_setPosition / mat4_setRotation / mat4_setScale\r\n * ○ mat4_setPositionRotation / mat4_setPositionRotationScale\r\n * - mat4_getAxes / mat4_getRight / mat4_getUp / mat4_getForward / mat4_getLeft / mat4_getDown / mat4_getBackward\r\n * - mat4_toWorld / mat4_toLocal\r\n * - mat4_hasUniformScale\r\n * - mat4_toQuat\r\n * ○ mat4_fromQuat\r\n*/\r\n\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../../../cauldron/utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../../../cauldron/utils/array/quat_utils.js\";\r\nimport { Vec3Utils } from \"../../../../cauldron/utils/array/vec3_utils.js\";\r\nimport { Vec4Utils } from \"../../../../cauldron/utils/array/vec4_utils.js\";\r\nimport { EasingFunction, MathUtils } from \"../../../../cauldron/utils/math_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initArrayExtensionLegacy() {\r\n _initArrayExtensionLegacyProtoype();\r\n}\r\n\r\nexport function _initArrayExtensionLegacyProtoype() {\r\n\r\n // VECTOR 3\r\n\r\n let vec3Extension = {};\r\n\r\n vec3Extension.vec3_set = function vec3_set(x, y, z) {\r\n return Vec3Utils.set(this, x, y, z);\r\n };\r\n\r\n vec3Extension.vec3_normalize = function vec3_normalize(out = Vec3Utils.create()) {\r\n return Vec3Utils.normalize(this, out);\r\n };\r\n vec3Extension.vec3_copy = function vec3_copy(vector) {\r\n return Vec3Utils.copy(vector, this);\r\n };\r\n\r\n vec3Extension.vec3_clone = function vec3_clone(out = Vec3Utils.create()) {\r\n return Vec3Utils.clone(this, out);\r\n };\r\n\r\n vec3Extension.vec3_zero = function vec3_zero() {\r\n return Vec3Utils.zero(this);\r\n };\r\n\r\n vec3Extension.vec3_angle = function vec3_angle(vector) {\r\n return Vec3Utils.angle(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_angleDegrees = function vec3_angleDegrees(vector) {\r\n return Vec3Utils.angleDegrees(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_angleRadians = function vec3_angleRadians(vector) {\r\n return Vec3Utils.angleRadians(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_equals = function vec3_equals(vector, epsilon = 0) {\r\n return Vec3Utils.equals(this, vector, epsilon);\r\n };\r\n\r\n vec3Extension.vec3_length = function vec3_length() {\r\n return Vec3Utils.length(this);\r\n };\r\n\r\n vec3Extension.vec3_lengthSquared = function vec3_lengthSquared() {\r\n return Vec3Utils.lengthSquared(this);\r\n };\r\n\r\n vec3Extension.vec3_distance = function vec3_distance(vector) {\r\n return Vec3Utils.distance(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_distanceSquared = function vec3_distanceSquared(vector) {\r\n return Vec3Utils.distanceSquared(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_add = function vec3_add(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.add(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_sub = function vec3_sub(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.sub(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_mul = function vec3_mul(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.mul(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_div = function vec3_div(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.div(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_scale = function vec3_scale(value, out = Vec3Utils.create()) {\r\n return Vec3Utils.scale(this, value, out);\r\n };\r\n\r\n vec3Extension.vec3_dot = function vec3_dot(vector) {\r\n return Vec3Utils.dot(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_negate = function vec3_negate(out = Vec3Utils.create()) {\r\n return Vec3Utils.negate(this, out);\r\n };\r\n\r\n vec3Extension.vec3_cross = function vec3_cross(vector, out = Vec3Utils.create()) {\r\n return Vec3Utils.cross(this, vector, out);\r\n };\r\n\r\n vec3Extension.vec3_transformQuat = function vec3_transformQuat(quat, out = Vec3Utils.create()) {\r\n return Vec3Utils.transformQuat(this, quat, out);\r\n };\r\n\r\n vec3Extension.vec3_transformMat3 = function vec3_transformMat3(matrix, out = Vec3Utils.create()) {\r\n return Vec3Utils.transformMat3(this, matrix, out);\r\n };\r\n\r\n vec3Extension.vec3_transformMat4 = function vec3_transformMat4(matrix, out = Vec3Utils.create()) {\r\n return Vec3Utils.transformMat4(this, matrix, out);\r\n };\r\n\r\n vec3Extension.vec3_lengthSigned = function vec3_lengthSigned(positiveDirection) {\r\n return Vec3Utils.lengthSigned(this, positiveDirection);\r\n };\r\n\r\n vec3Extension.vec3_angleSigned = function vec3_angleSigned(vector, referenceAxis) {\r\n return Vec3Utils.angleSigned(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_angleSignedDegrees = function vec3_angleSignedDegrees(vector, referenceAxis) {\r\n return Vec3Utils.angleSignedDegrees(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_angleSignedRadians = function vec3_angleSignedRadians(vector, referenceAxis) {\r\n return Vec3Utils.angleSignedRadians(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivoted = function vec3_anglePivoted(vector, referenceAxis) {\r\n return Vec3Utils.anglePivoted(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedDegrees = function vec3_anglePivotedDegrees(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedDegrees(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedRadians = function vec3_anglePivotedRadians(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedRadians(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedSigned = function vec3_anglePivotedSigned(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedSigned(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedSignedDegrees = function vec3_anglePivotedSignedDegrees(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedSignedDegrees(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_anglePivotedSignedRadians = function vec3_anglePivotedSignedRadians(vector, referenceAxis) {\r\n return Vec3Utils.anglePivotedSignedRadians(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_toRadians = function vec3_toRadians(out = Vec3Utils.create()) {\r\n return Vec3Utils.toRadians(this, out);\r\n };\r\n\r\n vec3Extension.vec3_toDegrees = function vec3_toDegrees(out = Vec3Utils.create()) {\r\n return Vec3Utils.toDegrees(this, out);\r\n };\r\n\r\n vec3Extension.vec3_toQuat = function vec3_toQuat(out) {\r\n return Vec3Utils.toQuat(this, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansToQuat = function vec3_radiansToQuat(out = QuatUtils.create()) {\r\n return Vec3Utils.radiansToQuat(this, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesToQuat = function vec3_degreesToQuat(out = QuatUtils.create()) {\r\n return Vec3Utils.degreesToQuat(this, out);\r\n };\r\n\r\n vec3Extension.vec3_isNormalized = function vec3_isNormalized(epsilon = MathUtils.EPSILON) {\r\n return Vec3Utils.isNormalized(this, epsilon);\r\n };\r\n\r\n vec3Extension.vec3_isZero = function vec3_isZero(epsilon = 0) {\r\n return Vec3Utils.isZero(this, epsilon);\r\n };\r\n\r\n vec3Extension.vec3_valueAlongAxis = function vec3_valueAlongAxis(axis) {\r\n return Vec3Utils.valueAlongAxis(this, axis);\r\n };\r\n\r\n vec3Extension.vec3_valueAlongPlane = function vec3_valueAlongPlane(planeNormal) {\r\n return Vec3Utils.valueAlongPlane(this, planeNormal);\r\n };\r\n\r\n vec3Extension.vec3_componentAlongAxis = function vec3_componentAlongAxis(axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.componentAlongAxis(this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_removeComponentAlongAxis = function vec3_removeComponentAlongAxis(axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.removeComponentAlongAxis(this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_copyComponentAlongAxis = function vec3_copyComponentAlongAxis(vector, axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.copyComponentAlongAxis(vector, this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_isConcordant = function vec3_isConcordant(vector) {\r\n return Vec3Utils.isConcordant(this, vector);\r\n };\r\n\r\n vec3Extension.vec3_isFartherAlongAxis = function vec3_isFartherAlongAxis(vector, axis) {\r\n return Vec3Utils.isFartherAlongAxis(this, vector, axis);\r\n };\r\n\r\n vec3Extension.vec3_isToTheRight = function vec3_isToTheRight(vector, referenceAxis) {\r\n return Vec3Utils.isToTheRight(this, vector, referenceAxis);\r\n };\r\n\r\n vec3Extension.vec3_signTo = function vec3_signTo(vector, referenceAxis, zeroSign = 1) {\r\n return Vec3Utils.signTo(this, vector, referenceAxis, zeroSign);\r\n };\r\n\r\n vec3Extension.vec3_projectOnAxis = function vec3_projectOnAxis(axis, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnAxis(this, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_projectOnAxisAlongAxis = function vec3_projectOnAxisAlongAxis(axis, projectAlongAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnAxisAlongAxis(this, axis, projectAlongAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_projectOnPlane = function vec3_projectOnPlane(planeNormal, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnPlane(this, planeNormal, out);\r\n };\r\n\r\n vec3Extension.vec3_projectOnPlaneAlongAxis = function vec3_projectOnPlaneAlongAxis(planeNormal, projectAlongAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.projectOnPlaneAlongAxis(this, planeNormal, projectAlongAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_isOnAxis = function vec3_isOnAxis(axis) {\r\n return Vec3Utils.isOnAxis(this, axis);\r\n };\r\n\r\n vec3Extension.vec3_isOnPlane = function vec3_isOnPlane(planeNormal) {\r\n return Vec3Utils.isOnPlane(this, planeNormal);\r\n };\r\n\r\n vec3Extension.vec3_rotate = function vec3_rotate(rotation, out) {\r\n return Vec3Utils.rotate(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateDegrees = function vec3_rotateDegrees(rotation, out) {\r\n return Vec3Utils.rotateDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateRadians = function vec3_rotateRadians(rotation, out) {\r\n return Vec3Utils.rotateRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateQuat = function vec3_rotateQuat(rotation, out) {\r\n return Vec3Utils.rotateQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAxis = function vec3_rotateAxis(angle, axis, out) {\r\n return Vec3Utils.rotateAxis(this, angle, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAxisDegrees = function vec3_rotateAxisDegrees(angle, axis, out) {\r\n return Vec3Utils.rotateAxisDegrees(this, angle, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAxisRadians = function vec3_rotateAxisRadians(angle, axis, out) {\r\n return Vec3Utils.rotateAxisRadians(this, angle, axis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAround = function vec3_rotateAround(rotation, origin, out) {\r\n return Vec3Utils.rotateAround(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundDegrees = function vec3_rotateAroundDegrees(rotation, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundDegrees(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundRadians = function vec3_rotateAroundRadians(rotation, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundRadians(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundQuat = function vec3_rotateAroundQuat(rotation, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundQuat(this, rotation, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundAxis = function vec3_rotateAroundAxis(angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxis(this, angle, axis, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundAxisDegrees = function vec3_rotateAroundAxisDegrees(angle, axis, origin, out) {\r\n return Vec3Utils.rotateAroundAxisDegrees(this, angle, axis, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_rotateAroundAxisRadians = function vec3_rotateAroundAxisRadians(angle, axis, origin, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotateAroundAxisRadians(this, angle, axis, origin, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToWorld = function vec3_convertPositionToWorld(parentTransform, out) {\r\n return Vec3Utils.convertPositionToWorld(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToLocal = function vec3_convertPositionToLocal(parentTransform, out) {\r\n return Vec3Utils.convertPositionToLocal(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToWorldMatrix = function vec3_convertPositionToWorldMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToWorldMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToLocalMatrix = function vec3_convertPositionToLocalMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToLocalMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToWorldQuat = function vec3_convertPositionToWorldQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToWorldQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertPositionToLocalQuat = function vec3_convertPositionToLocalQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertPositionToLocalQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToWorld = function vec3_convertDirectionToWorld(parentTransform, out) {\r\n return Vec3Utils.convertDirectionToWorld(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToLocal = function vec3_convertDirectionToLocal(parentTransform, out) {\r\n return Vec3Utils.convertDirectionToLocal(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToWorldMatrix = function vec3_convertDirectionToWorldMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToWorldMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToLocalMatrix = function vec3_convertDirectionToLocalMatrix(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToLocalMatrix(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToWorldQuat = function vec3_convertDirectionToWorldQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToWorldQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_convertDirectionToLocalQuat = function vec3_convertDirectionToLocalQuat(parentTransform, out = Vec3Utils.create()) {\r\n return Vec3Utils.convertDirectionToLocalQuat(this, parentTransform, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotation = function vec3_addRotation(rotation, out) {\r\n return Vec3Utils.addRotation(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotationDegrees = function vec3_addRotationDegrees(rotation, out) {\r\n return Vec3Utils.addRotationDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotationRadians = function vec3_addRotationRadians(rotation, out) {\r\n return Vec3Utils.addRotationRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_addRotationQuat = function vec3_addRotationQuat(rotation, out) {\r\n return Vec3Utils.addRotationQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotation = function vec3_degreesAddRotation(rotation, out) {\r\n return Vec3Utils.degreesAddRotation(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotationDegrees = function vec3_degreesAddRotationDegrees(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.degreesAddRotationDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotationRadians = function vec3_degreesAddRotationRadians(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.degreesAddRotationRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesAddRotationQuat = function vec3_degreesAddRotationQuat(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.degreesAddRotationQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotation = function vec3_radiansAddRotation(rotation, out) {\r\n return Vec3Utils.radiansAddRotation(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotationDegrees = function vec3_radiansAddRotationDegrees(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.radiansAddRotationDegrees(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotationRadians = function vec3_radiansAddRotationRadians(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.radiansAddRotationRadians(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansAddRotationQuat = function vec3_radiansAddRotationQuat(rotation, out = Vec3Utils.create()) {\r\n return Vec3Utils.radiansAddRotationQuat(this, rotation, out);\r\n };\r\n\r\n vec3Extension.vec3_toMatrix = function vec3_toMatrix(out = Mat3Utils.create()) {\r\n return Vec3Utils.toMatrix(this, out);\r\n };\r\n\r\n vec3Extension.vec3_degreesToMatrix = function vec3_degreesToMatrix(out = Mat3Utils.create()) {\r\n return Vec3Utils.degreesToMatrix(this, out);\r\n };\r\n\r\n vec3Extension.vec3_radiansToMatrix = function vec3_radiansToMatrix(out = Mat3Utils.create()) {\r\n return Vec3Utils.radiansToMatrix(this, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationTo = function vec3_rotationTo(to, out) {\r\n return Vec3Utils.rotationTo(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToDegrees = function vec3_rotationToDegrees(to, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToDegrees(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToRadians = function vec3_rotationToRadians(to, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToRadians(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToQuat = function vec3_rotationToQuat(to, out = QuatUtils.create()) {\r\n return Vec3Utils.rotationToQuat(this, to, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivoted = function vec3_rotationToPivoted(to, pivotAxis, out) {\r\n return Vec3Utils.rotationToPivoted(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivotedDegrees = function vec3_rotationToPivotedDegrees(to, pivotAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToPivotedDegrees(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivotedRadians = function vec3_rotationToPivotedRadians(to, pivotAxis, out = Vec3Utils.create()) {\r\n return Vec3Utils.rotationToPivotedRadians(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_rotationToPivotedQuat = function vec3_rotationToPivotedQuat(to, pivotAxis, out = QuatUtils.create()) {\r\n return Vec3Utils.rotationToPivotedQuat(this, to, pivotAxis, out);\r\n };\r\n\r\n vec3Extension.vec3_lerp = function vec3_lerp(to, interpolationFactor, out = Vec3Utils.create()) {\r\n return Vec3Utils.lerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n vec3Extension.vec3_interpolate = function vec3_interpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = Vec3Utils.create()) {\r\n return Vec3Utils.interpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n vec3Extension.vec3_perpendicularRandom = function vec3_perpendicularRandom(out = Vec3Utils.create()) {\r\n return Vec3Utils.perpendicularRandom(this, out);\r\n };\r\n\r\n // VECTOR 4\r\n\r\n let vec4Extension = {};\r\n\r\n vec4Extension.vec4_set = function vec4_set(x, y, z, w) {\r\n return Vec4Utils.set(this, x, y, z, w);\r\n };\r\n\r\n vec4Extension.vec4_copy = function vec4_copy(vector) {\r\n return Vec4Utils.copy(vector, this);\r\n };\r\n\r\n vec4Extension.vec4_clone = function vec4_clone(out = Vec4Utils.create()) {\r\n return Vec4Utils.clone(this, out);\r\n };\r\n\r\n // QUAT\r\n\r\n let quatExtension = {};\r\n\r\n quatExtension.quat_set = function quat_set(x, y, z, w) {\r\n return QuatUtils.set(this, x, y, z, w);\r\n };\r\n\r\n quatExtension.quat_normalize = function quat_normalize(out = QuatUtils.create()) {\r\n return QuatUtils.normalize(this, out);\r\n };\r\n\r\n quatExtension.quat_copy = function quat_copy(quat) {\r\n return QuatUtils.copy(quat, this);\r\n };\r\n\r\n quatExtension.quat_clone = function quat_clone(out = QuatUtils.create()) {\r\n return QuatUtils.clone(this, out);\r\n };\r\n\r\n quatExtension.quat_identity = function quat_identity() {\r\n return QuatUtils.identity(this);\r\n };\r\n\r\n quatExtension.quat_length = function quat_length() {\r\n return QuatUtils.length(this);\r\n };\r\n\r\n quatExtension.quat_lengthSquared = function quat_lengthSquared() {\r\n return QuatUtils.lengthSquared(this);\r\n };\r\n\r\n quatExtension.quat_invert = function quat_invert(out = QuatUtils.create()) {\r\n return QuatUtils.invert(this, out);\r\n };\r\n\r\n quatExtension.quat_conjugate = function quat_conjugate(out = QuatUtils.create()) {\r\n return QuatUtils.conjugate(this, out);\r\n };\r\n\r\n quatExtension.quat_mul = function quat_mul(rotation, out = QuatUtils.create()) {\r\n return QuatUtils.mul(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_getAxis = function quat_getAxis(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxis(this, out);\r\n };\r\n\r\n quatExtension.quat_getAngle = function quat_getAngle() {\r\n return QuatUtils.getAngle(this);\r\n };\r\n\r\n quatExtension.quat_getAngleDegrees = function quat_getAngleDegrees() {\r\n return QuatUtils.getAngleDegrees(this);\r\n };\r\n\r\n quatExtension.quat_getAngleRadians = function quat_getAngleRadians() {\r\n return QuatUtils.getAngleRadians(this);\r\n };\r\n\r\n quatExtension.quat_getAxisScaled = function quat_getAxisScaled(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaled(this, out);\r\n };\r\n\r\n quatExtension.quat_getAxisScaledDegrees = function quat_getAxisScaledDegrees(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaledDegrees(this, out);\r\n };\r\n\r\n quatExtension.quat_getAxisScaledRadians = function quat_getAxisScaledRadians(out = Vec3Utils.create()) {\r\n return QuatUtils.getAxisScaledRadians(this, out);\r\n };\r\n\r\n quatExtension.quat_getAxes = function quat_getAxes(out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n return QuatUtils.getAxes(this, out);\r\n };\r\n\r\n quatExtension.quat_getForward = function quat_getForward(out = Vec3Utils.create()) {\r\n return QuatUtils.getForward(this, out);\r\n };\r\n\r\n quatExtension.quat_getBackward = function quat_getBackward(out) {\r\n return QuatUtils.getBackward(this, out);\r\n };\r\n\r\n quatExtension.quat_getLeft = function quat_getLeft(out = Vec3Utils.create()) {\r\n return QuatUtils.getLeft(this, out);\r\n };\r\n\r\n quatExtension.quat_getRight = function quat_getRight(out) {\r\n return QuatUtils.getRight(this, out);\r\n };\r\n\r\n quatExtension.quat_getUp = function quat_getUp(out = Vec3Utils.create()) {\r\n return QuatUtils.getUp(this, out);\r\n };\r\n\r\n quatExtension.quat_getDown = function quat_getDown(out) {\r\n return QuatUtils.getDown(this, out);\r\n };\r\n\r\n quatExtension.quat_setAxes = function quat_setAxes(left, up, forward) {\r\n return QuatUtils.setAxes(this, left, up, forward);\r\n };\r\n\r\n quatExtension.quat_setForward = function quat_setForward(forward, up = null, left = null) {\r\n return QuatUtils.setForward(this, forward, up, left);\r\n };\r\n\r\n quatExtension.quat_setBackward = function quat_setBackward(backward, up = null, left = null) {\r\n return QuatUtils.setBackward(this, backward, up, left);\r\n };\r\n\r\n quatExtension.quat_setUp = function quat_setUp(up, forward = null, left = null) {\r\n return QuatUtils.setUp(this, up, forward, left);\r\n };\r\n\r\n quatExtension.quat_setDown = function quat_setDown(down, forward = null, left = null) {\r\n return QuatUtils.setDown(this, down, forward, left);\r\n };\r\n\r\n quatExtension.quat_setLeft = function quat_setLeft(left, up = null, forward = null) {\r\n return QuatUtils.setLeft(this, left, up, forward);\r\n };\r\n\r\n quatExtension.quat_setRight = function quat_setRight(right, up = null, forward = null) {\r\n return QuatUtils.setRight(this, right, up, forward);\r\n };\r\n\r\n quatExtension.quat_toWorld = function quat_toWorld(parentQuat, out = QuatUtils.create()) {\r\n return QuatUtils.toWorld(this, parentQuat, out);\r\n };\r\n\r\n quatExtension.quat_toLocal = function quat_toLocal(parentQuat, out = QuatUtils.create()) {\r\n return QuatUtils.toLocal(this, parentQuat, out);\r\n };\r\n\r\n quatExtension.quat_fromAxis = function quat_fromAxis(angle, axis) {\r\n return QuatUtils.fromAxis(angle, axis, this);\r\n };\r\n\r\n quatExtension.quat_fromAxisDegrees = function quat_fromAxisDegrees(angle, axis) {\r\n return QuatUtils.fromAxisDegrees(angle, axis, this);\r\n };\r\n\r\n quatExtension.quat_fromAxisRadians = function quat_fromAxisRadians(angle, axis) {\r\n return QuatUtils.fromAxisRadians(angle, axis, this);\r\n };\r\n\r\n quatExtension.quat_fromAxes = function quat_fromAxes(leftAxis, upAxis, forwardAxis) {\r\n return QuatUtils.fromAxes(leftAxis, upAxis, forwardAxis, this);\r\n };\r\n\r\n quatExtension.quat_fromRadians = function quat_fromRadians(radiansRotation) {\r\n return QuatUtils.fromRadians(radiansRotation, this);\r\n };\r\n\r\n quatExtension.quat_fromDegrees = function quat_fromDegrees(degreesRotation) {\r\n return QuatUtils.fromDegrees(degreesRotation, this);\r\n };\r\n\r\n quatExtension.quat_toRadians = function quat_toRadians(out = Vec3Utils.create()) {\r\n return QuatUtils.toRadians(this, out);\r\n };\r\n\r\n quatExtension.quat_toDegrees = function quat_toDegrees(out = Vec3Utils.create()) {\r\n return QuatUtils.toDegrees(this, out);\r\n };\r\n\r\n quatExtension.quat_isNormalized = function quat_isNormalized(epsilon = MathUtils.EPSILON) {\r\n return QuatUtils.isNormalized(this, epsilon);\r\n };\r\n\r\n quatExtension.quat_addRotation = function quat_addRotation(rotation, out) {\r\n return QuatUtils.addRotation(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_addRotationDegrees = function quat_addRotationDegrees(rotation, out) {\r\n return QuatUtils.addRotationDegrees(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_addRotationRadians = function quat_addRotationRadians(rotation, out) {\r\n return QuatUtils.addRotationRadians(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_addRotationQuat = function quat_addRotationQuat(rotation, out = QuatUtils.create()) {\r\n return QuatUtils.addRotationQuat(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotation = function quat_subRotation(rotation, out) {\r\n return QuatUtils.subRotation(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotationDegrees = function quat_subRotationDegrees(rotation, out) {\r\n return QuatUtils.subRotationDegrees(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotationRadians = function quat_subRotationRadians(rotation, out) {\r\n return QuatUtils.subRotationRadians(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_subRotationQuat = function quat_subRotationQuat(rotation, out = QuatUtils.create()) {\r\n return QuatUtils.subRotationQuat(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotationTo = function quat_rotationTo(to, out) {\r\n return QuatUtils.rotationTo(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationToDegrees = function quat_rotationToDegrees(to, out) {\r\n return QuatUtils.rotationToDegrees(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationToRadians = function quat_rotationToRadians(to, out) {\r\n return QuatUtils.rotationToRadians(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationToQuat = function quat_rotationToQuat(to, out) {\r\n return QuatUtils.rotationToQuat(this, to, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxis = function quat_rotationAroundAxis(axis, out) {\r\n return QuatUtils.rotationAroundAxis(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxisDegrees = function quat_rotationAroundAxisDegrees(axis, out = Vec3Utils.create()) {\r\n return QuatUtils.rotationAroundAxisDegrees(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxisRadians = function quat_rotationAroundAxisRadians(axis, out = Vec3Utils.create()) {\r\n return QuatUtils.rotationAroundAxisRadians(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotationAroundAxisQuat = function quat_rotationAroundAxisQuat(axis, out = QuatUtils.create()) {\r\n return QuatUtils.rotationAroundAxisQuat(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_getTwist = function quat_getTwist(axis, out = QuatUtils.create()) {\r\n return QuatUtils.getTwist(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_getSwing = function quat_getSwing(axis, out = QuatUtils.create()) {\r\n return QuatUtils.getSwing(this, axis, out);\r\n };\r\n\r\n quatExtension.quat_getSwingFromTwist = function quat_getSwingFromTwist(twist, out = QuatUtils.create()) {\r\n return QuatUtils.getSwingFromTwist(this, twist, out);\r\n };\r\n\r\n quatExtension.quat_getTwistFromSwing = function quat_getTwistFromSwing(swing, out = QuatUtils.create()) {\r\n return QuatUtils.getTwistFromSwing(this, swing, out);\r\n };\r\n\r\n quatExtension.quat_fromTwistSwing = function quat_fromTwistSwing(twist, swing) {\r\n return QuatUtils.fromTwistSwing(twist, swing, this);\r\n };\r\n\r\n quatExtension.quat_toMatrix = function quat_toMatrix(out = Mat3Utils.create()) {\r\n return QuatUtils.toMatrix(this, out);\r\n };\r\n\r\n quatExtension.quat_rotate = function quat_rotate(rotation, out) {\r\n return QuatUtils.rotate(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateDegrees = function quat_rotateDegrees(rotation, out) {\r\n return QuatUtils.rotateDegrees(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateRadians = function quat_rotateRadians(rotation, out) {\r\n return QuatUtils.rotateRadians(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateQuat = function quat_rotateQuat(rotation, out) {\r\n return QuatUtils.rotateQuat(this, rotation, out);\r\n };\r\n\r\n quatExtension.quat_rotateAxis = function quat_rotateAxis(angle, axis, out) {\r\n return QuatUtils.rotateAxis(this, angle, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotateAxisDegrees = function quat_rotateAxisDegrees(angle, axis, out) {\r\n return QuatUtils.rotateAxisDegrees(this, angle, axis, out);\r\n };\r\n\r\n quatExtension.quat_rotateAxisRadians = function quat_rotateAxisRadians(angle, axis, out) {\r\n return QuatUtils.rotateAxisRadians(this, angle, axis, out);\r\n };\r\n\r\n quatExtension.quat_lerp = function quat_lerp(to, interpolationFactor, out = QuatUtils.create()) {\r\n return QuatUtils.lerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quatExtension.quat_interpolate = function quat_interpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n return QuatUtils.interpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n quatExtension.quat_slerp = function quat_slerp(to, interpolationFactor, out = QuatUtils.create()) {\r\n return QuatUtils.slerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quatExtension.quat_sinterpolate = function quat_sinterpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = QuatUtils.create()) {\r\n return QuatUtils.sinterpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n // QUAT 2\r\n\r\n let quat2Extension = {};\r\n\r\n quat2Extension.quat2_set = function quat2_set(x1, y1, z1, w1, x2, y2, z2, w2) {\r\n return Quat2Utils.set(this, x1, y1, z1, w1, x2, y2, z2, w2);\r\n };\r\n\r\n quat2Extension.quat2_normalize = function quat2_normalize(out = Quat2Utils.create()) {\r\n return Quat2Utils.normalize(this, out);\r\n };\r\n\r\n quat2Extension.quat2_invert = function quat2_invert(out = Quat2Utils.create()) {\r\n return Quat2Utils.invert(this, out);\r\n };\r\n\r\n quat2Extension.quat2_conjugate = function quat2_conjugate(out = Quat2Utils.create()) {\r\n return Quat2Utils.conjugate(this, out);\r\n };\r\n\r\n quat2Extension.quat2_copy = function quat2_copy(quat) {\r\n return Quat2Utils.copy(quat, this);\r\n };\r\n\r\n quat2Extension.quat2_identity = function quat2_identity() {\r\n return Quat2Utils.identity(this);\r\n };\r\n\r\n quat2Extension.quat2_getPosition = function quat2_getPosition(out = Vec3Utils.create()) {\r\n return Quat2Utils.getPosition(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotation = function quat2_getRotation(out) {\r\n return Quat2Utils.getRotation(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotationDegrees = function quat2_getRotationDegrees(out = Vec3Utils.create()) {\r\n return Quat2Utils.getRotationDegrees(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotationRadians = function quat2_getRotationRadians(out = Vec3Utils.create()) {\r\n return Quat2Utils.getRotationRadians(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRotationQuat = function quat2_getRotationQuat(out = QuatUtils.create()) {\r\n return Quat2Utils.getRotationQuat(this, out);\r\n };\r\n\r\n quat2Extension.quat2_setPosition = function quat2_setPosition(position) {\r\n return Quat2Utils.setPosition(this, position);\r\n };\r\n\r\n quat2Extension.quat2_setRotation = function quat2_setRotation(rotation) {\r\n return Quat2Utils.setRotation(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setRotationDegrees = function quat2_setRotationDegrees(rotation) {\r\n return Quat2Utils.setRotationDegrees(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setRotationRadians = function quat2_setRotationRadians(rotation) {\r\n return Quat2Utils.setRotationRadians(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setRotationQuat = function quat2_setRotationQuat(rotation) {\r\n return Quat2Utils.setRotationQuat(this, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotation = function quat2_setPositionRotation(position, rotation) {\r\n return Quat2Utils.setPositionRotation(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotationDegrees = function quat2_setPositionRotationDegrees(position, rotation) {\r\n return Quat2Utils.setPositionRotationDegrees(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotationRadians = function quat2_setPositionRotationRadians(position, rotation) {\r\n return Quat2Utils.setPositionRotationRadians(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_setPositionRotationQuat = function quat2_setPositionRotationQuat(position, rotation) {\r\n return Quat2Utils.setPositionRotationQuat(this, position, rotation);\r\n };\r\n\r\n quat2Extension.quat2_isNormalized = function quat2_isNormalized(epsilon = MathUtils.EPSILON) {\r\n return Quat2Utils.isNormalized(this, epsilon);\r\n };\r\n\r\n quat2Extension.quat2_length = function quat2_length() {\r\n return Quat2Utils.length(this);\r\n };\r\n\r\n quat2Extension.quat2_lengthSquared = function quat2_lengthSquared() {\r\n return Quat2Utils.lengthSquared(this);\r\n };\r\n\r\n quat2Extension.quat2_mul = function quat2_mul(quat, out = Quat2Utils.create()) {\r\n return Quat2Utils.mul(this, quat, out);\r\n };\r\n\r\n quat2Extension.quat2_getAxes = function quat2_getAxes(out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n return Quat2Utils.getAxes(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getForward = function quat2_getForward(out = Vec3Utils.create()) {\r\n return Quat2Utils.getForward(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getBackward = function quat2_getBackward(out) {\r\n return Quat2Utils.getBackward(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getLeft = function quat2_getLeft(out = Vec3Utils.create()) {\r\n return Quat2Utils.getLeft(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getRight = function quat2_getRight(out) {\r\n return Quat2Utils.getRight(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getUp = function quat2_getUp(out = Vec3Utils.create()) {\r\n return Quat2Utils.getUp(this, out);\r\n };\r\n\r\n quat2Extension.quat2_getDown = function quat2_getDown(out) {\r\n return Quat2Utils.getDown(this, out);\r\n };\r\n\r\n quat2Extension.quat2_toWorld = function quat2_toWorld(parentTransformQuat, out = Quat2Utils.create()) {\r\n return Quat2Utils.toWorld(this, parentTransformQuat, out);\r\n };\r\n\r\n quat2Extension.quat2_toLocal = function quat2_toLocal(parentTransformQuat, out = Quat2Utils.create()) {\r\n return Quat2Utils.toLocal(this, parentTransformQuat, out);\r\n };\r\n\r\n quat2Extension.quat2_rotateAxis = function quat2_rotateAxis(angle, axis, out) {\r\n return Quat2Utils.rotateAxis(this, angle, axis, out);\r\n };\r\n\r\n quat2Extension.quat2_rotateAxisDegrees = function quat2_rotateAxisDegrees(angle, axis, out) {\r\n return Quat2Utils.rotateAxisDegrees(this, angle, axis, out);\r\n };\r\n\r\n quat2Extension.quat2_rotateAxisRadians = function quat2_rotateAxisRadians(angle, axis, out = Quat2Utils.create()) {\r\n return Quat2Utils.rotateAxisRadians(this, angle, axis, out);\r\n };\r\n\r\n quat2Extension.quat2_toMatrix = function quat2_toMatrix(out = Mat4Utils.create()) {\r\n return Quat2Utils.toMatrix(this, out);\r\n };\r\n\r\n quat2Extension.quat2_fromMatrix = function quat2_fromMatrix(matrix) {\r\n return Quat2Utils.fromMatrix(matrix, this);\r\n };\r\n\r\n quat2Extension.quat2_lerp = function quat2_lerp(to, interpolationFactor, out = Quat2Utils.create()) {\r\n return Quat2Utils.lerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quat2Extension.quat2_interpolate = function quat2_interpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n return Quat2Utils.interpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n quat2Extension.quat2_slerp = function quat2_slerp(to, interpolationFactor, out = Quat2Utils.create()) {\r\n return Quat2Utils.slerp(this, to, interpolationFactor, out);\r\n };\r\n\r\n quat2Extension.quat2_sinterpolate = function quat2_sinterpolate(to, interpolationFactor, easingFunction = EasingFunction.linear, out = Quat2Utils.create()) {\r\n return Quat2Utils.sinterpolate(this, to, interpolationFactor, easingFunction, out);\r\n };\r\n\r\n // MATRIX 4\r\n\r\n let mat4Extension = {};\r\n\r\n mat4Extension.mat4_set = function mat4_set(\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33) {\r\n return Mat4Utils.set(this,\r\n m00, m01, m02, m03,\r\n m10, m11, m12, m13,\r\n m20, m21, m22, m23,\r\n m30, m31, m32, m33\r\n );\r\n };\r\n\r\n mat4Extension.mat4_copy = function mat4_copy(matrix) {\r\n return Mat4Utils.copy(matrix, this);\r\n };\r\n\r\n mat4Extension.mat4_identity = function mat4_identity() {\r\n return Mat4Utils.identity(this);\r\n };\r\n\r\n mat4Extension.mat4_invert = function mat4_invert(out = Mat4Utils.create()) {\r\n return Mat4Utils.invert(this, out);\r\n };\r\n\r\n mat4Extension.mat4_mul = function mat4_mul(matrix, out = Mat4Utils.create()) {\r\n return Mat4Utils.mul(this, matrix, out);\r\n };\r\n\r\n mat4Extension.mat4_scale = function mat4_scale(vector, out = Mat4Utils.create()) {\r\n return Mat4Utils.scale(this, vector, out);\r\n };\r\n\r\n mat4Extension.mat4_clone = function mat4_clone(out = Mat4Utils.create()) {\r\n return Mat4Utils.clone(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getPosition = function mat4_getPosition(out = Vec3Utils.create()) {\r\n return Mat4Utils.getPosition(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotation = function mat4_getRotation(out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotation(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotationDegrees = function mat4_getRotationDegrees(out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotationDegrees(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotationRadians = function mat4_getRotationRadians(out = Vec3Utils.create()) {\r\n return Mat4Utils.getRotationRadians(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRotationQuat = function mat4_getRotationQuat(out = QuatUtils.create()) {\r\n return Mat4Utils.getRotationQuat(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getScale = function mat4_getScale(out = Vec3Utils.create()) {\r\n return Mat4Utils.getScale(this, out);\r\n };\r\n\r\n mat4Extension.mat4_setPosition = function mat4_setPosition(position) {\r\n return Mat4Utils.setPosition(this, position);\r\n };\r\n\r\n mat4Extension.mat4_setRotation = function mat4_setRotation(rotation) {\r\n return Mat4Utils.setRotation(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setRotationDegrees = function mat4_setRotationDegrees(rotation) {\r\n return Mat4Utils.setRotationDegrees(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setRotationRadians = function mat4_setRotationRadians(rotation) {\r\n return Mat4Utils.setRotationRadians(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setRotationQuat = function mat4_setRotationQuat(rotation) {\r\n return Mat4Utils.setRotationQuat(this, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setScale = function mat4_setScale(scale) {\r\n return Mat4Utils.setScale(this, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationScale = function mat4_setPositionRotationScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationDegreesScale = function mat4_setPositionRotationDegreesScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationDegreesScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationRadiansScale = function mat4_setPositionRotationRadiansScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationRadiansScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationQuatScale = function mat4_setPositionRotationQuatScale(position, rotation, scale) {\r\n return Mat4Utils.setPositionRotationQuatScale(this, position, rotation, scale);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotation = function mat4_setPositionRotation(position, rotation) {\r\n return Mat4Utils.setPositionRotation(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationDegrees = function mat4_setPositionRotationDegrees(position, rotation) {\r\n return Mat4Utils.setPositionRotationDegrees(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationRadians = function mat4_setPositionRotationRadians(position, rotation) {\r\n return Mat4Utils.setPositionRotationRadians(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_setPositionRotationQuat = function mat4_setPositionRotationQuat(position, rotation) {\r\n return Mat4Utils.setPositionRotationQuat(this, position, rotation);\r\n };\r\n\r\n mat4Extension.mat4_getAxes = function mat4_getAxes(out = [Vec3Utils.create(), Vec3Utils.create(), Vec3Utils.create()]) {\r\n return Mat4Utils.getAxes(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getForward = function mat4_getForward(out = Vec3Utils.create()) {\r\n return Mat4Utils.getForward(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getBackward = function mat4_getBackward(out) {\r\n return Mat4Utils.getBackward(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getLeft = function mat4_getLeft(out = Vec3Utils.create()) {\r\n return Mat4Utils.getLeft(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getRight = function mat4_getRight(out) {\r\n return Mat4Utils.getRight(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getUp = function mat4_getUp(out = Vec3Utils.create()) {\r\n return Mat4Utils.getUp(this, out);\r\n };\r\n\r\n mat4Extension.mat4_getDown = function mat4_getDown(out) {\r\n return Mat4Utils.getDown(this, out);\r\n };\r\n\r\n mat4Extension.mat4_toWorld = function mat4_toWorld(parentTransformMatrix, out = Mat4Utils.create()) {\r\n return Mat4Utils.toWorld(this, parentTransformMatrix, out);\r\n };\r\n\r\n mat4Extension.mat4_toLocal = function mat4_toLocal(parentTransformMatrix, out = Mat4Utils.create()) {\r\n return Mat4Utils.toLocal(this, parentTransformMatrix, out);\r\n };\r\n\r\n mat4Extension.mat4_hasUniformScale = function mat4_hasUniformScale() {\r\n return Mat4Utils.hasUniformScale(this);\r\n };\r\n\r\n mat4Extension.mat4_toQuat = function mat4_toQuat(out = Quat2Utils.create()) {\r\n return Mat4Utils.toQuat(this, out);\r\n };\r\n\r\n mat4Extension.mat4_fromQuat = function mat4_fromQuat(quat) {\r\n return Mat4Utils.fromQuat(quat, this);\r\n };\r\n\r\n\r\n\r\n let arrayPrototypesToExtend = [\r\n Array.prototype, Uint8ClampedArray.prototype, Uint8Array.prototype, Uint16Array.prototype, Uint32Array.prototype, Int8Array.prototype,\r\n Int16Array.prototype, Int32Array.prototype, Float32Array.prototype, Float64Array.prototype];\r\n\r\n for (let arrayPrototypeToExtend of arrayPrototypesToExtend) {\r\n PluginUtils.injectProperties(vec3Extension, arrayPrototypeToExtend, false, true, true);\r\n PluginUtils.injectProperties(vec4Extension, arrayPrototypeToExtend, false, true, true);\r\n\r\n PluginUtils.injectProperties(quatExtension, arrayPrototypeToExtend, false, true, true);\r\n PluginUtils.injectProperties(quat2Extension, arrayPrototypeToExtend, false, true, true);\r\n\r\n PluginUtils.injectProperties(mat4Extension, arrayPrototypeToExtend, false, true, true);\r\n }\r\n}", "import { Matrix3, Quaternion, Vector3 } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./mat3_type_extension.js\";\r\n\r\nexport function initMat3Extension(): void {\r\n _initMat3ExtensionProtoype();\r\n}\r\n\r\nfunction _initMat3ExtensionProtoype(): void {\r\n\r\n const mat3Extension: Record = {};\r\n\r\n mat3Extension.mat3_set = function mat3_set(this: T,\r\n m00: number, m01?: number, m02?: number,\r\n m10?: number, m11?: number, m12?: number,\r\n m20?: number, m21?: number, m22?: number): T {\r\n return Mat3Utils.set(this,\r\n m00, m01!, m02!,\r\n m10!, m11!, m12!,\r\n m20!, m21!, m22!\r\n );\r\n };\r\n\r\n mat3Extension.mat3_copy = function mat3_copy(this: T, vector: Readonly): T {\r\n return Mat3Utils.copy(vector, this);\r\n };\r\n\r\n mat3Extension.mat3_clone = function mat3_clone(this: Readonly): T {\r\n return Mat3Utils.clone(this);\r\n };\r\n\r\n mat3Extension.mat3_toDegrees = function mat3_toDegrees(this: Readonly, out?: Vector3 | S): Vector3 | S {\r\n return Mat3Utils.toDegrees(this, out!);\r\n };\r\n\r\n mat3Extension.mat3_toRadians = function mat3_toRadians(this: Readonly, out?: Vector3 | S): Vector3 | S {\r\n return Mat3Utils.toRadians(this, out!);\r\n };\r\n\r\n mat3Extension.mat3_toQuat = function mat3_toQuat(this: Readonly, out?: Quaternion | S): Quaternion | S {\r\n return Mat3Utils.toQuat(this, out!);\r\n };\r\n mat3Extension.mat3_fromAxes = function mat3_fromAxes(this: T, leftAxis: Readonly, upAxis: Readonly, forwardAxis: Readonly): T {\r\n return Mat3Utils.fromAxes(leftAxis, upAxis, forwardAxis, this);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(mat3Extension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}", "import { Vector2 } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { Vec2Utils } from \"../../../../cauldron/utils/array/vec2_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./vec2_type_extension.js\";\r\n\r\nexport function initVec2Extension(): void {\r\n _initVec2ExtensionProtoype();\r\n}\r\n\r\nfunction _initVec2ExtensionProtoype(): void {\r\n\r\n const vec2Extension: Record = {};\r\n\r\n vec2Extension.vec2_set = function vec2_set(this: T, x: number, y?: number): T {\r\n return Vec2Utils.set(this, x, y!);\r\n };\r\n\r\n vec2Extension.vec2_copy = function vec2_copy(this: T, vector: Readonly): T {\r\n return Vec2Utils.copy(vector, this);\r\n };\r\n\r\n vec2Extension.vec2_clone = function vec2_clone(this: Readonly): T {\r\n return Vec2Utils.clone(this);\r\n };\r\n\r\n vec2Extension.vec2_length = function vec2_length(this: Readonly): number {\r\n return Vec2Utils.length(this);\r\n };\r\n\r\n vec2Extension.vec2_normalize = function vec2_normalize(this: Readonly, out?: S): S {\r\n return Vec2Utils.normalize(this, out!);\r\n };\r\n\r\n vec2Extension.vec2_zero = function vec2_zero(this: T): T {\r\n return Vec2Utils.zero(this);\r\n };\r\n\r\n vec2Extension.vec2_isZero = function vec2_isZero(this: Readonly, epsilon?: number): boolean {\r\n return Vec2Utils.isZero(this, epsilon);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(vec2Extension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}", "import { Vector } from \"../../type_definitions/array_type_definitions.js\";\r\nimport { MathUtils } from \"../math_utils.js\";\r\n\r\n/** The overload where `T extends Vector` does also get `array` as `Readonly`, but is not marked as such due to \r\n * Typescript having issues with inferring the proper type of `T` when `Readonly` is used */\r\nexport function clone(vector: Readonly): T;\r\nexport function clone(vector: Readonly): number[];\r\nexport function clone(vector: T): T;\r\nexport function clone(vector: Readonly): T {\r\n return vector.slice(0) as T;\r\n}\r\n\r\nexport function equals(vector: Readonly, other: Readonly, epsilon: number = 0): boolean {\r\n let equals = vector.length == other.length;\r\n\r\n for (let i = 0; i < vector.length && equals; i++) {\r\n equals = equals && (Math.abs(vector[i] - other[i]) <= epsilon);\r\n }\r\n\r\n return equals;\r\n}\r\n\r\nexport function zero(vector: T): T {\r\n for (let i = 0; i < vector.length; i++) {\r\n vector[i] = 0;\r\n }\r\n\r\n return vector;\r\n}\r\n\r\nexport function isZero(vector: Readonly, epsilon = 0): boolean {\r\n let zero = true;\r\n\r\n for (let i = 0; i < vector.length && zero; i++) {\r\n zero = zero && (Math.abs(vector[i]) <= epsilon);\r\n }\r\n\r\n return zero;\r\n}\r\n\r\nexport function scale(vector: Readonly, value: number): T;\r\nexport function scale(vector: Readonly, value: number, out: S): S;\r\nexport function scale(vector: Readonly, value: number, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = vector[i] * value;\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function round(vector: Readonly): T;\r\nexport function round(vector: Readonly, out: S): S;\r\nexport function round(vector: Readonly, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = Math.round(vector[i]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function floor(vector: Readonly): T;\r\nexport function floor(vector: Readonly, out: S): S;\r\nexport function floor(vector: Readonly, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = Math.floor(vector[i]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function ceil(vector: Readonly): T;\r\nexport function ceil(vector: Readonly, out: S): S;\r\nexport function ceil(vector: Readonly, out: T | S = VecUtils.clone(vector)): T | S {\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = Math.ceil(vector[i]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function clamp(vector: Readonly, start: number, end: number): T;\r\nexport function clamp(vector: Readonly, start: number, end: number, out: S): S;\r\nexport function clamp(vector: Readonly, start: number, end: number, out: T | S = VecUtils.clone(vector)): T | S {\r\n const fixedStart = (start != null) ? start : -Number.MAX_VALUE;\r\n const fixedEnd = (end != null) ? end : Number.MAX_VALUE;\r\n const min = Math.min(fixedStart, fixedEnd);\r\n const max = Math.max(fixedStart, fixedEnd);\r\n\r\n for (let i = 0; i < vector.length; i++) {\r\n out[i] = MathUtils.clamp(vector[i], min, max);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function toString(vector: Readonly, decimalPlaces: number = 4): string {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n return message;\r\n}\r\n\r\nexport function log(vector: Readonly, decimalPlaces: number = 4): Vector {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n console.log(message);\r\n\r\n return vector;\r\n}\r\n\r\nexport function error(vector: Readonly, decimalPlaces: number = 4): Vector {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n console.error(message);\r\n\r\n return vector;\r\n}\r\n\r\nexport function warn(vector: Readonly, decimalPlaces: number = 4): Vector {\r\n const message = _buildConsoleMessage(vector, decimalPlaces);\r\n console.warn(message);\r\n\r\n return vector;\r\n}\r\n\r\nexport const VecUtils = {\r\n clone,\r\n equals,\r\n zero,\r\n isZero,\r\n scale,\r\n round,\r\n floor,\r\n ceil,\r\n clamp,\r\n toString,\r\n log,\r\n error,\r\n warn\r\n} as const;\r\n\r\n\r\n\r\nfunction _buildConsoleMessage(vector: Readonly, decimalPlaces?: number): string {\r\n let message = \"[\";\r\n\r\n for (let i = 0; i < vector.length; i++) {\r\n if (i != 0) {\r\n message = message.concat(\", \");\r\n }\r\n\r\n if (decimalPlaces != null) {\r\n message = message.concat(vector[i].toFixed(decimalPlaces));\r\n } else {\r\n message = message.concat(vector[i].toString());\r\n }\r\n }\r\n\r\n message = message.concat(\"]\");\r\n return message;\r\n}", "import { Vector } from \"../../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { VecUtils } from \"../../../../cauldron/utils/array/vec_utils.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\nimport { ArrayExtensionUtils } from \"./array_extension_utils.js\";\r\n\r\nimport \"./vec_type_extension.js\";\r\n\r\nexport function initVecExtension(): void {\r\n _initVecExtensionProtoype();\r\n}\r\n\r\nfunction _initVecExtensionProtoype(): void {\r\n\r\n const vecExtension: Record = {};\r\n\r\n vecExtension.vec_clone = function vec_clone(this: Readonly): T {\r\n return VecUtils.clone(this);\r\n };\r\n\r\n vecExtension.vec_equals = function vec_equals(this: Readonly, vector: Readonly, epsilon?: number): boolean {\r\n return VecUtils.equals(this, vector, epsilon);\r\n };\r\n\r\n vecExtension.vec_zero = function vec_zero(this: T): T {\r\n return VecUtils.zero(this);\r\n };\r\n\r\n vecExtension.vec_isZero = function vec_isZero(this: Readonly, epsilon?: number): boolean {\r\n return VecUtils.isZero(this, epsilon);\r\n };\r\n\r\n vecExtension.vec_scale = function vec_scale(this: Readonly, value: number, out?: S): S {\r\n return VecUtils.scale(this, value, out!);\r\n };\r\n\r\n vecExtension.vec_round = function vec_round(this: Readonly, out?: S): S {\r\n return VecUtils.round(this, out!);\r\n };\r\n\r\n vecExtension.vec_floor = function vec_floor(this: Readonly, out?: S): S {\r\n return VecUtils.floor(this, out!);\r\n };\r\n\r\n vecExtension.vec_ceil = function vec_ceil(this: Readonly, out?: S): S {\r\n return VecUtils.ceil(this, out!);\r\n };\r\n\r\n vecExtension.vec_clamp = function vec_clamp(this: Readonly, start: number, end: number, out?: S): S {\r\n return VecUtils.clamp(this, start, end, out!);\r\n };\r\n\r\n vecExtension.vec_toString = function vec_toString(this: Readonly, decimalPlaces?: number): string {\r\n return VecUtils.toString(this, decimalPlaces);\r\n };\r\n\r\n vecExtension.vec_log = function vec_log(this: Readonly, decimalPlaces?: number): Vector {\r\n return VecUtils.log(this, decimalPlaces);\r\n };\r\n\r\n vecExtension.vec_error = function vec_error(this: Readonly, decimalPlaces?: number): Vector {\r\n return VecUtils.error(this, decimalPlaces);\r\n };\r\n\r\n vecExtension.vec_warn = function vec_warn(this: Readonly, decimalPlaces?: number): Vector {\r\n return VecUtils.warn(this, decimalPlaces);\r\n };\r\n\r\n for (const arrayLikeClassToExtend of ArrayExtensionUtils.ARRAY_LIKE_CLASSES) {\r\n PluginUtils.injectProperties(vecExtension, arrayLikeClassToExtend.prototype, false, true, true);\r\n }\r\n}", "import { EasingFunction, MathUtils } from \"../../../cauldron/utils/math_utils.js\";\r\nimport { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nimport \"./math_type_extension.js\";\r\n\r\nexport function initMathExtension(): void {\r\n _initMathExtensionInstance();\r\n}\r\n\r\nfunction _initMathExtensionInstance(): void {\r\n\r\n const mathExtension: Record = {};\r\n\r\n Object.defineProperty(mathExtension, \"PP_EPSILON\", {\r\n get(): number {\r\n return MathUtils.EPSILON;\r\n }\r\n });\r\n\r\n Object.defineProperty(mathExtension, \"PP_EPSILON_SQUARED\", {\r\n get(): number {\r\n return MathUtils.EPSILON_SQUARED;\r\n }\r\n });\r\n\r\n Object.defineProperty(mathExtension, \"PP_EPSILON_DEGREES\", {\r\n get(): number {\r\n return MathUtils.EPSILON_DEGREES;\r\n }\r\n });\r\n\r\n mathExtension.pp_clamp = function pp_clamp(value: number, start: number, end: number): number {\r\n return MathUtils.clamp(value, start, end);\r\n };\r\n\r\n mathExtension.pp_sign = function pp_sign(value: number, zeroSign?: number): number {\r\n return MathUtils.sign(value, zeroSign);\r\n };\r\n\r\n mathExtension.pp_toDegrees = function pp_toDegrees(angle: number): number {\r\n return MathUtils.toDegrees(angle);\r\n };\r\n\r\n mathExtension.pp_toRadians = function pp_toRadians(angle: number): number {\r\n return MathUtils.toRadians(angle);\r\n };\r\n\r\n mathExtension.pp_roundDecimal = function pp_roundDecimal(number: number, decimalPlaces: number): number {\r\n return MathUtils.roundDecimal(number, decimalPlaces);\r\n };\r\n\r\n mathExtension.pp_mapToRange = function pp_mapToRange(value: number, originRangeStart: number, originRangeEnd: number, newRangeStart: number, newRangeEnd: number): number {\r\n return MathUtils.mapToRange(value, originRangeStart, originRangeEnd, newRangeStart, newRangeEnd);\r\n };\r\n\r\n mathExtension.pp_random = function pp_random(start?: number, end?: number): number {\r\n return MathUtils.random(start, end);\r\n };\r\n\r\n mathExtension.pp_randomInt = function pp_randomInt(start: number, end: number): number {\r\n return MathUtils.randomInt(start, end);\r\n };\r\n\r\n mathExtension.pp_randomBool = function pp_randomBool(): boolean {\r\n return MathUtils.randomBool();\r\n };\r\n\r\n mathExtension.pp_randomSign = function pp_randomSign(): number {\r\n return MathUtils.randomSign();\r\n };\r\n\r\n mathExtension.pp_randomPick = function pp_randomPick(...args: T[]): T | null {\r\n return MathUtils.randomPick(...args);\r\n };\r\n\r\n mathExtension.pp_randomUUID = function pp_randomUUID(): string {\r\n return MathUtils.randomUUID();\r\n };\r\n\r\n mathExtension.pp_lerp = function pp_lerp(from: number, to: number, interpolationFactor: number): number {\r\n return MathUtils.lerp(from, to, interpolationFactor);\r\n };\r\n\r\n mathExtension.pp_interpolate = function pp_interpolate(from: number, to: number, interpolationFactor: number, easingFunction?: EasingFunction): number {\r\n return MathUtils.interpolate(from, to, interpolationFactor, easingFunction);\r\n };\r\n\r\n mathExtension.pp_interpolatePeriodic = function pp_interpolatePeriodic(from: number, to: number, interpolationFactor: number, easingFunction?: EasingFunction): number {\r\n return MathUtils.interpolatePeriodic(from, to, interpolationFactor, easingFunction);\r\n };\r\n\r\n mathExtension.pp_angleDistance = function pp_angleDistance(from: number, to: number): number {\r\n return MathUtils.angleDistance(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceDegrees = function pp_angleDistanceDegrees(from: number, to: number): number {\r\n return MathUtils.angleDistanceDegrees(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceRadians = function pp_angleDistanceRadians(from: number, to: number): number {\r\n return MathUtils.angleDistanceRadians(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceSigned = function pp_angleDistanceSigned(from: number, to: number): number {\r\n return MathUtils.angleDistanceSigned(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceSignedDegrees = function pp_angleDistanceSignedDegrees(from: number, to: number): number {\r\n return MathUtils.angleDistanceSignedDegrees(from, to);\r\n };\r\n\r\n mathExtension.pp_angleDistanceSignedRadians = function pp_angleDistanceSignedRadians(from: number, to: number): number {\r\n return MathUtils.angleDistanceSignedRadians(from, to);\r\n };\r\n\r\n mathExtension.pp_angleClamp = function pp_angleClamp(angle: number, usePositiveRange?: boolean): number {\r\n return MathUtils.angleClamp(angle, usePositiveRange);\r\n };\r\n\r\n mathExtension.pp_angleClampDegrees = function pp_angleClampDegrees(angle: number, usePositiveRange?: boolean): number {\r\n return MathUtils.angleClampDegrees(angle, usePositiveRange);\r\n };\r\n\r\n mathExtension.pp_angleClampRadians = function pp_angleClampRadians(angle: number, usePositiveRange?: boolean): number {\r\n return MathUtils.angleClampRadians(angle, usePositiveRange);\r\n };\r\n\r\n mathExtension.pp_isInsideAngleRange = function pp_isInsideAngleRange(angle: number, start: number, end: number, useShortestAngle?: boolean): boolean {\r\n return MathUtils.isInsideAngleRange(angle, start, end, useShortestAngle);\r\n };\r\n\r\n mathExtension.pp_isInsideAngleRangeDegrees = function pp_isInsideAngleRangeDegrees(angle: number, start: number, end: number, useShortestAngle?: boolean): boolean {\r\n return MathUtils.isInsideAngleRangeDegrees(angle, start, end, useShortestAngle);\r\n };\r\n\r\n mathExtension.pp_isInsideAngleRangeRadians = function pp_isInsideAngleRangeRadians(angle: number, start: number, end: number, useShortestAngle?: boolean): boolean {\r\n return MathUtils.isInsideAngleRangeRadians(angle, start, end, useShortestAngle);\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(mathExtension, Math, false, true, true);\r\n}", "import { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nimport \"./number_type_extension.js\";\r\n\r\nexport function initNumberExtension(): void {\r\n _initNumberExtensionPrototype();\r\n}\r\n\r\nfunction _initNumberExtensionPrototype(): void {\r\n\r\n const numberExtension: Record = {};\r\n\r\n // Needed to make it easier to use plain numbers for parameters that also accept `NumberOverFactor`\r\n numberExtension.get = function get(this: number, factor?: number): number {\r\n return this.valueOf();\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(numberExtension, Number.prototype, false, true, true);\r\n}", "import { initArrayExtension } from \"./array/array_extension.js\";\r\nimport { initArrayExtensionLegacy } from \"./array/array_extension_legacy.js\";\r\nimport { initMat3Extension } from \"./array/mat3_extension.js\";\r\nimport { initVec2Extension } from \"./array/vec2_extension.js\";\r\nimport { initVecExtension } from \"./array/vec_extension.js\";\r\nimport { initMathExtension } from \"./math_extension.js\";\r\nimport { initNumberExtension } from \"./number_extension.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./array/array_extension.js\";\r\nimport \"./array/mat3_extension.js\";\r\nimport \"./array/vec2_extension.js\";\r\nimport \"./array/vec_extension.js\";\r\nimport \"./math_extension.js\";\r\nimport \"./number_extension.js\";\r\n\r\nexport function initJSExtensions(): void {\r\n initMathExtension();\r\n\r\n initArrayExtension();\r\n initVecExtension();\r\n initVec2Extension();\r\n initMat3Extension();\r\n initArrayExtensionLegacy();\r\n\r\n initNumberExtension();\r\n}", "import { initJSExtensions } from \"./extensions/init_js_extentions.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./extensions/init_js_extentions.js\";\r\n\r\nexport function initJSPlugins(): void {\r\n initJSExtensions();\r\n}", "import { Physics, RayHit } from \"@wonderlandengine/api\";\r\nimport { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nexport function initCauldronExtensions() {\r\n _initPhysicsExtensionPrototype();\r\n _initRayHitExtensionPrototype();\r\n}\r\n\r\nfunction _initPhysicsExtensionPrototype() {\r\n\r\n let extension = {};\r\n\r\n extension.pp_getEngine = function pp_getEngine() {\r\n return this._engine;\r\n };\r\n\r\n PluginUtils.injectProperties(extension, Physics.prototype, false, true, true);\r\n}\r\n\r\nfunction _initRayHitExtensionPrototype() {\r\n\r\n let extension = {};\r\n\r\n extension.pp_getLocations = function pp_getLocations(out) {\r\n if (!out) out = Array.from({ length: this.hitCount }, () => new Float32Array(3));\r\n\r\n const wasm = this._engine.wasm;\r\n const alignedPtr = this._ptr / 4; /* Align F32 */\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const locationPtr = alignedPtr + 3 * i;\r\n out[i][0] = wasm.HEAPF32[locationPtr];\r\n out[i][1] = wasm.HEAPF32[locationPtr + 1];\r\n out[i][2] = wasm.HEAPF32[locationPtr + 2];\r\n }\r\n return out;\r\n };\r\n\r\n extension.pp_getNormals = function pp_getNormals(out) {\r\n if (!out) out = Array.from({ length: this.hitCount }, () => new Float32Array(3));\r\n\r\n const wasm = this._engine.wasm;\r\n const alignedPtr = (this._ptr + 48) / 4; /* Align F32 */\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const normalPtr = alignedPtr + 3 * i;\r\n out[i][0] = wasm.HEAPF32[normalPtr];\r\n out[i][1] = wasm.HEAPF32[normalPtr + 1];\r\n out[i][2] = wasm.HEAPF32[normalPtr + 2];\r\n }\r\n return out;\r\n };\r\n\r\n extension.pp_getDistances = function pp_getDistances(out = new Float32Array(this.hitCount)) {\r\n const wasm = this._engine.wasm;\r\n const alignedPtr = (this._ptr + 48 * 2) / 4; /* Align F32 */\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const distancePtr = alignedPtr + i;\r\n out[i] = wasm.HEAPF32[distancePtr];\r\n }\r\n return out;\r\n };\r\n\r\n extension.pp_getObjects = function pp_getObjects(out = new Array(this.hitCount)) {\r\n const HEAPU16 = this._engine.wasm.HEAPU16;\r\n const alignedPtr = (this._ptr + (48 * 2 + 16)) >> 1;\r\n for (let i = 0; i < this.hitCount; ++i) {\r\n const objectPtr = alignedPtr + i;\r\n out[i] = this._engine.wrapObject(HEAPU16[objectPtr + i]);\r\n }\r\n return out;\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(extension, RayHit.prototype, false, true, true);\r\n}", "import { Component, Object3D, WonderlandEngine, type ComponentConstructor } from \"@wonderlandengine/api\";\r\nimport { Matrix3, Matrix4, Quaternion, Quaternion2, Vector3 } from \"../../../cauldron/type_definitions/array_type_definitions.js\";\r\nimport { CloneParams, ObjectUtils } from \"../../../cauldron/wl/utils/object_utils.js\";\r\nimport { PluginUtils } from \"../../utils/plugin_utils.js\";\r\n\r\nimport \"./object_type_extension.js\";\r\n\r\nexport function initObjectExtension(): void {\r\n _initObjectExtensionProtoype();\r\n}\r\n\r\nfunction _initObjectExtensionProtoype(): void {\r\n\r\n const objectExtension: Record = {};\r\n\r\n // GETTER\r\n\r\n // Position\r\n\r\n objectExtension.pp_getPosition = function pp_getPosition(this: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPosition(this, outPosition);\r\n };\r\n\r\n objectExtension.pp_getPositionWorld = function pp_getPositionWorld(this: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPositionWorld(this, outPosition);\r\n };\r\n\r\n objectExtension.pp_getPositionLocal = function pp_getPositionLocal(this: Readonly, outPosition?: T): T {\r\n return ObjectUtils.getPositionLocal(this, outPosition);\r\n };\r\n\r\n // Rotation\r\n\r\n objectExtension.pp_getRotation = function pp_getRotation(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotation(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationDegrees = function pp_getRotationDegrees(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationDegrees(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationRadians = function pp_getRotationRadians(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationRadians(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationMatrix = function pp_getRotationMatrix(this: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationMatrix(this, outRotation!);\r\n };\r\n\r\n objectExtension.pp_getRotationQuat = function pp_getRotationQuat(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationQuat(this, outRotation);\r\n };\r\n\r\n // Rotation World\r\n\r\n objectExtension.pp_getRotationWorld = function pp_getRotationWorld(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorld(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldDegrees = function pp_getRotationWorldDegrees(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldDegrees(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldRadians = function pp_getRotationWorldRadians(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldRadians(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldMatrix = function pp_getRotationWorldMatrix(this: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationWorldMatrix(this, outRotation!);\r\n };\r\n\r\n objectExtension.pp_getRotationWorldQuat = function pp_getRotationWorldQuat(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationWorldQuat(this, outRotation);\r\n };\r\n\r\n // Rotation Local\r\n\r\n objectExtension.pp_getRotationLocal = function pp_getRotationLocal(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocal(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalDegrees = function pp_getRotationLocalDegrees(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalDegrees(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalRadians = function pp_getRotationLocalRadians(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalRadians(this, outRotation);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalMatrix = function pp_getRotationLocalMatrix(this: Readonly, outRotation?: Matrix3 | T): Matrix3 | T {\r\n return ObjectUtils.getRotationLocalMatrix(this, outRotation!);\r\n };\r\n\r\n objectExtension.pp_getRotationLocalQuat = function pp_getRotationLocalQuat(this: Readonly, outRotation?: T): T {\r\n return ObjectUtils.getRotationLocalQuat(this, outRotation);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_getScale = function pp_getScale(this: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScale(this, outScale);\r\n };\r\n\r\n objectExtension.pp_getScaleWorld = function pp_getScaleWorld(this: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScaleWorld(this, outScale);\r\n };\r\n\r\n objectExtension.pp_getScaleLocal = function pp_getScaleLocal(this: Readonly, outScale?: T): T {\r\n return ObjectUtils.getScaleLocal(this, outScale);\r\n };\r\n\r\n // Transform\r\n\r\n objectExtension.pp_getTransform = function pp_getTransform(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransform(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformMatrix = function pp_getTransformMatrix(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformMatrix(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformQuat = function pp_getTransformQuat(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformQuat(this, outTransform);\r\n };\r\n\r\n // Transform World\r\n\r\n objectExtension.pp_getTransformWorld = function pp_getTransformWorld(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorld(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformWorldMatrix = function pp_getTransformWorldMatrix(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldMatrix(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformWorldQuat = function pp_getTransformWorldQuat(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformWorldQuat(this, outTransform);\r\n };\r\n\r\n // Transform Local\r\n\r\n objectExtension.pp_getTransformLocal = function pp_getTransformLocal(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocal(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformLocalMatrix = function pp_getTransformLocalMatrix(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocalMatrix(this, outTransform);\r\n };\r\n\r\n objectExtension.pp_getTransformLocalQuat = function pp_getTransformLocalQuat(this: Readonly, outTransform?: T): T {\r\n return ObjectUtils.getTransformLocalQuat(this, outTransform);\r\n };\r\n\r\n // Axes\r\n\r\n objectExtension.pp_getAxes = function pp_getAxes(this: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxes(this, outAxes);\r\n };\r\n\r\n objectExtension.pp_getAxesWorld = function pp_getAxesWorld(this: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxesWorld(this, outAxes);\r\n };\r\n\r\n objectExtension.pp_getAxesLocal = function pp_getAxesLocal(this: Readonly, outAxes?: [Vector3, Vector3, Vector3]): [Vector3, Vector3, Vector3] {\r\n return ObjectUtils.getAxesLocal(this, outAxes);\r\n };\r\n\r\n // Forward\r\n\r\n objectExtension.pp_getForward = function pp_getForward(this: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForward(this, outForward);\r\n };\r\n\r\n objectExtension.pp_getForwardWorld = function pp_getForwardWorld(this: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForwardWorld(this, outForward);\r\n };\r\n\r\n objectExtension.pp_getForwardLocal = function pp_getForwardLocal(this: Readonly, outForward?: T): T {\r\n return ObjectUtils.getForwardLocal(this, outForward);\r\n };\r\n\r\n // Backward\r\n\r\n objectExtension.pp_getBackward = function pp_getBackward(this: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackward(this, outBackward);\r\n };\r\n\r\n objectExtension.pp_getBackwardWorld = function pp_getBackwardWorld(this: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackwardWorld(this, outBackward);\r\n };\r\n\r\n objectExtension.pp_getBackwardLocal = function pp_getBackwardLocal(this: Readonly, outBackward?: T): T {\r\n return ObjectUtils.getBackwardLocal(this, outBackward);\r\n };\r\n\r\n // Up\r\n\r\n objectExtension.pp_getUp = function pp_getUp(this: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUp(this, outUp);\r\n };\r\n\r\n objectExtension.pp_getUpWorld = function pp_getUpWorld(this: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUpWorld(this, outUp);\r\n };\r\n\r\n objectExtension.pp_getUpLocal = function pp_getUpLocal(this: Readonly, outUp?: T): T {\r\n return ObjectUtils.getUpLocal(this, outUp);\r\n };\r\n\r\n // Down\r\n\r\n objectExtension.pp_getDown = function pp_getDown(this: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDown(this, outDown);\r\n };\r\n\r\n objectExtension.pp_getDownWorld = function pp_getDownWorld(this: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDownWorld(this, outDown);\r\n };\r\n\r\n objectExtension.pp_getDownLocal = function pp_getDownLocal(this: Readonly, outDown?: T): T {\r\n return ObjectUtils.getDownLocal(this, outDown);\r\n };\r\n\r\n // Left\r\n\r\n objectExtension.pp_getLeft = function pp_getLeft(this: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeft(this, outLeft);\r\n };\r\n\r\n objectExtension.pp_getLeftWorld = function pp_getLeftWorld(this: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeftWorld(this, outLeft);\r\n };\r\n\r\n objectExtension.pp_getLeftLocal = function pp_getLeftLocal(this: Readonly, outLeft?: T): T {\r\n return ObjectUtils.getLeftLocal(this, outLeft);\r\n };\r\n\r\n // Right\r\n\r\n objectExtension.pp_getRight = function pp_getRight(this: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRight(this, outRight);\r\n };\r\n\r\n objectExtension.pp_getRightWorld = function pp_getRightWorld(this: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRightWorld(this, outRight);\r\n };\r\n\r\n objectExtension.pp_getRightLocal = function pp_getRightLocal(this: Readonly, outRight?: T): T {\r\n return ObjectUtils.getRightLocal(this, outRight);\r\n };\r\n\r\n // SETTER\r\n\r\n // Position\r\n\r\n objectExtension.pp_setPosition = function pp_setPosition(this: Object3D, position: Readonly): Object3D {\r\n return ObjectUtils.setPosition(this, position);\r\n };\r\n\r\n objectExtension.pp_setPositionWorld = function pp_setPositionWorld(this: Object3D, position: Readonly): Object3D {\r\n return ObjectUtils.setPositionWorld(this, position);\r\n };\r\n\r\n objectExtension.pp_setPositionLocal = function pp_setPositionLocal(this: Object3D, position: Readonly): Object3D {\r\n return ObjectUtils.setPositionLocal(this, position);\r\n };\r\n\r\n // Rotation\r\n\r\n objectExtension.pp_setRotation = function pp_setRotation(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotation(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationDegrees = function pp_setRotationDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationRadians = function pp_setRotationRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationMatrix = function pp_setRotationMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationQuat = function pp_setRotationQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationQuat(this, rotation);\r\n };\r\n\r\n // Rotation World\r\n\r\n objectExtension.pp_setRotationWorld = function pp_setRotationWorld(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorld(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldDegrees = function pp_setRotationWorldDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldRadians = function pp_setRotationWorldRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldMatrix = function pp_setRotationWorldMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationWorldQuat = function pp_setRotationWorldQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationWorldQuat(this, rotation);\r\n };\r\n\r\n // Rotation Local\r\n\r\n objectExtension.pp_setRotationLocal = function pp_setRotationLocal(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocal(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalDegrees = function pp_setRotationLocalDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalRadians = function pp_setRotationLocalRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalMatrix = function pp_setRotationLocalMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_setRotationLocalQuat = function pp_setRotationLocalQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.setRotationLocalQuat(this, rotation);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_setScale = function pp_setScale(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScale(this, scale as Vector3);\r\n };\r\n\r\n objectExtension.pp_setScaleWorld = function pp_setScaleWorld(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScaleWorld(this, scale as Vector3);\r\n };\r\n\r\n objectExtension.pp_setScaleLocal = function pp_setScaleLocal(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.setScaleLocal(this, scale as Vector3);\r\n };\r\n\r\n // Axes \r\n\r\n objectExtension.pp_setAxes = function pp_setAxes(this: Object3D, left?: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setAxes(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setAxesWorld = function pp_setAxesWorld(this: Object3D, left?: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setAxesWorld(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setAxesLocal = function pp_setAxesLocal(this: Object3D, left?: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setAxesLocal(this, left, up, forward);\r\n };\r\n\r\n // Forward\r\n\r\n objectExtension.pp_setForward = function pp_setForward(this: Object3D, forward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setForward(this, forward, up, left);\r\n };\r\n\r\n objectExtension.pp_setForwardWorld = function pp_setForwardWorld(this: Object3D, forward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setForwardWorld(this, forward, up, left);\r\n };\r\n\r\n objectExtension.pp_setForwardLocal = function pp_setForwardLocal(this: Object3D, forward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setForwardLocal(this, forward, up, left);\r\n };\r\n\r\n // Backward\r\n\r\n objectExtension.pp_setBackward = function pp_setBackward(this: Object3D, backward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setBackward(this, backward, up, left);\r\n };\r\n\r\n objectExtension.pp_setBackwardWorld = function pp_setBackwardWorld(this: Object3D, backward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setBackwardWorld(this, backward, up, left);\r\n };\r\n\r\n objectExtension.pp_setBackwardLocal = function pp_setBackwardLocal(this: Object3D, backward: Readonly, up?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setBackwardLocal(this, backward, up, left);\r\n };\r\n\r\n // Up\r\n\r\n objectExtension.pp_setUp = function pp_setUp(this: Object3D, up: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setUp(this, up, forward, left);\r\n };\r\n\r\n objectExtension.pp_setUpWorld = function pp_setUpWorld(this: Object3D, up: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setUpWorld(this, up, forward, left);\r\n };\r\n\r\n objectExtension.pp_setUpLocal = function pp_setUpLocal(this: Object3D, up: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setUpLocal(this, up, forward, left);\r\n };\r\n\r\n // Down\r\n\r\n objectExtension.pp_setDown = function pp_setDown(this: Object3D, down: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setDown(this, down, forward, left);\r\n };\r\n\r\n objectExtension.pp_setDownWorld = function pp_setDownWorld(this: Object3D, down: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setDownWorld(this, down, forward, left);\r\n };\r\n\r\n objectExtension.pp_setDownLocal = function pp_setDownLocal(this: Object3D, down: Readonly, forward?: Readonly, left?: Readonly): Object3D {\r\n return ObjectUtils.setDownLocal(this, down, forward, left);\r\n };\r\n\r\n // Left\r\n\r\n objectExtension.pp_setLeft = function pp_setLeft(this: Object3D, left: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setLeft(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setLeftWorld = function pp_setLeftWorld(this: Object3D, left: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setLeftWorld(this, left, up, forward);\r\n };\r\n\r\n objectExtension.pp_setLeftLocal = function pp_setLeftLocal(this: Object3D, left: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setLeftLocal(this, left, up, forward);\r\n };\r\n\r\n // Right\r\n\r\n objectExtension.pp_setRight = function pp_setRight(this: Object3D, right: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setRight(this, right, up, forward);\r\n };\r\n\r\n objectExtension.pp_setRightWorld = function pp_setRightWorld(this: Object3D, right: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setRightWorld(this, right, up, forward);\r\n };\r\n\r\n objectExtension.pp_setRightLocal = function pp_setRightLocal(this: Object3D, right: Readonly, up?: Readonly, forward?: Readonly): Object3D {\r\n return ObjectUtils.setRightLocal(this, right, up, forward);\r\n };\r\n\r\n // Transform\r\n\r\n objectExtension.pp_setTransform = function pp_setTransform(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransform(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformMatrix = function pp_setTransformMatrix(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformMatrix(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformQuat = function pp_setTransformQuat(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformQuat(this, transform);\r\n };\r\n\r\n // Transform World\r\n\r\n objectExtension.pp_setTransformWorld = function pp_setTransformWorld(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformWorld(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformWorldMatrix = function pp_setTransformWorldMatrix(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformWorldMatrix(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformWorldQuat = function pp_setTransformWorldQuat(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformWorldQuat(this, transform);\r\n };\r\n\r\n // Transform Local\r\n\r\n objectExtension.pp_setTransformLocal = function pp_setTransformLocal(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformLocal(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformLocalMatrix = function pp_setTransformLocalMatrix(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformLocalMatrix(this, transform);\r\n };\r\n\r\n objectExtension.pp_setTransformLocalQuat = function pp_setTransformLocalQuat(this: Object3D, transform: Readonly): Object3D {\r\n return ObjectUtils.setTransformLocalQuat(this, transform);\r\n };\r\n\r\n // RESET\r\n\r\n // Position\r\n\r\n objectExtension.pp_resetPosition = function pp_resetPosition(this: Object3D): Object3D {\r\n return ObjectUtils.resetPosition(this);\r\n };\r\n\r\n objectExtension.pp_resetPositionWorld = function pp_resetPositionWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetPositionWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetPositionLocal = function pp_resetPositionLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetPositionLocal(this);\r\n };\r\n\r\n // Rotation\r\n\r\n objectExtension.pp_resetRotation = function pp_resetRotation(this: Object3D): Object3D {\r\n return ObjectUtils.resetRotation(this);\r\n };\r\n\r\n objectExtension.pp_resetRotationWorld = function pp_resetRotationWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetRotationWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetRotationLocal = function pp_resetRotationLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetRotationLocal(this);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_resetScale = function pp_resetScale(this: Object3D): Object3D {\r\n return ObjectUtils.resetScale(this);\r\n };\r\n\r\n objectExtension.pp_resetScaleWorld = function pp_resetScaleWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetScaleWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetScaleLocal = function pp_resetScaleLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetScaleLocal(this);\r\n };\r\n\r\n // Transform\r\n\r\n objectExtension.pp_resetTransform = function pp_resetTransform(this: Object3D): Object3D {\r\n return ObjectUtils.resetTransform(this);\r\n };\r\n\r\n objectExtension.pp_resetTransformWorld = function pp_resetTransformWorld(this: Object3D): Object3D {\r\n return ObjectUtils.resetTransformWorld(this);\r\n };\r\n\r\n objectExtension.pp_resetTransformLocal = function pp_resetTransformLocal(this: Object3D): Object3D {\r\n return ObjectUtils.resetTransformLocal(this);\r\n };\r\n\r\n // TRANSFORMATIONS\r\n\r\n // Translate\r\n\r\n objectExtension.pp_translate = function pp_translate(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translate(this, translation);\r\n };\r\n\r\n objectExtension.pp_translateWorld = function pp_translateWorld(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translateWorld(this, translation);\r\n };\r\n\r\n objectExtension.pp_translateLocal = function pp_translateLocal(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translateLocal(this, translation);\r\n };\r\n\r\n objectExtension.pp_translateObject = function pp_translateObject(this: Object3D, translation: Readonly): Object3D {\r\n return ObjectUtils.translateObject(this, translation);\r\n };\r\n\r\n // Translate Axis\r\n\r\n objectExtension.pp_translateAxis = function pp_translateAxis(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxis(this, amount, direction);\r\n };\r\n\r\n objectExtension.pp_translateAxisWorld = function pp_translateAxisWorld(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxisWorld(this, amount, direction);\r\n };\r\n\r\n objectExtension.pp_translateAxisLocal = function pp_translateAxisLocal(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxisLocal(this, amount, direction);\r\n };\r\n\r\n objectExtension.pp_translateAxisObject = function pp_translateAxisObject(this: Object3D, amount: number, direction: Readonly): Object3D {\r\n return ObjectUtils.translateAxisObject(this, amount, direction);\r\n };\r\n\r\n // Rotate\r\n\r\n objectExtension.pp_rotate = function pp_rotate(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotate(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateDegrees = function pp_rotateDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateRadians = function pp_rotateRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateMatrix = function pp_rotateMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateQuat = function pp_rotateQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateQuat(this, rotation);\r\n };\r\n\r\n // Rotate World\r\n\r\n objectExtension.pp_rotateWorld = function pp_rotateWorld(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorld(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldDegrees = function pp_rotateWorldDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldRadians = function pp_rotateWorldRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldMatrix = function pp_rotateWorldMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateWorldQuat = function pp_rotateWorldQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateWorldQuat(this, rotation);\r\n };\r\n\r\n // Rotate Local\r\n\r\n objectExtension.pp_rotateLocal = function pp_rotateLocal(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocal(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalDegrees = function pp_rotateLocalDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalRadians = function pp_rotateLocalRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalMatrix = function pp_rotateLocalMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateLocalQuat = function pp_rotateLocalQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateLocalQuat(this, rotation);\r\n };\r\n\r\n // Rotate Object\r\n\r\n objectExtension.pp_rotateObject = function pp_rotateObject(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObject(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectDegrees = function pp_rotateObjectDegrees(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectDegrees(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectRadians = function pp_rotateObjectRadians(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectRadians(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectMatrix = function pp_rotateObjectMatrix(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectMatrix(this, rotation);\r\n };\r\n\r\n objectExtension.pp_rotateObjectQuat = function pp_rotateObjectQuat(this: Object3D, rotation: Readonly): Object3D {\r\n return ObjectUtils.rotateObjectQuat(this, rotation);\r\n };\r\n\r\n // Rotate Axis\r\n\r\n objectExtension.pp_rotateAxis = function pp_rotateAxis(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxis(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisDegrees = function pp_rotateAxisDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisRadians = function pp_rotateAxisRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Axis World\r\n\r\n objectExtension.pp_rotateAxisWorld = function pp_rotateAxisWorld(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisWorld(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisWorldDegrees = function pp_rotateAxisWorldDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisWorldDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisWorldRadians = function pp_rotateAxisWorldRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisWorldRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Axis Local\r\n\r\n objectExtension.pp_rotateAxisLocal = function pp_rotateAxisLocal(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisLocal(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisLocalDegrees = function pp_rotateAxisLocalDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisLocalDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisLocalRadians = function pp_rotateAxisLocalRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisLocalRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Axis Object\r\n\r\n objectExtension.pp_rotateAxisObject = function pp_rotateAxisObject(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisObject(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisObjectDegrees = function pp_rotateAxisObjectDegrees(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisObjectDegrees(this, angle, axis);\r\n };\r\n\r\n objectExtension.pp_rotateAxisObjectRadians = function pp_rotateAxisObjectRadians(this: Object3D, angle: number, axis: Readonly): Object3D {\r\n return ObjectUtils.rotateAxisObjectRadians(this, angle, axis);\r\n };\r\n\r\n // Rotate Around\r\n\r\n objectExtension.pp_rotateAround = function pp_rotateAround(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAround(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundDegrees = function pp_rotateAroundDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundRadians = function pp_rotateAroundRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundMatrix = function pp_rotateAroundMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundQuat = function pp_rotateAroundQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around World\r\n\r\n objectExtension.pp_rotateAroundWorld = function pp_rotateAroundWorld(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorld(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldDegrees = function pp_rotateAroundWorldDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldRadians = function pp_rotateAroundWorldRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldMatrix = function pp_rotateAroundWorldMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundWorldQuat = function pp_rotateAroundWorldQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundWorldQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around Local\r\n\r\n objectExtension.pp_rotateAroundLocal = function pp_rotateAroundLocal(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocal(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalDegrees = function pp_rotateAroundLocalDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalRadians = function pp_rotateAroundLocalRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalMatrix = function pp_rotateAroundLocalMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundLocalQuat = function pp_rotateAroundLocalQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundLocalQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around Object\r\n\r\n objectExtension.pp_rotateAroundObject = function pp_rotateAroundObject(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObject(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectDegrees = function pp_rotateAroundObjectDegrees(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectDegrees(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectRadians = function pp_rotateAroundObjectRadians(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectRadians(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectMatrix = function pp_rotateAroundObjectMatrix(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectMatrix(this, rotation, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundObjectQuat = function pp_rotateAroundObjectQuat(this: Object3D, rotation: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundObjectQuat(this, rotation, origin);\r\n };\r\n\r\n // Rotate Around Axis\r\n\r\n objectExtension.pp_rotateAroundAxis = function pp_rotateAroundAxis(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxis(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisDegrees = function pp_rotateAroundAxisDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisRadians = function pp_rotateAroundAxisRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Rotate Around Axis World\r\n\r\n objectExtension.pp_rotateAroundAxisWorld = function pp_rotateAroundAxisWorld(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorld(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisWorldDegrees = function pp_rotateAroundAxisWorldDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisWorldRadians = function pp_rotateAroundAxisWorldRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisWorldRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Rotate Around Axis Local\r\n\r\n objectExtension.pp_rotateAroundAxisLocal = function pp_rotateAroundAxisLocal(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocal(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisLocalDegrees = function pp_rotateAroundAxisLocalDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisLocalRadians = function pp_rotateAroundAxisLocalRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisLocalRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Rotate Around Axis Object\r\n\r\n objectExtension.pp_rotateAroundAxisObject = function pp_rotateAroundAxisObject(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisObject(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisObjectDegrees = function pp_rotateAroundAxisObjectDegrees(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectDegrees(this, angle, axis, origin);\r\n };\r\n\r\n objectExtension.pp_rotateAroundAxisObjectRadians = function pp_rotateAroundAxisObjectRadians(this: Object3D, angle: number, axis: Readonly, origin: Readonly): Object3D {\r\n return ObjectUtils.rotateAroundAxisObjectRadians(this, angle, axis, origin);\r\n };\r\n\r\n // Scale\r\n\r\n objectExtension.pp_scaleObject = function pp_scaleObject(this: Object3D, scale: Vector3 | number): Object3D {\r\n return ObjectUtils.scaleObject(this, scale as Vector3);\r\n };\r\n\r\n // Look At\r\n\r\n objectExtension.pp_lookAt = function pp_lookAt(this: Object3D, position: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookAt(this, position, up);\r\n };\r\n\r\n objectExtension.pp_lookAtWorld = function pp_lookAtWorld(this: Object3D, position: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookAtWorld(this, position, up);\r\n };\r\n\r\n objectExtension.pp_lookAtLocal = function pp_lookAtLocal(this: Object3D, position: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookAtLocal(this, position, up);\r\n };\r\n\r\n objectExtension.pp_lookTo = function pp_lookTo(this: Object3D, direction: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookTo(this, direction, up);\r\n };\r\n\r\n objectExtension.pp_lookToWorld = function pp_lookToWorld(this: Object3D, direction: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookToWorld(this, direction, up);\r\n };\r\n\r\n objectExtension.pp_lookToLocal = function pp_lookToLocal(this: Object3D, direction: Readonly, up: Readonly): Object3D {\r\n return ObjectUtils.lookToLocal(this, direction, up);\r\n };\r\n\r\n // EXTRA\r\n\r\n // Convert Vector Object World\r\n\r\n objectExtension.pp_convertPositionObjectToWorld = function pp_convertPositionObjectToWorld(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionObjectToWorld(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionObjectToWorld = function pp_convertDirectionObjectToWorld(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionObjectToWorld(this, direction, outDirection);\r\n };\r\n\r\n objectExtension.pp_convertPositionWorldToObject = function pp_convertPositionWorldToObject(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionWorldToObject(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionWorldToObject = function pp_convertDirectionWorldToObject(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionWorldToObject(this, direction, outDirection);\r\n };\r\n\r\n // Convert Vector Local World\r\n\r\n objectExtension.pp_convertPositionLocalToWorld = function pp_convertPositionLocalToWorld(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionLocalToWorld(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionLocalToWorld = function pp_convertDirectionLocalToWorld(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionLocalToWorld(this, direction, outDirection);\r\n };\r\n\r\n objectExtension.pp_convertPositionWorldToLocal = function pp_convertPositionWorldToLocal(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionWorldToLocal(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionWorldToLocal = function pp_convertDirectionWorldToLocal(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionWorldToLocal(this, direction, outDirection);\r\n };\r\n\r\n // Convert Vector Local Object\r\n\r\n objectExtension.pp_convertPositionObjectToLocal = function pp_convertPositionObjectToLocal(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionObjectToLocal(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionObjectToLocal = function pp_convertDirectionObjectToLocal(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionObjectToLocal(this, direction, outDirection);\r\n };\r\n\r\n objectExtension.pp_convertPositionLocalToObject = function pp_convertPositionLocalToObject(this: Readonly, position: Readonly, outPosition?: T): T {\r\n return ObjectUtils.convertPositionLocalToObject(this, position, outPosition);\r\n };\r\n\r\n objectExtension.pp_convertDirectionLocalToObject = function pp_convertDirectionLocalToObject(this: Readonly, direction: Readonly, outDirection?: T): T {\r\n return ObjectUtils.convertDirectionLocalToObject(this, direction, outDirection);\r\n };\r\n\r\n // Convert Transform Object World\r\n\r\n objectExtension.pp_convertTransformObjectToWorld = function pp_convertTransformObjectToWorld(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorld(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToWorldMatrix = function pp_convertTransformObjectToWorldMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorldMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToWorldQuat = function pp_convertTransformObjectToWorldQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToWorldQuat(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToObject = function pp_convertTransformWorldToObject(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObject(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToObjectMatrix = function pp_convertTransformWorldToObjectMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObjectMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToObjectQuat = function pp_convertTransformWorldToObjectQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToObjectQuat(this, transform, outTransform);\r\n };\r\n\r\n // Convert Transform Local World\r\n\r\n objectExtension.pp_convertTransformLocalToWorld = function pp_convertTransformLocalToWorld(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorld(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToWorldMatrix = function pp_convertTransformLocalToWorldMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorldMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToWorldQuat = function pp_convertTransformLocalToWorldQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToWorldQuat(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToLocal = function pp_convertTransformWorldToLocal(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocal(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToLocalMatrix = function pp_convertTransformWorldToLocalMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocalMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformWorldToLocalQuat = function pp_convertTransformWorldToLocalQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformWorldToLocalQuat(this, transform, outTransform);\r\n };\r\n\r\n // Convert Transform Object Local\r\n\r\n objectExtension.pp_convertTransformObjectToLocal = function pp_convertTransformObjectToLocal(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocal(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToLocalMatrix = function pp_convertTransformObjectToLocalMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocalMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformObjectToLocalQuat = function pp_convertTransformObjectToLocalQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformObjectToLocalQuat(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToObject = function pp_convertTransformLocalToObject(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObject(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToObjectMatrix = function pp_convertTransformLocalToObjectMatrix(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObjectMatrix(this, transform, outTransform);\r\n };\r\n\r\n objectExtension.pp_convertTransformLocalToObjectQuat = function pp_convertTransformLocalToObjectQuat(this: Readonly, transform: Readonly, outTransform?: T): T {\r\n return ObjectUtils.convertTransformLocalToObjectQuat(this, transform, outTransform);\r\n };\r\n\r\n // Parent\r\n\r\n objectExtension.pp_setParent = function pp_setParent(this: Object3D, newParent: Object3D, keepTransformWorld?: boolean): Object3D {\r\n return ObjectUtils.setParent(this, newParent, keepTransformWorld);\r\n };\r\n\r\n objectExtension.pp_getParent = function pp_getParent(this: Readonly): Object3D | null {\r\n return ObjectUtils.getParent(this);\r\n };\r\n\r\n // Component\r\n\r\n objectExtension.pp_addComponent = function pp_addComponent(this: Object3D, classOrType: ComponentConstructor | string, paramsOrActive?: Record | boolean, active?: boolean): T | null {\r\n return ObjectUtils.addComponent(this, classOrType, paramsOrActive, active);\r\n };\r\n\r\n objectExtension.pp_getComponent = function pp_getComponent(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponent(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentSelf = function pp_getComponentSelf(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentSelf(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentHierarchy = function pp_getComponentHierarchy(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentHierarchy(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentHierarchyBreadth = function pp_getComponentHierarchyBreadth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentHierarchyBreadth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentHierarchyDepth = function pp_getComponentHierarchyDepth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentHierarchyDepth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentDescendants = function pp_getComponentDescendants(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentDescendants(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentDescendantsBreadth = function pp_getComponentDescendantsBreadth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentDescendantsBreadth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentDescendantsDepth = function pp_getComponentDescendantsDepth(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentDescendantsDepth(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponentChildren = function pp_getComponentChildren(this: Readonly, classOrType: ComponentConstructor | string, index?: number): T | null {\r\n return ObjectUtils.getComponentChildren(this, classOrType, index);\r\n };\r\n\r\n objectExtension.pp_getComponents = function pp_getComponents(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponents(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsSelf = function pp_getComponentsSelf(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsSelf(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsHierarchy = function pp_getComponentsHierarchy(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchy(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsHierarchyBreadth = function pp_getComponentsHierarchyBreadth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchyBreadth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsHierarchyDepth = function pp_getComponentsHierarchyDepth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsHierarchyDepth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsDescendants = function pp_getComponentsDescendants(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendants(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsDescendantsBreadth = function pp_getComponentsDescendantsBreadth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendantsBreadth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsDescendantsDepth = function pp_getComponentsDescendantsDepth(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsDescendantsDepth(this, classOrType);\r\n };\r\n\r\n objectExtension.pp_getComponentsChildren = function pp_getComponentsChildren(this: Readonly, classOrType?: ComponentConstructor | string): T[] {\r\n return ObjectUtils.getComponentsChildren(this, classOrType);\r\n };\r\n\r\n // Active\r\n\r\n objectExtension.pp_setActive = function pp_setActive(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActive(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveSelf = function pp_setActiveSelf(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveSelf(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveHierarchy = function pp_setActiveHierarchy(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchy(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveHierarchyBreadth = function pp_setActiveHierarchyBreadth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchyBreadth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveHierarchyDepth = function pp_setActiveHierarchyDepth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveHierarchyDepth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveDescendants = function pp_setActiveDescendants(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendants(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveDescendantsBreadth = function pp_setActiveDescendantsBreadth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendantsBreadth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveDescendantsDepth = function pp_setActiveDescendantsDepth(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveDescendantsDepth(this, active);\r\n };\r\n\r\n objectExtension.pp_setActiveChildren = function pp_setActiveChildren(this: Object3D, active: boolean): Object3D {\r\n return ObjectUtils.setActiveChildren(this, active);\r\n };\r\n\r\n // Uniform Scale\r\n\r\n objectExtension.pp_hasUniformScale = function pp_hasUniformScale(this: Readonly): boolean {\r\n return ObjectUtils.hasUniformScale(this);\r\n };\r\n\r\n objectExtension.pp_hasUniformScaleWorld = function pp_hasUniformScaleWorld(this: Readonly): boolean {\r\n return ObjectUtils.hasUniformScaleWorld(this);\r\n };\r\n\r\n objectExtension.pp_hasUniformScaleLocal = function pp_hasUniformScaleLocal(this: Readonly): boolean {\r\n return ObjectUtils.hasUniformScaleLocal(this);\r\n };\r\n\r\n // Clone\r\n\r\n objectExtension.pp_clone = function pp_clone(this: Readonly, cloneParams?: Readonly): Object3D | null {\r\n return ObjectUtils.clone(this, cloneParams);\r\n };\r\n\r\n objectExtension.pp_isCloneable = function pp_isCloneable(this: Readonly, cloneParams?: Readonly): boolean {\r\n return ObjectUtils.isCloneable(this, cloneParams);\r\n };\r\n\r\n // To String\r\n\r\n objectExtension.pp_toString = function pp_toString(this: Readonly): string {\r\n return ObjectUtils.toString(this);\r\n };\r\n\r\n objectExtension.pp_toStringExtended = function pp_toStringExtended(this: Readonly): string {\r\n return ObjectUtils.toStringExtended(this);\r\n };\r\n\r\n objectExtension.pp_toStringCompact = function pp_toStringCompact(this: Readonly): string {\r\n return ObjectUtils.toStringCompact(this);\r\n };\r\n\r\n // Get Object By Name\r\n\r\n objectExtension.pp_getObjectByName = function pp_getObjectByName(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByName(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameHierarchy = function pp_getObjectByNameHierarchy(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchy(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameHierarchyBreadth = function pp_getObjectByNameHierarchyBreadth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchyBreadth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameHierarchyDepth = function pp_getObjectByNameHierarchyDepth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameHierarchyDepth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameDescendants = function pp_getObjectByNameDescendants(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendants(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameDescendantsBreadth = function pp_getObjectByNameDescendantsBreadth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendantsBreadth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameDescendantsDepth = function pp_getObjectByNameDescendantsDepth(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameDescendantsDepth(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectByNameChildren = function pp_getObjectByNameChildren(this: Readonly, name: string, isRegex?: boolean, index?: number): Object3D | null {\r\n return ObjectUtils.getObjectByNameChildren(this, name, isRegex, index);\r\n };\r\n\r\n objectExtension.pp_getObjectsByName = function pp_getObjectsByName(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByName(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameHierarchy = function pp_getObjectsByNameHierarchy(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchy(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameHierarchyBreadth = function pp_getObjectsByNameHierarchyBreadth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchyBreadth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameHierarchyDepth = function pp_getObjectsByNameHierarchyDepth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameHierarchyDepth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameDescendants = function pp_getObjectsByNameDescendants(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendants(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameDescendantsBreadth = function pp_getObjectsByNameDescendantsBreadth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendantsBreadth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameDescendantsDepth = function pp_getObjectsByNameDescendantsDepth(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameDescendantsDepth(this, name, isRegex);\r\n };\r\n\r\n objectExtension.pp_getObjectsByNameChildren = function pp_getObjectsByNameChildren(this: Readonly, name: string, isRegex?: boolean): Object3D[] {\r\n return ObjectUtils.getObjectsByNameChildren(this, name, isRegex);\r\n };\r\n\r\n // Get Object By ID\r\n\r\n objectExtension.pp_getObjectByID = function pp_getObjectByID(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByID(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDHierarchy = function pp_getObjectByIDHierarchy(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchy(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDHierarchyBreadth = function pp_getObjectByIDHierarchyBreadth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchyBreadth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDHierarchyDepth = function pp_getObjectByIDHierarchyDepth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDHierarchyDepth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDDescendants = function pp_getObjectByIDDescendants(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendants(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDDescendantsBreadth = function pp_getObjectByIDDescendantsBreadth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendantsBreadth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDDescendantsDepth = function pp_getObjectByIDDescendantsDepth(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDDescendantsDepth(this, id);\r\n };\r\n\r\n objectExtension.pp_getObjectByIDChildren = function pp_getObjectByIDChildren(this: Readonly, id: number): Object3D | null {\r\n return ObjectUtils.getObjectByIDChildren(this, id);\r\n };\r\n\r\n // Get Hierarchy\r\n\r\n objectExtension.pp_getHierarchyBreadth = function pp_getHierarchyBreadth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getHierarchyBreadth(this);\r\n };\r\n\r\n objectExtension.pp_getHierarchyDepth = function pp_getHierarchyDepth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getHierarchyDepth(this);\r\n };\r\n\r\n objectExtension.pp_getDescendants = function pp_getDescendants(this: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendants(this);\r\n };\r\n\r\n objectExtension.pp_getDescendantsBreadth = function pp_getDescendantsBreadth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendantsBreadth(this);\r\n };\r\n\r\n objectExtension.pp_getDescendantsDepth = function pp_getDescendantsDepth(this: Readonly): Object3D[] {\r\n return ObjectUtils.getDescendantsDepth(this);\r\n };\r\n\r\n objectExtension.pp_getChildren = function pp_getChildren(this: Readonly): Object3D[] {\r\n return ObjectUtils.getChildren(this);\r\n };\r\n\r\n objectExtension.pp_getSelf = function pp_getSelf(this: Readonly): Object3D {\r\n return ObjectUtils.getSelf(this);\r\n };\r\n\r\n // Cauldron\r\n\r\n objectExtension.pp_addObject = function pp_addObject(this: Object3D): Object3D {\r\n return ObjectUtils.addObject(this);\r\n };\r\n\r\n objectExtension.pp_getName = function pp_getName(this: Readonly): string {\r\n return ObjectUtils.getName(this);\r\n };\r\n\r\n objectExtension.pp_setName = function pp_setName(this: Object3D, name: string): Object3D {\r\n return ObjectUtils.setName(this, name);\r\n };\r\n\r\n objectExtension.pp_getEngine = function pp_getEngine(this: Readonly): WonderlandEngine {\r\n return ObjectUtils.getEngine(this);\r\n };\r\n\r\n objectExtension.pp_getID = function pp_getID(this: Readonly): number {\r\n return ObjectUtils.getID(this);\r\n };\r\n\r\n objectExtension.pp_markDirty = function pp_markDirty(this: Object3D): Object3D {\r\n return ObjectUtils.markDirty(this);\r\n };\r\n\r\n objectExtension.pp_isTransformChanged = function pp_isTransformChanged(this: Readonly): boolean {\r\n return ObjectUtils.isTransformChanged(this);\r\n };\r\n\r\n objectExtension.pp_equals = function pp_equals(this: Readonly, object: Readonly): boolean {\r\n return ObjectUtils.equals(this, object);\r\n };\r\n\r\n objectExtension.pp_destroy = function pp_destroy(this: Object3D): void {\r\n return ObjectUtils.destroy(this);\r\n };\r\n\r\n objectExtension.pp_reserveObjects = function pp_reserveObjects(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjects(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsSelf = function pp_reserveObjectsSelf(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsSelf(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsHierarchy = function pp_reserveObjectsHierarchy(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsHierarchy(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsDescendants = function pp_reserveObjectsDescendants(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsDescendants(this, count);\r\n };\r\n\r\n objectExtension.pp_reserveObjectsChildren = function pp_reserveObjectsChildren(this: Readonly, count: number): Object3D {\r\n return ObjectUtils.reserveObjectsChildren(this, count);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMap = function pp_getComponentsAmountMap(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMap(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapSelf = function pp_getComponentsAmountMapSelf(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapSelf(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapHierarchy = function pp_getComponentsAmountMapHierarchy(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapHierarchy(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapDescendants = function pp_getComponentsAmountMapDescendants(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapDescendants(this, outComponentsAmountMap);\r\n };\r\n\r\n objectExtension.pp_getComponentsAmountMapChildren = function pp_getComponentsAmountMapChildren(this: Readonly, outComponentsAmountMap?: Map): Map {\r\n return ObjectUtils.getComponentsAmountMapChildren(this, outComponentsAmountMap);\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(objectExtension, Object3D.prototype, false, true, true);\r\n}", "import { initCauldronExtensions } from \"./cauldron_extensions.js\";\r\nimport { initObjectExtension } from \"./object_extension.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./cauldron_extensions.js\";\r\nimport \"./object_extension.js\";\r\n\r\nexport function initWLExtensions(): void {\r\n initObjectExtension();\r\n initCauldronExtensions();\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initCauldronMods(): void {\r\n _initEmitterModPrototype();\r\n}\r\n\r\nfunction _initEmitterModPrototype(): void {\r\n const emitterMod: Record = {};\r\n\r\n emitterMod._flushTransactions = function _flushTransactions(this: Emitter): void {\r\n const listeners = this._listeners;\r\n const _transactions: any[] = (this as any)._transactions;\r\n\r\n for (let i = 0; i < _transactions.length; i++) {\r\n const transaction = _transactions[i];\r\n if (transaction.type == 1) {\r\n listeners.push(transaction.data);\r\n } else {\r\n this.remove(transaction.data);\r\n }\r\n }\r\n\r\n _transactions.length = 0;\r\n };\r\n\r\n PluginUtils.injectProperties(emitterMod, Emitter.prototype, false, true, true);\r\n}", "import { InputComponent, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Cursor, CursorTarget, HitTestLocation } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../../../input/cauldron/input_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { mat4_create, quat2_create, vec3_create } from \"../../../js/extensions/array/vec_create_extension.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initCursorComponentMod() {\r\n _initCursorComponentModPrototype();\r\n}\r\n\r\nfunction _initCursorComponentModPrototype() {\r\n\r\n let cursorComponentMod = {};\r\n\r\n // Modified Functions\r\n\r\n cursorComponentMod.init = function init() {\r\n this.maxDistance = 100;\r\n this.visible = false;\r\n this.globalTarget = this.object.pp_addComponent(CursorTarget);\r\n this.hitTestTarget = this.object.pp_addComponent(CursorTarget);\r\n this.hoveringObject = null;\r\n this.hoveringObjectTarget = null;\r\n\r\n this.cursorPos = vec3_create();\r\n\r\n this._collisionMask = (1 << this.collisionGroup);\r\n\r\n this._doubleClickTimer = 0;\r\n this._tripleClickTimer = 0;\r\n this._multipleClickObject = null;\r\n this._multipleClickDelay = 0.3;\r\n\r\n this._onDestroyCallbacks = [];\r\n\r\n this._prevHitLocationLocalToTarget = vec3_create();\r\n\r\n this._pointerID = null;\r\n\r\n this._updatePointerStyle = false;\r\n\r\n this._lastClientX = null;\r\n this._lastClientY = null;\r\n this._lastWidth = null;\r\n this._lastHeight = null;\r\n this._lastPointerID = null;\r\n\r\n this._lastOriginalMouseEvent = null;\r\n this._lastOriginalGamepadEvent = null;\r\n\r\n this._pointerLeaveToProcess = false;\r\n this._pointerLeaveMouseEvent = null;\r\n\r\n this._transformQuat = quat2_create();\r\n this._origin = vec3_create();\r\n this._direction = vec3_create();\r\n\r\n this._isHovering = false;\r\n\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n\r\n this._tempVec = vec3_create();\r\n\r\n this._viewComponent = null;\r\n\r\n this._cursorRayOrigin = vec3_create();\r\n this._cursorRayScale = vec3_create();\r\n\r\n this._projectionMatrix = mat4_create();\r\n\r\n this._hitTestLocation = null;\r\n this._hitTestObject = null;\r\n\r\n this._rayHitLocation = vec3_create();\r\n this._hitObjectData = [null, null, null];\r\n\r\n this._myViewEventListenersRegistered = false;\r\n };\r\n\r\n cursorComponentMod.start = function start() {\r\n if (this.handedness == 0) {\r\n let inputComp = this.object.pp_getComponent(InputComponent);\r\n if (!inputComp) {\r\n console.warn(\"cursor component on object \" + this.object.pp_getName() + \" was configured with handedness \\\"input component\\\", \" + \"but object has no input component.\");\r\n } else {\r\n this.handedness = inputComp.handedness;\r\n this.input = inputComp;\r\n }\r\n } else {\r\n this.handedness = InputUtils.getHandednessByIndex(this.handedness - 1);\r\n }\r\n\r\n this.pp_setViewComponent(this.object.pp_getComponent(ViewComponent));\r\n\r\n XRUtils.registerSessionStartEventListener(this, this.setupVREvents.bind(this), true, false, this.engine);\r\n this._onDestroyCallbacks.push(() => {\r\n XRUtils.unregisterSessionStartEventListener(this, this.engine);\r\n });\r\n\r\n if (this.cursorRayObject) {\r\n this.cursorRayObject.pp_setActive(false);\r\n this._cursorRayScale.set(this.cursorRayObject.pp_getScaleLocal());\r\n\r\n // Set ray to a good default distance of the cursor of 1m \r\n this._setCursorRayTransform(null);\r\n }\r\n\r\n this._setCursorVisibility(false);\r\n\r\n if (this.useWebXRHitTest) {\r\n this._hitTestObject = this.object.pp_addObject();\r\n this._hitTestLocation = this.hitTestObject.pp_addComponent(HitTestLocation, { scaleObject: false, });\r\n }\r\n };\r\n\r\n cursorComponentMod.update = function update(dt) {\r\n if (this._doubleClickTimer > 0) {\r\n this._doubleClickTimer -= dt;\r\n }\r\n\r\n if (this._tripleClickTimer > 0) {\r\n this._tripleClickTimer -= dt;\r\n }\r\n\r\n // If in XR, set the cursor ray based on object transform\r\n // View Component not null is currently used as a way to specify this is cursor should only work for Non XR\r\n if (XRUtils.isSessionActive(this.engine) && this._viewComponent == null) {\r\n // Since Google Cardboard tap is registered as arTouchDown without a gamepad, we need to check for gamepad presence \r\n if (this.arTouchDown && this._pp_isAR()) {\r\n let axes = XRUtils.getSession(this.engine).inputSources[0].gamepad.axes;\r\n // Screenspace Y is inverted \r\n this._direction.vec3_set(axes[0], -axes[1], -1.0);\r\n this.updateDirection();\r\n } else {\r\n this.object.pp_getPosition(this._origin);\r\n this.object.pp_getForward(this._direction);\r\n }\r\n\r\n let hitObjectData = this._pp_rayCast();\r\n this._pp_hoverBehaviour(hitObjectData[0], hitObjectData[1], hitObjectData[2], this._lastOriginalGamepadEvent);\r\n } else if (!XRUtils.isSessionActive(this.engine) && this._viewComponent != null) {\r\n if (this._lastPointerID != null) {\r\n this._pp_updateMousePos(this._lastClientX, this._lastClientY, this._lastWidth, this._lastHeight);\r\n\r\n let hitObjectData = this._pp_rayCast();\r\n this._pp_hoverBehaviour(hitObjectData[0], hitObjectData[1], hitObjectData[2], this._lastOriginalMouseEvent);\r\n\r\n if (this.hoveringObject != null) {\r\n this._pointerID = this._lastPointerID;\r\n } else {\r\n this._pointerID = null;\r\n }\r\n } else if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, this._lastOriginalMouseEvent, true); // Trigger Unhover\r\n }\r\n } else if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, null, true); // Trigger Unhover\r\n }\r\n\r\n this._pp_processPointerLeave();\r\n\r\n if (this.hoveringObject != null && (this.cursorPos[0] != 0 || this.cursorPos[1] != 0 || this.cursorPos[2] != 0)) {\r\n if (this.cursorObject) {\r\n this._setCursorVisibility(true);\r\n\r\n this.cursorObject.pp_setPosition(this.cursorPos);\r\n this.cursorObject.pp_setTransformLocalQuat(this.cursorObject.pp_getTransformLocalQuat(this._transformQuat).quat2_normalize(this._transformQuat));\r\n }\r\n\r\n if (this.cursorRayObject) {\r\n this._setCursorRayTransform(this.cursorPos);\r\n }\r\n } else {\r\n if (this.cursorObject) {\r\n this._setCursorVisibility(false);\r\n }\r\n\r\n if (this.cursorRayObject) {\r\n this._setCursorRayTransform(null);\r\n }\r\n }\r\n\r\n if (this.cursorRayObject) {\r\n if ((XRUtils.isSessionActive(this.engine) && this._viewComponent == null) || (!XRUtils.isSessionActive(this.engine) && this._viewComponent != null && this.handedness != Handedness.LEFT && this.handedness != Handedness.RIGHT)) {\r\n this.cursorRayObject.pp_setActive(true);\r\n } else {\r\n this.cursorRayObject.pp_setActive(false);\r\n }\r\n }\r\n\r\n if (this.hoveringObject == null) {\r\n this._pointerID = null;\r\n }\r\n\r\n this._updatePointerStyle = false;\r\n\r\n this._lastOriginalMouseEvent = null;\r\n this._lastOriginalGamepadEvent = null;\r\n };\r\n\r\n cursorComponentMod.onActivate = function onActivate() {\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n };\r\n\r\n cursorComponentMod.onDeactivate = function onDeactivate() {\r\n if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, null, true); // Trigger Unhover\r\n }\r\n\r\n this.hoveringObject = null;\r\n this.hoveringObjectTarget = null;\r\n\r\n this._pp_updateCursorStyle();\r\n\r\n this._setCursorVisibility(false);\r\n if (this.cursorRayObject) {\r\n this.cursorRayObject.pp_setActive(false);\r\n }\r\n\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n\r\n this._pointerID = null;\r\n\r\n this._lastPointerID = null;\r\n\r\n this._lastClientX = null;\r\n this._lastClientY = null;\r\n this._lastWidth = null;\r\n this._lastHeight = null;\r\n\r\n this._lastOriginalMouseEvent = null;\r\n this._lastOriginalGamepadEvent = null;\r\n\r\n this._pointerLeaveToProcess = false;\r\n this._pointerLeaveMouseEvent = null;\r\n };\r\n\r\n cursorComponentMod.onDestroy = function onDestroy() {\r\n if (this._hitTestObject != null) {\r\n this._hitTestObject.pp_destroy();\r\n }\r\n\r\n for (let callback of this._onDestroyCallbacks) {\r\n callback();\r\n }\r\n };\r\n\r\n cursorComponentMod.updateDirection = function () {\r\n let transformWorld = quat2_create();\r\n return function updateDirection() {\r\n this.object.pp_getPosition(this._origin);\r\n\r\n // Reverse-project the direction into view space \r\n this._direction.vec3_transformMat4(this._projectionMatrix, this._direction);\r\n this._direction.vec3_normalize(this._direction);\r\n this._direction.vec3_transformQuat(this.object.pp_getTransformQuat(transformWorld), this._direction);\r\n };\r\n }();\r\n\r\n cursorComponentMod.setupVREvents = function setupVREvents(session) {\r\n // If in XR, one-time bind the listener \r\n\r\n let onSelect = this.onSelect.bind(this);\r\n session.addEventListener(\"select\", onSelect);\r\n let onSelectStart = this.onSelectStart.bind(this);\r\n session.addEventListener(\"selectstart\", onSelectStart);\r\n let onSelectEnd = this.onSelectEnd.bind(this);\r\n session.addEventListener(\"selectend\", onSelectEnd);\r\n\r\n this._onDestroyCallbacks.push(() => {\r\n if (!XRUtils.isSessionActive(this.engine)) return;\r\n\r\n let session = XRUtils.getSession(this.engine);\r\n session.removeEventListener(\"select\", onSelect);\r\n session.removeEventListener(\"selectstart\", onSelectStart);\r\n session.removeEventListener(\"selectend\", onSelectEnd);\r\n });\r\n\r\n // After XR session was entered, the projection matrix changed \r\n this._onViewportResize();\r\n };\r\n\r\n cursorComponentMod.onSelect = function onSelect(e) {\r\n };\r\n\r\n cursorComponentMod.onSelectStart = function onSelectStart(e) {\r\n if (this.active) {\r\n if (this._pp_isAR()) {\r\n this.arTouchDown = true;\r\n this._lastOriginalGamepadEvent = e;\r\n } else if (e.inputSource.handedness == this.handedness) {\r\n this._isDown = true;\r\n this._isRealDown = true;\r\n\r\n if (!this._lastIsDown) {\r\n this._isDownForUpWithDown = true;\r\n }\r\n\r\n this._lastOriginalGamepadEvent = e;\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod.onSelectEnd = function onSelectEnd(e) {\r\n if (this.active) {\r\n if (this._pp_isAR()) {\r\n this.arTouchDown = false;\r\n this._lastOriginalGamepadEvent = e;\r\n } else if (e.inputSource.handedness == this.handedness) {\r\n if (!this._isDownForUpWithDown) {\r\n this._isUpWithNoDown = true;\r\n }\r\n\r\n this._isDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n\r\n this._lastOriginalGamepadEvent = e;\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod.onPointerMove = function onPointerMove(e) {\r\n if (this.active && !this._pointerLeaveToProcess) {\r\n // Don't care about secondary pointers \r\n if (this._pointerID != null && this._pointerID != e.pointerId) return;\r\n\r\n let bounds = document.body.getBoundingClientRect();\r\n this._pp_updateMouseData(e, e.clientX, e.clientY, bounds.width, bounds.height, e.pointerId);\r\n }\r\n };\r\n\r\n cursorComponentMod.onClick = function onClick(e) {\r\n };\r\n\r\n cursorComponentMod.onPointerDown = function onPointerDown(e) {\r\n if (this.active && !this._pointerLeaveToProcess) {\r\n // Don't care about secondary pointers or non-left clicks \r\n if ((this._pointerID != null && this._pointerID != e.pointerId) || e.button != 0) return;\r\n\r\n let bounds = document.body.getBoundingClientRect();\r\n this._pp_updateMouseData(e, e.clientX, e.clientY, bounds.width, bounds.height, e.pointerId);\r\n\r\n this._isDown = true;\r\n this._isRealDown = true;\r\n\r\n if (!this._lastIsDown) {\r\n this._isDownForUpWithDown = true;\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod.onPointerUp = function onPointerUp(e) {\r\n if (this.active && !this._pointerLeaveToProcess) {\r\n // Don't care about secondary pointers or non-left clicks \r\n if ((this._pointerID != null && this._pointerID != e.pointerId) || e.button != 0) return;\r\n\r\n let bounds = document.body.getBoundingClientRect();\r\n this._pp_updateMouseData(e, e.clientX, e.clientY, bounds.width, bounds.height, e.pointerId);\r\n\r\n if (!this._isDownForUpWithDown) {\r\n this._isUpWithNoDown = true;\r\n }\r\n\r\n this._isDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n\r\n this._updatePointerStyle = true;\r\n }\r\n };\r\n\r\n cursorComponentMod._onViewportResize = function _onViewportResize() {\r\n if (!this._viewComponent) return;\r\n\r\n // Projection matrix will change if the viewport is resized, which will affect the\r\n // projection matrix because of the aspect ratio\r\n this._viewComponent.projectionMatrix.mat4_invert(this._projectionMatrix);\r\n };\r\n\r\n cursorComponentMod._setCursorRayTransform = function _setCursorRayTransform(hitPosition) {\r\n if (!this.cursorRayObject) return;\r\n if (this.cursorRayScalingAxis != 4) {\r\n this.cursorRayObject.pp_resetScaleLocal();\r\n\r\n if (hitPosition != null) {\r\n this.cursorRayObject.pp_getPosition(this._cursorRayOrigin);\r\n let dist = this._cursorRayOrigin.vec3_distance(hitPosition);\r\n this._cursorRayScale[this.cursorRayScalingAxis] = dist;\r\n this.cursorRayObject.pp_scaleObject(this._cursorRayScale);\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod._setCursorVisibility = function _setCursorVisibility(visible) {\r\n this.visible = visible;\r\n if (!this.cursorObject) return;\r\n\r\n this.cursorObject.pp_setActive(visible);\r\n };\r\n\r\n // New Functions \r\n\r\n cursorComponentMod._pp_hoverBehaviour = function _pp_hoverBehaviour(hitObject, hitLocation, hitTestResults, originalEvent = null, forceUnhover = false) {\r\n if (!forceUnhover && hitObject != null) {\r\n let hoveringObjectChanged = false;\r\n if (this.hoveringObject == null || !this.hoveringObject.pp_equals(hitObject)) {\r\n // Unhover previous, if exists \r\n if (this.hoveringObject != null) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUnhover.notify(null, this, originalEvent);\r\n }\r\n }\r\n\r\n hoveringObjectChanged = true;\r\n\r\n // Hover new object \r\n this.hoveringObject = hitObject;\r\n this.hoveringObjectTarget = this.hoveringObject.pp_getComponent(CursorTarget);\r\n\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onHover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onHover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onHover.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._pp_updateCursorStyle();\r\n\r\n if (!this._pp_isDownToProcess() && this._isRealDown) {\r\n this._isDown = true;\r\n this._lastIsDown = true;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onDownOnHover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onDownOnHover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onDownOnHover.notify(hitTestResults, this, originalEvent);\r\n }\r\n }\r\n }\r\n\r\n if (this._updatePointerStyle) {\r\n this._pp_updateCursorStyle();\r\n }\r\n\r\n if (!hoveringObjectChanged && this._pp_isMoving(hitLocation)) {\r\n\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onMove.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onMove.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onMove.notify(hitTestResults, this, originalEvent);\r\n }\r\n }\r\n\r\n if (this._pp_isDownToProcess()) {\r\n // Cursor down \r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onDown.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onDown.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onDown.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n // Click \r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n // Multiple Clicks \r\n if (this._tripleClickTimer > 0 && this._multipleClickObject && this._multipleClickObject.pp_equals(this.hoveringObject)) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onTripleClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onTripleClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onTripleClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._tripleClickTimer = 0;\r\n } else if (this._doubleClickTimer > 0 && this._multipleClickObject && this._multipleClickObject.pp_equals(this.hoveringObject)) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onDoubleClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onDoubleClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onDoubleClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._tripleClickTimer = this._multipleClickDelay;\r\n this._doubleClickTimer = 0;\r\n } else {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onSingleClick.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onSingleClick.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onSingleClick.notify(hitTestResults, this, originalEvent);\r\n }\r\n\r\n this._tripleClickTimer = 0;\r\n this._doubleClickTimer = this._multipleClickDelay;\r\n this._multipleClickObject = this.hoveringObject;\r\n }\r\n } else {\r\n // Cursor up \r\n if (!this._isUpWithNoDown && !hoveringObjectChanged && this._pp_isUpToProcess()) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUpWithDown.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUpWithDown.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUp.notify(hitTestResults, this, originalEvent);\r\n\r\n this.hitTestTarget.onUpWithDown.notify(hitTestResults, this, originalEvent);\r\n }\r\n } else if (this._isUpWithNoDown || (hoveringObjectChanged && this._pp_isUpToProcess())) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUp.notify(this.hoveringObject, this, originalEvent);\r\n\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUpWithNoDown.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUpWithNoDown.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUp.notify(hitTestResults, this, originalEvent);\r\n\r\n this.hitTestTarget.onUpWithNoDown.notify(hitTestResults, this, originalEvent);\r\n }\r\n }\r\n }\r\n\r\n this._prevHitLocationLocalToTarget = this.hoveringObject.pp_convertPositionWorldToLocal(hitLocation, this._prevHitLocationLocalToTarget);\r\n } else if (this.hoveringObject != null && (forceUnhover || hitObject == null)) {\r\n if (!this.hoveringReality) {\r\n if (this.hoveringObjectTarget) this.hoveringObjectTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n this.globalTarget.onUnhover.notify(this.hoveringObject, this, originalEvent);\r\n } else {\r\n this.hitTestTarget.onUnhover.notify(null, this, originalEvent);\r\n }\r\n\r\n this.hoveringObject = null;\r\n this.hoveringObjectTarget = null;\r\n\r\n this._pp_updateCursorStyle();\r\n }\r\n\r\n if (this.hoveringObject != null) {\r\n this._lastIsDown = this._isDown;\r\n } else {\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n }\r\n\r\n this._isUpWithNoDown = false;\r\n };\r\n\r\n cursorComponentMod._pp_rayCast = function _pp_rayCast() {\r\n let rayHit =\r\n this.rayCastMode == 0\r\n ? Globals.getScene(this.engine).rayCast(\r\n this._origin,\r\n this._direction,\r\n this._collisionMask\r\n )\r\n : Globals.getPhysics(this.engine).rayCast(\r\n this._origin,\r\n this._direction,\r\n this._collisionMask,\r\n this.maxDistance\r\n );\r\n\r\n let rayHitCollisionDistanceValid = true;\r\n if (this.rayCastMode == 0 && rayHit.hitCount > 0 && rayHit.distances[0] > this.maxDistance) {\r\n rayHitCollisionDistanceValid = false;\r\n }\r\n\r\n this._hitObjectData[0] = null;\r\n this._hitObjectData[1] = null;\r\n this._hitObjectData[2] = null;\r\n\r\n let hitTestResultDistance = Infinity;\r\n if (this._hitTestLocation != null && this._hitTestLocation.visible) {\r\n this._hitTestObject.pp_getPositionWorld(this.cursorPos);\r\n this._rayHitLocation.vec3_copy(this.cursorPos);\r\n hitTestResultDistance = this.cursorPos.vec3_distance(this.object.pp_getPositionWorld(this._tempVec));\r\n\r\n this._hitObjectData[0] = this._hitTestObject;\r\n this._hitObjectData[1] = this._rayHitLocation;\r\n }\r\n\r\n this.hoveringReality = false;\r\n\r\n if (rayHit.hitCount > 0 && rayHitCollisionDistanceValid) {\r\n let rayHitDistance = rayHit.distances[0];\r\n if (rayHitDistance <= hitTestResultDistance) {\r\n // Overwrite cursorPos set by hit test location\r\n this.cursorPos.vec3_copy(rayHit.locations[0]);\r\n this._rayHitLocation.vec3_copy(this.cursorPos);\r\n\r\n this._hitObjectData[0] = rayHit.objects[0];\r\n this._hitObjectData[1] = this._rayHitLocation;\r\n } else {\r\n this.hoveringReality = true;\r\n }\r\n } else if (hitTestResultDistance == Infinity) {\r\n this.cursorPos.vec3_zero();\r\n\r\n this._hitObjectData[0] = null;\r\n this._hitObjectData[1] = null;\r\n }\r\n\r\n let xrFrame = XRUtils.getFrame(this.engine);\r\n if (this.hoveringReality && xrFrame != null) {\r\n this._hitObjectData[2] = this._hitTestLocation.getHitTestResults(xrFrame)[0];\r\n }\r\n\r\n return this._hitObjectData;\r\n };\r\n\r\n cursorComponentMod._pp_updateMouseData = function _pp_updateMouseData(e, clientX, clientY, w, h, pointerID) {\r\n this._lastClientX = clientX;\r\n this._lastClientY = clientY;\r\n this._lastWidth = w;\r\n this._lastHeight = h;\r\n this._lastPointerID = pointerID;\r\n\r\n this._lastOriginalMouseEvent = e;\r\n };\r\n\r\n cursorComponentMod._pp_updateMousePos = function _pp_updateMousePos(clientX, clientY, w, h) {\r\n // Get direction in normalized device coordinate space from mouse position \r\n let left = clientX / w;\r\n let top = clientY / h;\r\n this._direction.vec3_set(left * 2 - 1, -top * 2 + 1, -1.0);\r\n\r\n this.updateDirection();\r\n };\r\n\r\n cursorComponentMod.pp_setViewComponent = function pp_setViewComponent(viewComponent) {\r\n this._viewComponent = viewComponent;\r\n\r\n // If this object also has a view component, we will enable inverse-projected mouse clicks,\r\n // otherwise just use the objects transformation\r\n if (this._viewComponent != null) {\r\n this._viewComponent.projectionMatrix.mat4_invert(this._projectionMatrix);\r\n\r\n if (!this._myViewEventListenersRegistered) {\r\n this._myViewEventListenersRegistered = true;\r\n\r\n let onClick = this.onClick.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"click\", onClick);\r\n let onPointerDown = this.onPointerDown.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerdown\", onPointerDown);\r\n let onPointerMove = this.onPointerMove.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointermove\", onPointerMove);\r\n let onPointerUp = this.onPointerUp.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerup\", onPointerUp);\r\n let onPointerLeave = this._pp_onPointerLeave.bind(this);\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerleave\", onPointerLeave);\r\n\r\n let onViewportResize = this._onViewportResize.bind(this);\r\n this.engine.onResize.add(onViewportResize);\r\n\r\n this._onDestroyCallbacks.push(() => {\r\n Globals.getCanvas(this.engine).removeEventListener(\"click\", onClick);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerdown\", onPointerDown);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointermove\", onPointerMove);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerup\", onPointerUp);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerleave\", onPointerLeave);\r\n\r\n this.engine.onResize.remove(onViewportResize);\r\n\r\n this._myViewEventListenersRegistered = false;\r\n });\r\n }\r\n }\r\n };\r\n\r\n cursorComponentMod._pp_onPointerLeave = function _pp_onPointerLeave(e) {\r\n if (this._pointerID == null || this._pointerID == e.pointerId) {\r\n this._pointerLeaveToProcess = true;\r\n this._pointerLeaveMouseEvent = e;\r\n }\r\n };\r\n\r\n cursorComponentMod._pp_processPointerLeave = function _pp_processPointerLeave() {\r\n if (this._pointerLeaveToProcess) {\r\n this._pointerID = null;\r\n\r\n this._lastPointerID = null;\r\n\r\n this._lastClientX = null;\r\n this._lastClientY = null;\r\n this._lastWidth = null;\r\n this._lastHeight = null;\r\n\r\n this._lastOriginalMouseEvent = this._pointerLeaveMouseEvent;\r\n\r\n this._pointerLeaveToProcess = false;\r\n this._pointerLeaveMouseEvent = null;\r\n\r\n if (this.hoveringObject != null) {\r\n this._pp_hoverBehaviour(null, null, null, this._lastOriginalMouseEvent, true); // Trigger Unhover\r\n }\r\n\r\n this._isDown = false;\r\n this._lastIsDown = false;\r\n this._isRealDown = false;\r\n\r\n this._isDownForUpWithDown = false;\r\n this._isUpWithNoDown = false;\r\n }\r\n };\r\n\r\n cursorComponentMod._pp_isDownToProcess = function _pp_isDownToProcess() {\r\n return this._isDown != this._lastIsDown && this._isDown;\r\n };\r\n\r\n cursorComponentMod._pp_isUpToProcess = function _pp_isUpToProcess() {\r\n return this._isDown != this._lastIsDown && !this._isDown;\r\n };\r\n\r\n cursorComponentMod._pp_isMoving = function () {\r\n let hitLocationLocalToTarget = vec3_create();\r\n return function _pp_isMoving(hitLocation) {\r\n let moving = false;\r\n\r\n hitLocationLocalToTarget = this.hoveringObject.pp_convertPositionWorldToLocal(hitLocation, hitLocationLocalToTarget);\r\n\r\n if (!hitLocationLocalToTarget.vec_equals(this._prevHitLocationLocalToTarget, 0.0001)) {\r\n moving = true;\r\n }\r\n\r\n return moving;\r\n };\r\n }();\r\n\r\n cursorComponentMod._pp_isAR = function _pp_isAR() {\r\n let firstInputSource = XRUtils.getSession(this.engine).inputSources[0];\r\n return this.input != null && firstInputSource.handedness == \"none\" && firstInputSource.gamepad != null;\r\n };\r\n\r\n cursorComponentMod._pp_updateCursorStyle = function _pp_updateCursorStyle() {\r\n if (this.styleCursor) {\r\n if (this.hoveringObjectTarget != null && !this.hoveringObjectTarget.isSurface) {\r\n document.body.style.cursor = \"pointer\";\r\n } else if (document.body.style.cursor == \"pointer\") {\r\n document.body.style.cursor = \"default\";\r\n }\r\n }\r\n };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(cursorComponentMod, Cursor.prototype, false, true, true);\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nimport \"./cursor_target_component_type_extension.js\";\r\n\r\nexport function initCursorTargetComponentMod(): void {\r\n _initCursorTargetComponentModPrototype();\r\n}\r\n\r\nfunction _initCursorTargetComponentModPrototype(): void {\r\n\r\n const cursorTargetComponentMod: Record = {};\r\n\r\n // New Functions \r\n\r\n cursorTargetComponentMod.init = function init(this: CursorTarget): void {\r\n this.onSingleClick = new Emitter();\r\n this.onDoubleClick = new Emitter();\r\n this.onTripleClick = new Emitter();\r\n\r\n this.onDownOnHover = new Emitter();\r\n\r\n this.onUpWithDown = new Emitter();\r\n this.onUpWithNoDown = new Emitter();\r\n\r\n // Just a way to specify if this target is just used as a surface between buttons \r\n this.isSurface = false;\r\n };\r\n\r\n cursorTargetComponentMod.start = function start(): void { };\r\n cursorTargetComponentMod.update = function update(dt: number): void { };\r\n cursorTargetComponentMod.onActivate = function onActivate(): void { };\r\n cursorTargetComponentMod.onDeactivate = function onDeactivate(): void { };\r\n cursorTargetComponentMod.onDestroy = function onDestroy(): void { };\r\n\r\n\r\n\r\n PluginUtils.injectProperties(cursorTargetComponentMod, CursorTarget.prototype, false, true, true);\r\n}", "import { MouseLookComponent } from \"@wonderlandengine/components\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { vec3_create } from \"../../../js/extensions/array/vec_create_extension.js\";\r\nimport { PluginUtils } from \"../../../utils/plugin_utils.js\";\r\n\r\nexport function initMouseLookComponentMod() {\r\n _initMouseLookComponentModPrototype();\r\n}\r\n\r\nfunction _initMouseLookComponentModPrototype() {\r\n\r\n let mouseLookComponentMod = {};\r\n\r\n // Modified Functions\r\n\r\n mouseLookComponentMod.init = function init() {\r\n this.pointerId = null;\r\n this.prevMoveEvent = null;\r\n\r\n this.resetMovingDelay = 0.15;\r\n this.resetMovingTimer = new Timer(this.resetMovingDelay, false);\r\n this.isMoving = false;\r\n this.mouseDown = false;\r\n\r\n this.pointerMoveListener = this._onMove.bind(this);\r\n\r\n this.contextMenuListener = function (event) {\r\n if (this.active) {\r\n event.preventDefault();\r\n }\r\n }.bind(this);\r\n\r\n this.pointerDown = function (event) {\r\n if (this.active) {\r\n if (this.pointerId != null) return;\r\n\r\n if (!this.mouseDown) {\r\n if (event.button == this.mouseButtonIndex) {\r\n this.pointerId = event.pointerId;\r\n this.mouseDown = true;\r\n // Commenting cursor style change for now since it messes with Cursor Component cursor style, which is more important to have,\r\n // since it provides a more important feedback, while here is mostly just a visual thing\r\n //document.body.style.cursor = \"grabbing\"; \r\n if (event.button == 1) {\r\n event.preventDefault(); // Prevent scrolling\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }.bind(this);\r\n\r\n this.pointerUp = function (event) {\r\n if (this.active) {\r\n if (event.pointerId != this.pointerId) return;\r\n\r\n if (this.mouseDown) {\r\n if (event.button == this.mouseButtonIndex) {\r\n this.mouseDown = false;\r\n //document.body.style.cursor = \"default\";\r\n }\r\n }\r\n }\r\n }.bind(this);\r\n\r\n this.pointerLeave = function (event) {\r\n if (this.active) {\r\n if (event.pointerId != this.pointerId) return;\r\n\r\n this.pointerId = null;\r\n this.prevMoveEvent = null;\r\n\r\n if (this.mouseDown) {\r\n this.mouseDown = false;\r\n //document.body.style.cursor = \"default\";\r\n }\r\n }\r\n }.bind(this);\r\n\r\n document.body.addEventListener(\"pointermove\", this.pointerMoveListener);\r\n\r\n if (this.requireMouseDown) {\r\n if (this.mouseButtonIndex == 2) {\r\n Globals.getCanvas(this.engine).addEventListener(\"contextmenu\", this.contextMenuListener, false);\r\n }\r\n\r\n Globals.getCanvas(this.engine).addEventListener(\"pointerdown\", this.pointerDown);\r\n\r\n document.body.addEventListener(\"pointerup\", this.pointerUp);\r\n }\r\n\r\n document.body.addEventListener(\"pointerleave\", this.pointerLeave);\r\n };\r\n\r\n // New Functions\r\n\r\n mouseLookComponentMod.start = function start() { };\r\n mouseLookComponentMod.onActivate = function onActivate() { };\r\n\r\n mouseLookComponentMod.onDeactivate = function onDeactivate() {\r\n if (this.mouseDown) {\r\n //document.body.style.cursor = \"default\";\r\n }\r\n\r\n this.isMoving = false;\r\n this.mouseDown = false;\r\n\r\n this.pointerId = null;\r\n this.prevMoveEvent = null;\r\n };\r\n\r\n mouseLookComponentMod.onDestroy = function onDestroy() {\r\n document.body.removeEventListener(\"pointermove\", this.pointerMoveListener);\r\n Globals.getCanvas(this.engine).removeEventListener(\"contextmenu\", this.contextMenuListener);\r\n Globals.getCanvas(this.engine).removeEventListener(\"pointerdown\", this.pointerDown);\r\n document.body.removeEventListener(\"pointerup\", this.pointerUp);\r\n document.body.removeEventListener(\"pointerleave\", this.pointerLeave);\r\n };\r\n\r\n mouseLookComponentMod.update = function update(dt) {\r\n if (this.resetMovingTimer.isRunning()) {\r\n this.resetMovingTimer.update(dt);\r\n if (this.resetMovingTimer.isDone()) {\r\n this.resetMovingTimer.reset();\r\n this.isMoving = false;\r\n }\r\n }\r\n\r\n if (!this.isMoving) {\r\n if (!this.requireMouseDown || !this.mouseDown) {\r\n this.pointerId = null;\r\n }\r\n\r\n this.prevMoveEvent = null;\r\n }\r\n };\r\n\r\n mouseLookComponentMod._onMove = function () {\r\n let viewForward = vec3_create();\r\n let viewUp = vec3_create();\r\n\r\n let referenceUp = vec3_create();\r\n let referenceUpNegate = vec3_create();\r\n let referenceRight = vec3_create();\r\n\r\n let newUp = vec3_create();\r\n return function _onMove(event) {\r\n if (this.active) {\r\n if (this.pointerId != null && event.pointerId != this.pointerId) return;\r\n\r\n if (this.mouseDown || !this.requireMouseDown) {\r\n\r\n viewForward = this.object.pp_getBackward(viewForward); // The view \"real\" forward is actually the backward\r\n viewUp = this.object.pp_getUp(viewUp);\r\n\r\n referenceUp.vec3_set(0, 1, 0);\r\n if (this.object.pp_getParent() != null) {\r\n referenceUp = this.object.pp_getParent().pp_getUp(referenceUp);\r\n }\r\n\r\n referenceRight = viewForward.vec3_cross(referenceUp, referenceRight);\r\n\r\n let minAngle = 1;\r\n if (viewForward.vec3_angle(referenceUp) < minAngle) {\r\n referenceRight = viewUp.vec3_negate(referenceRight).vec3_cross(referenceUp, referenceRight);\r\n } else if (viewForward.vec3_angle(referenceUp.vec3_negate(referenceUpNegate)) < minAngle) {\r\n referenceRight = viewUp.vec3_cross(referenceUp, referenceRight);\r\n } else if (!viewUp.vec3_isConcordant(referenceUp)) {\r\n referenceRight.vec3_negate(referenceRight);\r\n }\r\n referenceRight.vec3_normalize(referenceRight);\r\n\r\n let movementX = event.movementX;\r\n let movementY = event.movementY;\r\n\r\n if (movementX == null || movementY == null) {\r\n if (this.prevMoveEvent != null) {\r\n movementX = event.pageX - this.prevMoveEvent.pageX;\r\n movementY = event.pageY - this.prevMoveEvent.pageY;\r\n } else {\r\n movementX = 0;\r\n movementY = 0;\r\n }\r\n }\r\n\r\n this.rotationX = -this.sensitity * movementX;\r\n this.rotationY = -this.sensitity * movementY;\r\n\r\n this.object.pp_rotateAxis(this.rotationY, referenceRight);\r\n\r\n let maxVerticalAngle = 89 - 0.001;\r\n newUp = this.object.pp_getUp(newUp);\r\n let angleWithUp = Math.pp_angleClamp(newUp.vec3_angleSigned(referenceUp, referenceRight));\r\n if (Math.abs(angleWithUp) > maxVerticalAngle) {\r\n let fixAngle = (Math.abs(angleWithUp) - maxVerticalAngle) * Math.pp_sign(angleWithUp);\r\n this.object.pp_rotateAxis(fixAngle, referenceRight);\r\n }\r\n\r\n this.object.pp_rotateAxis(this.rotationX, referenceUp);\r\n\r\n this.prevMoveEvent = event;\r\n this.pointerId = event.pointerId;\r\n\r\n this.resetMovingTimer.start(this.resetMovingDelay);\r\n this.isMoving = true;\r\n }\r\n }\r\n };\r\n }();\r\n\r\n\r\n\r\n PluginUtils.injectProperties(mouseLookComponentMod, MouseLookComponent.prototype, false, true, true);\r\n}", "import { initCauldronMods } from \"./cauldron_mods.js\";\r\nimport { initCursorComponentMod } from \"./cursor_component_mod.js\";\r\nimport { initCursorTargetComponentMod } from \"./cursor_target_component_mod.js\";\r\nimport { initMouseLookComponentMod } from \"./mouse_look_component_mod.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./cauldron_mods.js\";\r\nimport \"./cursor_component_mod.js\";\r\nimport \"./cursor_target_component_mod.js\";\r\nimport \"./mouse_look_component_mod.js\";\r\n\r\nexport function initComponentMods(): void {\r\n initCursorComponentMod();\r\n initCursorTargetComponentMod();\r\n initMouseLookComponentMod();\r\n\r\n initCauldronMods();\r\n}", "import { initComponentMods } from \"./components/init_component_mods.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./components/init_component_mods.js\";\r\n\r\nexport function initWLMods(): void {\r\n initComponentMods();\r\n}", "import { initWLExtensions } from \"./extensions/init_wl_extentions.js\";\r\nimport { initWLMods } from \"./mods/init_wl_mods.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./extensions/init_wl_extentions.js\";\r\nimport \"./mods/init_wl_mods.js\";\r\n\r\nexport function initWLPlugins(): void {\r\n initWLExtensions();\r\n initWLMods();\r\n}", "import { initJSPlugins } from \"./js/init_js_plugins.js\";\r\nimport { initWLPlugins } from \"./wl/init_wl_plugins.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"./js/init_js_plugins.js\";\r\nimport \"./wl/init_wl_plugins.js\";\r\n\r\nexport function initPlugins(): void {\r\n initJSPlugins();\r\n initWLPlugins();\r\n}", "export const PP_VERSION = \"0.6.2\";", "import { WonderlandEngine } from \"@wonderlandengine/api\";\r\nimport { registerWLComponents } from \"../cauldron/wl/register_wl_components.js\";\r\nimport { ComponentUtils } from \"../cauldron/wl/utils/component_utils.js\";\r\nimport { initPlugins } from \"../plugin/init_plugins.js\";\r\nimport { Globals } from \"./globals.js\";\r\nimport { PP_VERSION } from \"./pp_version.js\";\r\nimport { registerPPComponents } from \"./register_pp_components.js\";\r\n\r\n/**\r\n * TS import preserver\r\n * \r\n * This is only needed to make it so the import is not removed, since it makes the type extensions available to the Typescript \r\n */\r\nimport \"../plugin/init_plugins.js\";\r\n\r\nexport function initPP(engine: WonderlandEngine): void {\r\n console.log(\"PP version: \" + PP_VERSION);\r\n\r\n Globals.setMainEngine(engine);\r\n\r\n ComponentUtils.setDefaultWLComponentCloneCallbacks(engine);\r\n\r\n registerWLComponents(engine);\r\n registerPPComponents(engine);\r\n\r\n initPlugins();\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport * as PPAPI from \"../../index.js\";\r\n\r\nexport class AddPPToWindowComponent extends Component {\r\n static TypeName = \"pp-add-pp-to-window\";\r\n static Properties = {\r\n _myAdd: Property.bool(true)\r\n };\r\n\r\n init() {\r\n if (this._myAdd) {\r\n window.PP = {};\r\n this._addProperties(PPAPI);\r\n }\r\n }\r\n\r\n _addProperties(object) {\r\n let propertyNames = Object.getOwnPropertyNames(object);\r\n for (let propertyName of propertyNames) {\r\n if (object[propertyName] != undefined) {\r\n window.PP[propertyName] = object[propertyName];\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n window.PP = undefined;\r\n }\r\n}", "import { Howler } from \"howler\";\r\n\r\nexport function isPlaybackBlocked() {\r\n let blocked = false;\r\n\r\n if (Howler != null && Howler.state != \"running\") {\r\n blocked = true;\r\n }\r\n\r\n return blocked;\r\n}\r\n\r\nexport let AudioUtils = {\r\n isPlaybackBlocked\r\n};", "import { AudioPlayer } from \"../audio_player.js\";\r\n\r\nexport class HowlerAudioPlayer extends AudioPlayer {\r\n\r\n constructor(howl, audioSetup = null) {\r\n super(audioSetup, howl);\r\n\r\n if (audioSetup == null) {\r\n this._myAudioSetup.myAudioFilePath = this._myAudio._src;\r\n\r\n this._myAudioSetup.myLoop = this._myAudio._loop;\r\n this._myAudioSetup.myAutoPlay = this._myAudio._autoplay;\r\n\r\n this._myAudioSetup.myVolume = this._myAudio._volume;\r\n this._myAudioSetup.myRate = this._myAudio._rate;\r\n\r\n this._myAudioSetup.myPool = this._myAudio._pool;\r\n this._myAudioSetup.myPreload = this._myAudio._preload;\r\n\r\n this._myAudioSetup.myPosition = (this._myAudio._pos != null) ? this._myAudio._pos.vec3_clone() : null;\r\n this._myAudioSetup.mySpatial = this._myAudio._pos != null;\r\n this._myAudioSetup.myReferenceDistance = this._myAudio._pannerAttr.refDistance;\r\n } else {\r\n this._myAudioSetup.myAudioFilePath = this._myAudio._src;\r\n\r\n this._myAudio.loop(this._myAudioSetup.myLoop);\r\n this._myAudio._autoplay = this._myAudioSetup.myAutoPlay;\r\n\r\n this._myAudio.volume(this._myAudioSetup.myVolume);\r\n this._myAudio.rate(this._myAudioSetup.myRate);\r\n\r\n this._myAudio._pool = this._myAudioSetup.myPool;\r\n this._myAudio._preload = this._myAudioSetup.myPreload;\r\n\r\n this.updatePosition(this._myAudioSetup.myPosition);\r\n\r\n this._myAudio._pannerAttr.refDistance = this._myAudioSetup.myReferenceDistance;\r\n\r\n if (this._myAudioSetup.myAutoPlay) {\r\n this._myAudio.play();\r\n }\r\n }\r\n\r\n this._addListeners();\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Howler } from \"howler\";\r\n\r\nexport class MuteEverythingComponent extends Component {\r\n static TypeName = \"pp-mute-everything\";\r\n static Properties = {};\r\n\r\n start() {\r\n Howler.mute(true);\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Howler } from \"howler\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class SpatialAudioListenerComponent extends Component {\r\n static TypeName = \"pp-spatial-audio-listener\";\r\n static Properties = {};\r\n\r\n init() {\r\n this._myOrigin = vec3_create();\r\n this._myForward = vec3_create();\r\n this._myUp = vec3_create();\r\n }\r\n\r\n start() {\r\n this._updateAudioListener();\r\n }\r\n\r\n update(dt) {\r\n this._updateAudioListener();\r\n }\r\n\r\n _updateAudioListener() {\r\n this.object.pp_getPosition(this._myOrigin);\r\n this.object.pp_getForward(this._myForward);\r\n this.object.pp_getUp(this._myUp);\r\n\r\n Howler.pos(this._myOrigin[0], this._myOrigin[1], this._myOrigin[2]);\r\n Howler.orientation(this._myForward[0], this._myForward[1], this._myForward[2],\r\n this._myUp[0], this._myUp[1], this._myUp[2]);\r\n }\r\n}", "import { Component, PhysXComponent, Property, Shape } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\nimport { PhysicsCollisionCollector } from \"../physics/physics_collision_collector.js\";\r\nimport { RaycastParams, RaycastResults } from \"../physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../physics/physics_utils.js\";\r\n\r\n// Adjust the gravity to a low value like -0.05 to have better results, since the dynamic objects will move slowly instead of quickly falling far away\r\nexport class BenchmarkMaxPhysXComponent extends Component {\r\n static TypeName = \"pp-benchmark-max-physx\";\r\n static Properties = {\r\n _myStaticDomeSize: Property.float(40),\r\n _myStaticPhysXCount: Property.int(1000),\r\n _myDynamicDomeSize: Property.float(80),\r\n _myDynamicPhysXCount: Property.int(250),\r\n _myKinematicDomeSize: Property.float(120),\r\n _myKinematicPhysXCount: Property.int(250),\r\n _myRaycastCount: Property.int(100),\r\n _myVisualizeRaycast: Property.bool(false),\r\n _myVisualizeRaycastDelay: Property.float(0.5),\r\n\r\n // You can use this to test with convex mesh, \r\n // but u first need to add a physx with a convex mesh to the scene and read the shapeData index on the component to set it as _myShapeIndex\r\n _myUseConvexMesh: Property.bool(false),\r\n _myShapeIndex: Property.int(0),\r\n _myShapeScaleMultiplier: Property.float(1), // Used to adjust the scale of the convex mesh if too big or small based on how u imported it\r\n\r\n _myLogEnabled: Property.bool(true),\r\n _myClearConsoleBeforeLog: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myValid = false;\r\n\r\n if (!Globals.isDebugEnabled(this.engine)) return;\r\n\r\n this._myValid = true;\r\n this._myStarted = false;\r\n this._myPreStartTimer = new Timer(1);\r\n }\r\n\r\n _start() {\r\n this._myParentObject = this.object.pp_addObject();\r\n\r\n this._myRaycastParams = new RaycastParams(Globals.getPhysics(this.engine));\r\n this._myRaycastResults = new RaycastResults();\r\n\r\n this._myStaticPhysXObjects = [];\r\n this._myStaticPhysXComponents = [];\r\n this._myStaticPhysXCollectors = [];\r\n this._myDynamicPhysXObjects = [];\r\n this._myDynamicPhysXComponents = [];\r\n this._myDynamicPhysXCollectors = [];\r\n this._myKinematicPhysXObjects = [];\r\n this._myKinematicPhysXComponents = [];\r\n this._myKinematicPhysXCollectors = [];\r\n\r\n this._spawnDome(true, false);\r\n this._spawnDome(false, false);\r\n this._spawnDome(false, true);\r\n\r\n this._myStartTimer = new Timer(1);\r\n this._myTimer = new Timer(0);\r\n this._myDebugTimer = new Timer(this._myVisualizeRaycastDelay);\r\n this._myLogEnabledTimer = new Timer(1);\r\n this._myFPSHistory = [];\r\n for (let i = 0; i < 7; i++) {\r\n this._myFPSHistory.push(0);\r\n }\r\n\r\n this._myAddVelocityDelay = 10;\r\n\r\n this._myTranslateVec3 = vec3_create();\r\n this._myRotateVec3 = vec3_create();\r\n\r\n this._myStarted = true;\r\n }\r\n\r\n update(dt) {\r\n if (!this._myValid) return;\r\n\r\n if (!this._myStarted) {\r\n this._myPreStartTimer.update(dt);\r\n if (this._myPreStartTimer.isDone()) {\r\n this._start();\r\n }\r\n } else {\r\n this._myStartTimer.update(dt);\r\n if (this._myStartTimer.isDone()) {\r\n this._myTimer.update(dt);\r\n this._myDebugTimer.update(dt);\r\n this._myLogEnabledTimer.update(dt);\r\n if (this._myTimer.isDone()) {\r\n this._myTimer.start();\r\n\r\n let debugEnabled = false;\r\n if (this._myDebugTimer.isDone()) {\r\n this._myDebugTimer.start();\r\n debugEnabled = true;\r\n }\r\n\r\n debugEnabled = debugEnabled && this._myVisualizeRaycast;\r\n this._raycastTest(debugEnabled);\r\n }\r\n\r\n this._myFPSHistory.pop();\r\n this._myFPSHistory.unshift(Math.round(1 / dt));\r\n\r\n if (this._myLogEnabled) {\r\n if (this._myLogEnabledTimer.isDone()) {\r\n this._myLogEnabledTimer.start();\r\n if (this._myClearConsoleBeforeLog) {\r\n console.clear();\r\n }\r\n console.log(\"Static PhysX Dome Size:\", this._myStaticPhysXObjects.length);\r\n console.log(\"Dynamic PhysX Dome Size:\", this._myDynamicPhysXObjects.length);\r\n console.log(\"Kinematic PhysX Dome Size:\", this._myKinematicPhysXObjects.length);\r\n\r\n let staticCollisions = 0;\r\n for (let collector of this._myStaticPhysXCollectors) {\r\n staticCollisions += collector.getCollisions().length;\r\n }\r\n\r\n let dynamicCollisions = 0;\r\n for (let collector of this._myDynamicPhysXCollectors) {\r\n dynamicCollisions += collector.getCollisions().length;\r\n }\r\n\r\n let kinematicCollisions = 0;\r\n for (let collector of this._myKinematicPhysXCollectors) {\r\n kinematicCollisions += collector.getCollisions().length;\r\n }\r\n\r\n // Every collision is considered twice since it is caught by 2 physX\r\n let totalCollisions = (staticCollisions + dynamicCollisions + kinematicCollisions) / 2;\r\n\r\n console.log(\"Current Collisions Count:\", totalCollisions);\r\n console.log(\"Raycast Count:\", this._myRaycastCount);\r\n console.log(\"FPS History:\");\r\n let fpsString = \"\";\r\n for (let fps of this._myFPSHistory) {\r\n fpsString = fpsString.concat(fps, \"\\n\");\r\n }\r\n console.log(fpsString);\r\n }\r\n }\r\n }\r\n\r\n if (this._myAddVelocityDelay > 0) {\r\n this._myAddVelocityDelay--;\r\n if (this._myAddVelocityDelay == 0) {\r\n for (let physX of this._myDynamicPhysXComponents) {\r\n physX.kinematic = false;\r\n let strength = 50;\r\n physX.linearVelocity = [Math.pp_random(-strength, strength), Math.pp_random(-strength, strength), Math.pp_random(-strength, strength)];\r\n physX.angularVelocity = [Math.pp_random(-strength, strength), Math.pp_random(-strength, strength), Math.pp_random(-strength, strength)];\r\n }\r\n }\r\n }\r\n\r\n for (let physX of this._myKinematicPhysXObjects) {\r\n let strength = 5 * dt;\r\n this._myTranslateVec3.vec3_set(Math.pp_random(-strength, strength), Math.pp_random(-strength, strength), Math.pp_random(-strength, strength));\r\n physX.pp_translate(this._myTranslateVec3);\r\n\r\n let rotateStrength = 50 * dt;\r\n this._myRotateVec3.vec3_set(Math.pp_random(-rotateStrength, rotateStrength), Math.pp_random(-rotateStrength, rotateStrength), Math.pp_random(-rotateStrength, rotateStrength));\r\n physX.pp_rotate(this._myRotateVec3);\r\n }\r\n }\r\n }\r\n\r\n _raycastTest(debugEnabled) {\r\n let raycastCount = this._myRaycastCount;\r\n\r\n let distance = 10000;\r\n\r\n for (let i = 0; i < raycastCount; i++) {\r\n let origin = [Math.pp_random(1, 2) * Math.pp_randomSign(), Math.pp_random(1, 2) * Math.pp_randomSign(), Math.pp_random(1, 2) * Math.pp_randomSign()];\r\n let direction = [Math.pp_random(-1, 1), Math.pp_random(-1, 1), Math.pp_random(-1, 1)];\r\n direction.vec3_normalize(direction);\r\n\r\n this._myRaycastParams.myOrigin.vec3_copy(origin);\r\n this._myRaycastParams.myDirection.vec3_copy(direction);\r\n this._myRaycastParams.myDistance = distance;\r\n this._myRaycastParams.myBlockLayerFlags.setAllFlagsActive();\r\n\r\n let raycastResults = PhysicsUtils.raycast(this._myRaycastParams, this._myRaycastResults);\r\n\r\n if (debugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n Globals.getDebugVisualManager(this.engine).drawRaycast(this._myDebugTimer.getDuration(), raycastResults, true, 5, 0.015);\r\n }\r\n }\r\n }\r\n\r\n _spawnDome(staticDome, dynamicDome) {\r\n let maxCount = this._myStaticPhysXCount;\r\n let physXList = this._myStaticPhysXObjects;\r\n let cloves = Math.ceil(Math.sqrt(this._myStaticPhysXCount));\r\n if (!staticDome) {\r\n if (dynamicDome) {\r\n cloves = Math.ceil(Math.sqrt(this._myDynamicPhysXCount));\r\n maxCount = this._myDynamicPhysXCount;\r\n physXList = this._myDynamicPhysXObjects;\r\n } else {\r\n cloves = Math.ceil(Math.sqrt(this._myKinematicPhysXCount));\r\n maxCount = this._myKinematicPhysXCount;\r\n physXList = this._myKinematicPhysXObjects;\r\n }\r\n }\r\n\r\n let angleForClove = Math.PI * 2 / cloves;\r\n\r\n let minDistance = Math.max(0, this._myStaticDomeSize - 20);\r\n let maxDistance = this._myStaticDomeSize + 20;\r\n\r\n if (!staticDome) {\r\n if (dynamicDome) {\r\n minDistance = Math.max(0, this._myDynamicDomeSize - 20);\r\n maxDistance = this._myDynamicDomeSize + 20;\r\n } else {\r\n minDistance = Math.max(0, this._myKinematicDomeSize - 20);\r\n maxDistance = this._myKinematicDomeSize + 20;\r\n }\r\n }\r\n\r\n let minExtraRotation = 0;\r\n let maxExtraRotation = Math.pp_toRadians(10);\r\n\r\n let upDirection = vec3_create(0, 1, 0);\r\n let horizontalDirection = vec3_create(0, 0, -1);\r\n\r\n for (let i = 0; i < cloves / 2; i++) {\r\n let verticalDirection = vec3_create(0, 1, 0);\r\n\r\n let rotationAxis = vec3_create();\r\n horizontalDirection.vec3_cross(verticalDirection, rotationAxis);\r\n rotationAxis.vec3_normalize(rotationAxis);\r\n\r\n for (let j = 0; j < cloves; j++) {\r\n if (physXList.length < maxCount) {\r\n let distance = Math.random() * (maxDistance - minDistance) + minDistance;\r\n let extraAxisRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let extraUpRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let physXDirection = verticalDirection.pp_clone();\r\n\r\n physXDirection.vec3_rotateAxisRadians(extraAxisRotation, rotationAxis, physXDirection);\r\n physXDirection.vec3_rotateAxisRadians(extraUpRotation, upDirection, physXDirection);\r\n\r\n physXDirection.vec3_scale(distance, physXDirection);\r\n\r\n this._addPhysX(physXDirection, staticDome, dynamicDome);\r\n }\r\n\r\n verticalDirection.vec3_rotateAxisRadians(angleForClove / 2, rotationAxis, verticalDirection);\r\n\r\n if (physXList.length < maxCount) {\r\n let distance = Math.random() * (maxDistance - minDistance) + minDistance;\r\n let extraAxisRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let extraUpRotation = (Math.random() * 2 - 1) * (maxExtraRotation - minExtraRotation) + minExtraRotation;\r\n let physXDirection = verticalDirection.pp_clone();\r\n\r\n physXDirection.vec3_rotateAxisRadians(extraAxisRotation, rotationAxis, physXDirection);\r\n physXDirection.vec3_rotateAxisRadians(extraUpRotation, upDirection, physXDirection);\r\n\r\n physXDirection.vec3_scale(distance, physXDirection);\r\n\r\n this._addPhysX(physXDirection, staticDome, dynamicDome);\r\n }\r\n\r\n verticalDirection.vec3_rotateAxisRadians(angleForClove / 2, rotationAxis, verticalDirection);\r\n\r\n }\r\n\r\n horizontalDirection.vec3_rotateAxisRadians(angleForClove, upDirection, horizontalDirection);\r\n }\r\n }\r\n\r\n _addPhysX(physXDirection, staticDome, dynamicDome) {\r\n let position = physXDirection;\r\n let scale = Math.pp_random(1, 10);\r\n let shape = Math.pp_randomPick(Shape.Sphere, Shape.Box);\r\n if (this._myUseConvexMesh) {\r\n shape = Shape.ConvexMesh;\r\n scale *= this._myShapeScaleMultiplier;\r\n }\r\n\r\n let physX = this._myParentObject.pp_addObject();\r\n physX.pp_setPosition(position);\r\n\r\n let physXComponent = physX.pp_addComponent(PhysXComponent, {\r\n \"shape\": shape,\r\n \"shapeData\": { index: this._myShapeIndex },\r\n \"extents\": vec3_create(scale, scale, scale),\r\n \"static\": staticDome,\r\n \"kinematic\": !dynamicDome,\r\n \"mass\": 1\r\n });\r\n\r\n if (staticDome) {\r\n this._myStaticPhysXObjects.push(physX);\r\n this._myStaticPhysXComponents.push(physXComponent);\r\n this._myStaticPhysXCollectors.push(new PhysicsCollisionCollector(physXComponent));\r\n } else if (dynamicDome) {\r\n this._myDynamicPhysXObjects.push(physX);\r\n this._myDynamicPhysXComponents.push(physXComponent);\r\n this._myDynamicPhysXCollectors.push(new PhysicsCollisionCollector(physXComponent));\r\n } else {\r\n this._myKinematicPhysXObjects.push(physX);\r\n this._myKinematicPhysXComponents.push(physXComponent);\r\n this._myKinematicPhysXCollectors.push(new PhysicsCollisionCollector(physXComponent));\r\n }\r\n }\r\n\r\n onDestroy() {\r\n for (let collector of this._myStaticPhysXCollectors) {\r\n collector.destroy();\r\n }\r\n\r\n for (let collector of this._myDynamicPhysXCollectors) {\r\n collector.destroy();\r\n }\r\n\r\n for (let collector of this._myKinematicPhysXCollectors) {\r\n collector.destroy();\r\n }\r\n }\r\n}", "import { CollisionEventType, Emitter, PhysXComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\n\r\nexport class PhysicsCollisionCollector {\r\n\r\n constructor(physXComponent, trigger = false) {\r\n this._myPhysX = physXComponent;\r\n\r\n this._myTrigger = trigger;\r\n\r\n this._myCollisions = [];\r\n\r\n this._myCollisionsStart = [];\r\n this._myCollisionsEnd = [];\r\n\r\n this._myUpdateActive = false;\r\n this._myCollisionsStartToProcess = [];\r\n this._myCollisionsEndToProcess = [];\r\n\r\n this._myCollisionCallbackID = null;\r\n\r\n this._myActive = false;\r\n this.setActive(true);\r\n\r\n this._myLogEnabled = false;\r\n\r\n this._myTriggerDesyncFixDelay = new Timer(0.1);\r\n\r\n this._myCollisionEmitter = new Emitter(); // Signature: listener(currentPhysX, otherPhysX, collisionType)\r\n this._myCollisionStartEmitter = new Emitter(); // Signature: listener(currentPhysX, otherPhysX, collisionType)\r\n this._myCollisionEndEmitter = new Emitter(); // Signature: listener(currentPhysX, otherPhysX, collisionType)\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n getPhysX() {\r\n return this._myPhysX;\r\n }\r\n\r\n getCollisions() {\r\n return this._myCollisions;\r\n }\r\n\r\n getCollisionsStart() {\r\n return this._myCollisionsStart;\r\n }\r\n\r\n getCollisionsEnd() {\r\n return this._myCollisionsEnd;\r\n }\r\n\r\n isActive() {\r\n return this._myActive;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this._myActive = active;\r\n\r\n this._myCollisions.pp_clear();\r\n\r\n this._myCollisionsStart.pp_clear();\r\n this._myCollisionsEnd.pp_clear();\r\n this._myUpdateActive = false;\r\n this._myCollisionsStartToProcess.pp_clear();\r\n this._myCollisionsEndToProcess.pp_clear();\r\n\r\n if (this._myActive) {\r\n this._myCollisionCallbackID = this._myPhysX.onCollision(this._onCollision.bind(this));\r\n } else if (this._myCollisionCallbackID != null) {\r\n this._myPhysX.removeCollisionCallback(this._myCollisionCallbackID);\r\n this._myCollisionCallbackID = null;\r\n }\r\n }\r\n }\r\n\r\n // Set to true only if u are going to actually update this object and don't want to lose any collision start/end events prior to updating the first time after activation\r\n setUpdateActive(active) {\r\n this._myUpdateActive = active;\r\n }\r\n\r\n // Update is not mandatory, use it only if u want to access collisions start and end\r\n update(dt) {\r\n if (!this._myActive) {\r\n return;\r\n }\r\n\r\n this._myUpdateActive = true;\r\n\r\n let prevCollisionsStartToProcess = this._myCollisionsStartToProcess;\r\n this._myCollisionsStartToProcess = this._myCollisionsStart;\r\n this._myCollisionsStartToProcess.pp_clear();\r\n this._myCollisionsStart = prevCollisionsStartToProcess;\r\n\r\n let prevCollisionsEndToProcess = this._myCollisionsEndToProcess;\r\n this._myCollisionsEndToProcess = this._myCollisionsEnd;\r\n this._myCollisionsEndToProcess.pp_clear();\r\n this._myCollisionsEnd = prevCollisionsEndToProcess;\r\n\r\n if (this._myTrigger) {\r\n this._triggerDesyncFix(dt);\r\n }\r\n }\r\n\r\n isLogEnabled() {\r\n return this._myLogEnabled;\r\n }\r\n\r\n setLogEnabled(enabled) {\r\n this._myLogEnabled = enabled;\r\n }\r\n\r\n registerCollisionEventListener(id, listener) {\r\n this._myCollisionEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterCollisionEventListener(id) {\r\n this._myCollisionEmitter.remove(id);\r\n }\r\n\r\n registerCollisionStartEventListener(id, listener) {\r\n this._myCollisionStartEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterCollisionStartEventListener(id) {\r\n this._myCollisionStartEmitter.remove(id);\r\n }\r\n\r\n registerCollisionEndEventListener(id, listener) {\r\n this._myCollisionEndEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterCollisionEndEventListener(id) {\r\n this._myCollisionEndEmitter.remove(id);\r\n }\r\n\r\n _onCollision(type, physXComponent) {\r\n if (type == CollisionEventType.Touch || type == CollisionEventType.TriggerTouch) {\r\n this._onCollisionStart(type, physXComponent);\r\n } else if (type == CollisionEventType.TouchLost || type == CollisionEventType.TriggerTouchLost) {\r\n this._onCollisionEnd(type, physXComponent);\r\n }\r\n\r\n this._myCollisionEmitter.notify(this._myPhysX, physXComponent, type);\r\n }\r\n\r\n _onCollisionStart(type, physXComponent) {\r\n if (this._myLogEnabled) {\r\n let objectFound = false;\r\n for (let object of this._myCollisions) {\r\n if (object.pp_equals(physXComponent.object)) {\r\n objectFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (objectFound) {\r\n console.error(\"Collision Start on object already collected\");\r\n }\r\n }\r\n\r\n this._myCollisions.push(physXComponent.object);\r\n\r\n if (this._myUpdateActive) {\r\n this._myCollisionsStartToProcess.push(physXComponent.object);\r\n this._myCollisionsEndToProcess.pp_removeAll(function (element) {\r\n return element.pp_equals(physXComponent.object);\r\n });\r\n }\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"Collision Start -\", this._myCollisions.length);\r\n }\r\n\r\n this._myCollisionStartEmitter.notify(this._myPhysX, physXComponent, type);\r\n }\r\n\r\n _onCollisionEnd(type, physXComponent) {\r\n if (this._myLogEnabled) {\r\n let objectFound = false;\r\n for (let object of this._myCollisions) {\r\n if (object.pp_equals(physXComponent.object)) {\r\n objectFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!objectFound) {\r\n console.error(\"Collision End on object not collected\");\r\n }\r\n }\r\n\r\n\r\n this._myCollisions.pp_removeAll(function (element) {\r\n return element.pp_equals(physXComponent.object);\r\n });\r\n\r\n if (this._myUpdateActive) {\r\n this._myCollisionsEndToProcess.push(physXComponent.object);\r\n this._myCollisionsStartToProcess.pp_removeAll(function (element) {\r\n return element.pp_equals(physXComponent.object);\r\n });\r\n }\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"Collision End -\", this._myCollisions.length);\r\n }\r\n\r\n this._myCollisionEndEmitter.notify(this._myPhysX, physXComponent, type);\r\n }\r\n\r\n _triggerDesyncFix(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n if (this._myCollisionCallbackID != null) {\r\n this._myPhysX.removeCollisionCallback(this._myCollisionCallbackID);\r\n this._myCollisionCallbackID = null;\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPhysicsCollisionCollector.prototype._triggerDesyncFix = function () {\r\n let findAllCallback = function (element) {\r\n let physX = element.pp_getComponentSelf(PhysXComponent);\r\n return physX == null || !physX.active;\r\n };\r\n return function _triggerDesyncFix(dt) {\r\n this._myTriggerDesyncFixDelay.update(dt);\r\n if (this._myTriggerDesyncFixDelay.isDone()) {\r\n this._myTriggerDesyncFixDelay.start();\r\n\r\n let collisionsToEnd = this._myCollisions.pp_findAll(findAllCallback);\r\n\r\n if (collisionsToEnd.length > 0) {\r\n //console.error(\"DESYNC RESOLVED\");\r\n\r\n for (let i = 0; i < collisionsToEnd.length; i++) {\r\n let collision = collisionsToEnd[i];\r\n\r\n let physX = collision.pp_getComponentSelf(PhysXComponent);\r\n if (physX) {\r\n this._onCollisionEnd(CollisionEventType.TriggerTouchLost, physX);\r\n } else {\r\n console.error(\"NO PHYSX, HOW?\");\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Alignment, Component, Justification, MeshComponent, Property, TextComponent } from \"@wonderlandengine/api\";\r\nimport { vec2_create, vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { Timer } from \"../cauldron/timer.js\";\r\nimport { ObjectPool, ObjectPoolParams } from \"../object_pool/object_pool.js\";\r\nimport { XRUtils } from \"../utils/xr_utils.js\";\r\nimport { MeshCreationParams, MeshCreationTriangleParams, MeshCreationVertexParams, MeshUtils } from \"../wl/utils/mesh_utils.js\";\r\nimport { CloneParams } from \"../wl/utils/object_utils.js\";\r\n\r\nexport class BenchmarkMaxVisibleTrianglesComponent extends Component {\r\n static TypeName = \"pp-benchmark-max-visible-triangles\";\r\n static Properties = {\r\n _myTargetFrameRate: Property.int(-1), // -1 means it will auto detect it at start\r\n _myTargetFrameRateThreshold: Property.int(3),\r\n _myStartPlaneCount: Property.int(1),\r\n _myPlaneTriangles: Property.int(100),\r\n _mySecondsBeforeDoubling: Property.float(0.5), // Higher gives a better frame rate evaluation\r\n _myDTHistoryToIgnorePercentage: Property.float(0.25),\r\n _myCloneMaterial: Property.bool(false),\r\n _myCloneMesh: Property.bool(false),\r\n\r\n _myLogEnabled: Property.bool(true),\r\n\r\n _myStartOnXRStart: Property.bool(false),\r\n _myDisplayInFrontOfPlayer: Property.bool(true),\r\n _myDisplayInFrontOfPlayerDistance: Property.float(10),\r\n\r\n _myPlaneMaterial: Property.material(),\r\n _myBackgroundMaterial: Property.material(),\r\n _myTextMaterial: Property.material(null)\r\n };\r\n\r\n _start() {\r\n this._myBackgroundSize = 4;\r\n this._myBackgroundObject.pp_setActive(true);\r\n this._myBackgroundObject.pp_setScale(this._myBackgroundSize + 0.1);\r\n this._myBackgroundObject.pp_translateLocal(vec3_create(0, 0, -0.001));\r\n\r\n this._myDoubleTimer = new Timer(this._mySecondsBeforeDoubling);\r\n this._myDone = false;\r\n\r\n this._myCurrentPlanes = this._myStartPlaneCount;\r\n\r\n this._myDTHistory = [];\r\n\r\n this._myUpperLimit = -1;\r\n this._myLowerLimit = 0;\r\n\r\n this._myPlanes = [];\r\n this._mySkipNextFrames = 0;\r\n this._myMaxWaitFrames = 0;\r\n\r\n this._myMaxPlanesReached = false;\r\n\r\n this._myFirstTime = true;\r\n }\r\n\r\n _update(dt) {\r\n // Skip lag frames after the new set of plane has been shown, wait for it to be stable\r\n {\r\n if (dt < 0.00001) {\r\n return;\r\n }\r\n\r\n if (dt > 0.5 && this._myMaxWaitFrames > 0) {\r\n this._myMaxWaitFrames--;\r\n return;\r\n }\r\n\r\n this._myMaxWaitFrames = 10;\r\n\r\n if (this._mySkipNextFrames > 0) {\r\n this._mySkipNextFrames--;\r\n return;\r\n }\r\n }\r\n\r\n if (!this._myDone) {\r\n this._myDoubleTimer.update(dt);\r\n\r\n this._myDTHistory.push(dt);\r\n\r\n if (this._myDoubleTimer.isDone()) {\r\n this._myDoubleTimer.start();\r\n\r\n let frameRate = this._computeAverageFrameRate(false);\r\n\r\n if (this._myFirstTime) {\r\n this._myFirstTime = false;\r\n } else {\r\n\r\n // If there is not lag, the current plane count is a good lower limit, otherwise the current count is now a upper threshold, we have to search below it\r\n let lagging = false;\r\n if (frameRate < this._myStableFrameRate - this._myTargetFrameRateThreshold) {\r\n this._myUpperLimit = this._myCurrentPlanes;\r\n\r\n lagging = true;\r\n\r\n if (this._myUpperLimit == 1) {\r\n this._myLowerLimit = 1;\r\n }\r\n } else {\r\n this._myLowerLimit = this._myCurrentPlanes;\r\n if (this._myUpperLimit > 0) {\r\n this._myUpperLimit = Math.max(this._myUpperLimit, this._myLowerLimit);\r\n }\r\n }\r\n\r\n this._myTriangleTextComponent.text = \"Triangles: \" + this._myCurrentPlanes * this._myRealTrianglesAmount;\r\n this._myPlaneTextComponent.text = \"Planes: \" + this._myCurrentPlanes;\r\n this._myFPSTextComponent.text = \"FPS: \" + frameRate + \" / \" + this._myStableFrameRate;\r\n\r\n if (lagging) {\r\n this._myTriangleTextComponent.material.color = this._myLagColor;\r\n this._myPlaneTextComponent.material.color = this._myLagColor;\r\n this._myFPSTextComponent.material.color = this._myLagColor;\r\n } else {\r\n this._myTriangleTextComponent.material.color = this._myNormalColor;\r\n this._myPlaneTextComponent.material.color = this._myNormalColor;\r\n this._myFPSTextComponent.material.color = this._myNormalColor;\r\n }\r\n\r\n let reset = false;\r\n\r\n // Check if the binary search is completed\r\n if ((this._myUpperLimit > 0 &&\r\n (!lagging && (this._myUpperLimit - this._myLowerLimit) <= Math.max(2, 1000 / this._myRealTrianglesAmount)) ||\r\n (lagging && (this._myUpperLimit - this._myLowerLimit) <= 1)) ||\r\n (!lagging && this._myMaxPlanesReached)) {\r\n if (frameRate < this._myStableFrameRate - this._myTargetFrameRateThreshold) {\r\n // Going a bit back with the binary search, maybe the lower limit was not lower after all cause of a bad assumption of average FPS\r\n this._myLowerLimit = Math.max(1, Math.floor(this._myUpperLimit / 2.5));\r\n this._myUpperLimit = 0;\r\n reset = true;\r\n\r\n if (this._myLogEnabled) {\r\n // Reset\r\n console.log(\"Rst - Triangles:\", this._myCurrentPlanes * this._myRealTrianglesAmount, \"- Planes:\", this._myCurrentPlanes, \"- Frame Rate:\", frameRate);\r\n }\r\n } else {\r\n if (this._myMaxPlanesReached) {\r\n if (this._myLogEnabled) {\r\n console.log(\"Aborted - Max Planes Reached\");\r\n\r\n this._myDoneTextComponent.text = \"Aborted - Max Planes Reached\";\r\n }\r\n } else {\r\n this._displayPlanes(this._myLowerLimit);\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"\\nEnd - Triangles:\", this._myLowerLimit * this._myRealTrianglesAmount, \"- Planes:\", this._myLowerLimit, \"- Frame Rate:\", frameRate);\r\n console.log(\"Plane Triangles (Adjusted):\", this._myRealTrianglesAmount);\r\n console.log(\"Target Frame Rate:\", this._myStableFrameRate, \"- Threshold: \", (this._myStableFrameRate - this._myTargetFrameRateThreshold));\r\n }\r\n\r\n this._myTriangleTextComponent.text = \"Triangles: \" + this._myLowerLimit * this._myRealTrianglesAmount;\r\n this._myPlaneTextComponent.text = \"Planes: \" + this._myLowerLimit;\r\n this._myFPSTextComponent.text = \"FPS: \" + frameRate + \" / \" + this._myStableFrameRate;\r\n\r\n this._myDoneTextComponent.text = \"End\";\r\n }\r\n this._myDone = true;\r\n }\r\n }\r\n\r\n if (lagging && !reset) {\r\n if (this._myLogEnabled) {\r\n console.log(\"Lag - Triangles:\", this._myCurrentPlanes * this._myRealTrianglesAmount, \"- Planes:\", this._myCurrentPlanes, \"- Frame Rate:\", frameRate);\r\n }\r\n }\r\n\r\n if (!this._myDone) {\r\n // Sort of binary search, if there is no upper limit yet, just double\r\n if (this._myUpperLimit > 0) {\r\n this._myCurrentPlanes = Math.floor((this._myUpperLimit + this._myLowerLimit) / 2);\r\n this._myCurrentPlanes = Math.max(this._myCurrentPlanes, 1);\r\n } else if (!reset) {\r\n this._myCurrentPlanes = this._myLowerLimit * 2;\r\n } else {\r\n this._myCurrentPlanes = this._myLowerLimit;\r\n }\r\n\r\n if (this._myCurrentPlanes > 50000) {\r\n this._myCurrentPlanes = 50000;\r\n this._myMaxPlanesReached = true;\r\n } else {\r\n this._myMaxPlanesReached = false;\r\n }\r\n }\r\n }\r\n\r\n if (!this._myDone) {\r\n this._displayPlanes(this._myCurrentPlanes);\r\n this._myElapsedTime = 0;\r\n this._myFrameCount = 0;\r\n\r\n this._mySkipNextFrames = 30;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _displayPlanes(count) {\r\n while (this._myPlanes.length > count) {\r\n let plane = this._myPlanes.pop();\r\n Globals.getObjectPoolManager(this.engine).release(this._myPoolID, plane);\r\n }\r\n\r\n while (this._myPlanes.length < count) {\r\n let plane = Globals.getObjectPoolManager(this.engine).get(this._myPoolID);\r\n this._myPlanes.push(plane);\r\n }\r\n\r\n let gridSize = 1;\r\n while (gridSize * gridSize < count) {\r\n gridSize++;\r\n }\r\n\r\n let spaceBetween = 0.01;\r\n let totalSpaceBetween = spaceBetween * (gridSize - 1);\r\n let planeSize = (this._myBackgroundSize * 2 - totalSpaceBetween) / (gridSize * 2);\r\n\r\n let currentCount = count;\r\n\r\n for (let i = 0; i < gridSize && currentCount > 0; i++) {\r\n for (let j = 0; j < gridSize && currentCount > 0; j++) {\r\n let plane = this._myPlanes[currentCount - 1];\r\n plane.pp_setScale(planeSize);\r\n\r\n let position = [-this._myBackgroundSize + planeSize + j * planeSize * 2 + j * spaceBetween, this._myBackgroundSize - planeSize - i * planeSize * 2 - i * spaceBetween, 0];\r\n\r\n plane.pp_setPositionLocal(position);\r\n plane.pp_setActive(true);\r\n\r\n currentCount--;\r\n }\r\n }\r\n }\r\n\r\n start() {\r\n this._myValid = false;\r\n\r\n if (!Globals.isDebugEnabled(this.engine)) return;\r\n\r\n this._myValid = true;\r\n\r\n if (this._myPlaneMaterial == null) {\r\n this._myPlaneMaterial = Globals.getDefaultMaterials(this.engine).myPhongOpaque.clone();\r\n this._myPlaneMaterial.diffuseColor = vec4_create(0.95, 0.95, 0.95, 1);\r\n this._myPlaneMaterial.ambientColor = vec4_create(0, 0, 0, 1);\r\n this._myPlaneMaterial.ambientFactor = 0.5;\r\n }\r\n\r\n if (this._myBackgroundMaterial == null) {\r\n this._myBackgroundMaterial = Globals.getDefaultMaterials(this.engine).myPhongOpaque.clone();\r\n this._myBackgroundMaterial.diffuseColor = vec4_create(0.25, 0.25, 0.25, 1);\r\n this._myBackgroundMaterial.ambientColor = vec4_create(0, 0, 0, 1);\r\n this._myBackgroundMaterial.ambientFactor = 0.5;\r\n }\r\n\r\n if (this._myTextMaterial == null) {\r\n this._myTextMaterial = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n }\r\n\r\n this._myLagColor = vec4_create(0.6, 0, 0, 1);\r\n this._myNormalColor = vec4_create(0.25, 0.25, 0.25, 1);\r\n\r\n this._myRealTrianglesAmount = 0;\r\n\r\n let parent = this.object;\r\n if (this._myDisplayInFrontOfPlayer) {\r\n parent = Globals.getPlayerObjects(this.engine).myHead.pp_addObject();\r\n parent.pp_rotateAxis(180, vec3_create(0, 1, 0));\r\n parent.pp_translateLocal(vec3_create(0, 0, this._myDisplayInFrontOfPlayerDistance));\r\n }\r\n\r\n this._myTrianglesObject = parent.pp_addObject();\r\n\r\n this._myBackgroundObject = this._myTrianglesObject.pp_addObject();\r\n {\r\n let meshComponent = this._myBackgroundObject.pp_addComponent(MeshComponent);\r\n meshComponent.mesh = MeshUtils.createPlane(this.engine);\r\n meshComponent.material = this._myBackgroundMaterial.clone();\r\n }\r\n\r\n this._myPlaneObject = this._myTrianglesObject.pp_addObject();\r\n {\r\n let meshComponent = this._myPlaneObject.pp_addComponent(MeshComponent);\r\n meshComponent.mesh = this._createPlaneMesh(this._myPlaneTriangles);\r\n this._myRealTrianglesAmount = meshComponent.mesh.indexData.length / 3;\r\n meshComponent.material = this._myPlaneMaterial.clone();\r\n }\r\n\r\n let poolParams = new ObjectPoolParams();\r\n if (!this._myCloneMesh) {\r\n poolParams.myInitialPoolSize = 30000;\r\n } else {\r\n if (this._myRealTrianglesAmount <= 4) {\r\n poolParams.myInitialPoolSize = 15000;\r\n } else if (this._myRealTrianglesAmount <= 8) {\r\n poolParams.myInitialPoolSize = 10000;\r\n } else if (this._myRealTrianglesAmount <= 64) {\r\n poolParams.myInitialPoolSize = 7500;\r\n } else {\r\n poolParams.myInitialPoolSize = 5000;\r\n }\r\n }\r\n poolParams.myPercentageToAddWhenEmpty = 0;\r\n poolParams.myAmountToAddWhenEmpty = 10000;\r\n poolParams.myCloneParams = new CloneParams();\r\n poolParams.myCloneParams.myComponentDeepCloneParams.setDeepCloneComponentVariable(MeshComponent.TypeName, \"material\", this._myCloneMaterial);\r\n poolParams.myCloneParams.myComponentDeepCloneParams.setDeepCloneComponentVariable(MeshComponent.TypeName, \"mesh\", this._myCloneMesh);\r\n\r\n this._myPoolID = this.type + \"_\" + Math.pp_randomUUID();\r\n Globals.getObjectPoolManager(this.engine).addPool(this._myPoolID, new ObjectPool(this._myPlaneObject, poolParams));\r\n\r\n this._myBackgroundObject.pp_setActive(false);\r\n this._myPlaneObject.pp_setActive(false);\r\n\r\n this._myStartTimer = new Timer(2);\r\n this._mySessionStarted = false;\r\n\r\n this._myTextsObject = this._myTrianglesObject.pp_addObject();\r\n //this._myTextsObject.pp_addComponent(EasyTransformComponent);\r\n\r\n this._myTriangleTextObject = this._myTextsObject.pp_addObject();\r\n //this._myTriangleTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myTriangleTextComponent = this._myTriangleTextObject.pp_addComponent(TextComponent);\r\n\r\n this._myTriangleTextComponent.alignment = Alignment.Left;\r\n this._myTriangleTextComponent.justification = Justification.Line;\r\n this._myTriangleTextComponent.material = this._myTextMaterial.clone();\r\n this._myTriangleTextComponent.material.color = this._myNormalColor;\r\n this._myTriangleTextComponent.text = \" \";\r\n //this._myTriangleTextComponent.text = \"Triangles: 9999999\";\r\n\r\n this._myPlaneTextObject = this._myTextsObject.pp_addObject();\r\n\r\n this._myPlaneTextComponent = this._myPlaneTextObject.pp_addComponent(TextComponent);\r\n //this._myPlaneTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myPlaneTextComponent.alignment = Alignment.Left;\r\n this._myPlaneTextComponent.justification = Justification.Line;\r\n this._myPlaneTextComponent.material = this._myTextMaterial.clone();\r\n this._myPlaneTextComponent.material.color = this._myNormalColor;\r\n this._myPlaneTextComponent.text = \" \";\r\n //this._myPlaneTextComponent.text = \"Planes: 9999999\";\r\n\r\n this._myFPSTextObject = this._myTextsObject.pp_addObject();\r\n\r\n this._myFPSTextComponent = this._myFPSTextObject.pp_addComponent(TextComponent);\r\n //this._myFPSTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myFPSTextComponent.alignment = Alignment.Left;\r\n this._myFPSTextComponent.justification = Justification.Line;\r\n this._myFPSTextComponent.material = this._myTextMaterial.clone();\r\n this._myFPSTextComponent.material.color = this._myNormalColor;\r\n this._myFPSTextComponent.text = \" \";\r\n //this._myFPSTextComponent.text = \"FPS: 99.99\";\r\n\r\n this._myDoneTextObject = this._myTrianglesObject.pp_addObject();\r\n\r\n this._myDoneTextComponent = this._myDoneTextObject.pp_addComponent(TextComponent);\r\n //this._myDoneTextObject.pp_addComponent(EasyTransformComponent, { _myLocal: true });\r\n\r\n this._myDoneTextComponent.alignment = Alignment.Center;\r\n this._myDoneTextComponent.justification = Justification.Line;\r\n this._myDoneTextComponent.material = this._myTextMaterial.clone();\r\n this._myDoneTextComponent.material.color = this._myNormalColor;\r\n this._myDoneTextComponent.text = \" \";\r\n //this._myDoneTextComponent.text = \"End\";\r\n\r\n this._myTextsObject.pp_setPositionLocal(vec3_create(0, 4.3, 0));\r\n this._myTextsObject.pp_setScale(2.75);\r\n\r\n this._myTriangleTextObject.pp_setPositionLocal(vec3_create(-1.4, 0, 0));\r\n this._myPlaneTextObject.pp_setPositionLocal(vec3_create(0.55, 0, 0));\r\n this._myFPSTextObject.pp_setPositionLocal(vec3_create(-0.315, 0, 0));\r\n this._myDoneTextObject.pp_setPositionLocal(vec3_create(0, -4.6, 0));\r\n this._myDoneTextObject.pp_setScale(4);\r\n\r\n this._myDTHistory = [];\r\n\r\n this._myFramesToSkip = 10;\r\n }\r\n\r\n update(dt) {\r\n if (!this._myValid) return;\r\n\r\n if (this._myFramesToSkip == 0) {\r\n if (this._mySessionStarted || !this._myStartOnXRStart) {\r\n if (this._myStartTimer.isRunning()) {\r\n this._myStartTimer.update(dt);\r\n\r\n this._myDTHistory.push(dt);\r\n\r\n if (this._myStartTimer.isDone()) {\r\n this._myStableFrameRate = this._computeAverageFrameRate(true);\r\n if (this._myTargetFrameRate > 0) {\r\n this._myStableFrameRate = this._myTargetFrameRate;\r\n }\r\n\r\n if (this._myLogEnabled) {\r\n console.log(\"\\nPlane Triangles (Adjusted):\", this._myRealTrianglesAmount);\r\n console.log(\"Target Frame Rate:\", this._myStableFrameRate, \"- Threshold: \", (this._myStableFrameRate - this._myTargetFrameRateThreshold));\r\n console.log(\"\");\r\n }\r\n this._start();\r\n }\r\n } else {\r\n this._update(dt);\r\n }\r\n } else {\r\n this._mySessionStarted = XRUtils.getSession(this.engine) != null;\r\n }\r\n } else {\r\n this._myFramesToSkip--;\r\n }\r\n }\r\n\r\n _computeAverageFrameRate(firstCompute) {\r\n let frameRate = 0;\r\n\r\n this._myDTHistory.sort();\r\n let elementsToRemove = Math.floor(this._myDTHistory.length * Math.min(0.9, this._myDTHistoryToIgnorePercentage * (firstCompute ? 2 : 1)));\r\n for (let i = 0; i < elementsToRemove && this._myDTHistory.length > 1; i++) {\r\n this._myDTHistory.pop();\r\n }\r\n\r\n let averageDT = 0;\r\n for (let dt of this._myDTHistory) {\r\n averageDT += dt;\r\n }\r\n averageDT /= this._myDTHistory.length;\r\n frameRate = Math.round(1 / averageDT);\r\n\r\n this._myDTHistory = [];\r\n\r\n return frameRate;\r\n }\r\n\r\n _createPlaneMesh(trianglesAmount) {\r\n let squaresAmount = Math.ceil(trianglesAmount / 2);\r\n\r\n let row = 1;\r\n let column = 1;\r\n\r\n let closestSqrt = 1;\r\n while (closestSqrt * closestSqrt < squaresAmount) {\r\n closestSqrt++;\r\n }\r\n\r\n row = closestSqrt;\r\n column = closestSqrt;\r\n\r\n while (row > 1 && column > 1 && row * column > squaresAmount && ((row - 1) * column >= squaresAmount)) {\r\n row--;\r\n }\r\n\r\n let meshCreationParams = new MeshCreationParams(this.engine);\r\n\r\n for (let i = 0; i < row + 1; i++) {\r\n for (let j = 0; j < column + 1; j++) {\r\n\r\n let x = (2 / column) * j;\r\n let y = (2 / row) * i;\r\n\r\n let vertexCreationParams = new MeshCreationVertexParams();\r\n\r\n vertexCreationParams.myPosition = vec3_create();\r\n vertexCreationParams.myPosition[0] = x - 1;\r\n vertexCreationParams.myPosition[1] = y - 1;\r\n vertexCreationParams.myPosition[2] = 0;\r\n\r\n vertexCreationParams.myTextureCoordinates = vec2_create();\r\n vertexCreationParams.myTextureCoordinates[0] = x / 2;\r\n vertexCreationParams.myTextureCoordinates[1] = y / 2;\r\n\r\n vertexCreationParams.myNormal = vec3_create();\r\n vertexCreationParams.myNormal[0] = 0;\r\n vertexCreationParams.myNormal[1] = 0;\r\n vertexCreationParams.myNormal[2] = 1;\r\n\r\n meshCreationParams.myVertexes.push(vertexCreationParams);\r\n }\r\n }\r\n\r\n for (let i = 0; i < row; i++) {\r\n for (let j = 0; j < column; j++) {\r\n let firstTriangle = new MeshCreationTriangleParams();\r\n firstTriangle.myIndexes[0] = (i * (column + 1)) + j;\r\n firstTriangle.myIndexes[1] = (i * (column + 1)) + j + 1;\r\n firstTriangle.myIndexes[2] = ((i + 1) * (column + 1)) + j;\r\n\r\n let secondTriangle = new MeshCreationTriangleParams();\r\n secondTriangle.myIndexes[0] = ((i + 1) * (column + 1)) + j;\r\n secondTriangle.myIndexes[1] = (i * (column + 1)) + j + 1;\r\n secondTriangle.myIndexes[2] = ((i + 1) * (column + 1)) + j + 1;\r\n\r\n meshCreationParams.myTriangles.push(firstTriangle);\r\n meshCreationParams.myTriangles.push(secondTriangle);\r\n }\r\n }\r\n\r\n let mesh = MeshUtils.create(meshCreationParams);\r\n\r\n return mesh;\r\n }\r\n\r\n onDestroy() {\r\n Globals.getObjectPoolManager(this.engine)?.destroyPool(this._myPoolID);\r\n }\r\n}", "import { Component, PhysXComponent, Property } from \"@wonderlandengine/api\";\r\n\r\nexport class AdjustHierarchyPhysXScaleComponent extends Component {\r\n static TypeName = \"pp-adjust-hierarchy-physx-scale\";\r\n static Properties = {\r\n _myWhen: Property.enum([\"Init\", \"Start\", \"First Update\"], \"Start\")\r\n };\r\n\r\n init() {\r\n if (this.active && this._myWhen == 0) {\r\n this._adjustScale();\r\n }\r\n }\r\n\r\n start() {\r\n if (this._myWhen == 1) {\r\n this._adjustScale();\r\n }\r\n this._myFirst = true;\r\n }\r\n\r\n update(dt) {\r\n if (this._myWhen == 2 && this._myFirst) {\r\n this._myFirst = false;\r\n this._adjustScale();\r\n }\r\n }\r\n\r\n _adjustScale() {\r\n let scale = this.object.pp_getScale();\r\n let physXComponents = this.object.pp_getComponents(PhysXComponent);\r\n for (let physX of physXComponents) {\r\n physX.extents[0] = physX.extents[0] * scale[0];\r\n physX.extents[1] = physX.extents[1] * scale[1];\r\n physX.extents[2] = physX.extents[2] * scale[2];\r\n\r\n if (physX.active) {\r\n physX.active = false;\r\n physX.active = true;\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../utils/xr_utils.js\";\r\n\r\nexport class ClearConsoleOnXRSessionStartComponent extends Component {\r\n static TypeName = \"pp-clear-console-on-xr-session-start\";\r\n static Properties = {\r\n _myFirstTimeOnly: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myFirstTime = true;\r\n XRUtils.registerSessionStartEventListener(this, this._onXRSessionStart.bind(this), true, false, this.engine);\r\n }\r\n\r\n _onXRSessionStart() {\r\n if (!this._myFirstTimeOnly || this._myFirstTime) {\r\n this._myFirstTime = false;\r\n console.clear();\r\n }\r\n }\r\n\r\n onDestroy() {\r\n XRUtils.unregisterSessionStartEventListener(this, this.engine);\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../utils/xr_utils.js\";\r\n\r\nexport class SetActiveComponent extends Component {\r\n static TypeName = \"pp-set-active\";\r\n static Properties = {\r\n _myActive: Property.bool(true),\r\n _mySetActiveOn: Property.enum([\"Self\", \"Children\", \"Descendants\", \"Hierarchy\"], \"Hierarchy\"),\r\n _mySetActiveWhen: Property.enum([\"Init\", \"Start\", \"First Update\", \"Enter XR\", \"Exit XR\", \"First Enter XR\", \"First Exit XR\"], \"Init\")\r\n };\r\n\r\n init() {\r\n if (this.active && this._mySetActiveWhen == 0) {\r\n this._setActive();\r\n }\r\n }\r\n\r\n start() {\r\n if (this._mySetActiveWhen == 1) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstUpdate = true;\r\n this._myFirstXRStart = true;\r\n this._myFirstXREnd = true;\r\n\r\n if (this._mySetActiveWhen == 3 || this._mySetActiveWhen == 5) {\r\n XRUtils.registerSessionStartEventListener(this, this._onXRSessionStart.bind(this), true, true, this.engine);\r\n }\r\n\r\n if (this._mySetActiveWhen == 4 || this._mySetActiveWhen == 6) {\r\n XRUtils.registerSessionEndEventListener(this, this._onXRSessionEnd.bind(this), this.engine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._mySetActiveWhen == 2 && this._myFirstUpdate) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstUpdate = false;\r\n }\r\n\r\n _onXRSessionStart() {\r\n if (this._mySetActiveWhen == 3 || (this._mySetActiveWhen == 5 && this._myFirstXRStart)) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstXRStart = false;\r\n }\r\n\r\n _onXRSessionEnd() {\r\n if (this._mySetActiveWhen == 4 || (this._mySetActiveWhen == 6 && this._myFirstXREnd)) {\r\n this._setActive();\r\n }\r\n\r\n this._myFirstXREnd = false;\r\n }\r\n\r\n _setActive() {\r\n if (this._mySetActiveOn == 0) {\r\n this.object.pp_setActiveSelf(this._myActive);\r\n } else if (this._mySetActiveOn == 1) {\r\n this.object.pp_setActiveChildren(this._myActive);\r\n } else if (this._mySetActiveOn == 2) {\r\n this.object.pp_setActiveDescendants(this._myActive);\r\n } else {\r\n this.object.pp_setActive(this._myActive);\r\n }\r\n }\r\n\r\n onDestroy() {\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this.engine);\r\n }\r\n}", "import { Alignment, Component, Justification, Property } from \"@wonderlandengine/api\";\r\nimport { vec3_create, vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Timer } from \"../timer.js\";\r\n\r\nexport class ShowFPSComponent extends Component {\r\n static TypeName = \"pp-show-fps\";\r\n static Properties = {\r\n _myRefreshSeconds: Property.float(0.25),\r\n _myScreenPositionX: Property.float(1),\r\n _myScreenPositionY: Property.float(-1),\r\n _myScreenPositionZ: Property.float(1),\r\n _myScale: Property.float(1.5),\r\n _myTextMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._myColor = vec4_create(1, 1, 1, 1);\r\n if (this._myTextMaterial != null) {\r\n this._myColor.vec4_copy(this._myTextMaterial.color);\r\n }\r\n\r\n this._myScreenPosition = vec3_create(this._myScreenPositionX, this._myScreenPositionY, this._myScreenPositionZ);\r\n\r\n this._myCurrentFPS = 0;\r\n\r\n this._myTimer = new Timer(this._myRefreshSeconds);\r\n this._myTotalDT = 0;\r\n this._myFrames = 0;\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n this._myTotalDT += dt;\r\n this._myFrames++;\r\n\r\n this._myTimer.update(dt);\r\n if (this._myTimer.isDone()) {\r\n this._myTimer.start();\r\n\r\n this._myCurrentFPS = Math.round(this._myFrames / this._myTotalDT);\r\n\r\n this._myTotalDT = 0;\r\n this._myFrames = 0;\r\n }\r\n\r\n Globals.getDebugVisualManager(this.engine).drawUIText(0, this._myCurrentFPS.toFixed(0), this._myScreenPosition, this._myScale, this._myColor, Alignment.Right, Justification.Bottom);\r\n }\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { property } from \"@wonderlandengine/api/decorators.js\";\r\nimport { XRUtils } from \"../../utils/xr_utils.js\";\r\n\r\nenum _ButtonBehaviorWhenNotAvailable {\r\n NONE = \"none\",\r\n DISABLE = \"disable\",\r\n HIDE = \"hide\"\r\n}\r\n\r\n/** The buttons must first be enabled from the Wonderland Engine editor -> Project Settings / VR & AR */\r\nexport class ShowXRButtonsComponent extends Component {\r\n public static override TypeName = \"pp-show-xr-buttons\";\r\n\r\n @property.bool(true)\r\n private _myShowVRButton!: boolean;\r\n @property.enum(Object.values(_ButtonBehaviorWhenNotAvailable), _ButtonBehaviorWhenNotAvailable.DISABLE)\r\n private _myVRButtonBehaviorWhenNotAvailable!: number;\r\n\r\n @property.bool(true)\r\n private _myShowARButton!: boolean;\r\n @property.enum(Object.values(_ButtonBehaviorWhenNotAvailable), _ButtonBehaviorWhenNotAvailable.DISABLE)\r\n private _myARButtonBehaviorWhenNotAvailable!: number;\r\n\r\n private _myXRButtonsContainer: HTMLElement | null = null;\r\n private _myVRButton: HTMLElement | null = null;\r\n private _myARButton: HTMLElement | null = null;\r\n\r\n private _myFirstUpdate: boolean = false;\r\n\r\n private _myVRButtonVisibilityUpdated: boolean = false;\r\n private _myVRButtonUsabilityUpdated: boolean = false;\r\n private _myVRButtonDisabledOpacityUpdated: boolean = false;\r\n\r\n private _myARButtonVisibilityUpdated: boolean = false;\r\n private _myARButtonUsabilityUpdated: boolean = false;\r\n private _myARButtonDisabledOpacityUpdated: boolean = false;\r\n\r\n public override init(): void {\r\n this._myXRButtonsContainer = document.getElementById(\"xr-buttons-container\");\r\n\r\n this._myVRButton = document.getElementById(\"vr-button\");\r\n this._myARButton = document.getElementById(\"ar-button\");\r\n }\r\n\r\n public override start(): void {\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true);\r\n }\r\n\r\n public override update(dt: number): void {\r\n if (!this._myFirstUpdate) {\r\n this._myFirstUpdate = true;\r\n\r\n if (this._myXRButtonsContainer != null) {\r\n if (this._myShowVRButton || this._myShowARButton) {\r\n this._myXRButtonsContainer.style.setProperty(\"display\", \"flex\");\r\n } else {\r\n this._myXRButtonsContainer.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n\r\n if (this._myVRButton != null) {\r\n if (this._myShowVRButton) {\r\n this._myVRButton.style.setProperty(\"display\", \"block\");\r\n } else {\r\n this._myVRButton.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n\r\n if (this._myARButton != null) {\r\n if (this._myShowARButton) {\r\n this._myARButton.style.setProperty(\"display\", \"block\");\r\n } else {\r\n this._myARButton.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n } else {\r\n this._updateXRButtons(dt);\r\n }\r\n }\r\n\r\n private _updateXRButtons(dt: number): void {\r\n if (this._myShowVRButton) {\r\n if (!this._myVRButtonUsabilityUpdated) {\r\n if (this._myVRButton != null) {\r\n if (!this._myVRButtonVisibilityUpdated) {\r\n this._myVRButton.style.setProperty(\"transform\", \"scale(1)\");\r\n this._myVRButtonVisibilityUpdated = true;\r\n }\r\n\r\n if (!this._myVRButtonUsabilityUpdated) {\r\n if (XRUtils.isVRSupported()) {\r\n this._myVRButton.style.setProperty(\"opacity\", \"1\");\r\n this._myVRButton.style.setProperty(\"pointer-events\", \"all\");\r\n\r\n this._myVRButtonUsabilityUpdated = true;\r\n } else if (!this._myVRButtonDisabledOpacityUpdated) {\r\n switch (this._myVRButtonBehaviorWhenNotAvailable) {\r\n case 0:\r\n this._myVRButton.style.setProperty(\"opacity\", \"1\");\r\n this._myVRButton.style.setProperty(\"pointer-events\", \"all\");\r\n break;\r\n case 1:\r\n this._myVRButton.style.setProperty(\"opacity\", \"0.5\");\r\n break;\r\n case 2:\r\n this._myVRButton.style.setProperty(\"display\", \"none\");\r\n break;\r\n }\r\n\r\n this._myVRButtonDisabledOpacityUpdated = true;\r\n }\r\n }\r\n } else {\r\n this._myVRButtonUsabilityUpdated = true;\r\n }\r\n }\r\n }\r\n\r\n if (this._myShowARButton) {\r\n if (!this._myARButtonUsabilityUpdated) {\r\n if (this._myARButton != null) {\r\n if (!this._myARButtonVisibilityUpdated) {\r\n this._myARButton.style.setProperty(\"transform\", \"scale(1)\");\r\n this._myARButtonVisibilityUpdated = true;\r\n }\r\n\r\n if (!this._myARButtonUsabilityUpdated) {\r\n if (XRUtils.isARSupported()) {\r\n this._myARButton.style.setProperty(\"opacity\", \"1\");\r\n this._myARButton.style.setProperty(\"pointer-events\", \"all\");\r\n\r\n this._myARButtonUsabilityUpdated = true;\r\n } else if (!this._myARButtonDisabledOpacityUpdated) {\r\n switch (this._myARButtonBehaviorWhenNotAvailable) {\r\n case 0:\r\n this._myARButton.style.setProperty(\"opacity\", \"1\");\r\n this._myARButton.style.setProperty(\"pointer-events\", \"all\");\r\n break;\r\n case 1:\r\n this._myARButton.style.setProperty(\"opacity\", \"0.5\");\r\n break;\r\n case 2:\r\n this._myARButton.style.setProperty(\"display\", \"none\");\r\n break;\r\n }\r\n\r\n this._myARButtonDisabledOpacityUpdated = true;\r\n }\r\n }\r\n } else {\r\n this._myARButtonUsabilityUpdated = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _onXRSessionStart(): void {\r\n if (this._myXRButtonsContainer != null) {\r\n this._myXRButtonsContainer.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n\r\n private _onXRSessionEnd(): void {\r\n if (this._myXRButtonsContainer != null && (this._myShowVRButton || this._myShowARButton)) {\r\n this._myXRButtonsContainer.style.removeProperty(\"display\");\r\n }\r\n }\r\n}", "/*\r\n You can also use plain functions for state/transition if u want to do something simple and quick\r\n\r\n Signatures:\r\n function stateUpdate(dt, fsm)\r\n function init(fsm, initStateData)\r\n function transition(fsm, transitionData)\r\n*/\r\n\r\nimport { Emitter } from \"@wonderlandengine/api\";\r\n\r\nexport class StateData {\r\n\r\n constructor(stateID, stateObject) {\r\n this.myID = stateID;\r\n this.myObject = stateObject;\r\n }\r\n}\r\n\r\nexport class TransitionData {\r\n\r\n constructor(transitionID, fromStateData, toStateData, transitionObject, skipStateFunction) {\r\n this.myID = transitionID;\r\n this.myFromState = fromStateData;\r\n this.myToState = toStateData;\r\n this.myObject = transitionObject;\r\n this.mySkipStateFunction = skipStateFunction;\r\n }\r\n}\r\n\r\nexport let PerformMode = {\r\n IMMEDIATE: 0,\r\n DELAYED: 1\r\n};\r\n\r\nexport let PerformDelayedMode = {\r\n QUEUE: 0,\r\n KEEP_FIRST: 1,\r\n KEEP_LAST: 2\r\n};\r\n\r\nexport let SkipStateFunction = {\r\n NONE: 0,\r\n END: 1,\r\n START: 2,\r\n BOTH: 3\r\n};\r\n\r\nexport class FSM {\r\n\r\n constructor(performMode = PerformMode.IMMEDIATE, performDelayedMode = PerformDelayedMode.QUEUE) {\r\n this._myCurrentStateData = null;\r\n\r\n this._myStates = new Map();\r\n this._myTransitions = new Map();\r\n\r\n this._myLogEnabled = false;\r\n this._myLogShowDelayedInfo = false;\r\n this._myLogFSMName = \"FSM\";\r\n\r\n this._myPerformMode = performMode;\r\n this._myPerformDelayedMode = performDelayedMode;\r\n this._myPendingPerforms = [];\r\n this._myCurrentlyPerformedTransition = null;\r\n\r\n this._myInitEmitter = new Emitter(); // Signature: listener(fsm, initStateData, initTransitionObject, ...args)\r\n this._myInitIDEmitters = new Map(); // Signature: listener(fsm, initStateData, initTransitionObject, ...args)\r\n this._myTransitionEmitter = new Emitter(); // Signature: listener(fsm, fromStateData, toStateData, transitionData, performMode, ...args)\r\n this._myTransitionIDEmitters = []; // Signature: listener(fsm, fromStateData, toStateData, transitionData, performMode, ...args)\r\n }\r\n\r\n addState(stateID, state = null) {\r\n let stateObject = null;\r\n if (!state || typeof state == \"function\") {\r\n stateObject = {};\r\n if (typeof state == \"function\") {\r\n stateObject.update = function update() { return state(...arguments); };\r\n } else {\r\n stateObject.update = null;\r\n }\r\n stateObject.clone = function clone() {\r\n let cloneObject = {};\r\n cloneObject.update = this.update;\r\n cloneObject.clone = this.clone;\r\n return cloneObject;\r\n };\r\n } else {\r\n stateObject = state;\r\n }\r\n\r\n let stateData = new StateData(stateID, stateObject);\r\n this._myStates.set(stateID, stateData);\r\n this._myTransitions.set(stateID, new Map());\r\n }\r\n\r\n addTransition(fromStateID, toStateID, transitionID, transition = null, skipStateFunction = SkipStateFunction.NONE) {\r\n let transitionObject = null;\r\n if (!transition || typeof transition == \"function\") {\r\n transitionObject = {};\r\n if (typeof transition == \"function\") {\r\n transitionObject.perform = function perform() { return transition(...arguments); };\r\n } else {\r\n transitionObject.perform = null;\r\n }\r\n transitionObject.clone = function clone() {\r\n let cloneObject = {};\r\n cloneObject.perform = this.perform;\r\n cloneObject.clone = this.clone;\r\n return cloneObject;\r\n };\r\n } else {\r\n transitionObject = transition;\r\n }\r\n\r\n if (this.hasState(fromStateID) && this.hasState(toStateID)) {\r\n let transitionsFromState = this._getTransitionsFromState(fromStateID);\r\n\r\n let transitionData = new TransitionData(transitionID, this.getState(fromStateID), this.getState(toStateID), transitionObject, skipStateFunction);\r\n transitionsFromState.set(transitionID, transitionData);\r\n } else {\r\n if (!this.hasState(fromStateID) && !this.hasState(toStateID)) {\r\n console.error(\"Can't add transition:\", transitionID, \"- from state not found:\", fromStateID, \"- to state not found:\", toStateID);\r\n } else if (!this.hasState(fromStateID)) {\r\n console.error(\"Can't add transition:\", transitionID, \"- from state not found:\", fromStateID);\r\n } else if (!this.hasState(toStateID)) {\r\n console.error(\"Can't add transition:\", transitionID, \"- to state not found:\", toStateID);\r\n }\r\n }\r\n }\r\n\r\n init(initStateID, initTransition = null, ...args) {\r\n let initTransitionObject = initTransition;\r\n if (initTransition && typeof initTransition == \"function\") {\r\n initTransitionObject = {};\r\n initTransitionObject.performInit = initTransition;\r\n }\r\n\r\n if (this.hasState(initStateID)) {\r\n let initStateData = this._myStates.get(initStateID);\r\n\r\n if (this._myLogEnabled) {\r\n console.log(this._myLogFSMName, \"- Init:\", initStateID);\r\n }\r\n\r\n if (initTransitionObject && initTransitionObject.performInit) {\r\n initTransitionObject.performInit(this, initStateData, ...args);\r\n } else if (initStateData.myObject && initStateData.myObject.init) {\r\n initStateData.myObject.init(this, initStateData, ...args);\r\n }\r\n\r\n this._myCurrentStateData = initStateData;\r\n\r\n this._myInitEmitter.notify(this, initStateData, initTransitionObject, ...args);\r\n\r\n if (this._myInitIDEmitters.size > 0) {\r\n let emitter = this._myInitIDEmitters.get(initStateID);\r\n if (emitter != null) {\r\n emitter.notify(this, initStateData, initTransitionObject, ...args);\r\n }\r\n }\r\n } else if (this._myLogEnabled) {\r\n console.warn(this._myLogFSMName, \"- Init state not found:\", initStateID);\r\n }\r\n }\r\n\r\n update(dt, ...args) {\r\n if (this._myPendingPerforms.length > 0) {\r\n for (let i = 0; i < this._myPendingPerforms.length; i++) {\r\n this._perform(this._myPendingPerforms[i].myID, PerformMode.DELAYED, ...this._myPendingPerforms[i].myArgs);\r\n }\r\n this._myPendingPerforms = [];\r\n }\r\n\r\n if (this._myCurrentStateData && this._myCurrentStateData.myObject && this._myCurrentStateData.myObject.update) {\r\n this._myCurrentStateData.myObject.update(dt, this, ...args);\r\n }\r\n }\r\n\r\n perform(transitionID, ...args) {\r\n if (this._myPerformMode == PerformMode.DELAYED) {\r\n this.performDelayed(transitionID, ...args);\r\n } else {\r\n this.performImmediate(transitionID, ...args);\r\n }\r\n }\r\n\r\n performDelayed(transitionID, ...args) {\r\n let performDelayed = false;\r\n\r\n switch (this._myPerformDelayedMode) {\r\n case PerformDelayedMode.QUEUE:\r\n this._myPendingPerforms.push(new _PendingPerform(transitionID, ...args));\r\n performDelayed = true;\r\n break;\r\n case PerformDelayedMode.KEEP_FIRST:\r\n if (!this.hasPendingPerforms()) {\r\n this._myPendingPerforms.push(new _PendingPerform(transitionID, ...args));\r\n performDelayed = true;\r\n }\r\n break;\r\n case PerformDelayedMode.KEEP_LAST:\r\n this.resetPendingPerforms();\r\n this._myPendingPerforms.push(new _PendingPerform(transitionID, ...args));\r\n performDelayed = true;\r\n break;\r\n }\r\n\r\n return performDelayed;\r\n }\r\n\r\n performImmediate(transitionID, ...args) {\r\n return this._perform(transitionID, PerformMode.IMMEDIATE, ...args);\r\n }\r\n\r\n canPerform(transitionID) {\r\n return this.hasTransitionFromState(this._myCurrentStateData.myID, transitionID);\r\n }\r\n\r\n canGoTo(stateID, transitionID = null) {\r\n return this.hasTransitionFromStateToState(this._myCurrentStateData.myID, stateID, transitionID);\r\n }\r\n\r\n isInState(stateID) {\r\n return this._myCurrentStateData != null && this._myCurrentStateData.myID == stateID;\r\n }\r\n\r\n isPerformingTransition() {\r\n return this._myCurrentlyPerformedTransition != null;\r\n }\r\n\r\n getCurrentlyPerformedTransition() {\r\n return this._myCurrentlyPerformedTransition;\r\n }\r\n\r\n hasBeenInit() {\r\n return this._myCurrentStateData != null;\r\n }\r\n\r\n reset() {\r\n this.resetState();\r\n this.resetPendingPerforms();\r\n }\r\n\r\n resetState() {\r\n this._myCurrentStateData = null;\r\n }\r\n\r\n resetPendingPerforms() {\r\n this._myPendingPerforms = [];\r\n }\r\n\r\n getCurrentState() {\r\n return this._myCurrentStateData;\r\n }\r\n\r\n getCurrentTransitions() {\r\n return this.getTransitionsFromState(this._myCurrentStateData.myID);\r\n }\r\n\r\n getCurrentTransitionsToState(stateID) {\r\n return this.getTransitionsFromStateToState(this._myCurrentStateData.myID, stateID);\r\n }\r\n\r\n getState(stateID) {\r\n return this._myStates.get(stateID);\r\n }\r\n\r\n getStates() {\r\n return this._myStates.values();\r\n }\r\n\r\n getTransitions() {\r\n let transitions = [];\r\n\r\n for (let transitionsFromState of this._myTransitions.values()) {\r\n for (let transitionData of transitionsFromState.values()) {\r\n transitions.push(transitionData);\r\n }\r\n }\r\n\r\n return transitions;\r\n }\r\n\r\n getTransitionsFromState(fromStateID) {\r\n let transitionsFromState = this._getTransitionsFromState(fromStateID);\r\n return Array.from(transitionsFromState.values());\r\n }\r\n\r\n getTransitionsFromStateToState(fromStateID, toStateID) {\r\n let transitionsFromState = this._getTransitionsFromState(fromStateID);\r\n\r\n let transitionsToState = [];\r\n for (let transitionData of transitionsFromState.values()) {\r\n if (transitionData.myToState.myID == toStateID) {\r\n transitionsToState.push(transitionData);\r\n }\r\n }\r\n\r\n return transitionsToState;\r\n }\r\n\r\n removeState(stateID) {\r\n if (this.hasState(stateID)) {\r\n this._myStates.delete(stateID);\r\n this._myTransitions.delete(stateID);\r\n\r\n for (let transitionsFromState of this._myTransitions.values()) {\r\n let toDelete = [];\r\n for (let [transitionID, transitionData] of transitionsFromState.entries()) {\r\n if (transitionData.myToState.myID == stateID) {\r\n toDelete.push(transitionID);\r\n }\r\n }\r\n\r\n for (let transitionID of toDelete) {\r\n transitionsFromState.delete(transitionID);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n removeTransitionFromState(fromStateID, transitionID) {\r\n let fromTransitions = this._getTransitionsFromState(fromStateID);\r\n if (fromTransitions) {\r\n return fromTransitions.delete(transitionID);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n hasState(stateID) {\r\n return this._myStates.has(stateID);\r\n }\r\n\r\n hasTransitionFromState(fromStateID, transitionID) {\r\n let transitions = this.getTransitionsFromState(fromStateID);\r\n\r\n let transitionIndex = transitions.findIndex(function (transition) {\r\n return transition.myID == transitionID;\r\n });\r\n\r\n return transitionIndex >= 0;\r\n }\r\n\r\n hasTransitionFromStateToState(fromStateID, toStateID, transitionID = null) {\r\n let transitions = this.getTransitionsFromStateToState(fromStateID, toStateID);\r\n\r\n let hasTransition = false;\r\n if (transitionID) {\r\n let transitionIndex = transitions.findIndex(function (transition) {\r\n return transition.myID == transitionID;\r\n });\r\n\r\n hasTransition = transitionIndex >= 0;\r\n } else {\r\n hasTransition = transitions.length > 0;\r\n }\r\n\r\n return hasTransition;\r\n }\r\n\r\n setPerformMode(performMode) {\r\n this._myPerformMode = performMode;\r\n }\r\n\r\n getPerformMode() {\r\n return this._myPerformMode;\r\n }\r\n\r\n setPerformDelayedMode(performDelayedMode) {\r\n this._myPerformDelayedMode = performDelayedMode;\r\n }\r\n\r\n getPerformDelayedMode() {\r\n return this._myPerformDelayedMode;\r\n }\r\n\r\n hasPendingPerforms() {\r\n return this._myPendingPerforms.length > 0;\r\n }\r\n\r\n getPendingPerforms() {\r\n return this._myPendingPerforms.pp_clone();\r\n }\r\n\r\n clone(deepClone = false) {\r\n if (!this.isCloneable(deepClone)) {\r\n return null;\r\n }\r\n\r\n let cloneFSM = new FSM();\r\n\r\n cloneFSM._myLogEnabled = this._myLogEnabled;\r\n cloneFSM._myLogShowDelayedInfo = this._myLogShowDelayedInfo;\r\n cloneFSM._myLogFSMName = this._myLogFSMName;\r\n\r\n cloneFSM._myPerformMode = this._myPerformMode;\r\n cloneFSM._myPerformDelayedMode = this._myPerformDelayedMode;\r\n cloneFSM._myPendingPerforms = this._myPendingPerforms.pp_clone();\r\n\r\n for (let entry of this._myStates.entries()) {\r\n let stateData = null;\r\n\r\n if (deepClone) {\r\n stateData = new StateData(entry[1].myID, entry[1].myObject.clone());\r\n } else {\r\n stateData = new StateData(entry[1].myID, entry[1].myObject);\r\n }\r\n\r\n cloneFSM._myStates.set(stateData.myID, stateData);\r\n }\r\n\r\n for (let entry of this._myTransitions.entries()) {\r\n let transitionsFromState = new Map();\r\n cloneFSM._myTransitions.set(entry[0], transitionsFromState);\r\n\r\n for (let transitonEntry of entry[1].entries()) {\r\n let transitionData = null;\r\n\r\n let fromState = cloneFSM.getState(transitonEntry[1].myFromState.myID);\r\n let toState = cloneFSM.getState(transitonEntry[1].myToState.myID);\r\n\r\n if (deepClone) {\r\n transitionData = new TransitionData(transitonEntry[1].myID, fromState, toState, transitonEntry[1].myObject.clone(), transitonEntry[1].mySkipStateFunction);\r\n } else {\r\n transitionData = new TransitionData(transitonEntry[1].myID, fromState, toState, transitonEntry[1].myObject, transitonEntry[1].mySkipStateFunction);\r\n }\r\n\r\n transitionsFromState.set(transitionData.myID, transitionData);\r\n }\r\n }\r\n\r\n if (this._myCurrentStateData) {\r\n cloneFSM._myCurrentStateData = cloneFSM.getState(this._myCurrentStateData.myID);\r\n }\r\n\r\n return cloneFSM;\r\n }\r\n\r\n isCloneable(deepClone = false) {\r\n if (!deepClone) {\r\n return true;\r\n }\r\n\r\n let deepCloneable = true;\r\n\r\n for (let entry of this._myStates.entries()) {\r\n deepCloneable = deepCloneable && entry[1].myObject.clone != null;\r\n }\r\n\r\n for (let entry of this._myTransitions.entries()) {\r\n for (let transitonEntry of entry[1].entries()) {\r\n deepCloneable = deepCloneable && transitonEntry[1].myObject.clone != null;\r\n }\r\n }\r\n\r\n return deepCloneable;\r\n }\r\n\r\n setLogEnabled(active, fsmName = null, showDelayedInfo = false) {\r\n this._myLogEnabled = active;\r\n this._myLogShowDelayedInfo = showDelayedInfo;\r\n if (fsmName) {\r\n this._myLogFSMName = \"FSM: \".concat(fsmName);\r\n }\r\n }\r\n\r\n registerInitEventListener(listenerID, listener) {\r\n this._myInitEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterInitEventListener(listenerID) {\r\n this._myInitEmitter.remove(listenerID);\r\n }\r\n\r\n registerInitIDEventListener(initStateID, listenerID, listener) {\r\n let initStateIDEmitter = this._myInitIDEmitters.get(initStateID);\r\n if (initStateIDEmitter == null) {\r\n this._myInitIDEmitters.set(initStateID, new Emitter());\r\n initStateIDEmitter = this._myInitIDEmitters.get(initStateID);\r\n }\r\n\r\n initStateIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterInitIDEventListener(initStateID, listenerID) {\r\n let initStateIDEmitter = this._myInitIDEmitters.get(initStateID);\r\n if (initStateIDEmitter != null) {\r\n initStateIDEmitter.remove(listenerID);\r\n\r\n if (initStateIDEmitter.isEmpty) {\r\n this._myInitIDEmitters.delete(initStateID);\r\n }\r\n }\r\n }\r\n\r\n registerTransitionEventListener(listenerID, listener) {\r\n this._myTransitionEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterTransitionEventListener(listenerID) {\r\n this._myTransitionEmitter.remove(listenerID);\r\n }\r\n\r\n // The fsm IDs can be null, that means that the listener is called whenever only the valid IDs match\r\n // This let you register to all the transitions with a specific ID and from of a specific state but to every state (toStateID == null)\r\n registerTransitionIDEventListener(fromStateID, toStateID, transitionID, listenerID, listener) {\r\n let internalTransitionIDEmitter = null;\r\n for (let value of this._myTransitionIDEmitters) {\r\n if (value[0] == fromStateID && value[1] == toStateID && value[2] == transitionID) {\r\n internalTransitionIDEmitter = value[3];\r\n break;\r\n }\r\n }\r\n\r\n if (internalTransitionIDEmitter == null) {\r\n let transitionIDEmitter = [];\r\n transitionIDEmitter[0] = fromStateID;\r\n transitionIDEmitter[1] = toStateID;\r\n transitionIDEmitter[2] = transitionID;\r\n transitionIDEmitter[3] = new Emitter();\r\n\r\n internalTransitionIDEmitter = transitionIDEmitter[3];\r\n\r\n this._myTransitionIDEmitters.push(transitionIDEmitter);\r\n }\r\n\r\n internalTransitionIDEmitter.add(listener, { id: listenerID });\r\n }\r\n\r\n unregisterTransitionIDEventListener(fromStateID, toStateID, transitionID, listenerID) {\r\n let internalTransitionIDEmitter = null;\r\n for (let value of this._myTransitionIDEmitters) {\r\n if (value[0] == fromStateID && value[1] == toStateID && value[2] == transitionID) {\r\n internalTransitionIDEmitter = value[3];\r\n break;\r\n }\r\n }\r\n\r\n if (internalTransitionIDEmitter != null) {\r\n internalTransitionIDEmitter.remove(listenerID);\r\n\r\n if (internalTransitionIDEmitter.isEmpty) {\r\n this._myTransitionIDEmitters.pp_remove(element => element[0] == fromStateID && element[1] == toStateID && element[2] == transitionID);\r\n }\r\n }\r\n }\r\n\r\n _perform(transitionID, performMode, ...args) {\r\n if (this.isPerformingTransition()) {\r\n let currentlyPerformedTransition = this.getCurrentlyPerformedTransition();\r\n let consoleArguments = [this._myLogFSMName, \"- Trying to perform:\", transitionID];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n consoleArguments.push(\"- But another transition is currently being performed -\", currentlyPerformedTransition.myID);\r\n console.warn(...consoleArguments);\r\n\r\n return false;\r\n }\r\n\r\n if (this._myCurrentStateData) {\r\n if (this.canPerform(transitionID)) {\r\n let transitions = this._myTransitions.get(this._myCurrentStateData.myID);\r\n let transitionToPerform = transitions.get(transitionID);\r\n\r\n this._myCurrentlyPerformedTransition = transitionToPerform;\r\n\r\n let fromState = this._myCurrentStateData;\r\n let toState = this._myStates.get(transitionToPerform.myToState.myID);\r\n\r\n if (this._myLogEnabled) {\r\n let consoleArguments = [this._myLogFSMName, \"- From:\", fromState.myID, \"- To:\", toState.myID, \"- With:\", transitionID];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n console.log(...consoleArguments);\r\n }\r\n\r\n if (transitionToPerform.mySkipStateFunction != SkipStateFunction.END && transitionToPerform.mySkipStateFunction != SkipStateFunction.BOTH &&\r\n fromState.myObject && fromState.myObject.end) {\r\n fromState.myObject.end(this, transitionToPerform, ...args);\r\n }\r\n\r\n if (transitionToPerform.myObject && transitionToPerform.myObject.perform) {\r\n transitionToPerform.myObject.perform(this, transitionToPerform, ...args);\r\n }\r\n\r\n if (transitionToPerform.mySkipStateFunction != SkipStateFunction.START && transitionToPerform.mySkipStateFunction != SkipStateFunction.BOTH &&\r\n toState.myObject && toState.myObject.start) {\r\n toState.myObject.start(this, transitionToPerform, ...args);\r\n }\r\n\r\n this._myCurrentStateData = transitionToPerform.myToState;\r\n\r\n this._myTransitionEmitter.notify(this, fromState, toState, transitionToPerform, performMode, ...args);\r\n\r\n if (this._myTransitionIDEmitters.length > 0) {\r\n let internalTransitionIDEmitters = [];\r\n for (let value of this._myTransitionIDEmitters) {\r\n if ((value[0] == null || value[0] == fromState.myID) &&\r\n (value[1] == null || value[1] == toState.myID) &&\r\n (value[2] == null || value[2] == transitionToPerform.myID)) {\r\n internalTransitionIDEmitters.push(value[3]);\r\n }\r\n }\r\n\r\n for (let emitter of internalTransitionIDEmitters) {\r\n emitter.notify(this, fromState, toState, transitionToPerform, performMode, ...args);\r\n }\r\n }\r\n\r\n this._myCurrentlyPerformedTransition = null;\r\n\r\n return true;\r\n } else if (this._myLogEnabled) {\r\n let consoleArguments = [this._myLogFSMName, \"- No Transition:\", transitionID, \"- From:\", this._myCurrentStateData.myID];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n console.warn(...consoleArguments);\r\n }\r\n } else if (this._myLogEnabled) {\r\n let consoleArguments = [this._myLogFSMName, \"- FSM not initialized yet\"];\r\n if (this._myLogShowDelayedInfo) {\r\n consoleArguments.push(performMode == PerformMode.DELAYED ? \"- Delayed\" : \"- Immediate\");\r\n }\r\n console.warn(...consoleArguments);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _getTransitionsFromState(fromStateID) {\r\n return this._myTransitions.get(fromStateID);\r\n }\r\n}\r\n\r\nclass _PendingPerform {\r\n\r\n constructor(transitionID, ...args) {\r\n this.myID = transitionID;\r\n this.myArgs = args;\r\n }\r\n}", "/*\r\n There is no need to inherit from this state, especially since states can be only functions\r\n It's more like an example of what is needed\r\n \r\n If you don't specify some functions the fsm will just skip them\r\n Or consider them always valid\r\n\r\n The param state is of type StateData and can be used to retrieve the stateID and other data\r\n The param transition is of type TransitionData and can be used to retrieve the transitionID, the from and to states and other data\r\n*/\r\n\r\nexport class State {\r\n\r\n // Called every frame if this is the current state\r\n // You can retrieve this state data by calling fsm.getCurrentState()\r\n update(dt, fsm, ...args) {\r\n }\r\n\r\n // Called when the fsm is started with this init state if no init transition object is specified or it does not have a performInit function\r\n // Since the state is set as the current one after the init, you can't use fsm.getCurrentState() to get it, so it is forwarded as a param if needed\r\n init(fsm, state, ...args) {\r\n }\r\n\r\n // Called when entering this state if no transition object is specified or it does not have a perform function\r\n // You can get this state data by accesing to the to state data inside the transition\r\n start(fsm, transition, ...args) {\r\n }\r\n\r\n // Called when exiting this state if no transition function is specified\r\n // You can get this state data by accesing to the from state data inside the transition\r\n end(fsm, transition, ...args) {\r\n }\r\n}", "/*\r\n There is no need to inherit from this transition, especially since states can be only transitions\r\n It's more like an example of what is needed\r\n \r\n The param transition (forwarded at the end every function) is of type TransitionData and can be used to retrieve the transitionID and other data\r\n The initState param is of type StateData and can be used to retrieve the stateID and other data\r\n*/\r\n\r\nexport class Transition {\r\n\r\n // Called if this is used as an init transition for the fsm\r\n performInit(fsm, initState, ...args) {\r\n\r\n }\r\n\r\n // Called when performing a transition\r\n // You can find the from and to states inside the transition params\r\n perform(fsm, transition, ...args) {\r\n }\r\n}", "import { Timer } from \"../../cauldron/timer.js\";\r\nimport { State } from \"../state.js\";\r\n\r\nexport class TimerState extends State {\r\n\r\n constructor(duration = 0, transitionToPerformOnEnd = null, ...transitionArgs) {\r\n super();\r\n\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n\r\n this._myTimer = new Timer(duration, false);\r\n }\r\n\r\n setDuration(duration) {\r\n this._myTimer.setDuration(duration);\r\n }\r\n\r\n setTransitionToPerformOnEnd(transitionToPerformOnEnd, ...transitionArgs) {\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n }\r\n\r\n onEnd(callback, id = null) {\r\n this._myTimer.onEnd(callback, id);\r\n }\r\n\r\n unregisterOnEnd(id = null) {\r\n this._myTimer.unregisterOnEnd(id);\r\n }\r\n\r\n update(dt, fsm) {\r\n this._myTimer.update(dt);\r\n if (this._myTimer.isDone()) {\r\n if (this._myTransitionToPerformOnEnd != null) {\r\n fsm.perform(this._myTransitionToPerformOnEnd, ...this._myTransitionArgs);\r\n }\r\n }\r\n }\r\n\r\n start(fsm, transition, duration = null, transitionToPerformOnEnd = null, ...transitionArgs) {\r\n this._myTimer.start(duration);\r\n if (transitionToPerformOnEnd != null) {\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n }\r\n }\r\n\r\n init(fsm, state, duration = null, transitionToPerformOnEnd = null, ...transitionArgs) {\r\n this._myTimer.start(duration);\r\n if (transitionToPerformOnEnd != null) {\r\n this._myTransitionToPerformOnEnd = transitionToPerformOnEnd;\r\n this._myTransitionArgs = transitionArgs;\r\n }\r\n }\r\n}", "// RGB is in [0,1], alpha is not changed\r\nexport function rgbToHSV(rgb) {\r\n let hsv = rgb.pp_clone();\r\n\r\n let r = rgb[0];\r\n let g = rgb[1];\r\n let b = rgb[2];\r\n\r\n let max = Math.max(r, g, b), min = Math.min(r, g, b),\r\n d = max - min,\r\n h,\r\n s = (max == 0 ? 0 : d / max),\r\n v = max;\r\n\r\n switch (max) {\r\n case min: h = 0; break;\r\n case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;\r\n case g: h = (b - r) + d * 2; h /= 6 * d; break;\r\n case b: h = (r - g) + d * 4; h /= 6 * d; break;\r\n }\r\n\r\n hsv[0] = h;\r\n hsv[1] = s;\r\n hsv[2] = v;\r\n\r\n return hsv;\r\n}\r\n\r\n// Alpha is not changed\r\nexport function hsvToRGB(hsv) {\r\n let rgb = hsv.pp_clone();\r\n\r\n let h = hsv[0];\r\n let s = hsv[1];\r\n let v = hsv[2];\r\n\r\n let r, g, b, i, f, p, q, t;\r\n i = Math.floor(h * 6);\r\n f = h * 6 - i;\r\n p = v * (1 - s);\r\n q = v * (1 - f * s);\r\n t = v * (1 - (1 - f) * s);\r\n\r\n switch (i % 6) {\r\n case 0: r = v, g = t, b = p; break;\r\n case 1: r = q, g = v, b = p; break;\r\n case 2: r = p, g = v, b = t; break;\r\n case 3: r = p, g = q, b = v; break;\r\n case 4: r = t, g = p, b = v; break;\r\n case 5: r = v, g = p, b = q; break;\r\n }\r\n\r\n rgb[0] = r;\r\n rgb[1] = g;\r\n rgb[2] = b;\r\n\r\n return rgb;\r\n}\r\n\r\nexport function rgbCodeToHuman(rgb) {\r\n return ColorUtils.color1To255(rgb);\r\n}\r\n\r\nexport function rgbHumanToCode(rgb) {\r\n return ColorUtils.color255To1(rgb);\r\n}\r\n\r\nexport function hsvCodeToHuman(hsv) {\r\n return ColorUtils.color1To255(hsv);\r\n}\r\n\r\nexport function hsvHumanToCode(hsv) {\r\n return ColorUtils.color255To1(hsv);\r\n}\r\n\r\nexport function color255To1(color) {\r\n let result = color.pp_clone();\r\n\r\n for (let i = 0; i < result.length; i++) {\r\n result[i] /= 255;\r\n result[i] = Math.pp_clamp(result[i], 0, 1);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function color1To255(color) {\r\n let result = color.pp_clone();\r\n\r\n for (let i = 0; i < result.length; i++) {\r\n result[i] = Math.round(result[i] * 255);\r\n result[i] = Math.pp_clamp(result[i], 0, 255);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport let ColorUtils = {\r\n rgbToHSV,\r\n hsvToRGB,\r\n rgbCodeToHuman,\r\n rgbHumanToCode,\r\n hsvCodeToHuman,\r\n hsvHumanToCode,\r\n color255To1,\r\n color1To255\r\n};", "let _myAnalyticsEnabled = false;\r\n\r\nlet _mySendDataCallback = null;\r\n\r\nlet _myEventsSentOnce = [];\r\n\r\nlet _myDataLogEnabled = false;\r\nlet _myEventsLogEnabled = false;\r\n\r\nlet _myErrorsLogEnabled = false;\r\n\r\nexport function setAnalyticsEnabled(enabled) {\r\n _myAnalyticsEnabled = enabled;\r\n}\r\n\r\nexport function isAnalyticsEnabled() {\r\n return _myAnalyticsEnabled;\r\n}\r\n\r\nexport function setSendDataCallback(callback) {\r\n _mySendDataCallback = callback;\r\n}\r\n\r\nexport function sendData(...args) {\r\n try {\r\n if (_myAnalyticsEnabled) {\r\n if (_myDataLogEnabled) {\r\n console.log(\"Analytics Data: \" + args);\r\n }\r\n\r\n if (_mySendDataCallback != null) {\r\n _mySendDataCallback(...args);\r\n } else if (_myErrorsLogEnabled) {\r\n console.error(\"You need to set the send data callback\");\r\n }\r\n }\r\n } catch (error) {\r\n if (_myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n\r\nexport function sendEvent(eventName, value = null, sendOnce = false) {\r\n try {\r\n if (_myAnalyticsEnabled) {\r\n let sendEventAllowed = true;\r\n\r\n if (sendOnce) {\r\n sendEventAllowed = !AnalyticsUtils.hasEventAlreadyBeenSent(eventName);\r\n }\r\n\r\n if (sendEventAllowed) {\r\n if (_myEventsLogEnabled) {\r\n if (value != null) {\r\n console.log(\"Analytics Event: \" + eventName + \" - Value: \" + value);\r\n } else {\r\n console.log(\"Analytics Event: \" + eventName);\r\n }\r\n }\r\n\r\n if (_mySendDataCallback != null) {\r\n if (value != null) {\r\n _mySendDataCallback(\"event\", eventName, { \"value\": value });\r\n } else {\r\n _mySendDataCallback(\"event\", eventName);\r\n }\r\n\r\n if (sendOnce) {\r\n _myEventsSentOnce.pp_pushUnique(eventName);\r\n }\r\n } else if (_myErrorsLogEnabled) {\r\n console.error(\"You need to set the send data callback\");\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n if (_myErrorsLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n\r\nexport function sendEventOnce(eventName, value = null) {\r\n AnalyticsUtils.sendEvent(eventName, value, true);\r\n}\r\n\r\nexport function clearEventSentOnceState(eventName) {\r\n _myEventsSentOnce.pp_removeEqual(eventName);\r\n}\r\n\r\nexport function clearAllEventsSentOnceState() {\r\n _myEventsSentOnce.pp_clear();\r\n}\r\n\r\nexport function hasEventAlreadyBeenSent(eventName) {\r\n return _myEventsSentOnce.pp_hasEqual(eventName);\r\n}\r\n\r\nexport function getEventsAlreadyBeenSent() {\r\n return _myEventsSentOnce;\r\n}\r\n\r\nexport function setDataLogEnabled(enabled) {\r\n _myDataLogEnabled = enabled;\r\n}\r\n\r\nexport function isDataLogEnabled() {\r\n return _myDataLogEnabled;\r\n}\r\n\r\nexport function setEventsLogEnabled(enabled) {\r\n _myEventsLogEnabled = enabled;\r\n}\r\n\r\nexport function isEventsLogEnabled() {\r\n return _myEventsLogEnabled;\r\n}\r\n\r\nexport function setErrorsLogEnabled(enabled) {\r\n _myErrorsLogEnabled = enabled;\r\n}\r\n\r\nexport function isErrorsLogEnabled() {\r\n return _myErrorsLogEnabled;\r\n}\r\n\r\nexport let AnalyticsUtils = {\r\n setAnalyticsEnabled,\r\n isAnalyticsEnabled,\r\n setSendDataCallback,\r\n sendData,\r\n sendEvent,\r\n sendEventOnce,\r\n clearEventSentOnceState,\r\n clearAllEventsSentOnceState,\r\n hasEventAlreadyBeenSent,\r\n getEventsAlreadyBeenSent,\r\n setDataLogEnabled,\r\n isDataLogEnabled,\r\n setEventsLogEnabled,\r\n isEventsLogEnabled,\r\n setErrorsLogEnabled,\r\n isErrorsLogEnabled\r\n};", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport let setAlpha = function () {\r\n let color = vec4_create();\r\n return function setAlpha(material, alpha) {\r\n if (material.color != null) {\r\n color.vec4_copy(material.color);\r\n color[3] = alpha;\r\n material.color = color;\r\n }\r\n\r\n if (material.diffuseColor != null) {\r\n color.vec4_copy(material.diffuseColor);\r\n color[3] = alpha;\r\n material.diffuseColor = color;\r\n }\r\n\r\n if (material.ambientColor != null) {\r\n color.vec4_copy(material.ambientColor);\r\n color[3] = alpha;\r\n material.ambientColor = color;\r\n }\r\n };\r\n}();\r\n\r\nexport function setObjectAlpha(object, alpha) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material != null) {\r\n MaterialUtils.setAlpha(meshComponent.material, alpha);\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectMaterial(object, material, cloneMaterial = false) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (cloneMaterial) {\r\n meshComponent.material = material.clone();\r\n } else {\r\n meshComponent.material = material;\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectClonedMaterials(object) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material != null) {\r\n meshComponent.material = meshComponent.material.clone();\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectSpecularColor(object, color) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material.specularColor != null) {\r\n meshComponent.material.specularColor = color;\r\n }\r\n }\r\n}\r\n\r\nexport function setObjectFogColor(object, color) {\r\n let meshComponents = object.pp_getComponents(MeshComponent);\r\n\r\n for (let meshComponent of meshComponents) {\r\n if (meshComponent.material.fogColor != null) {\r\n meshComponent.material.fogColor = color;\r\n }\r\n }\r\n}\r\n\r\nexport let MaterialUtils = {\r\n setAlpha,\r\n setObjectAlpha,\r\n setObjectMaterial,\r\n setObjectClonedMaterials,\r\n setObjectSpecularColor,\r\n setObjectFogColor\r\n};", "import { TextComponent } from \"@wonderlandengine/api\";\r\n\r\nexport function setClonedMaterials(object) {\r\n let textComponents = object.pp_getComponents(TextComponent);\r\n\r\n for (let textComponent of textComponents) {\r\n if (textComponent.material != null) {\r\n textComponent.material = textComponent.material.clone();\r\n }\r\n }\r\n}\r\n\r\nexport let TextUtils = {\r\n setClonedMaterials\r\n};", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { VisualTransform, VisualTransformParams } from \"../../cauldron/visual/elements/visual_transform.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class DebugTransformComponent extends Component {\r\n static TypeName = \"pp-debug-transform\";\r\n static Properties = {\r\n _myLength: Property.float(0.1),\r\n _myThickness: Property.float(0.005)\r\n };\r\n\r\n start() {\r\n this._myStarted = false;\r\n\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n this._myDebugVisualTransform = null;\r\n\r\n this._myDebugTransformParams = new VisualTransformParams(this.engine);\r\n this._myDebugTransformParams.myLength = this._myLength;\r\n this._myDebugTransformParams.myThickness = this._myThickness;\r\n\r\n this._myDebugVisualTransform = new VisualTransform(this._myDebugTransformParams);\r\n this._myDebugVisualTransform.setVisible(Globals.isDebugEnabled(this.engine));\r\n\r\n this._myStarted = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n this.object.pp_getTransform(this._myDebugTransformParams.myTransform);\r\n this._myDebugVisualTransform.paramsUpdated();\r\n this._myDebugVisualTransform.setVisible(true);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myStarted) {\r\n this._myDebugVisualTransform.destroy();\r\n }\r\n }\r\n}", "// #TODO Add getter/setter accessors overwrite\r\n// #TODO If both a class and the parent class are in the list, they should be overwritten in parent first order\r\n// #TODO How to overwrite class and objects from modules?\r\n// #TODO Some functions, like glMatrix.vec3.copy, are defined as getter, how to overwrite them?\r\n\r\nimport { JSUtils } from \"../../cauldron/utils/js_utils.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class DebugFunctionsOverwriterParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myObjectsByReference = []; // You can specify to count the call on a specific object instance\r\n this.myObjectsByPath = []; // If you want you can specify the instance by path, but it means it must be reachable from window\r\n\r\n this.myClassesByReference = []; // By Reference means by using a reference to the class, like doing Timer, but also let ref = Timer and use ref\r\n this.myClassesByPath = []; // By Path means by using the full class path, like \"Timer\", this is requiredneeded if u want to count the constructor\r\n\r\n // You can also count the call to a specific function, but it must be reachable from window, no reference way\r\n // It's mostly for global functions, which could be tracked anyway using window as object reference\r\n this.myFunctionsByPath = [];\r\n\r\n this.myExcludeConstructors = false; // Constructor calls count can be a problem for some classes (like Array)\r\n this.myExcludeJSObjectFunctions = false;\r\n\r\n this.myFunctionNamesToInclude = []; // Empty means every function is included, can be a regex (. must be escaped with \\\\.)\r\n this.myFunctionNamesToExclude = []; // Empty means no function is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n // These can be used if u want to have a bit more control on function name filtering\r\n this.myFunctionPathsToInclude = []; // Empty means every function is included, can be a regex (. must be escaped with \\\\.)\r\n this.myFunctionPathsToExclude = []; // Empty means no function is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myObjectAddObjectDescendantsDepthLevel = 0; // You can specify if you want to also count the OBJECT descendants of the objects you have specified\r\n this.myObjectAddClassDescendantsDepthLevel = 0; // You can specify if you want to also count the CLASS descendants of the objects you have specified\r\n // The depth level specify how deep in the hierarchy, level 0 means no recursion, 1 only children, 2 also grand children, and so on\r\n // -1 to select all the hierarchy\r\n\r\n // These filters are only useful if u are doing recursion\r\n this.myObjectNamesToInclude = []; // Empty means every object is included, can be a regex (. must be escaped with \\\\.)\r\n this.myObjectNamesToExclude = []; // Empty means no object is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myClassNamesToInclude = []; // Empty means every class is included, can be a regex (. must be escaped with \\\\.)\r\n this.myClassNamesToExclude = []; // Empty means no class is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myObjectPathsToInclude = []; // Empty means every object is included, can be a regex (. must be escaped with \\\\.)\r\n this.myObjectPathsToExclude = []; // Empty means no object is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n this.myClassPathsToInclude = []; // Empty means every class is included, can be a regex (. must be escaped with \\\\.)\r\n this.myClassPathsToExclude = []; // Empty means no class is excluded, can be a regex (. must be escaped with \\\\.)\r\n\r\n // Tricks\r\n // - you can specify an object/class/function as a pair [object, \"name\"] instead of just object\r\n // and the name, if not null, will be used as path instead of the default one\r\n // WARNING: this means that there is a specific case, an array of 2 elements with a string, which can't be tracked if you don't put it inside an array like above\r\n\r\n this.myLogEnabled = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class DebugFunctionsOverwriter {\r\n\r\n constructor(params = new DebugFunctionsOverwriterParams()) {\r\n this._myParams = params;\r\n\r\n this._myPropertiesAlreadyOverwritten = new Map();\r\n }\r\n\r\n overwriteFunctions() {\r\n let classesAndParents = this._getReferencesAndParents(this._myParams.myClassesByReference, this._myParams.myClassesByPath, true);\r\n let objectsAndParents = this._getReferencesAndParents(this._myParams.myObjectsByReference, this._myParams.myObjectsByPath, false);\r\n let functionsAndParents = this._getReferencesAndParents([], this._myParams.myFunctionsByPath, false);\r\n\r\n this._objectAddDescendants(objectsAndParents, classesAndParents);\r\n\r\n for (let referenceAndParent of classesAndParents) {\r\n let reference = referenceAndParent[0];\r\n let referenceParent = referenceAndParent[1];\r\n let referenceName = referenceAndParent[2];\r\n let referencePath = referenceAndParent[3];\r\n let referenceNameForFilter = referenceAndParent[4];\r\n\r\n this._overwriteReferenceFunctions(reference, referenceParent, referenceName, referencePath, referenceNameForFilter, true);\r\n }\r\n\r\n for (let referenceAndParent of objectsAndParents) {\r\n let reference = referenceAndParent[0];\r\n let referenceParent = referenceAndParent[1];\r\n let referenceName = referenceAndParent[2];\r\n let referencePath = referenceAndParent[3];\r\n let referenceNameForFilter = referenceAndParent[4];\r\n\r\n this._overwriteReferenceFunctions(reference, referenceParent, referenceName, referencePath, referenceNameForFilter, false);\r\n }\r\n\r\n for (let referenceAndParent of functionsAndParents) {\r\n let referenceParent = referenceAndParent[1];\r\n let referenceName = referenceAndParent[2];\r\n let referencePath = referenceAndParent[3];\r\n\r\n this._overwriteFunction(referenceParent, referenceName, null, null, referencePath, false, true);\r\n }\r\n }\r\n\r\n // Hooks\r\n\r\n _getOverwrittenFunction(reference, propertyName, referencePath, isClass, isFunction) {\r\n return JSUtils.getObjectProperty(reference, propertyName);\r\n }\r\n\r\n _getOverwrittenConstructor(reference, propertyName, referencePath, isClass, isFunction) {\r\n return JSUtils.getObjectProperty(reference, propertyName);\r\n }\r\n\r\n _onOverwriteSuccess(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n\r\n }\r\n\r\n _onOverwriteFailure(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n\r\n }\r\n\r\n // Hooks end\r\n\r\n _overwriteReferenceFunctions(reference, referenceParent, referenceName, referencePath, referenceNameForFilter, isClass) {\r\n let includePathList = this._myParams.myObjectPathsToInclude;\r\n let excludePathList = this._myParams.myObjectPathsToExclude;\r\n let includeNameList = this._myParams.myObjectNamesToInclude;\r\n let excludeNameList = this._myParams.myObjectNamesToExclude;\r\n if (isClass) {\r\n includePathList = this._myParams.myClassPathsToInclude;\r\n excludePathList = this._myParams.myClassPathsToExclude;\r\n includeNameList = this._myParams.myClassNamesToInclude;\r\n excludeNameList = this._myParams.myClassNamesToExclude;\r\n }\r\n\r\n let validReferencePath = this._filterName(referencePath, includePathList, excludePathList);\r\n let validReferenceName = this._filterName(referenceNameForFilter, includeNameList, excludeNameList);\r\n if (validReferencePath && validReferenceName) {\r\n let propertyNames = JSUtils.getObjectPropertyNames(reference);\r\n if (propertyNames.pp_hasEqual(\"constructor\")) {\r\n propertyNames.unshift(\"constructor\"); // Be sure it's added first to spot bugs, not important that it appears twice in the list\r\n }\r\n\r\n for (let propertyName of propertyNames) {\r\n let overwriteTargetReference = null;\r\n\r\n let referenceParentForConstructor = null;\r\n let referenceNameForConstructor = null;\r\n\r\n if (isClass) {\r\n let fixedReference = reference;\r\n\r\n if (referenceParent != null) {\r\n let ownReferenceDescriptor = Object.getOwnPropertyDescriptor(referenceParent, referenceName);\r\n if (ownReferenceDescriptor != null && ownReferenceDescriptor.value != null) {\r\n fixedReference = ownReferenceDescriptor.value;\r\n }\r\n }\r\n\r\n overwriteTargetReference = fixedReference.prototype;\r\n if (overwriteTargetReference == null) {\r\n overwriteTargetReference = fixedReference;\r\n } else {\r\n try {\r\n let referenceProperty = JSUtils.getObjectProperty(overwriteTargetReference, propertyName);\r\n if (referenceProperty == null) {\r\n overwriteTargetReference = fixedReference;\r\n }\r\n } catch (error) {\r\n overwriteTargetReference = fixedReference;\r\n }\r\n }\r\n\r\n referenceParentForConstructor = referenceParent;\r\n referenceNameForConstructor = referenceName;\r\n } else {\r\n overwriteTargetReference = reference;\r\n }\r\n\r\n this._overwriteFunction(overwriteTargetReference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, false);\r\n\r\n }\r\n }\r\n }\r\n\r\n _overwriteFunction(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction) {\r\n try {\r\n let propertyCountedAlready = this._myPropertiesAlreadyOverwritten.get(propertyName) != null && this._myPropertiesAlreadyOverwritten.get(propertyName).pp_hasEqual(reference);\r\n if (!propertyCountedAlready) {\r\n if (JSUtils.isFunctionByName(reference, propertyName) || (propertyName == \"constructor\" && JSUtils.isClassByName(reference, propertyName))) {\r\n if (!this._myParams.myExcludeJSObjectFunctions || !this._isJSObjectFunction(propertyName)) {\r\n let validFunctionName = this._filterName(propertyName, this._myParams.myFunctionNamesToInclude, this._myParams.myFunctionNamesToExclude);\r\n let validFunctionPath = this._filterName((referencePath != null ? referencePath + \".\" : \"\") + propertyName, this._myParams.myFunctionPathsToInclude, this._myParams.myFunctionPathsToExclude);\r\n if (validFunctionName && validFunctionPath) {\r\n if (!this._myPropertiesAlreadyOverwritten.has(propertyName)) {\r\n this._myPropertiesAlreadyOverwritten.set(propertyName, []);\r\n }\r\n\r\n let overwriteSuccess = false;\r\n let isConstructor = false;\r\n if (propertyName != \"constructor\") {\r\n try {\r\n let newFunction = this._getOverwrittenFunction(reference, propertyName, referencePath, isClass, isFunction);\r\n if (newFunction != JSUtils.getObjectProperty(reference, propertyName)) {\r\n overwriteSuccess = JSUtils.overwriteObjectProperty(newFunction, reference, propertyName, false, true, this._myParams.myLogEnabled);\r\n } else {\r\n overwriteSuccess = true;\r\n }\r\n } catch (error) {\r\n overwriteSuccess = false;\r\n\r\n if (this._myParams.myLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n } else if (!this._myParams.myExcludeConstructors && isClass && referenceParentForConstructor != null) {\r\n let referenceForConstructor = JSUtils.getObjectProperty(referenceParentForConstructor, referenceNameForConstructor);\r\n if (referenceForConstructor != null && referenceForConstructor.prototype != null) {\r\n isConstructor = true;\r\n\r\n try {\r\n let newConstructor = this._getOverwrittenConstructor(referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction);\r\n if (newConstructor != referenceForConstructor) {\r\n overwriteSuccess = JSUtils.overwriteObjectProperty(newConstructor, referenceParentForConstructor, referenceNameForConstructor, false, true, this._myParams.myLogEnabled);\r\n if (overwriteSuccess) {\r\n overwriteSuccess = JSUtils.overwriteObjectProperty(newConstructor, referenceForConstructor.prototype, propertyName, false, true, this._myParams.myLogEnabled);\r\n }\r\n } else {\r\n overwriteSuccess = true;\r\n }\r\n } catch (error) {\r\n overwriteSuccess = false;\r\n\r\n if (this._myParams.myLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (overwriteSuccess) {\r\n this._myPropertiesAlreadyOverwritten.get(propertyName).push(reference);\r\n this._onOverwriteSuccess(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor);\r\n } else {\r\n this._onOverwriteFailure(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n if (this._myParams.myLogEnabled) {\r\n console.error(error);\r\n }\r\n }\r\n }\r\n\r\n _getReferencesAndParents(byReferenceList, byPathList, isClass) {\r\n let referenceAndParents = [];\r\n\r\n let equalCallback = (first, second) => first[0] == second[0];\r\n\r\n for (let pathPair of byPathList) {\r\n let path = pathPair;\r\n let referenceName = \"\";\r\n let referencePath = pathPair;\r\n let referenceNameForFilter = \"\";\r\n\r\n if (pathPair != null && Array.isArray(pathPair) && pathPair.length != null && pathPair.length == 2 && typeof pathPair[1] == \"string\") {\r\n path = pathPair[0];\r\n referencePath = pathPair[1];\r\n }\r\n\r\n referenceName = JSUtils.getObjectNameFromPath(path);\r\n referenceNameForFilter = JSUtils.getObjectNameFromPath(referencePath);\r\n\r\n let reference = JSUtils.getObjectFromPath(path, window);\r\n let referenceParent = JSUtils.getObjectParentFromPath(path, window);\r\n\r\n if (reference != null) {\r\n referenceAndParents.pp_pushUnique([reference, referenceParent, referenceName, referencePath, referenceNameForFilter], equalCallback);\r\n }\r\n }\r\n\r\n for (let referencePair of byReferenceList) {\r\n let reference = referencePair;\r\n let referenceName = \"\";\r\n let referencePath = \"\";\r\n let referenceNameForFilter = \"\";\r\n\r\n if (referencePair != null && referencePair.length != null && referencePair.length == 2 && typeof referencePair[1] == \"string\") {\r\n reference = referencePair[0];\r\n referencePath = referencePair[1];\r\n referenceNameForFilter = JSUtils.getObjectNameFromPath(referencePath);\r\n } else {\r\n referencePath = isClass ? reference.name : null;\r\n referenceNameForFilter = isClass ? reference.name : null;\r\n }\r\n\r\n if (isClass) {\r\n referenceName = reference.name;\r\n } else {\r\n referenceName = JSUtils.getObjectNameFromPath(referencePath);\r\n }\r\n\r\n if (reference != null) {\r\n referenceAndParents.pp_pushUnique([reference, null, referenceName, referencePath, referenceNameForFilter], equalCallback);\r\n }\r\n }\r\n\r\n return referenceAndParents;\r\n }\r\n\r\n _objectAddDescendants(objectsAndParents, classesAndParents) {\r\n let equalCallback = (first, second) => first[0] == second[0];\r\n\r\n let objectsToVisit = [];\r\n for (let objectAndParent of objectsAndParents) {\r\n objectsToVisit.pp_pushUnique([objectAndParent[0], 0, objectAndParent[3]], equalCallback);\r\n }\r\n\r\n while (objectsToVisit.length > 0) {\r\n let objectToVisit = objectsToVisit.shift();\r\n\r\n let object = objectToVisit[0];\r\n let objectLevel = objectToVisit[1];\r\n let objectPath = objectToVisit[2];\r\n\r\n if ((\r\n objectLevel + 1 <= this._myParams.myObjectAddObjectDescendantsDepthLevel || this._myParams.myObjectAddObjectDescendantsDepthLevel == -1) ||\r\n objectLevel + 1 <= this._myParams.myObjectAddClassDescendantsDepthLevel || this._myParams.myObjectAddClassDescendantsDepthLevel == -1) {\r\n\r\n let propertyNames = null;\r\n try {\r\n propertyNames = JSUtils.getObjectPropertyNames(object);\r\n } catch (error) {\r\n continue;\r\n }\r\n\r\n for (let propertyName of propertyNames) {\r\n let objectProperty = null;\r\n\r\n try {\r\n objectProperty = JSUtils.getObjectProperty(object, propertyName);\r\n if (objectProperty == null) {\r\n continue;\r\n }\r\n } catch (error) {\r\n continue;\r\n }\r\n\r\n let currentPath = \"\";\r\n let currentName = \"\";\r\n if (objectPath != null) {\r\n currentName = propertyName;\r\n currentPath = objectPath + \".\" + currentName;\r\n } else {\r\n currentName = propertyName;\r\n currentPath = currentName;\r\n }\r\n\r\n let isClass = JSUtils.isClassByName(object, propertyName);\r\n let isObject = JSUtils.isObjectByName(object, propertyName);\r\n\r\n let includePathList = this._myParams.myObjectPathsToInclude;\r\n let excludePathList = this._myParams.myObjectPathsToExclude;\r\n let includeNameList = this._myParams.myObjectNamesToInclude;\r\n let excludeNameList = this._myParams.myObjectNamesToExclude;\r\n if (isClass) {\r\n includePathList = this._myParams.myClassPathsToInclude;\r\n excludePathList = this._myParams.myClassPathsToExclude;\r\n includeNameList = this._myParams.myClassNamesToInclude;\r\n excludeNameList = this._myParams.myClassNamesToExclude;\r\n }\r\n\r\n let validReferencePath = this._filterName(currentPath, includePathList, excludePathList);\r\n let validReferenceName = this._filterName(propertyName, includeNameList, excludeNameList);\r\n if (validReferencePath && validReferenceName) {\r\n if (isObject && (objectLevel + 1 <= this._myParams.myObjectAddObjectDescendantsDepthLevel || this._myParams.myObjectAddObjectDescendantsDepthLevel == -1)) {\r\n objectsAndParents.pp_pushUnique([objectProperty, object, propertyName, currentPath, currentName], equalCallback);\r\n }\r\n\r\n if (isClass && propertyName != \"constructor\" && (objectLevel + 1 <= this._myParams.myObjectAddClassDescendantsDepthLevel || this._myParams.myObjectAddClassDescendantsDepthLevel == -1)) {\r\n classesAndParents.pp_pushUnique([objectProperty, object, propertyName, currentPath, currentName], equalCallback);\r\n }\r\n\r\n if (isObject) {\r\n objectsToVisit.pp_pushUnique([objectProperty, objectLevel + 1, currentPath], equalCallback);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _filterName(name, includeList, excludeList) {\r\n let validName = includeList.length == 0;\r\n for (let includeName of includeList) {\r\n if (name.match(includeName) != null) {\r\n validName = true;\r\n break;\r\n }\r\n }\r\n\r\n if (validName) {\r\n for (let excludeName of excludeList) {\r\n if (name.match(excludeName) != null) {\r\n validName = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return validName;\r\n }\r\n\r\n _isJSObjectFunction(propertyName) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nDebugFunctionsOverwriter.prototype._isJSObjectFunction = function () {\r\n let jsObjectFunctions = [\r\n \"__defineGetter__\", \"__defineSetter__\", \"hasOwnProperty\", \"__lookupGetter__\", \"__lookupSetter__\", \"isPrototypeOf\",\r\n \"propertyIsEnumerable\", \"toString\", \"valueOf\", \"__proto__\", \"toLocaleString\", \"arguments\", \"caller\", \"apply\", \"bind\", \"call\", \"callee\"];\r\n return function _isJSObjectFunction(propertyName) {\r\n return jsObjectFunctions.pp_hasEqual(propertyName);\r\n };\r\n}();", "import { JSUtils } from \"../../../cauldron/utils/js_utils.js\";\r\nimport { DebugFunctionsOverwriter, DebugFunctionsOverwriterParams } from \"../debug_functions_overwriter.js\";\r\n\r\nexport class DebugFunctionsPerformanceAnalyzerParams extends DebugFunctionsOverwriterParams {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.myExecutionTimeAnalysisEnabled = true;\r\n\r\n this.myAddPathPrefixToFunctionID = true;\r\n // This works at best when the object/class is specified as path\r\n // since with reference it's not possible to get the full path or get the variable name of the reference\r\n\r\n this.myFilterDebugFunctionsPerformanceAnalyzerClasses = true;\r\n }\r\n}\r\n\r\nexport class DebugFunctionPerformanceAnalysisResults {\r\n\r\n constructor() {\r\n this.myReference = null;\r\n this.myName = \"\";\r\n this.myPath = \"\";\r\n this.myID = \"\";\r\n\r\n this.myCallsCount = 0;\r\n this.myTotalExecutionTime = 0;\r\n this.myTotalExecutionTimePercentage = 0;\r\n this.myAverageExecutionTime = 0;\r\n this.myTimeElapsedSinceLastReset = 0;\r\n\r\n this._myTotalExecutionTimeInternal = 0;\r\n }\r\n\r\n reset() {\r\n this.myCallsCount = 0;\r\n this.myTotalExecutionTime = 0;\r\n this.myTotalExecutionTimePercentage = 0;\r\n this.myAverageExecutionTime = 0;\r\n this.myTimeElapsedSinceLastReset = 0;\r\n\r\n this._myTotalExecutionTimeInternal = 0;\r\n }\r\n\r\n max(other) {\r\n this.myCallsCount = Math.max(this.myCallsCount, other.myCallsCount);\r\n this.myTotalExecutionTime = Math.max(this.myTotalExecutionTime, other.myTotalExecutionTime);\r\n this.myTotalExecutionTimePercentage = Math.max(this.myTotalExecutionTimePercentage, other.myTotalExecutionTimePercentage);\r\n this.myAverageExecutionTime = Math.max(this.myAverageExecutionTime, other.myAverageExecutionTime);\r\n }\r\n\r\n copy(other) {\r\n this.myReference = other.myReference;\r\n this.myName = other.myName;\r\n this.myPath = other.myPath;\r\n this.myID = other.myID;\r\n\r\n this.myCallsCount = other.myCallsCount;\r\n this.myTotalExecutionTime = other.myTotalExecutionTime;\r\n this.myTotalExecutionTimePercentage = other.myTotalExecutionTimePercentage;\r\n this.myAverageExecutionTime = other.myAverageExecutionTime;\r\n this.myTimeElapsedSinceLastReset = other.myTimeElapsedSinceLastReset;\r\n\r\n this._myTotalExecutionTimeInternal = other._myTotalExecutionTimeInternal;\r\n }\r\n}\r\n\r\nexport let DebugFunctionsPerformanceAnalyzerSortOrder = {\r\n NONE: 0,\r\n CALLS_COUNT: 1,\r\n TOTAL_EXECUTION_TIME: 2,\r\n AVERAGE_EXECUTION_TIME: 3\r\n};\r\n\r\nexport class DebugFunctionsPerformanceAnalyzer extends DebugFunctionsOverwriter {\r\n\r\n constructor(params = new DebugFunctionsPerformanceAnalyzerParams()) {\r\n super(params);\r\n\r\n this._myFunctionPerformanceAnalysisResults = new Map();\r\n this._myFunctionPerformanceAnalysisMaxResults = new Map();\r\n\r\n this._myResultsAlreadyAdded = false;\r\n\r\n this._myExecutionTimes = {\r\n myOverheadExecutionTimeSinceLastReset: 0,\r\n myLastFunctionExecutionTime: 0,\r\n myOriginalFunctionOverheadExecutionTimes: []\r\n };\r\n this._myTimeOfLastReset = window.performance.now();\r\n this._myMaxTimeElapsedSinceLastReset = 0;\r\n\r\n let originalPush = Array.prototype[\"push\"];\r\n let originalPop = Array.prototype[\"pop\"];\r\n this._myExecutionTimes.myOriginalFunctionOverheadExecutionTimes.push = function () { return originalPush.bind(this)(...arguments); };\r\n this._myExecutionTimes.myOriginalFunctionOverheadExecutionTimes.pop = function () { return originalPop.bind(this)(...arguments); };\r\n }\r\n\r\n overwriteFunctions() {\r\n super.overwriteFunctions();\r\n\r\n this.resetResults();\r\n this.resetMaxResults();\r\n }\r\n\r\n getTimeElapsedSinceLastReset() {\r\n return window.performance.now() - this._myTimeOfLastReset - this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset;\r\n }\r\n\r\n getMaxTimeElapsedSinceLastReset() {\r\n this._myMaxTimeElapsedSinceLastReset = Math.max(this._myMaxTimeElapsedSinceLastReset, this.getTimeElapsedSinceLastReset());\r\n return this._myMaxTimeElapsedSinceLastReset;\r\n }\r\n\r\n resetResults() {\r\n this._updateDerivatesResults();\r\n this._updateMaxResults();\r\n\r\n for (let property of this._myFunctionPerformanceAnalysisResults.keys()) {\r\n this._myFunctionPerformanceAnalysisResults.get(property).reset();\r\n }\r\n\r\n this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset = 0;\r\n\r\n this._myTimeOfLastReset = window.performance.now();\r\n }\r\n\r\n resetMaxResults() {\r\n this._myMaxTimeElapsedSinceLastReset = 0;\r\n for (let property of this._myFunctionPerformanceAnalysisMaxResults.keys()) {\r\n this._myFunctionPerformanceAnalysisMaxResults.get(property).reset();\r\n }\r\n }\r\n\r\n getResults(sortOrder = DebugFunctionsPerformanceAnalyzerSortOrder.NONE) {\r\n this._updateDerivatesResults();\r\n this._updateMaxResults();\r\n\r\n let results = this._myFunctionPerformanceAnalysisResults;\r\n results = this._sortResults(results, sortOrder);\r\n return results;\r\n }\r\n\r\n getMaxResults(sortOrder = DebugFunctionsPerformanceAnalyzerSortOrder.NONE) {\r\n this._updateDerivatesResults();\r\n this._updateMaxResults();\r\n\r\n let results = this._myFunctionPerformanceAnalysisMaxResults;\r\n results = this._sortResults(results, sortOrder);\r\n return results;\r\n }\r\n\r\n _getOverwrittenFunction(reference, propertyName, referencePath, isClass, isFunction) {\r\n return this._getOverwrittenFunctionInternal(reference, propertyName, referencePath, isClass, isFunction, false);\r\n }\r\n\r\n _getOverwrittenConstructor(reference, propertyName, referencePath, isClass, isFunction) {\r\n return this._getOverwrittenFunctionInternal(reference, propertyName, referencePath, isClass, isFunction, true);\r\n }\r\n\r\n _onOverwriteSuccess(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n this._myResultsAlreadyAdded = false;\r\n }\r\n\r\n _onOverwriteFailure(reference, propertyName, referenceParentForConstructor, referenceNameForConstructor, referencePath, isClass, isFunction, isConstructor) {\r\n if (this._myResultsAlreadyAdded) {\r\n let propertyID = this._getPropertyID(propertyName, referencePath, isFunction, isConstructor);\r\n this._myFunctionPerformanceAnalysisResults.delete(propertyID);\r\n }\r\n }\r\n\r\n _sortResults(results, sortOrder) {\r\n let sortedResults = results;\r\n\r\n if (sortOrder != DebugFunctionsPerformanceAnalyzerSortOrder.NONE) {\r\n sortedResults = new Map([...results.entries()].sort(function (first, second) {\r\n let sortResult = 0;\r\n\r\n if (sortOrder == DebugFunctionsPerformanceAnalyzerSortOrder.CALLS_COUNT) {\r\n sortResult = -(first[1].myCallsCount - second[1].myCallsCount);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myTotalExecutionTime - second[1].myTotalExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myAverageExecutionTime - second[1].myAverageExecutionTime);\r\n }\r\n }\r\n } else if (sortOrder == DebugFunctionsPerformanceAnalyzerSortOrder.TOTAL_EXECUTION_TIME) {\r\n sortResult = -(first[1].myTotalExecutionTime - second[1].myTotalExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myAverageExecutionTime - second[1].myAverageExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myCallsCount - second[1].myCallsCount);\r\n }\r\n }\r\n } else {\r\n sortResult = -(first[1].myAverageExecutionTime - second[1].myAverageExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myTotalExecutionTime - second[1].myTotalExecutionTime);\r\n if (sortResult == 0) {\r\n sortResult = -(first[1].myCallsCount - second[1].myCallsCount);\r\n }\r\n }\r\n }\r\n\r\n return sortResult;\r\n }));\r\n }\r\n\r\n return sortedResults;\r\n }\r\n\r\n _getPropertyID(propertyName, referencePath, isFunction, isConstructor) {\r\n let id = isConstructor ? \"constructor\" : propertyName;\r\n\r\n if (referencePath != null && this._myParams.myAddPathPrefixToFunctionID) {\r\n if (!isFunction) {\r\n id = referencePath + \".\" + id;\r\n } else {\r\n id = referencePath;\r\n }\r\n }\r\n\r\n return id;\r\n }\r\n\r\n _updateDerivatesResults() {\r\n let timeElapsedSinceLastReset = this.getTimeElapsedSinceLastReset();\r\n let beforeTime = window.performance.now();\r\n\r\n for (let property of this._myFunctionPerformanceAnalysisResults.keys()) {\r\n let results = this._myFunctionPerformanceAnalysisResults.get(property);\r\n\r\n if (timeElapsedSinceLastReset != 0) {\r\n results.myTotalExecutionTimePercentage = results.myTotalExecutionTime / timeElapsedSinceLastReset;\r\n } else {\r\n if (results.myCallsCount != 0) {\r\n results.myTotalExecutionTimePercentage = 1;\r\n } else {\r\n results.myTotalExecutionTimePercentage = 0;\r\n }\r\n }\r\n\r\n if (results.myCallsCount != 0) {\r\n results.myAverageExecutionTime = results.myTotalExecutionTime / results.myCallsCount;\r\n } else {\r\n results.myAverageExecutionTime = 0;\r\n }\r\n\r\n results.myTimeElapsedSinceLastReset = timeElapsedSinceLastReset;\r\n }\r\n\r\n this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now() - beforeTime;\r\n }\r\n\r\n _updateMaxResults() {\r\n let beforeTime = window.performance.now();\r\n\r\n this._myMaxTimeElapsedSinceLastReset = Math.max(this._myMaxTimeElapsedSinceLastReset, this.getTimeElapsedSinceLastReset());\r\n\r\n for (let property of this._myFunctionPerformanceAnalysisResults.keys()) {\r\n if (this._myFunctionPerformanceAnalysisMaxResults.has(property)) {\r\n this._myFunctionPerformanceAnalysisMaxResults.get(property).max(this._myFunctionPerformanceAnalysisResults.get(property));\r\n } else {\r\n let maxResults = new DebugFunctionPerformanceAnalysisResults();\r\n maxResults.copy(this._myFunctionPerformanceAnalysisResults.get(property));\r\n this._myFunctionPerformanceAnalysisMaxResults.set(property, maxResults);\r\n }\r\n }\r\n\r\n this._myExecutionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now() - beforeTime;\r\n }\r\n\r\n _getOverwrittenFunctionInternal(reference, propertyName, referencePath, isClass, isFunction, isConstructor) {\r\n let newFunction = JSUtils.getObjectProperty(reference, propertyName);\r\n\r\n if (!this._myParams.myFilterDebugFunctionsPerformanceAnalyzerClasses || !this._isPerformanceAnalyzer(reference, propertyName, isClass)) {\r\n if (propertyName != \"_myPerformanceAnalyzerOriginalFunction\") {\r\n let propertyID = this._getPropertyID(propertyName, referencePath, isFunction, isConstructor);\r\n\r\n this._myResultsAlreadyAdded = this._myFunctionPerformanceAnalysisResults.has(propertyID);\r\n let analysisResults = new DebugFunctionPerformanceAnalysisResults();\r\n\r\n analysisResults.myReference = reference;\r\n analysisResults.myName = propertyName;\r\n analysisResults.myPath = referencePath;\r\n analysisResults.myID = referencePath;\r\n\r\n this._myFunctionPerformanceAnalysisResults.set(propertyID, analysisResults);\r\n\r\n try {\r\n let functionPerformanceAnalysisResults = this._myFunctionPerformanceAnalysisResults.get(propertyID);\r\n let executionTimes = this._myExecutionTimes;\r\n\r\n let originalFunction = reference[propertyName];\r\n let functionCallOverhead = 0.000175; // ms taken by an analyzed function that is empty\r\n let overheadError = 0.00035; // ms to add to adjust a bit for window.performance.now() max precision which is 0.0005\r\n\r\n let executionTimeAnalysisEnabled = this._myParams.myExecutionTimeAnalysisEnabled;\r\n\r\n if (!isConstructor) {\r\n newFunction = function () {\r\n let startTime = window.performance.now();\r\n\r\n let errorToThrow = null;\r\n let returnValue = undefined;\r\n let boundOriginalFunction = null;\r\n let startOriginalFunctionTime = 0;\r\n let endOriginalFunctionTime = 0;\r\n let originalFunctionOverheadExecutionTime = 0;\r\n let executionTimeToAdjust = 0;\r\n let executionTime = 0;\r\n let beforeOverhead = 0;\r\n let inBetweenOverhead = 0;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes.push(0);\r\n\r\n startOriginalFunctionTime = window.performance.now();\r\n endOriginalFunctionTime = window.performance.now();\r\n\r\n try {\r\n boundOriginalFunction = originalFunction.bind(this);\r\n startOriginalFunctionTime = window.performance.now();\r\n returnValue = boundOriginalFunction(...arguments);\r\n endOriginalFunctionTime = window.performance.now();\r\n } catch (error) {\r\n endOriginalFunctionTime = window.performance.now();\r\n errorToThrow = error;\r\n }\r\n } else {\r\n try {\r\n boundOriginalFunction = originalFunction.bind(this);\r\n returnValue = boundOriginalFunction(...arguments);\r\n } catch (error) {\r\n errorToThrow = error;\r\n }\r\n }\r\n\r\n functionPerformanceAnalysisResults.myCallsCount += 1;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n originalFunctionOverheadExecutionTime = executionTimes.myOriginalFunctionOverheadExecutionTimes.pop();\r\n\r\n executionTimeToAdjust = endOriginalFunctionTime - startOriginalFunctionTime - originalFunctionOverheadExecutionTime;\r\n executionTime = executionTimeToAdjust - functionCallOverhead;\r\n if (originalFunction._myPerformanceAnalyzerHasBeenOverwritten) {\r\n executionTime = executionTimes.myLastFunctionExecutionTime;\r\n }\r\n\r\n functionPerformanceAnalysisResults._myTotalExecutionTimeInternal += executionTime;\r\n functionPerformanceAnalysisResults.myTotalExecutionTime = Math.max(0, functionPerformanceAnalysisResults._myTotalExecutionTimeInternal);\r\n\r\n executionTimes.myLastFunctionExecutionTime = executionTime;\r\n\r\n beforeOverhead = startOriginalFunctionTime - startTime;\r\n inBetweenOverhead = beforeOverhead - endOriginalFunctionTime - overheadError;\r\n if (executionTimes.myOriginalFunctionOverheadExecutionTimes.length > 0) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n inBetweenOverhead + originalFunctionOverheadExecutionTime + overheadError * 2.75;\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n window.performance.now();\r\n }\r\n\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += inBetweenOverhead;\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now();\r\n }\r\n\r\n if (errorToThrow != null) {\r\n throw errorToThrow;\r\n }\r\n\r\n return returnValue;\r\n };\r\n } else {\r\n newFunction = function () {\r\n let startTime = window.performance.now();\r\n\r\n let errorToThrow = null;\r\n let returnValue = undefined;\r\n let startOriginalFunctionTime = 0;\r\n let endOriginalFunctionTime = 0;\r\n let originalFunctionOverheadExecutionTime = 0;\r\n let executionTimeToAdjust = 0;\r\n let executionTime = 0;\r\n let beforeOverhead = 0;\r\n let inBetweenOverhead = 0;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes.push(0);\r\n\r\n startOriginalFunctionTime = window.performance.now();\r\n endOriginalFunctionTime = window.performance.now();\r\n\r\n try {\r\n startOriginalFunctionTime = window.performance.now();\r\n returnValue = new originalFunction(...arguments);\r\n endOriginalFunctionTime = window.performance.now();\r\n } catch (error) {\r\n endOriginalFunctionTime = window.performance.now();\r\n errorToThrow = error;\r\n }\r\n } else {\r\n try {\r\n returnValue = new originalFunction(...arguments);\r\n } catch (error) {\r\n errorToThrow = error;\r\n }\r\n }\r\n\r\n functionPerformanceAnalysisResults.myCallsCount += 1;\r\n\r\n if (executionTimeAnalysisEnabled) {\r\n originalFunctionOverheadExecutionTime = executionTimes.myOriginalFunctionOverheadExecutionTimes.pop();\r\n\r\n executionTimeToAdjust = endOriginalFunctionTime - startOriginalFunctionTime - originalFunctionOverheadExecutionTime;\r\n executionTime = executionTimeToAdjust - functionCallOverhead;\r\n if (originalFunction._myPerformanceAnalyzerHasBeenOverwritten) {\r\n executionTime = executionTimes.myLastFunctionExecutionTime;\r\n }\r\n\r\n functionPerformanceAnalysisResults._myTotalExecutionTimeInternal += executionTime;\r\n functionPerformanceAnalysisResults.myTotalExecutionTime = Math.max(0, functionPerformanceAnalysisResults._myTotalExecutionTimeInternal);\r\n\r\n executionTimes.myLastFunctionExecutionTime = executionTime;\r\n\r\n beforeOverhead = startOriginalFunctionTime - startTime;\r\n inBetweenOverhead = beforeOverhead - endOriginalFunctionTime - overheadError;\r\n if (executionTimes.myOriginalFunctionOverheadExecutionTimes.length > 0) {\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n inBetweenOverhead + originalFunctionOverheadExecutionTime + overheadError * 2.75;\r\n executionTimes.myOriginalFunctionOverheadExecutionTimes[executionTimes.myOriginalFunctionOverheadExecutionTimes.length - 1] +=\r\n window.performance.now();\r\n }\r\n\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += inBetweenOverhead;\r\n executionTimes.myOverheadExecutionTimeSinceLastReset += window.performance.now();\r\n }\r\n\r\n if (errorToThrow != null) {\r\n throw errorToThrow;\r\n }\r\n\r\n return returnValue;\r\n };\r\n }\r\n\r\n if (newFunction != null) {\r\n Object.defineProperty(newFunction, \"_myPerformanceAnalyzerHasBeenOverwritten\", {\r\n value: true,\r\n enumerable: false,\r\n configurable: false,\r\n writable: false\r\n });\r\n\r\n Object.defineProperty(newFunction, \"_myPerformanceAnalyzerOriginalFunction\", {\r\n value: originalFunction,\r\n enumerable: false,\r\n configurable: false,\r\n writable: false\r\n });\r\n }\r\n } catch (error) {\r\n if (this._myParams.myLogEnabled) {\r\n console.error(\"Function:\", propertyName, \"of:\", reference, \"can't be overwritten.\\nError:\", error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return newFunction;\r\n }\r\n\r\n _isPerformanceAnalyzer(reference, propertyName, isClass) {\r\n let isPerformanceAnalyzer = false;\r\n\r\n if (isClass) {\r\n if (reference == DebugFunctionsPerformanceAnalyzer.prototype || reference == DebugFunctionPerformanceAnalysisResults.prototype) {\r\n isPerformanceAnalyzer = true;\r\n }\r\n }\r\n\r\n return isPerformanceAnalyzer;\r\n }\r\n}", "import { Timer } from \"../../../cauldron/cauldron/timer.js\";\r\nimport { DebugFunctionsPerformanceAnalyzerSortOrder } from \"./debug_functions_performance_analyzer.js\";\r\n\r\nexport class DebugFunctionsPerformanceAnalysisResultsLoggerParams {\r\n\r\n constructor() {\r\n this.myPerformanceAnalyzer = null;\r\n\r\n this.myLogTitle = \"Functions Performance Analysis Results\";\r\n this.mySecondsBetweenLogs = 1;\r\n this.myLogFunction = \"log\";\r\n\r\n this.myFormatLog = true;\r\n this.myFormatLogIndentationCharacter = \"-\";\r\n\r\n this.myLogMaxResults = false;\r\n\r\n this.myLogSortOrder = DebugFunctionsPerformanceAnalyzerSortOrder.NONE;\r\n\r\n this.myLogMaxAmountOfFunctions = null;\r\n\r\n this.myLogFunctionsWithCallsCountAbove = null;\r\n this.myLogFunctionsWithTotalExecutionTimePercentageAbove = null;\r\n\r\n this.myLogCallsCountResults = false;\r\n this.myLogTotalExecutionTimeResults = false;\r\n this.myLogTotalExecutionTimePercentageResults = false;\r\n this.myLogAverageExecutionTimeResults = false;\r\n\r\n this.myClearConsoleBeforeLog = false;\r\n }\r\n}\r\n\r\nexport class DebugFunctionsPerformanceAnalysisResultsLogger {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myLogTimer = new Timer(this._myParams.mySecondsBetweenLogs);\r\n\r\n this._myMaxNameLength = 0;\r\n this._myMaxCallsCountLength = 0;\r\n this._myMaxTotalExecutionTimeLength = 0;\r\n this._myMaxTotalExecutionTimePercentageLength = 0;\r\n this._myMaxAverageExecutionTimeLength = 0;\r\n }\r\n\r\n update(dt) {\r\n if (this._myParams.myPerformanceAnalyzer == null) {\r\n return;\r\n }\r\n\r\n this._myLogTimer.update(dt);\r\n if (this._myLogTimer.isDone()) {\r\n this._myLogTimer.start();\r\n\r\n let timeSinceLastReset = this._myParams.myPerformanceAnalyzer.getTimeElapsedSinceLastReset();\r\n if (this._myParams.myLogMaxResults) {\r\n timeSinceLastReset = this._myParams.myPerformanceAnalyzer.getMaxTimeElapsedSinceLastReset();\r\n }\r\n\r\n let analysisResults = null;\r\n if (!this._myParams.myLogMaxResults) {\r\n analysisResults = this._myParams.myPerformanceAnalyzer.getResults(this._myParams.myLogSortOrder);\r\n } else {\r\n analysisResults = this._myParams.myPerformanceAnalyzer.getMaxResults(this._myParams.myLogSortOrder);\r\n }\r\n\r\n if (this._myParams.myLogFunctionsWithCallsCountAbove != null) {\r\n let analysisResultsClone = new Map(analysisResults);\r\n analysisResults = new Map();\r\n let keys = [...analysisResultsClone.keys()];\r\n for (let i = 0; i < keys.length; i++) {\r\n let results = analysisResultsClone.get(keys[i]);\r\n if (results.myCallsCount > this._myParams.myLogFunctionsWithCallsCountAbove) {\r\n analysisResults.set(keys[i], results);\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myLogFunctionsWithTotalExecutionTimePercentageAbove != null) {\r\n let analysisResultsClone = new Map(analysisResults);\r\n analysisResults = new Map();\r\n let keys = [...analysisResultsClone.keys()];\r\n for (let i = 0; i < keys.length; i++) {\r\n let results = analysisResultsClone.get(keys[i]);\r\n if (results.myTotalExecutionTimePercentage * 100 > this._myParams.myLogFunctionsWithTotalExecutionTimePercentageAbove) {\r\n analysisResults.set(keys[i], results);\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myLogMaxAmountOfFunctions != null) {\r\n let analysisResultsClone = new Map(analysisResults);\r\n analysisResults = new Map();\r\n let keys = [...analysisResultsClone.keys()];\r\n for (let i = 0; i < this._myParams.myLogMaxAmountOfFunctions && i < keys.length; i++) {\r\n let counter = analysisResultsClone.get(keys[i]);\r\n analysisResults.set(keys[i], counter);\r\n }\r\n }\r\n\r\n if (this._myParams.myClearConsoleBeforeLog) {\r\n console.clear();\r\n }\r\n\r\n let analysisResultsToLog = new Map();\r\n for (let key of analysisResults.keys()) {\r\n let currentResults = analysisResults.get(key);\r\n\r\n let resultsToLog = {};\r\n if (this._myParams.myLogCallsCountResults) {\r\n resultsToLog.myCallsCount = currentResults.myCallsCount;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimeResults) {\r\n resultsToLog.myTotalExecutionTime = currentResults.myTotalExecutionTime;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimePercentageResults) {\r\n resultsToLog.myTotalExecutionTimePercentage = currentResults.myTotalExecutionTimePercentage;\r\n }\r\n\r\n if (this._myParams.myLogAverageExecutionTimeResults) {\r\n resultsToLog.myAverageExecutionTime = currentResults.myAverageExecutionTime;\r\n }\r\n\r\n analysisResultsToLog.set(key, resultsToLog);\r\n }\r\n\r\n let resultsText = \"\";\r\n\r\n for (let entry of analysisResults.entries()) {\r\n let name = entry[0];\r\n let results = entry[1];\r\n\r\n this._myMaxNameLength = Math.max(this._myMaxNameLength, name.length);\r\n\r\n this._myMaxCallsCountLength = Math.max(this._myMaxCallsCountLength, results.myCallsCount.toFixed(0).length);\r\n this._myMaxTotalExecutionTimeLength = Math.max(this._myMaxTotalExecutionTimeLength, results.myTotalExecutionTime.toFixed(5).length);\r\n this._myMaxTotalExecutionTimePercentageLength = Math.max(this._myMaxTotalExecutionTimePercentageLength, (results.myTotalExecutionTimePercentage * 100).toFixed(2).length);\r\n this._myMaxAverageExecutionTimeLength = Math.max(this._myMaxAverageExecutionTimeLength, results.myAverageExecutionTime.toFixed(5).length);\r\n }\r\n\r\n for (let entry of analysisResults.entries()) {\r\n let name = entry[0];\r\n let results = entry[1];\r\n\r\n let parametersToLog = 0;\r\n if (this._myParams.myLogCallsCountResults) {\r\n parametersToLog++;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimeResults) {\r\n parametersToLog++;\r\n }\r\n\r\n if (this._myParams.myLogTotalExecutionTimePercentageResults) {\r\n parametersToLog++;\r\n }\r\n\r\n if (this._myParams.myLogAverageExecutionTimeResults) {\r\n parametersToLog++;\r\n }\r\n\r\n let textOrdered = [];\r\n\r\n let callsCountText = ((parametersToLog > 1) ? \"Calls Count: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxCallsCountLength - results.myCallsCount.toFixed(0).length; i++) {\r\n callsCountText += \" \";\r\n }\r\n }\r\n callsCountText += results.myCallsCount.toFixed(0);\r\n\r\n let totalExecutionTimeText = ((parametersToLog > 1) ? \"Total Time: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxTotalExecutionTimeLength - results.myTotalExecutionTime.toFixed(5).length; i++) {\r\n totalExecutionTimeText += \" \";\r\n }\r\n }\r\n totalExecutionTimeText += results.myTotalExecutionTime.toFixed(5) + \"ms\";\r\n\r\n let totalExecutionTimePercentageText = ((parametersToLog > 1) ? \"Total Time: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxTotalExecutionTimePercentageLength - (results.myTotalExecutionTimePercentage * 100).toFixed(2).length; i++) {\r\n totalExecutionTimePercentageText += \" \";\r\n }\r\n }\r\n totalExecutionTimePercentageText += (results.myTotalExecutionTimePercentage * 100).toFixed(2) + \"%\";\r\n\r\n let averageExecutionTimeText = ((parametersToLog > 1) ? \"Average Time: \" : \"\");\r\n if (this._myParams.myFormatLog) {\r\n for (let i = 0; i < this._myMaxAverageExecutionTimeLength - results.myAverageExecutionTime.toFixed(5).length; i++) {\r\n averageExecutionTimeText += \" \";\r\n }\r\n }\r\n averageExecutionTimeText += results.myAverageExecutionTime.toFixed(5) + \"ms\";\r\n\r\n if (!this._myParams.myLogCallsCountResults) {\r\n callsCountText = null;\r\n }\r\n\r\n if (!this._myParams.myLogTotalExecutionTimeResults) {\r\n totalExecutionTimeText = null;\r\n }\r\n\r\n if (!this._myParams.myLogTotalExecutionTimePercentageResults) {\r\n totalExecutionTimePercentageText = null;\r\n }\r\n\r\n if (!this._myParams.myLogAverageExecutionTimeResults) {\r\n averageExecutionTimeText = null;\r\n }\r\n\r\n switch (this._myParams.myLogSortOrder) {\r\n case DebugFunctionsPerformanceAnalyzerSortOrder.CALLS_COUNT:\r\n textOrdered.push(callsCountText);\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(averageExecutionTimeText);\r\n break;\r\n case DebugFunctionsPerformanceAnalyzerSortOrder.TOTAL_EXECUTION_TIME:\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(averageExecutionTimeText);\r\n textOrdered.push(callsCountText);\r\n break;\r\n case DebugFunctionsPerformanceAnalyzerSortOrder.AVERAGE_EXECUTION_TIME:\r\n textOrdered.push(averageExecutionTimeText);\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(callsCountText);\r\n break;\r\n default:\r\n textOrdered.push(callsCountText);\r\n textOrdered.push(totalExecutionTimeText);\r\n textOrdered.push(totalExecutionTimePercentageText);\r\n textOrdered.push(averageExecutionTimeText);\r\n }\r\n\r\n resultsText += \"\\n\";\r\n if (this._myParams.myFormatLog) {\r\n let nameIndented = name + \" \";\r\n while (nameIndented.length < this._myMaxNameLength + 1) {\r\n nameIndented += this._myParams.myFormatLogIndentationCharacter;\r\n }\r\n nameIndented += this._myParams.myFormatLogIndentationCharacter + \" \";\r\n resultsText += nameIndented;\r\n } else {\r\n resultsText += name + \" - \";\r\n }\r\n\r\n let avoidFirst = true;\r\n for (let text of textOrdered) {\r\n if (text != null) {\r\n if (avoidFirst) {\r\n avoidFirst = false;\r\n } else {\r\n resultsText += \" - \";\r\n }\r\n\r\n resultsText += text;\r\n }\r\n }\r\n }\r\n\r\n if ((this._myParams.myLogTotalExecutionTimeResults || this._myParams.myLogTotalExecutionTimePercentageResults || this._myParams.myLogAverageExecutionTimeResults)) {\r\n console[this._myParams.myLogFunction](\"\\n\" + this._myParams.myLogTitle, \"\\n\\nTotal Time:\", timeSinceLastReset.toFixed(5), \"ms\\n\", resultsText);\r\n } else {\r\n console[this._myParams.myLogFunction](\"\\n\" + this._myParams.myLogTitle, \"\\n\", resultsText);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\nimport { GamepadButtonID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { DebugFunctionsPerformanceAnalysisResultsLogger, DebugFunctionsPerformanceAnalysisResultsLoggerParams } from \"../debug_functions_performance_analysis_results_logger.js\";\r\nimport { DebugFunctionsPerformanceAnalyzer, DebugFunctionsPerformanceAnalyzerParams } from \"../debug_functions_performance_analyzer.js\";\r\n\r\nexport class DebugFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-functions-performance-analyzer\";\r\n static Properties = {\r\n _myObjectsByPath: Property.string(\"\"),\r\n _myClassesByPath: Property.string(\"\"),\r\n _myFunctionsByPath: Property.string(\"\"),\r\n _myDelayStart: Property.float(0.0),\r\n _myLogTitle: Property.string(\"Functions Performance Analysis Results\"),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myExcludeJSObjectFunctions: Property.bool(true),\r\n _myAddPathPrefixToFunctionID: Property.bool(true),\r\n _myObjectAddObjectDescendantsDepthLevel: Property.int(0),\r\n _myObjectAddClassDescendantsDepthLevel: Property.int(0),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false),\r\n _myClassesByReference: Property.enum([\"Code Driven\"], \"Code Driven\"),\r\n _myObjectsByReference: Property.enum([\"Code Driven\"], \"Code Driven\")\r\n };\r\n\r\n init() {\r\n this._myActive = false;\r\n\r\n if (Globals.isDebugEnabled(this.engine)) {\r\n this._myActive = true;\r\n\r\n this._myFunctionsPerformanceAnalyzer = null;\r\n this._myFunctionsPerformanceAnalysisResultsLogger = null;\r\n\r\n this._mySkipFirstUpdate = true;\r\n this._myStartTimer = new Timer(this._myDelayStart);\r\n if (this._myDelayStart == 0) {\r\n this._myStartTimer.end();\r\n this._mySkipFirstUpdate = false;\r\n this._start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myActive) {\r\n if (this._mySkipFirstUpdate) {\r\n this._mySkipFirstUpdate = false;\r\n return;\r\n }\r\n\r\n if (this._myStartTimer.isRunning()) {\r\n this._myStartTimer.update(dt);\r\n if (this._myStartTimer.isDone()) {\r\n this._start();\r\n }\r\n } else {\r\n this._myFunctionsPerformanceAnalysisResultsLogger.update(dt);\r\n this._myFunctionsPerformanceAnalyzer.resetResults();\r\n }\r\n\r\n if (this._myResetMaxResultsShortcutEnabled) {\r\n if (Globals.getLeftGamepad(this.engine).getButtonInfo(GamepadButtonID.SELECT).isPressEnd(3)) {\r\n this._myFunctionsPerformanceAnalyzer.resetMaxResults();\r\n }\r\n }\r\n }\r\n }\r\n\r\n _start() {\r\n let functionsPerformanceAnalyzerParams = new DebugFunctionsPerformanceAnalyzerParams(this.engine);\r\n\r\n if (this._myObjectsByPath.length > 0) {\r\n let toIncludeList = [...this._myObjectsByPath.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myObjectsByPath.push(...toIncludeList);\r\n }\r\n\r\n if (this._myClassesByPath.length > 0) {\r\n let toIncludeList = [...this._myClassesByPath.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myClassesByPath.push(...toIncludeList);\r\n }\r\n\r\n if (this._myFunctionsByPath.length > 0) {\r\n let toIncludeList = [...this._myFunctionsByPath.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myFunctionsByPath.push(...toIncludeList);\r\n }\r\n\r\n functionsPerformanceAnalyzerParams.myExcludeConstructors = this._myExcludeConstructors;\r\n functionsPerformanceAnalyzerParams.myExcludeJSObjectFunctions = this._myExcludeJSObjectFunctions;\r\n functionsPerformanceAnalyzerParams.myAddPathPrefixToFunctionID = this._myAddPathPrefixToFunctionID;\r\n\r\n if (this._myFunctionPathsToInclude.length > 0) {\r\n let toIncludeList = [...this._myFunctionPathsToInclude.split(\",\")];\r\n for (let i = 0; i < toIncludeList.length; i++) {\r\n toIncludeList[i] = toIncludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myFunctionPathsToInclude.push(...toIncludeList);\r\n }\r\n\r\n if (this._myFunctionPathsToExclude.length > 0) {\r\n let toExcludeList = [...this._myFunctionPathsToExclude.split(\",\")];\r\n for (let i = 0; i < toExcludeList.length; i++) {\r\n toExcludeList[i] = toExcludeList[i].trim();\r\n }\r\n functionsPerformanceAnalyzerParams.myFunctionPathsToExclude.push(...toExcludeList);\r\n }\r\n\r\n functionsPerformanceAnalyzerParams.myObjectAddObjectDescendantsDepthLevel = this._myObjectAddObjectDescendantsDepthLevel;\r\n functionsPerformanceAnalyzerParams.myObjectAddClassDescendantsDepthLevel = this._myObjectAddClassDescendantsDepthLevel;\r\n\r\n functionsPerformanceAnalyzerParams.myExecutionTimeAnalysisEnabled = this._myLogTotalExecutionTimeResults || this._myLogTotalExecutionTimePercentageResults || this._myLogAverageExecutionTimeResults;\r\n\r\n functionsPerformanceAnalyzerParams.myClassesByReference = (this._myClassesByReference != 0) ? this._myClassesByReference : [];\r\n functionsPerformanceAnalyzerParams.myObjectsByReference = (this._myObjectsByReference != 0) ? this._myObjectsByReference : [];\r\n\r\n this._myFunctionsPerformanceAnalyzer = new DebugFunctionsPerformanceAnalyzer(functionsPerformanceAnalyzerParams);\r\n this._myFunctionsPerformanceAnalyzer.overwriteFunctions();\r\n\r\n let functionsPerformanceAnalysisResultsLoggerParams = new DebugFunctionsPerformanceAnalysisResultsLoggerParams();\r\n functionsPerformanceAnalysisResultsLoggerParams.myPerformanceAnalyzer = this._myFunctionsPerformanceAnalyzer;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogTitle = this._myLogTitle;\r\n\r\n functionsPerformanceAnalysisResultsLoggerParams.mySecondsBetweenLogs = this._mySecondsBetweenLogs;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogFunction = [\"log\", \"error\", \"warn\", \"debug\"][this._myLogFunction];\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogMaxAmountOfFunctions = (this._myLogMaxAmountOfFunctions >= 0) ? this._myLogMaxAmountOfFunctions : null;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogFunctionsWithCallsCountAbove = (this._myLogFunctionsWithCallsCountAbove >= 0) ? this._myLogFunctionsWithCallsCountAbove : null;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogFunctionsWithTotalExecutionTimePercentageAbove = (this._myLogFunctionsWithTotalExecutionTimePercentageAbove >= 0) ? this._myLogFunctionsWithTotalExecutionTimePercentageAbove : null;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogMaxResults = this._myLogMaxResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myClearConsoleBeforeLog = this._myClearConsoleBeforeLog;\r\n\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogSortOrder = this._myLogSortOrder;\r\n\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogCallsCountResults = this._myLogCallsCountResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogTotalExecutionTimeResults = this._myLogTotalExecutionTimeResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogTotalExecutionTimePercentageResults = this._myLogTotalExecutionTimePercentageResults;\r\n functionsPerformanceAnalysisResultsLoggerParams.myLogAverageExecutionTimeResults = this._myLogAverageExecutionTimeResults;\r\n\r\n this._myFunctionsPerformanceAnalysisResultsLogger = new DebugFunctionsPerformanceAnalysisResultsLogger(functionsPerformanceAnalysisResultsLoggerParams);\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugPPFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-pp-functions-performance-analyzer\";\r\n static Properties = {\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByPath: \"PP\",\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"PP Functions Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude,\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myObjectAddObjectDescendantsDepthLevel: 1,\r\n _myObjectAddClassDescendantsDepthLevel: 1,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "\r\nimport { Component, Property } from \"@wonderlandengine/api\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugArrayFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-array-functions-performance-analyzer\";\r\n static Properties = {\r\n _myIncludeOnlyMainArrayTypes: Property.bool(true),\r\n _myIncludeOnlyArrayExtensionFunctions: Property.bool(false),\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n let classesByPath = \"Array, Uint8ClampedArray, Uint8Array, Uint16Array, Uint32Array, Int8Array, Int16Array, Int32Array, Float32Array, Float64Array\";\r\n if (this._myIncludeOnlyMainArrayTypes) {\r\n classesByPath = \"Array, Uint8Array, Uint16Array, Float32Array\";\r\n }\r\n\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myClassesByPath: classesByPath,\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"Array Functions Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude + (this._myFunctionPathsToInclude.length > 0 && this._myIncludeOnlyArrayExtensionFunctions ? \", \" : \"\") + (this._myIncludeOnlyArrayExtensionFunctions ? \"pp_, vec_, vec2_, vec3_, vec4_, quat_, quat2_, mat3_, mat4_, _pp_, _vec_, _quat_\" : \"\"),\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Mat3Utils } from \"../../../../cauldron/utils/array/mat3_utils.js\";\r\nimport { Mat4Utils } from \"../../../../cauldron/utils/array/mat4_utils.js\";\r\nimport { Quat2Utils } from \"../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { QuatUtils } from \"../../../../cauldron/utils/array/quat_utils.js\";\r\nimport { Vec2Utils } from \"../../../../cauldron/utils/array/vec2_utils.js\";\r\nimport { Vec3Utils } from \"../../../../cauldron/utils/array/vec3_utils.js\";\r\nimport { Vec4Utils } from \"../../../../cauldron/utils/array/vec4_utils.js\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugPPArrayCreationPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-pp-array-creation-performance-analyzer\";\r\n static Properties = {\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByReference: [\r\n [Vec2Utils, \"Vec2Utils\"],\r\n [Vec3Utils, \"Vec3Utils\"],\r\n [Vec4Utils, \"Vec4Utils\"],\r\n [QuatUtils, \"QuatUtils\"],\r\n [Quat2Utils, \"Quat2Utils\"],\r\n [Mat3Utils, \"Mat3Utils\"],\r\n [Mat4Utils, \"Mat4Utils\"]\r\n ],\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"PP Array Creation Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: \"create\",\r\n _myExcludeConstructors: true,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugWLFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-wl-functions-performance-analyzer\";\r\n static Properties = {\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByPath: \"WL\",\r\n _myDelayStart: this._myDelayStart,\r\n _myLogTitle: \"WL Functions Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude,\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myObjectAddObjectDescendantsDepthLevel: 1,\r\n _myObjectAddClassDescendantsDepthLevel: 1,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n}", "import { AnimationComponent, CollisionComponent, Component, InputComponent, LightComponent, MeshComponent, PhysXComponent, Property, TextComponent, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { DebugFunctionsPerformanceAnalyzerComponent } from \"./debug_functions_performance_analyzer_component.js\";\r\n\r\nexport class DebugWLComponentsFunctionsPerformanceAnalyzerComponent extends Component {\r\n static TypeName = \"pp-debug-wl-components-functions-performance-analyzer\";\r\n static Properties = {\r\n _myAnalyzeComponentTypes: Property.bool(true),\r\n _myAnalyzeComponentInstances: Property.bool(false),\r\n _myComponentInstanceID: Property.enum([\"Object ID\", \"Object Name\", \"Object ID - Object Name\"], \"Object ID - Object Name\"),\r\n _myDelayStart: Property.float(0.0),\r\n _myLogFunction: Property.enum([\"Log\", \"Error\", \"Warn\", \"Debug\"], \"Error\"),\r\n _mySecondsBetweenLogs: Property.float(1.0),\r\n _myLogMaxResults: Property.bool(false),\r\n _myLogSortOrder: Property.enum([\"None\", \"Calls Count\", \"Total Execution Time\", \"Average Execution Time\"], \"Calls Count\"),\r\n _myLogCallsCountResults: Property.bool(true),\r\n _myLogTotalExecutionTimeResults: Property.bool(false),\r\n _myLogTotalExecutionTimePercentageResults: Property.bool(false),\r\n _myLogAverageExecutionTimeResults: Property.bool(false),\r\n _myLogMaxAmountOfFunctions: Property.int(-1),\r\n _myLogFunctionsWithCallsCountAbove: Property.int(0),\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: Property.float(-1),\r\n _myFunctionPathsToInclude: Property.string(\"\"),\r\n _myFunctionPathsToExclude: Property.string(\"\"),\r\n _myExcludeConstructors: Property.bool(false),\r\n _myClearConsoleBeforeLog: Property.bool(false),\r\n _myResetMaxResultsShortcutEnabled: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myStartTimer = new Timer(this._myDelayStart);\r\n if (this._myDelayStart == 0) {\r\n this._myStartTimer.end();\r\n this._start();\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._myStartTimer.isRunning()) {\r\n this._myStartTimer.update(dt);\r\n if (this._myStartTimer.isDone()) {\r\n this._start();\r\n }\r\n }\r\n }\r\n\r\n _start() {\r\n\r\n let objectsByReference = [];\r\n let classesByReference = [];\r\n\r\n if (this._myAnalyzeComponentInstances) {\r\n this._addComponentInstanceReferences(objectsByReference);\r\n }\r\n\r\n if (this._myAnalyzeComponentTypes) {\r\n this._addComponentTypeReferences(classesByReference);\r\n }\r\n\r\n this._myAnalyzerComponent = this.object.pp_addComponent(DebugFunctionsPerformanceAnalyzerComponent, {\r\n _myObjectsByReference: objectsByReference,\r\n _myClassesByReference: classesByReference,\r\n _myDelayStart: 0,\r\n _myLogTitle: \"WL Components Performance Analysis Results\",\r\n _myLogFunction: this._myLogFunction,\r\n _mySecondsBetweenLogs: this._mySecondsBetweenLogs,\r\n _myLogMaxResults: this._myLogMaxResults,\r\n _myLogSortOrder: this._myLogSortOrder,\r\n _myLogMaxAmountOfFunctions: this._myLogMaxAmountOfFunctions,\r\n _myLogFunctionsWithCallsCountAbove: this._myLogFunctionsWithCallsCountAbove,\r\n _myLogFunctionsWithTotalExecutionTimePercentageAbove: this._myLogFunctionsWithTotalExecutionTimePercentageAbove,\r\n _myLogCallsCountResults: this._myLogCallsCountResults,\r\n _myLogTotalExecutionTimeResults: this._myLogTotalExecutionTimeResults,\r\n _myLogTotalExecutionTimePercentageResults: this._myLogTotalExecutionTimePercentageResults,\r\n _myLogAverageExecutionTimeResults: this._myLogAverageExecutionTimeResults,\r\n _myFunctionPathsToInclude: this._myFunctionPathsToInclude,\r\n _myFunctionPathsToExclude: this._myFunctionPathsToExclude,\r\n _myExcludeConstructors: this._myExcludeConstructors,\r\n _myExcludeJSObjectFunctions: true,\r\n _myAddPathPrefixToFunctionID: true,\r\n _myObjectAddClassDescendantsDepthLevel: 0,\r\n _myClearConsoleBeforeLog: this._myClearConsoleBeforeLog,\r\n _myResetMaxResultsShortcutEnabled: this._myResetMaxResultsShortcutEnabled\r\n });\r\n }\r\n\r\n _addComponentTypeReferences(classesByReference) {\r\n let nativeComponentClasses = [\r\n AnimationComponent,\r\n CollisionComponent,\r\n InputComponent,\r\n LightComponent,\r\n MeshComponent,\r\n PhysXComponent,\r\n TextComponent,\r\n ViewComponent\r\n ];\r\n\r\n for (let nativeComponentClass of nativeComponentClasses) {\r\n classesByReference.push([nativeComponentClass.prototype, \"{\\\"\" + nativeComponentClass.TypeName + \"\\\"}\"]);\r\n }\r\n\r\n for (let componentClass of ComponentUtils.getJavascriptComponentClassesByIndex(this.engine)) {\r\n classesByReference.push([componentClass.prototype, \"{\\\"\" + componentClass.TypeName + \"\\\"}\"]);\r\n }\r\n }\r\n\r\n _addComponentInstanceReferences(objectsByReference) {\r\n // #TODO add native components\r\n\r\n for (let componentInstance of ComponentUtils.getJavascriptComponentInstances(this.engine)) {\r\n let id = \"\";\r\n\r\n switch (this._myComponentInstanceID) {\r\n case 0:\r\n id = componentInstance.object.pp_getID();\r\n break;\r\n case 1:\r\n id = componentInstance.object.pp_getName();\r\n break;\r\n case 2:\r\n id = componentInstance.object.pp_getID();\r\n if (componentInstance.object.pp_getName().length > 0) {\r\n id = id + \" - \" + componentInstance.object.pp_getName();\r\n }\r\n break;\r\n }\r\n\r\n objectsByReference.push([componentInstance,\r\n \"{\\\"\" + componentInstance.type + \"\\\"}[\" + id + \"]\"]);\r\n }\r\n }\r\n}", "import { quat_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class Direction2DTo3DConverterParams {\r\n\r\n constructor() {\r\n this.myStartFlyingForward = false;\r\n this.myStartFlyingRight = false;\r\n\r\n this.myAutoUpdateFlyForward = false;\r\n this.myAutoUpdateFlyRight = false;\r\n\r\n this.myResetFlyForwardWhenZero = false;\r\n this.myResetFlyRightWhenZero = false;\r\n\r\n this.myMinAngleToFlyForwardUp = 90;\r\n this.myMinAngleToFlyForwardDown = 90;\r\n this.myMinAngleToFlyRightUp = 90;\r\n this.myMinAngleToFlyRightDown = 90;\r\n\r\n // Settings when flying is not active, used to adjust the directions and flat them\r\n this.myAdjustForwardWhenCloseToUp = true;\r\n this.myAdjustRightWhenCloseToUp = true;\r\n this.myAdjustForwardWhenCloseToUpAngleThreshold = 10;\r\n this.myAdjustRightWhenCloseToUpAngleThreshold = 10;\r\n\r\n this.myInvertForwardWhenUpsideDown = false;\r\n this.myInvertRightWhenUpsideDown = false;\r\n\r\n this.myAdjustLastValidFlatForwardOverConversionReferenceRotation = true;\r\n this.myAdjustLastValidFlatRightOverConversionReferenceRotation = true;\r\n }\r\n}\r\n\r\nexport class Direction2DTo3DConverter {\r\n\r\n constructor(params = new Direction2DTo3DConverterParams()) {\r\n this._myParams = params;\r\n\r\n this._myFlyingForward = this._myParams.myStartFlyingForward;\r\n this._myFlyingRight = this._myParams.myStartFlyingRight;\r\n\r\n this._myLastConvertRotationQuat = quat_create();\r\n this._myLastConvertRotationQuatValid = false;\r\n\r\n this._myLastValidFlatForward = vec3_create();\r\n this._myLastValidFlatRight = vec3_create();\r\n }\r\n\r\n // @direction3DUp can be used to flat the direction if the @conversionTransform is not aligned with it\r\n // It's also needed to specify the fly axis, if different from the @conversionTransform up\r\n // If @direction3DUp is null, @conversionTransform up is used\r\n convert(direction2D, conversionTransform, direction3DUp = null, outDirection3D = vec3_create()) {\r\n return this.convertTransform(direction2D, conversionTransform, direction3DUp, outDirection3D);\r\n }\r\n\r\n isFlying() {\r\n return this._myFlyingForward || this._myFlyingRight;\r\n }\r\n\r\n isFlyingForward() {\r\n return this._myFlyingForward;\r\n }\r\n\r\n isFlyingRight() {\r\n return this._myFlyingRight;\r\n }\r\n\r\n startFlying() {\r\n this._myFlyingForward = true;\r\n this._myFlyingRight = true;\r\n }\r\n\r\n startFlyingForward() {\r\n this._myFlyingForward = true;\r\n }\r\n\r\n startFlyingRight() {\r\n this._myFlyingRight = true;\r\n }\r\n\r\n stopFlying() {\r\n this._myFlyingForward = false;\r\n this._myFlyingRight = false;\r\n }\r\n\r\n stopFlyingForward() {\r\n this._myFlyingForward = false;\r\n }\r\n\r\n stopFlyingRight() {\r\n this._myFlyingRight = false;\r\n }\r\n\r\n resetFly() {\r\n this.resetFlyForward();\r\n this.resetFlyRight();\r\n }\r\n\r\n resetFlyForward() {\r\n if (this._myParams.myStartFlyingForward) {\r\n this.startFlyingForward();\r\n } else {\r\n this.stopFlyingForward();\r\n }\r\n }\r\n\r\n resetFlyRight() {\r\n if (this._myParams.myStartFlyingRight) {\r\n this.startFlyingRight();\r\n } else {\r\n this.stopFlyingRight();\r\n }\r\n }\r\n\r\n resetLastValidFlatDirections() {\r\n this._myLastValidFlatForward.vec3_zero();\r\n this._myLastValidFlatRight.vec3_zero();\r\n }\r\n\r\n resetLastValidFlatForward() {\r\n this._myLastValidFlatForward.vec3_zero();\r\n }\r\n\r\n resetLastValidFlatRight() {\r\n this._myLastValidFlatRight.vec3_zero();\r\n }\r\n\r\n resetLastConvertTransform() {\r\n this._myLastConvertRotationQuatValid = false;\r\n this._myLastConvertRotationQuat.quat_identity();\r\n }\r\n\r\n // Convert Alternatives\r\n\r\n // If @direction3DUp is null, vec3_create(0, 1, 0) is used\r\n // Does not work properly if @conversionForward is aligned with @direction3DUp\r\n convertForward(direction2D, conversionForward, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n // @direction3DUp can be used to flat the direction if the @conversionTransform is not aligned with it\r\n // It's also needed to specify the fly axis, if different from the @conversionTransform up\r\n // If @direction3DUp is null, conversionTransform up is used\r\n convertTransform(direction2D, conversionTransform, direction3DUp = null, outDirection3D = vec3_create()) {\r\n return this.convertTransformMatrix(direction2D, conversionTransform, direction3DUp, outDirection3D);\r\n }\r\n\r\n convertTransformMatrix(direction2D, conversionTransformMatrix, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n convertTransformQuat(direction2D, conversionTransformQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n convertRotationQuat(direction2D, conversionRotationQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nDirection2DTo3DConverter.prototype.convertForward = function () {\r\n let rotationQuat = quat_create();\r\n return function convertForward(direction2D, conversionForward, direction3DUp = null, outDirection3D = vec3_create()) {\r\n rotationQuat.quat_identity();\r\n rotationQuat.quat_setForward(conversionForward, direction3DUp);\r\n return this.convertRotationQuat(direction2D, rotationQuat, direction3DUp, outDirection3D);\r\n };\r\n}();\r\n\r\nDirection2DTo3DConverter.prototype.convertTransformMatrix = function () {\r\n let rotationQuat = quat_create();\r\n return function convertTransformMatrix(direction2D, conversionTransformMatrix, direction3DUp = null, outDirection3D = vec3_create()) {\r\n rotationQuat = conversionTransformMatrix.mat4_getRotationQuat(rotationQuat);\r\n return this.convertRotationQuat(direction2D, rotationQuat, direction3DUp, outDirection3D);\r\n };\r\n}();\r\n\r\nDirection2DTo3DConverter.prototype.convertTransformQuat = function () {\r\n let rotationQuat = quat_create();\r\n return function convertTransformQuat(direction2D, conversionTransformQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n rotationQuat = conversionTransformQuat.quat2_getRotationQuat(rotationQuat);\r\n return this.convertRotationQuat(direction2D, rotationQuat, direction3DUp, outDirection3D);\r\n };\r\n}();\r\n\r\nDirection2DTo3DConverter.prototype.convertRotationQuat = function () {\r\n let forward = vec3_create();\r\n let right = vec3_create();\r\n let up = vec3_create();\r\n let direction3DUpNegate = vec3_create();\r\n let forwardScaled = vec3_create();\r\n let rightScaled = vec3_create();\r\n let rotationToNewConvertPivoted = quat_create();\r\n return function convertRotationQuat(direction2D, conversionRotationQuat, direction3DUp = null, outDirection3D = vec3_create()) {\r\n outDirection3D.vec3_zero();\r\n\r\n if (this._myParams.myAdjustLastValidFlatForwardOverConversionReferenceRotation || this._myParams.myAdjustLastValidFlatRightOverConversionReferenceRotation) {\r\n if (direction3DUp != null) {\r\n if (this._myLastConvertRotationQuatValid) {\r\n rotationToNewConvertPivoted = this._myLastConvertRotationQuat.quat_rotationToQuat(conversionRotationQuat, rotationToNewConvertPivoted).\r\n quat_rotationAroundAxisQuat(direction3DUp, rotationToNewConvertPivoted);\r\n if (Math.pp_angleClamp(rotationToNewConvertPivoted.quat_getAngle(), true) > Math.PP_EPSILON_DEGREES) {\r\n if (this._myParams.myAdjustLastValidFlatForwardOverConversionReferenceRotation) {\r\n this._myLastValidFlatForward.vec3_rotateQuat(rotationToNewConvertPivoted, this._myLastValidFlatForward);\r\n }\r\n\r\n if (this._myParams.myAdjustLastValidFlatRightOverConversionReferenceRotation) {\r\n this._myLastValidFlatRight.vec3_rotateQuat(rotationToNewConvertPivoted, this._myLastValidFlatRight);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (direction2D.vec2_isZero()) {\r\n let resetFlyForward = this._myParams.myAutoUpdateFlyForward && this._myParams.myResetFlyForwardWhenZero;\r\n if (resetFlyForward) {\r\n this.resetFlyForward();\r\n }\r\n\r\n let resetFlyRight = this._myParams.myAutoUpdateFlyRight && this._myParams.myResetFlyRightWhenZero;\r\n if (resetFlyRight) {\r\n this.resetFlyRight();\r\n }\r\n } else {\r\n\r\n forward = conversionRotationQuat.quat_getForward(forward);\r\n right = conversionRotationQuat.quat_getRight(right);\r\n up = conversionRotationQuat.quat_getUp(up);\r\n\r\n if (direction3DUp != null) {\r\n let upsideDown = !direction3DUp.vec3_isConcordant(up);\r\n\r\n direction3DUpNegate = direction3DUp.vec3_negate(direction3DUpNegate);\r\n\r\n // Check if it is flying based on the convert transform orientation \r\n if (this._myParams.myAutoUpdateFlyForward) {\r\n let angleForwardWithDirectionUp = forward.vec3_angle(direction3DUp);\r\n this._myFlyingForward = this._myFlyingForward ||\r\n (angleForwardWithDirectionUp < 90 - this._myParams.myMinAngleToFlyForwardUp || angleForwardWithDirectionUp > 90 + this._myParams.myMinAngleToFlyForwardDown);\r\n }\r\n\r\n if (this._myParams.myAutoUpdateFlyRight) {\r\n let angleRightWithDirectionUp = right.vec3_angle(direction3DUp);\r\n this._myFlyingRight = this._myFlyingRight ||\r\n (angleRightWithDirectionUp < 90 - this._myParams.myMinAngleToFlyRightUp || angleRightWithDirectionUp > 90 + this._myParams.myMinAngleToFlyRightDown);\r\n }\r\n\r\n // Remove the component to prevent flying, if needed\r\n if (!this._myFlyingForward) {\r\n // If the forward is too similar to the up (or down) take the last valid forward\r\n if (this._myParams.myAdjustForwardWhenCloseToUp && !this._myLastValidFlatForward.vec3_isZero(Math.PP_EPSILON) &&\r\n (forward.vec3_angle(direction3DUp) < this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold ||\r\n forward.vec3_angle(direction3DUpNegate) < this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold)) {\r\n forward.pp_copy(this._myLastValidFlatForward);\r\n } else if (upsideDown && this._myParams.myInvertForwardWhenUpsideDown) {\r\n forward.vec3_negate(forward);\r\n }\r\n\r\n forward = forward.vec3_removeComponentAlongAxis(direction3DUp, forward);\r\n forward.vec3_normalize(forward);\r\n\r\n\r\n if (forward.vec3_isZero(Math.PP_EPSILON)) {\r\n if (!this._myLastValidFlatForward.vec3_isZero(Math.PP_EPSILON)) {\r\n forward.pp_copy(this._myLastValidFlatForward);\r\n } else {\r\n forward.vec3_set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!this._myFlyingRight) {\r\n // If the right is too similar to the up (or down) take the last valid right\r\n if (this._myParams.myAdjustRightWhenCloseToUp && !this._myLastValidFlatRight.vec3_isZero(Math.PP_EPSILON) &&\r\n (right.vec3_angle(direction3DUp) < this._myParams.myAdjustRightWhenCloseToUpAngleThreshold ||\r\n right.vec3_angle(direction3DUpNegate) < this._myParams.myAdjustRightWhenCloseToUpAngleThreshold)) {\r\n right.pp_copy(this._myLastValidFlatRight);\r\n } else if (upsideDown && this._myParams.myInvertRightWhenUpsideDown) {\r\n right.vec3_negate(right);\r\n }\r\n\r\n right = right.vec3_removeComponentAlongAxis(direction3DUp, right);\r\n right.vec3_normalize(right);\r\n\r\n if (right.vec3_isZero(Math.PP_EPSILON)) {\r\n if (!this._myLastValidFlatRight.vec3_isZero(Math.PP_EPSILON)) {\r\n right.pp_copy(this._myLastValidFlatRight);\r\n } else {\r\n right.vec3_set(-1, 0, 0);\r\n }\r\n }\r\n }\r\n\r\n // Update last valid\r\n if ((forward.vec3_angle(direction3DUp) >= this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold && forward.vec3_angle(direction3DUpNegate) >= this._myParams.myAdjustForwardWhenCloseToUpAngleThreshold) ||\r\n (direction2D[1] != 0 && this._myLastValidFlatForward.vec3_isZero(Math.PP_EPSILON))) {\r\n this._myLastValidFlatForward = forward.vec3_removeComponentAlongAxis(direction3DUp, this._myLastValidFlatForward);\r\n this._myLastValidFlatForward.vec3_normalize(this._myLastValidFlatForward);\r\n }\r\n\r\n if ((right.vec3_angle(direction3DUp) >= this._myParams.myAdjustRightWhenCloseToUpAngleThreshold && right.vec3_angle(direction3DUpNegate) >= this._myParams.myAdjustRightWhenCloseToUpAngleThreshold) ||\r\n (direction2D[0] != 0 && this._myLastValidFlatRight.vec3_isZero(Math.PP_EPSILON))) {\r\n this._myLastValidFlatRight = right.vec3_removeComponentAlongAxis(direction3DUp, this._myLastValidFlatRight);\r\n this._myLastValidFlatRight.vec3_normalize(this._myLastValidFlatRight);\r\n }\r\n }\r\n\r\n // Compute direction 3D\r\n outDirection3D = right.vec3_scale(direction2D[0], rightScaled).vec3_add(forward.vec3_scale(direction2D[1], forwardScaled), outDirection3D);\r\n\r\n if (direction3DUp != null && !this._myFlyingForward && !this._myFlyingRight) {\r\n outDirection3D = outDirection3D.vec3_removeComponentAlongAxis(direction3DUp, outDirection3D);\r\n }\r\n\r\n outDirection3D.vec3_normalize(outDirection3D);\r\n }\r\n\r\n this._myLastConvertRotationQuat.quat_copy(conversionRotationQuat);\r\n this._myLastConvertRotationQuatValid = true;\r\n\r\n return outDirection3D;\r\n };\r\n}();", "import { EasingFunction } from \"../../../cauldron/utils/math_utils.js\";\r\n\r\nexport type RoundingFunction = (numberToRound: number, fromNumber: number, toNumber: number) => number;\r\n\r\n// You can just put fromNumber if u want a number that doesn't actually change -> new NumberOverFactor(0)\r\nexport class NumberOverFactor {\r\n\r\n private _myFromNumber: number;\r\n private _myToNumber: number;\r\n\r\n private _myFromFactor: number;\r\n private _myToFactor: number;\r\n\r\n private _myEasingFunction: EasingFunction;\r\n\r\n private _myRoundingFunction: RoundingFunction | null; // Math.round/floor/ceil can be used\r\n\r\n constructor(fromNumber: number, toNumber: number = fromNumber, fromFactor: number = 0, toFactor: number = 0, easingFunction: EasingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n this._myFromNumber = fromNumber;\r\n this._myToNumber = toNumber;\r\n\r\n this._myFromFactor = fromFactor;\r\n this._myToFactor = toFactor;\r\n\r\n this._myEasingFunction = easingFunction;\r\n\r\n this._myRoundingFunction = roundingFunction;\r\n }\r\n\r\n get(factor: number): number {\r\n const interpolationFactor = this._myEasingFunction(Math.pp_mapToRange(factor, this._myFromFactor, this._myToFactor, 0, 1));\r\n let numberOverFactor = Math.pp_lerp(this._myFromNumber, this._myToNumber, interpolationFactor);\r\n\r\n if (this._myRoundingFunction != null) {\r\n numberOverFactor = this._myRoundingFunction(numberOverFactor, this._myFromNumber, this._myToNumber);\r\n }\r\n\r\n return numberOverFactor;\r\n }\r\n\r\n getAverage(factor: number): number {\r\n return this.get(factor);\r\n }\r\n\r\n getRange(factor: number): [number, number] {\r\n const numberOverFactor = this.get(factor);\r\n return [numberOverFactor, numberOverFactor];\r\n }\r\n\r\n getMax(factor: number): number {\r\n return this.get(factor);\r\n }\r\n\r\n getMin(factor: number): number {\r\n return this.get(factor);\r\n }\r\n\r\n isInside(number: number, factor: number): boolean {\r\n const numberOverFactor = this.get(factor);\r\n\r\n return numberOverFactor == number;\r\n }\r\n\r\n isInsideAngleRange(number: number, factor: number): boolean {\r\n return this.isInsideAngleRangeDegrees(number, factor);\r\n }\r\n\r\n isInsideAngleRangeDegrees(number: number, factor: number): boolean {\r\n const numberOverFactor = this.get(factor);\r\n\r\n const clampedNumber = Math.pp_angleClampDegrees(number);\r\n const clampedNumberOverFactor = Math.pp_angleClampDegrees(numberOverFactor);\r\n\r\n return clampedNumber == clampedNumberOverFactor;\r\n }\r\n\r\n isInsideAngleRangeRadians(number: number, factor: number): boolean {\r\n const numberOverFactor = this.get(factor);\r\n\r\n const clampedNumber = Math.pp_angleClampRadians(number);\r\n const clampedNumberOverFactor = Math.pp_angleClampRadians(numberOverFactor);\r\n\r\n return clampedNumber == clampedNumberOverFactor;\r\n }\r\n}\r\n\r\nexport class IntOverFactor extends NumberOverFactor {\r\n\r\n constructor(fromNumber: number, toNumber: number = fromNumber, fromFactor: number = 0, toFactor: number = 0, easingFunction: EasingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n if (roundingFunction == null) {\r\n roundingFunction = function (numberToRound: number, fromNumber: number, toNumber: number): number {\r\n let roundedNumber = null;\r\n\r\n const useFloor = fromNumber <= toNumber;\r\n if (useFloor) {\r\n roundedNumber = Math.floor(numberToRound);\r\n } else {\r\n roundedNumber = Math.ceil(numberToRound);\r\n }\r\n\r\n return roundedNumber;\r\n };\r\n }\r\n\r\n super(fromNumber, toNumber, fromFactor, toFactor, easingFunction, roundingFunction);\r\n }\r\n}\r\n\r\n// You can just put fromRange if u want a range that doesn't actually change -> new NumberOverFactor([1, 25])\r\nexport class NumberRangeOverFactor {\r\n\r\n private _myFromNumberOverFactor: NumberOverFactor;\r\n private _myToNumberOverFactor: NumberOverFactor;\r\n\r\n private _myRoundingFunction: RoundingFunction | null; // Math.round/floor/ceil can be used\r\n\r\n constructor(fromRange: [number, number], toRange: [number, number] = fromRange, fromFactor: number = 0, toFactor: number = 0, easingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n\r\n this._myFromNumberOverFactor = new NumberOverFactor(fromRange[0], toRange[0], fromFactor, toFactor, easingFunction, roundingFunction);\r\n this._myToNumberOverFactor = new NumberOverFactor(fromRange[1], toRange[1], fromFactor, toFactor, easingFunction, roundingFunction);\r\n\r\n this._myRoundingFunction = roundingFunction;\r\n }\r\n\r\n get(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n let randomNumberOverFactor = null;\r\n\r\n if (this._myRoundingFunction) {\r\n randomNumberOverFactor = Math.pp_randomInt(fromNumber, toNumber);\r\n } else {\r\n randomNumberOverFactor = Math.pp_random(fromNumber, toNumber);\r\n }\r\n\r\n return randomNumberOverFactor;\r\n }\r\n\r\n getAverage(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n let averageNumberOverFactor = (fromNumber + toNumber) / 2;\r\n if (this._myRoundingFunction) {\r\n averageNumberOverFactor = this._myRoundingFunction(averageNumberOverFactor, fromNumber, toNumber);\r\n }\r\n\r\n return averageNumberOverFactor;\r\n }\r\n\r\n getRange(factor: number): [number, number] {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return [fromNumber, toNumber];\r\n }\r\n\r\n getMax(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.max(fromNumber, toNumber);\r\n }\r\n\r\n getMin(factor: number): number {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.min(fromNumber, toNumber);\r\n }\r\n\r\n isInside(number: number, factor: number): boolean {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n const min = Math.min(fromNumber, toNumber);\r\n const max = Math.max(fromNumber, toNumber);\r\n\r\n return number >= min && number <= max;\r\n }\r\n\r\n isInsideAngleRange(number: number, factor: number): boolean {\r\n return this.isInsideAngleRangeDegrees(number, factor);\r\n }\r\n\r\n isInsideAngleRangeDegrees(number: number, factor: number): boolean {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.pp_isInsideAngleRangeDegrees(number, fromNumber, toNumber);\r\n }\r\n\r\n isInsideAngleRangeRadians(number: number, factor: number): boolean {\r\n const fromNumber = this._myFromNumberOverFactor.get(factor);\r\n const toNumber = this._myToNumberOverFactor.get(factor);\r\n\r\n return Math.pp_isInsideAngleRangeRadians(number, fromNumber, toNumber);\r\n }\r\n}\r\n\r\nexport class IntRangeOverFactor extends NumberRangeOverFactor {\r\n\r\n constructor(fromRange: [number, number], toRange: [number, number] = fromRange, fromFactor: number = 0, toFactor: number = 0, easingFunction = EasingFunction.linear, roundingFunction: RoundingFunction | null = null) {\r\n if (roundingFunction == null) {\r\n roundingFunction = function (numberToRound: number, fromNumber: number, toNumber: number): number {\r\n let roundedNumber = null;\r\n\r\n const useFloor = fromNumber <= toNumber;\r\n if (useFloor) {\r\n roundedNumber = Math.floor(numberToRound);\r\n } else {\r\n roundedNumber = Math.ceil(numberToRound);\r\n }\r\n\r\n return roundedNumber;\r\n };\r\n }\r\n\r\n super(fromRange, toRange, fromFactor, toFactor, easingFunction, roundingFunction);\r\n }\r\n}", "import { Component, Emitter, PhysXComponent, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../cauldron/wl/utils/component_utils.js\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\n\r\nexport class GrabbableComponent extends Component {\r\n static TypeName = \"pp-grabbable\";\r\n static Properties = {\r\n _myThrowLinearVelocityMultiplier: Property.float(1),\r\n _myThrowAngularVelocityMultiplier: Property.float(1),\r\n _myKinematicValueOnRelease: Property.enum([\"True\", \"False\", \"Own\"], \"False\"),\r\n _myParentOnRelease: Property.enum([\"Scene\", \"Own\"], \"Own\")\r\n };\r\n\r\n init() {\r\n this._myGrabbed = false;\r\n\r\n this._myGrabber = null;\r\n\r\n this._myOldParent = null;\r\n this._myPhysX = null;\r\n this._myOldKinematicValue = null;\r\n\r\n this._myGrabEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n this._myThrowEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n this._myReleaseEmitter = new Emitter(); // Signature: listener(grabber, grabbable, isThrow)\r\n }\r\n\r\n start() {\r\n this._myOldParent = this.object.pp_getParent();\r\n this._myPhysX = this.object.pp_getComponent(PhysXComponent);\r\n }\r\n\r\n onDeactivate() {\r\n this.release();\r\n }\r\n\r\n grab(grabber) {\r\n if (!this.isGrabbed()) {\r\n this._myOldKinematicValue = this._myPhysX.kinematic;\r\n }\r\n\r\n this.release();\r\n\r\n this._myPhysX.kinematic = true;\r\n\r\n this._myOldParent = this.object.pp_getParent();\r\n this.object.pp_setParent(grabber);\r\n\r\n this._myGrabbed = true;\r\n\r\n this._myGrabEmitter.notify(grabber, this);\r\n }\r\n\r\n throw(linearVelocity, angularVelocity) {\r\n if (this._myGrabbed) {\r\n let grabber = this._myGrabber;\r\n\r\n this._release();\r\n\r\n // #TODO For now kinematic is not updated instantly, add the if as soon as it is\r\n //if (!this._myPhysX.kinematic) {\r\n this._myPhysX.linearVelocity = linearVelocity.vec3_scale(this._myThrowLinearVelocityMultiplier);\r\n this._myPhysX.angularVelocity = angularVelocity.vec3_scale(this._myThrowAngularVelocityMultiplier);\r\n //}\r\n\r\n this._myThrowEmitter.notify(grabber, this);\r\n this._myReleaseEmitter.notify(grabber, this, true);\r\n }\r\n }\r\n\r\n release() {\r\n if (this._myGrabbed) {\r\n let grabber = this._myGrabber;\r\n\r\n this._release();\r\n\r\n this._myReleaseEmitter.notify(grabber, this, false);\r\n }\r\n }\r\n\r\n getLinearVelocity() {\r\n return this._myPhysX.linearVelocity.vec3_clone();\r\n }\r\n\r\n getAngularVelocity() {\r\n return this.getAngularVelocityDegrees();\r\n }\r\n\r\n getAngularVelocityDegrees() {\r\n let angularVelocityDegrees = vec3_create();\r\n\r\n this._myPhysX.angularVelocity.vec3_toDegrees(angularVelocityDegrees);\r\n\r\n return angularVelocityDegrees;\r\n }\r\n\r\n getAngularVelocityRadians() {\r\n return this._myPhysX.angularVelocity.vec3_clone();\r\n }\r\n\r\n isGrabbed() {\r\n return this._myGrabbed;\r\n }\r\n\r\n getGrabber() {\r\n return this._myGrabber;\r\n }\r\n\r\n registerGrabEventListener(id, listener) {\r\n this._myGrabEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterGrabEventListener(id) {\r\n this._myGrabEmitter.remove(id);\r\n }\r\n\r\n registerThrowEventListener(id, listener) {\r\n this._myThrowEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterThrowEventListener(id) {\r\n this._myThrowEmitter.remove(id);\r\n }\r\n\r\n registerReleaseEventListener(id, listener) {\r\n this._myReleaseEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterReleaseEventListener(id) {\r\n this._myReleaseEmitter.remove(id);\r\n }\r\n\r\n _release() {\r\n if (this._myParentOnRelease == 0) {\r\n this.object.pp_setParent(Globals.getSceneObjects(this.engine).myDynamics);\r\n } else {\r\n this.object.pp_setParent(this._myOldParent);\r\n }\r\n\r\n this._myGrabbed = false;\r\n this._myGrabber = null;\r\n\r\n if (this._myKinematicValueOnRelease == 0) {\r\n this._myPhysX.kinematic = true;\r\n } else if (this._myKinematicValueOnRelease == 1) {\r\n this._myPhysX.kinematic = false;\r\n } else if (this._myOldKinematicValue != null) {\r\n this._myPhysX.kinematic = this._myOldKinematicValue;\r\n }\r\n\r\n if (this._myPhysX.kinematic) {\r\n this._myPhysX.linearVelocity = vec3_create();\r\n this._myPhysX.angularVelocity = vec3_create();\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n\r\n pp_clonePostProcess(clonedComponent) {\r\n clonedComponent.start();\r\n }\r\n}", "import { Component, Emitter, PhysXComponent, Property } from \"@wonderlandengine/api\";\r\nimport { PhysicsCollisionCollector } from \"../../cauldron/physics/physics_collision_collector.js\";\r\nimport { EasingFunction } from \"../../cauldron/utils/math_utils.js\";\r\nimport { HandednessIndex } from \"../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../input/cauldron/input_utils.js\";\r\nimport { GamepadButtonEvent, GamepadButtonID } from \"../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { GrabbableComponent } from \"./grabbable_component.js\";\r\n\r\nexport class GrabberHandComponent extends Component {\r\n static TypeName = \"pp-grabber-hand\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myGrabButton: Property.enum([\"Select\", \"Squeeze\", \"Both\", \"Both Exclusive\"], \"Squeeze\"), // @\"Both Exclusive\" means u can use both buttons but you have to use the same button you grabbed with to throw\r\n _mySnapGrabbableOnOrigin: Property.bool(false),\r\n _myMaxNumberOfObjects: Property.int(1), // How many objects you can grab at the same time\r\n\r\n // ADVANCED SETTINGS\r\n _myThrowVelocitySource: Property.enum([\"Hand\", \"Grabbable\"], \"Hand\"),\r\n _myThrowLinearVelocityMultiplier: Property.float(1), // Multiply the overall throw speed, so slow throws will be multiplied too\r\n _myThrowMaxLinearSpeed: Property.float(15),\r\n _myThrowAngularVelocityMultiplier: Property.float(0.5),\r\n _myThrowMaxAngularSpeed: Property.float(1080), // @Degrees\r\n _myThrowLinearVelocityBoost: Property.float(1.75), // This boost is applied from 0% to 100% based on how fast you throw, so slow throws are not affected\r\n _myThrowLinearVelocityBoostMinSpeedThreshold: Property.float(0.6), // 0% boost is applied if plain throw speed is under this value\r\n _myThrowLinearVelocityBoostMaxSpeedThreshold: Property.float(2.5), // 100% boost is applied if plain throw speed is over this value\r\n };\r\n\r\n init() {\r\n this._myGrabbables = [];\r\n\r\n this._myGamepad = null;\r\n\r\n this._myActiveGrabButton = null;\r\n\r\n this._myLinearVelocityHistorySize = 5;\r\n this._myLinearVelocityHistorySpeedAverageSamplesFromStart = 1;\r\n this._myLinearVelocityHistoryDirectionAverageSamplesFromStart = 3;\r\n this._myLinearVelocityHistoryDirectionAverageSkipFromStart = 0;\r\n\r\n this._myHandLinearVelocityHistory = new Array(this._myLinearVelocityHistorySize);\r\n this._myHandLinearVelocityHistory.fill(vec3_create());\r\n\r\n this._myAngularVelocityHistorySize = 1;\r\n this._myHandAngularVelocityHistory = new Array(this._myAngularVelocityHistorySize);\r\n this._myHandAngularVelocityHistory.fill(vec3_create());\r\n\r\n this._myThrowMaxAngularSpeedRadians = Math.pp_toRadians(this._myThrowMaxAngularSpeed);\r\n\r\n this._myGrabEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n this._myThrowEmitter = new Emitter(); // Signature: listener(grabber, grabbable)\r\n\r\n this._myDebugEnabled = false;\r\n }\r\n\r\n start() {\r\n if (this._myHandedness == HandednessIndex.LEFT) {\r\n this._myGamepad = Globals.getLeftGamepad(this.engine);\r\n } else {\r\n this._myGamepad = Globals.getRightGamepad(this.engine);\r\n }\r\n\r\n this._myPhysX = this.object.pp_getComponent(PhysXComponent);\r\n this._myCollisionsCollector = new PhysicsCollisionCollector(this._myPhysX, true);\r\n }\r\n\r\n update(dt) {\r\n this._myCollisionsCollector.update(dt);\r\n\r\n if (this._myGrabbables.length > 0) {\r\n this._updateLinearVelocityHistory();\r\n this._updateAngularVelocityHistory();\r\n }\r\n }\r\n\r\n grab(grabButton = null) {\r\n this._grab(grabButton);\r\n }\r\n\r\n throw(throwButton = null) {\r\n this._throw(throwButton);\r\n }\r\n\r\n getGamepad() {\r\n return this._myGamepad;\r\n }\r\n\r\n getHandedness() {\r\n return InputUtils.getHandednessByIndex(this._myHandedness);\r\n }\r\n\r\n registerGrabEventListener(id, listener) {\r\n this._myGrabEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterGrabEventListener(id) {\r\n this._myGrabEmitter.remove(id);\r\n }\r\n\r\n registerThrowEventListener(id, listener) {\r\n this._myThrowEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterThrowEventListener(id) {\r\n this._myThrowEmitter.remove(id);\r\n }\r\n\r\n onActivate() {\r\n if (this._myGamepad != null) {\r\n if (this._myGrabButton == 0) {\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SELECT));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SELECT));\r\n } else if (this._myGrabButton == 1) {\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SQUEEZE));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SQUEEZE));\r\n } else {\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SQUEEZE));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SQUEEZE));\r\n\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this, this._grab.bind(this, GamepadButtonID.SELECT));\r\n this._myGamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this, this._throw.bind(this, GamepadButtonID.SELECT));\r\n }\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n this.throw();\r\n\r\n if (this._myGamepad != null) {\r\n if (this._myGrabButton == 0) {\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this);\r\n } else if (this._myGrabButton == 1) {\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this);\r\n } else {\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.PRESS_END, this);\r\n\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_START, this);\r\n this._myGamepad.unregisterButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.PRESS_END, this);\r\n }\r\n }\r\n }\r\n\r\n _grab(grabButton) {\r\n if (this._myGrabbables.length >= this._myMaxNumberOfObjects) {\r\n return;\r\n }\r\n\r\n if (this._myGrabButton == 2 || this._myActiveGrabButton == null || this._myActiveGrabButton == grabButton || grabButton == null) {\r\n let grabbablesToGrab = [];\r\n\r\n let collisions = this._myCollisionsCollector.getCollisions();\r\n for (let i = 0; i < collisions.length; i++) {\r\n let grabbable = collisions[i].pp_getComponent(GrabbableComponent);\r\n if (grabbable && grabbable.active) {\r\n grabbablesToGrab.push(grabbable);\r\n }\r\n }\r\n\r\n let grabberPosition = this.object.pp_getPosition();\r\n grabbablesToGrab.sort(function (first, second) {\r\n let firstPosition = first.object.pp_getPosition();\r\n let secondPosition = second.object.pp_getPosition();\r\n\r\n let firstDistance = firstPosition.vec3_distance(grabberPosition);\r\n let secondDistance = secondPosition.vec3_distance(grabberPosition);\r\n\r\n return Math.pp_sign(firstDistance - secondDistance, 0);\r\n });\r\n\r\n for (let grabbableToGrab of grabbablesToGrab) {\r\n if (!this._isAlreadyGrabbed(grabbableToGrab)) {\r\n let grabbableData = new _GrabberHandComponentGrabbableData(grabbableToGrab, this._myThrowVelocitySource == 1, this._myLinearVelocityHistorySize, this._myAngularVelocityHistorySize);\r\n this._myGrabbables.push(grabbableData);\r\n grabbableToGrab.grab(this.object);\r\n grabbableToGrab.registerReleaseEventListener(this, this._onRelease.bind(this));\r\n\r\n if (this._mySnapGrabbableOnOrigin) {\r\n grabbableToGrab.object.pp_resetPositionLocal();\r\n }\r\n\r\n this._myGrabEmitter.notify(this, grabbableToGrab);\r\n }\r\n\r\n if (this._myGrabbables.length >= this._myMaxNumberOfObjects) {\r\n break;\r\n }\r\n }\r\n\r\n if (this._myGrabbables.length > 0) {\r\n if (this._myActiveGrabButton == null) {\r\n this._myActiveGrabButton = grabButton;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _throw(throwButton) {\r\n if (this._myGrabButton == 2 || this._myActiveGrabButton == null || this._myActiveGrabButton == throwButton || throwButton == null) {\r\n if (this._myGrabbables.length > 0) {\r\n let linearVelocity = null;\r\n let angularVelocity = null;\r\n\r\n if (this._myThrowVelocitySource == 0) {\r\n linearVelocity = this._computeReleaseLinearVelocity(this._myHandLinearVelocityHistory);\r\n angularVelocity = this._computeReleaseAngularVelocity(this._myHandAngularVelocityHistory);\r\n }\r\n\r\n for (let grabbableData of this._myGrabbables) {\r\n let grabbable = grabbableData.getGrabbable();\r\n\r\n grabbable.unregisterReleaseEventListener(this);\r\n\r\n if (this._myThrowVelocitySource == 1) {\r\n linearVelocity = this._computeReleaseLinearVelocity(grabbableData.getLinearVelocityHistory());\r\n angularVelocity = this._computeReleaseAngularVelocity(grabbableData.getAngularVelocityHistory());\r\n }\r\n\r\n grabbable.throw(linearVelocity, angularVelocity);\r\n\r\n this._myThrowEmitter.notify(this, grabbable);\r\n }\r\n\r\n this._myGrabbables = [];\r\n }\r\n\r\n this._myActiveGrabButton = null;\r\n }\r\n }\r\n\r\n _onRelease(grabber, grabbable) {\r\n grabbable.unregisterReleaseEventListener(this);\r\n this._myGrabbables.pp_remove(element => element.getGrabbable() == grabbable);\r\n\r\n if (this._myGrabbables.length <= 0) {\r\n this._myActiveGrabButton = null;\r\n }\r\n }\r\n\r\n _updateLinearVelocityHistory() {\r\n let handPose = this._myGamepad.getHandPose();\r\n this._myHandLinearVelocityHistory.unshift(handPose.getLinearVelocity());\r\n this._myHandLinearVelocityHistory.pop();\r\n\r\n for (let grabbable of this._myGrabbables) {\r\n grabbable.updateLinearVelocityHistory();\r\n }\r\n }\r\n\r\n _updateAngularVelocityHistory() {\r\n let handPose = this._myGamepad.getHandPose();\r\n this._myHandAngularVelocityHistory.unshift(handPose.getAngularVelocityRadians());\r\n this._myHandAngularVelocityHistory.pop();\r\n\r\n for (let grabbable of this._myGrabbables) {\r\n grabbable.updateAngularVelocityHistory();\r\n }\r\n }\r\n\r\n _computeReleaseLinearVelocity(linearVelocityHistory) {\r\n // Speed\r\n let speed = linearVelocityHistory[0].vec3_length();\r\n for (let i = 1; i < this._myLinearVelocityHistorySpeedAverageSamplesFromStart; i++) {\r\n speed += linearVelocityHistory[i].vec3_length();\r\n }\r\n speed /= this._myLinearVelocityHistorySpeedAverageSamplesFromStart;\r\n\r\n // This way I give an increasing and smooth boost to the throw so that when u want to perform a weak throw, the value is not changed, but if u put more speed\r\n // it will be boosted to make it easier and still feel good and natural (value does not increase suddenly)\r\n let speedEaseMultiplier = Math.pp_mapToRange(speed, this._myThrowLinearVelocityBoostMinSpeedThreshold, this._myThrowLinearVelocityBoostMaxSpeedThreshold, 0, 1);\r\n speedEaseMultiplier = EasingFunction.easeIn(speedEaseMultiplier);\r\n\r\n // Add the boost to the speed\r\n let extraSpeed = speed * (speedEaseMultiplier * this._myThrowLinearVelocityBoost);\r\n speed += extraSpeed;\r\n speed *= this._myThrowLinearVelocityMultiplier;\r\n speed = Math.pp_clamp(speed, 0, this._myThrowMaxLinearSpeed);\r\n\r\n if (this._myDebugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n this._debugDirectionLines(linearVelocityHistory);\r\n }\r\n\r\n // Direction\r\n let directionCurrentWeight = this._myLinearVelocityHistoryDirectionAverageSamplesFromStart;\r\n let lastDirectionIndex = this._myLinearVelocityHistoryDirectionAverageSkipFromStart + this._myLinearVelocityHistoryDirectionAverageSamplesFromStart;\r\n let direction = vec3_create();\r\n for (let i = this._myLinearVelocityHistoryDirectionAverageSkipFromStart; i < lastDirectionIndex; i++) {\r\n let currentDirection = linearVelocityHistory[i];\r\n currentDirection.vec3_scale(directionCurrentWeight, currentDirection);\r\n direction.vec3_add(currentDirection, direction);\r\n\r\n directionCurrentWeight--;\r\n }\r\n direction.vec3_normalize(direction);\r\n\r\n direction.vec3_scale(speed, direction);\r\n\r\n return direction;\r\n }\r\n\r\n _computeReleaseAngularVelocity(angularVelocityHistory) {\r\n let angularVelocity = angularVelocityHistory[0];\r\n\r\n // Speed\r\n let speed = angularVelocity.vec3_length();\r\n\r\n speed = Math.pp_clamp(speed * this._myThrowAngularVelocityMultiplier, 0, this._myThrowMaxAngularSpeedRadians);\r\n\r\n // Direction\r\n let direction = angularVelocity;\r\n direction.vec3_normalize(direction);\r\n\r\n direction.vec3_scale(speed, direction);\r\n\r\n return direction;\r\n }\r\n\r\n _debugDirectionLines(linearVelocityHistory) {\r\n for (let j = this._myLinearVelocityHistoryDirectionAverageSkipFromStart + this._myLinearVelocityHistoryDirectionAverageSamplesFromStart; j > this._myLinearVelocityHistoryDirectionAverageSkipFromStart; j--) {\r\n\r\n let directionCurrentWeight = j - this._myLinearVelocityHistoryDirectionAverageSkipFromStart;\r\n let lastDirectionIndex = j - this._myLinearVelocityHistoryDirectionAverageSkipFromStart;\r\n let direction = vec3_create();\r\n for (let i = this._myLinearVelocityHistoryDirectionAverageSkipFromStart; i < lastDirectionIndex; i++) {\r\n let currentDirection = linearVelocityHistory[i].pp_clone();\r\n currentDirection.vec3_scale(directionCurrentWeight, currentDirection);\r\n direction.vec3_add(currentDirection, direction);\r\n\r\n directionCurrentWeight--;\r\n }\r\n direction.vec3_normalize(direction);\r\n\r\n let color = 1 / j;\r\n\r\n Globals.getDebugVisualManager(this.engine).drawLine(5, this.object.pp_getPosition(), direction, 0.2, vec4_create(color, color, color, 1));\r\n }\r\n }\r\n\r\n _isAlreadyGrabbed(grabbable) {\r\n let found = this._myGrabbables.pp_find(element => element.getGrabbable() == grabbable);\r\n return found != null;\r\n }\r\n}\r\n\r\nclass _GrabberHandComponentGrabbableData {\r\n\r\n constructor(grabbable, useGrabbableAsVelocitySource, linearVelocityHistorySize, angularVelocityHistorySize) {\r\n this._myGrabbable = grabbable;\r\n this._myUseGrabbableAsVelocitySource = useGrabbableAsVelocitySource;\r\n\r\n if (this._myUseGrabbableAsVelocitySource) {\r\n this._myLinearVelocityHistory = new Array(linearVelocityHistorySize);\r\n this._myLinearVelocityHistory.fill(vec3_create());\r\n\r\n this._myAngularVelocityHistory = new Array(angularVelocityHistorySize);\r\n this._myAngularVelocityHistory.fill(vec3_create());\r\n }\r\n }\r\n\r\n getGrabbable() {\r\n return this._myGrabbable;\r\n }\r\n\r\n getLinearVelocityHistory() {\r\n return this._myLinearVelocityHistory;\r\n }\r\n\r\n getAngularVelocityHistory() {\r\n return this._myAngularVelocityHistory;\r\n }\r\n\r\n updateLinearVelocityHistory() {\r\n if (this._myUseGrabbableAsVelocitySource) {\r\n this._myLinearVelocityHistory.unshift(this._myGrabbable.getLinearVelocity());\r\n this._myLinearVelocityHistory.pop();\r\n }\r\n }\r\n\r\n updateAngularVelocityHistory() {\r\n if (this._myUseGrabbableAsVelocitySource) {\r\n this._myAngularVelocityHistory.unshift(this._myGrabbable.getAngularVelocityRadians());\r\n this._myAngularVelocityHistory.pop();\r\n }\r\n }\r\n\r\n onDestroy() {\r\n this._myCollisionsCollector.destroy();\r\n }\r\n}", "let _myDummyServer = null;\r\nlet _myUseDummyServerOnSDKMissing = false;\r\nlet _myUseDummyServerOnError = false;\r\n\r\nexport let CAError = {\r\n NONE: 0,\r\n CA_SDK_MISSING: 1,\r\n DUMMY_NOT_INITIALIZED: 2,\r\n GET_LEADERBOARD_FAILED: 3,\r\n SUBMIT_SCORE_FAILED: 4,\r\n GET_USER_FAILED: 5,\r\n USER_NOT_LOGGED_IN: 6,\r\n USER_HAS_NO_SCORE: 7\r\n};\r\n\r\nexport function setUseDummyServerOnSDKMissing(useDummyServer) {\r\n _myUseDummyServerOnSDKMissing = useDummyServer;\r\n}\r\n\r\nexport function setUseDummyServerOnError(useDummyServer) {\r\n _myUseDummyServerOnError = useDummyServer;\r\n}\r\n\r\nexport function setDummyServer(dummyServer) {\r\n _myDummyServer = dummyServer;\r\n}\r\n\r\nexport function isUseDummyServerOnSDKMissing() {\r\n return _myUseDummyServerOnSDKMissing;\r\n}\r\n\r\nexport function isUseDummyServerOnError() {\r\n return _myUseDummyServerOnError;\r\n}\r\n\r\nexport function getDummyServer() {\r\n return _myDummyServer;\r\n}\r\n\r\nexport function isSDKAvailable() {\r\n return window.heyVR != null;\r\n}\r\n\r\nexport function getSDK() {\r\n return window.heyVR;\r\n}\r\n\r\nexport function getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback = null, onErrorCallback = null, useDummyServerOverride = null) {\r\n if (CAUtils.isSDKAvailable()) {\r\n try {\r\n _getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount).then(function (result) {\r\n if (result.leaderboard != null) {\r\n if (!aroundPlayer) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback(result.leaderboard);\r\n }\r\n } else {\r\n let userLeaderboard = result.leaderboard;\r\n CAUtils.getUser(\r\n function (user) {\r\n let userName = user.displayName;\r\n let userValid = false;\r\n for (let userLeaderboardEntry of userLeaderboard) {\r\n if (userLeaderboardEntry.displayName == userName) {\r\n userValid = true;\r\n break;\r\n }\r\n }\r\n if (userValid) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback(userLeaderboard);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.USER_HAS_NO_SCORE);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Searching for around player but the user has not submitted a score yet\";\r\n error.type = CAError.USER_HAS_NO_SCORE;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n },\r\n function (error, result) {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, error.type);\r\n } else if (onErrorCallback != null) {\r\n onErrorCallback(error, result);\r\n }\r\n },\r\n false);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.GET_LEADERBOARD_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get leaderboard failed\";\r\n error.type = CAError.GET_LEADERBOARD_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n }\r\n }).catch(function (result) {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.GET_LEADERBOARD_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get leaderboard failed\";\r\n error.type = CAError.GET_LEADERBOARD_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n });\r\n } catch (error) {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.GET_LEADERBOARD_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get leaderboard failed\";\r\n error.type = CAError.GET_LEADERBOARD_FAILED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getLeaderboard != null &&\r\n (_myUseDummyServerOnSDKMissing && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, CAError.CA_SDK_MISSING);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Construct Arcade SDK missing\";\r\n error.type = CAError.CA_SDK_MISSING;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function getLeaderboardDummy(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (_myDummyServer) {\r\n _myDummyServer.getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback, onErrorCallback, caError);\r\n } else {\r\n if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Dummy server not initialized\";\r\n error.type = CAError.DUMMY_NOT_INITIALIZED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function submitScore(leaderboardID, scoreToSubmit, onDoneCallback = null, onErrorCallback = null, useDummyServerOverride = null) {\r\n if (CAUtils.isSDKAvailable()) {\r\n try {\r\n _submitScore(leaderboardID, scoreToSubmit).then(function (result) {\r\n if (result.scoreSubmitted) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback();\r\n }\r\n } else if (result.scoreSubmitted != null) {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.USER_NOT_LOGGED_IN);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"The score can't be submitted because the user is not logged in\";\r\n error.type = CAError.USER_NOT_LOGGED_IN;\r\n onErrorCallback(error, result);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.SUBMIT_SCORE_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Submit score failed\";\r\n error.type = CAError.SUBMIT_SCORE_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n }\r\n }).catch(function (result) {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.SUBMIT_SCORE_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Submit score failed\";\r\n error.type = CAError.SUBMIT_SCORE_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n });\r\n } catch (error) {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.SUBMIT_SCORE_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Submit score failed\";\r\n error.type = CAError.SUBMIT_SCORE_FAILED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.submitScore != null &&\r\n (_myUseDummyServerOnSDKMissing && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, CAError.CA_SDK_MISSING);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Construct Arcade SDK missing\";\r\n error.type = CAError.CA_SDK_MISSING;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function submitScoreDummy(leaderboardID, scoreToSubmit, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (_myDummyServer) {\r\n _myDummyServer.submitScore(leaderboardID, scoreToSubmit, onDoneCallback, onErrorCallback, caError);\r\n } else {\r\n if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Dummy server not initialized\";\r\n error.type = CAError.DUMMY_NOT_INITIALIZED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function getUser(onDoneCallback = null, onErrorCallback = null, useDummyServerOverride = null) {\r\n if (CAUtils.isSDKAvailable()) {\r\n try {\r\n _getUser().then(function (result) {\r\n if (result.user != null && result.user.displayName != null) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback(result.user);\r\n }\r\n } else if (result.user != null) {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.USER_NOT_LOGGED_IN);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"User not logged in\";\r\n error.type = CAError.USER_NOT_LOGGED_IN;\r\n onErrorCallback(error, result);\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.GET_USER_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get user failed\";\r\n error.type = CAError.GET_USER_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n }\r\n }).catch(function (result) {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.GET_USER_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get user failed\";\r\n error.type = CAError.GET_USER_FAILED;\r\n onErrorCallback(error, result);\r\n }\r\n });\r\n } catch (error) {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnError && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.GET_USER_FAILED);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Get user failed\";\r\n error.type = CAError.GET_USER_FAILED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n } else {\r\n if (_myDummyServer != null && _myDummyServer.getUser != null &&\r\n (_myUseDummyServerOnSDKMissing && useDummyServerOverride == null) || (useDummyServerOverride != null && useDummyServerOverride)) {\r\n CAUtils.getUserDummy(onDoneCallback, onErrorCallback, CAError.CA_SDK_MISSING);\r\n } else if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Construct Arcade SDK missing\";\r\n error.type = CAError.CA_SDK_MISSING;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport function getUserDummy(onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (_myDummyServer) {\r\n _myDummyServer.getUser(onDoneCallback, onErrorCallback, caError);\r\n } else {\r\n if (onErrorCallback != null) {\r\n let error = {};\r\n error.reason = \"Dummy server not initialized\";\r\n error.type = CAError.DUMMY_NOT_INITIALIZED;\r\n onErrorCallback(error, null);\r\n }\r\n }\r\n}\r\n\r\nexport let CAUtils = {\r\n setUseDummyServerOnSDKMissing,\r\n setUseDummyServerOnError,\r\n setDummyServer,\r\n isUseDummyServerOnSDKMissing,\r\n isUseDummyServerOnError,\r\n getDummyServer,\r\n isSDKAvailable,\r\n getSDK,\r\n getLeaderboard,\r\n getLeaderboardDummy,\r\n submitScore,\r\n submitScoreDummy,\r\n getUser,\r\n getUserDummy\r\n};\r\n\r\n\r\n\r\n\r\nfunction _getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount) {\r\n let heyVR = CAUtils.getSDK();\r\n\r\n if (aroundPlayer) {\r\n return heyVR.leaderboard.getMy(leaderboardID, scoresAmount).then(function (result) {\r\n let adjustedLeaderboard = [];\r\n for (let leaderboardEntry of result) {\r\n adjustedLeaderboard.push({ rank: leaderboardEntry.rank - 1, displayName: leaderboardEntry.user, score: leaderboardEntry.score });\r\n }\r\n return { leaderboard: adjustedLeaderboard };\r\n }).catch(function (error) {\r\n if (error != null && error.status != null && error.status.debug == \"err_unauthenticated\") {\r\n return { leaderboard: [] };\r\n } else {\r\n return { leaderboard: null };\r\n }\r\n });\r\n } else {\r\n return heyVR.leaderboard.get(leaderboardID, scoresAmount).then(function (result) {\r\n let adjustedLeaderboard = [];\r\n for (let leaderboardEntry of result) {\r\n adjustedLeaderboard.push({ rank: leaderboardEntry.rank - 1, displayName: leaderboardEntry.user, score: leaderboardEntry.score });\r\n }\r\n return { leaderboard: adjustedLeaderboard };\r\n }).catch(function () {\r\n return { leaderboard: null };\r\n });\r\n }\r\n}\r\n\r\nfunction _submitScore(leaderboardID, scoreToSubmit) {\r\n let heyVR = CAUtils.getSDK();\r\n return heyVR.leaderboard.postScore(leaderboardID, scoreToSubmit).then(function () {\r\n return { scoreSubmitted: true };\r\n }).catch(function (error) {\r\n if (error != null && error.status != null && error.status.debug == \"err_unauthenticated\") {\r\n return { scoreSubmitted: false };\r\n } else {\r\n return { scoreSubmitted: null };\r\n }\r\n });\r\n}\r\n\r\nfunction _getUser() {\r\n let heyVR = CAUtils.getSDK();\r\n return heyVR.user.getName().then(result => {\r\n return { user: { displayName: result } };\r\n }).catch(function (error) {\r\n if (error != null && error.status != null && error.status.debug == \"err_unauthenticated\") {\r\n return { user: { displayName: null } };\r\n } else {\r\n return { user: null };\r\n }\r\n });\r\n}", "import { CAError } from \"./ca_utils.js\";\r\n\r\nexport class CADummyServer {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n getLeaderboard(leaderboardID, ascending, aroundPlayer, scoresAmount, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n let leaderboard = null;\r\n\r\n if (caError != CAError.CA_SDK_MISSING) {\r\n if (aroundPlayer && (caError == CAError.USER_NOT_LOGGED_IN || caError == CAError.USER_HAS_NO_SCORE)) {\r\n leaderboard = [\r\n { rank: 0, displayName: \"Sign In\", score: 0 },\r\n { rank: 1, displayName: \"And\", score: 0 },\r\n { rank: 2, displayName: \"Play\", score: 0 },\r\n { rank: 3, displayName: \"On\", score: 0 },\r\n { rank: 4, displayName: \"HeyVR\", score: 0 },\r\n { rank: 5, displayName: \"To\", score: 0 },\r\n { rank: 6, displayName: \"Submit\", score: 0 },\r\n { rank: 7, displayName: \"Your\", score: 0 },\r\n { rank: 8, displayName: \"Own\", score: 0 },\r\n { rank: 9, displayName: \"Score\", score: 0 }\r\n ];\r\n } else {\r\n leaderboard = [\r\n { rank: 0, displayName: \"An\", score: 0 },\r\n { rank: 1, displayName: \"Error\", score: 0 },\r\n { rank: 2, displayName: \"Has\", score: 0 },\r\n { rank: 3, displayName: \"Occurred\", score: 0 },\r\n { rank: 4, displayName: \"While\", score: 0 },\r\n { rank: 5, displayName: \"Trying\", score: 0 },\r\n { rank: 6, displayName: \"To\", score: 0 },\r\n { rank: 7, displayName: \"Retrieve\", score: 0 },\r\n { rank: 8, displayName: \"The\", score: 0 },\r\n { rank: 9, displayName: \"Leaderboard\", score: 0 }\r\n ];\r\n }\r\n } else {\r\n if (aroundPlayer) {\r\n leaderboard = [\r\n { rank: 0, displayName: \"Sign In\", score: 0 },\r\n { rank: 1, displayName: \"And\", score: 0 },\r\n { rank: 2, displayName: \"Play\", score: 0 },\r\n { rank: 3, displayName: \"On\", score: 0 },\r\n { rank: 4, displayName: \"HeyVR\", score: 0 },\r\n { rank: 5, displayName: \"To\", score: 0 },\r\n { rank: 6, displayName: \"Submit\", score: 0 },\r\n { rank: 7, displayName: \"Your\", score: 0 },\r\n { rank: 8, displayName: \"Own\", score: 0 },\r\n { rank: 9, displayName: \"Score\", score: 0 }\r\n ];\r\n } else {\r\n leaderboard = [\r\n { rank: 0, displayName: \"The\", score: 0 },\r\n { rank: 1, displayName: \"Top 10\", score: 0 },\r\n { rank: 2, displayName: \"Leaderboard\", score: 0 },\r\n { rank: 3, displayName: \"Is\", score: 0 },\r\n { rank: 4, displayName: \"Available\", score: 0 },\r\n { rank: 5, displayName: \"Only\", score: 0 },\r\n { rank: 5, displayName: \"When\", score: 0 },\r\n { rank: 7, displayName: \"Playing\", score: 0 },\r\n { rank: 8, displayName: \"On\", score: 0 },\r\n { rank: 9, displayName: \"HeyVR\", score: 0 },\r\n ];\r\n }\r\n }\r\n\r\n while (leaderboard.length > scoresAmount) {\r\n leaderboard.pop();\r\n }\r\n\r\n if (onDoneCallback != null) {\r\n onDoneCallback(leaderboard);\r\n }\r\n }\r\n\r\n submitScore(leaderboardID, scoreToSubmit, onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n if (onDoneCallback != null) {\r\n onDoneCallback();\r\n }\r\n }\r\n\r\n getUser(onDoneCallback = null, onErrorCallback = null, caError = CAError.NONE) {\r\n let user = {};\r\n user.displayName = \"Florian\";\r\n\r\n if (onDoneCallback != null) {\r\n onDoneCallback(user);\r\n }\r\n }\r\n}", "import { Component, Property, TextComponent } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../cauldron/wl/utils/component_utils.js\";\r\nimport { CADummyServer } from \"./ca_dummy_server.js\";\r\nimport { CAUtils } from \"./ca_utils.js\";\r\n\r\nexport class CADisplayLeaderboardComponent extends Component {\r\n static TypeName = \"pp-ca-display-leaderboard\";\r\n static Properties = {\r\n _myUsernamesTextObject: Property.object(),\r\n _myScoresTextObject: Property.object(),\r\n _myLeaderboardID: Property.string(\"\"),\r\n _myLocal: Property.bool(false),\r\n _myAscending: Property.bool(false),\r\n _myScoresAmount: Property.int(10),\r\n _myScoreFormat: Property.enum([\"Value\", \"Hours:Minutes:Seconds\", \"Minutes:Seconds\", \"Seconds\", \"Hours:Minutes\", \"Minutes\"], \"Value\"),\r\n _myPositionAndUsernameSeparator: Property.string(\" - \"),\r\n _myNumberOfLinesBetweenScores: Property.int(1),\r\n _myAddDefaultCADummyServer: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myUsernamesTextComponent = null;\r\n this._myScoresTextComponent = null;\r\n\r\n this._myStarted = false;\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n if (this._myAddDefaultCADummyServer) {\r\n CAUtils.setDummyServer(new CADummyServer());\r\n CAUtils.setUseDummyServerOnSDKMissing(true);\r\n CAUtils.setUseDummyServerOnError(true);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (!this._myStarted) {\r\n this._myStarted = true;\r\n\r\n if (this._myUsernamesTextObject != null) {\r\n this._myUsernamesTextComponent = this._myUsernamesTextObject.pp_getComponent(TextComponent);\r\n }\r\n\r\n if (this._myScoresTextObject != null) {\r\n this._myScoresTextComponent = this._myScoresTextObject.pp_getComponent(TextComponent);\r\n }\r\n\r\n this.updateLeaderboard();\r\n }\r\n }\r\n\r\n updateLeaderboard() {\r\n CAUtils.getLeaderboard(this._myLeaderboardID, this._myAscending, this._myLocal, this._myScoresAmount, this._onLeaderboardRetrieved.bind(this));\r\n }\r\n\r\n _onLeaderboardRetrieved(leaderboard) {\r\n if (this._myDestroyed) return;\r\n\r\n let namesText = \"\";\r\n let scoresText = \"\";\r\n\r\n let maxRankDigit = 0;\r\n for (let value of leaderboard) {\r\n let rank = value.rank + 1;\r\n if (rank.toFixed(0).length > maxRankDigit) {\r\n maxRankDigit = rank.toFixed(0).length;\r\n }\r\n }\r\n\r\n for (let value of leaderboard) {\r\n let rank = value.rank + 1;\r\n let fixedRank = rank.toFixed(0);\r\n while (fixedRank.length < maxRankDigit) {\r\n fixedRank = \"0\".concat(fixedRank);\r\n }\r\n\r\n let newlines = \"\\n\";\r\n for (let i = 0; i < this._myNumberOfLinesBetweenScores; i++) {\r\n newlines = newlines + \"\\n\";\r\n }\r\n\r\n namesText = namesText.concat(fixedRank, this._myPositionAndUsernameSeparator, value.displayName, newlines);\r\n\r\n let convertedScore = this._formatScore(value.score);\r\n scoresText = scoresText.concat(convertedScore, newlines);\r\n }\r\n\r\n if (this._myUsernamesTextComponent != null) {\r\n this._myUsernamesTextComponent.text = namesText;\r\n }\r\n\r\n if (this._myScoresTextComponent != null) {\r\n this._myScoresTextComponent.text = scoresText;\r\n }\r\n }\r\n\r\n _formatScore(score) {\r\n let convertedScore = score.toString();\r\n\r\n if (this._myScoreFormat == 1) {\r\n convertedScore = this._formatTime(score, true, true, true);\r\n } else if (this._myScoreFormat == 2) {\r\n convertedScore = this._formatTime(score, false, true, true);\r\n } else if (this._myScoreFormat == 3) {\r\n convertedScore = this._formatTime(score, false, false, true);\r\n } else if (this._myScoreFormat == 4) {\r\n convertedScore = this._formatTime(score, true, true, false);\r\n } else if (this._myScoreFormat == 5) {\r\n convertedScore = this._formatTime(score, false, true, false);\r\n }\r\n\r\n return convertedScore;\r\n }\r\n\r\n _formatTime(score, displayHours, displayMinutes, displaySeconds) {\r\n let time = Math.floor(score / 1000);\r\n\r\n let hours = 0;\r\n if (displayHours) {\r\n hours = Math.floor(time / 3600);\r\n time -= hours * 3600;\r\n }\r\n\r\n let minutes = 0;\r\n if (displayMinutes) {\r\n minutes = Math.floor(time / 60);\r\n time -= minutes * 60;\r\n }\r\n\r\n let seconds = 0;\r\n if (displaySeconds) {\r\n seconds = Math.floor(time);\r\n }\r\n\r\n let convertedTime = \"\";\r\n\r\n if (displaySeconds) {\r\n convertedTime = (seconds.toFixed(0).length < 2 && (displayMinutes || displayHours)) ? \"0\".concat(seconds.toFixed(0)) : seconds.toFixed(0);\r\n }\r\n\r\n if (displayMinutes) {\r\n convertedTime = ((minutes.toFixed(0).length < 2 && (displaySeconds || displayHours)) ? \"0\".concat(minutes.toFixed(0)) : minutes.toFixed(0)) + (displaySeconds ? \":\" + convertedTime : \"\");\r\n }\r\n\r\n if (displayHours) {\r\n convertedTime = ((hours.toFixed(0).length < 2 && (displaySeconds || displayMinutes)) ? \"0\".concat(hours.toFixed(0)) : hours.toFixed(0)) + (displayMinutes ? \":\" + convertedTime : \"\");\r\n }\r\n\r\n return convertedTime;\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n\r\n onDestroy() {\r\n this._myDestroyed = true;\r\n }\r\n}", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { CollisionCheckParams } from \"./collision_params.js\";\r\n\r\nexport function generate360TeleportParamsFromMovementParams(movementParams: Readonly, outTeleportParams = new CollisionCheckParams()): CollisionCheckParams {\r\n outTeleportParams.copy(movementParams);\r\n\r\n outTeleportParams.myHalfConeAngle = 180;\r\n outTeleportParams.myHalfConeSliceAmount = Math.round((outTeleportParams.myHalfConeAngle / movementParams.myHalfConeAngle) * movementParams.myHalfConeSliceAmount);\r\n\r\n outTeleportParams.myCheckHorizontalFixedForwardEnabled = true;\r\n outTeleportParams.myCheckHorizontalFixedForward = vec3_create(0, 0, 1);\r\n\r\n return outTeleportParams;\r\n}\r\n\r\nexport const CollisionCheckUtils = {\r\n generate360TeleportParamsFromMovementParams\r\n} as const;", "import { PhysicsLayerFlags } from \"../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { quat_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class CharacterColliderSetup {\r\n\r\n constructor() {\r\n this.myHeight = 0;\r\n\r\n this.myHorizontalCheckParams = new CharacterColliderHorizontalCheckParams();\r\n this.myVerticalCheckParams = new CharacterColliderVerticalCheckParams();\r\n\r\n this.myWallSlideParams = new CharacterColliderWallSlideParams();\r\n\r\n this.myGroundParams = new CharacterColliderSurfaceParams();\r\n this.myCeilingParams = new CharacterColliderSurfaceParams();\r\n\r\n this.mySplitMovementParams = new CharacterColliderSplitMovementParams();\r\n\r\n this.myAdditionalParams = new CharacterColliderAdditionalParams();\r\n\r\n this.myDebugParams = new CharacterColliderDebugParams();\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport let CharacterColliderHorizontalPositionVerticalCheckDirection = {\r\n UPWARD: 0, // Gives less issues with a ground based movement, but may also collide a bit more, resulting in less sliding\r\n DOWNWARD: 1, // Gives less issues with a ceiling based movement (unusual), but may also collide a bit more, resulting in less sliding and more stuck in front of a wall\r\n BOTH: 2 // Check both directions, more expensive (2x checks) and better prevent collisions, sliding more, but is more expensive and gives more issues \r\n\r\n // _\r\n // The issues means that a small step at the end of a slope, maybe due to 2 rectangles, one for the floor and the other for the slope like this -> / \r\n // can create a small step if the floor rectangle is a bit above the end of the slope, this will make the character get stuck thinking it's a wall\r\n // BOTH do a more \"aggressive\" vertical check that makes the character get less stuck in other situations, but can get stuck in this one\r\n // The better solution is to properly create the level, and if possible combine the 2 rectangles by having the floor a little below the end of the slope (like this -> /-)\r\n // The step that is created \"on the other side\" in fact can easily be ignored thanks to the myHorizontalCheckFeetDistanceToIgnore param\r\n // If the level is properly created the best solution should be UPWARD\r\n // and also myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision = false\r\n};\r\n\r\nexport class CharacterColliderHorizontalCheckParams {\r\n\r\n constructor() {\r\n this.myHorizontalCheckConeRadius = 0;\r\n this.myHorizontalCheckConeHalfAngle = 0;\r\n\r\n this.myHorizontalHeightCheckEnabled = false;\r\n\r\n this.myHorizontalCheckFeetDistanceToIgnore = 0;\r\n this.myHorizontalCheckHeadDistanceToIgnore = 0;\r\n // These distances can be used to make the character ignore small steps (like a stair step) so they can move on it\r\n // It also needs the surface pop out to be enabeld to then snap on the step\r\n\r\n this.myHorizontalCheckFixedForwardEnabled = false; // This is basically only useful if the cone angle is 180 degrees\r\n this.myHorizontalCheckFixedForward = vec3_create();\r\n\r\n this.myHorizontalMovementCheckEnabled = false;\r\n\r\n this.myHorizontalMovementCheckRadialSteps = 0;\r\n\r\n this.myHorizontalMovementCheckSplitMovementEnabled = false;\r\n this.myHorizontalMovementCheckSplitMovementMaxSteps = null;\r\n this.myHorizontalMovementCheckSplitMovementMaxStepLength = null;\r\n this.myHorizontalMovementCheckSplitMovementMinStepLength = null;\r\n\r\n this.myHorizontalMovementCheckGetBetterReferenceHit = false;\r\n // If the horizontal movement finds a hit it stops looking, but could end up having a bad reference collision hit\r\n // This makes it so it will check a better hit to use later for the slide\r\n\r\n this.myHorizontalMovementHorizontalRadialCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalStraightCheckEnabled = false;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = false;\r\n\r\n this.myHorizontalMovementHeightCheckSteps = 0;\r\n this.myHorizontalMovementHeightHorizontalCheckEnabled = false;\r\n this.myHorizontalMovementHeightVerticalCheckEnabled = false;\r\n\r\n this.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled = false;\r\n\r\n this.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled = false;\r\n\r\n this.myHorizontalMovementVerticalStraightCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled = false;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = false;\r\n\r\n this.myHorizontalPositionCheckEnabled = false;\r\n this.myHorizontalPositionCheckConeHalfSlices = 0;\r\n this.myHorizontalPositionHorizontalBorderCheckEnabled = false;\r\n this.myHorizontalPositionHorizontalRadialCheckEnabled = false;\r\n\r\n this.myHorizontalPositionHeightCheckSteps = 0;\r\n this.myHorizontalPositionHeightHorizontalCheckEnabled = false;\r\n this.myHorizontalPositionHeightVerticalCheckEnabled = false;\r\n\r\n this.myHorizontalPositionVerticalStraightCheckEnabled = false;\r\n this.myHorizontalPositionVerticalStraightCentralCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled = false;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled = false;\r\n\r\n this.myHorizontalPositionVerticalCheckGetFarthestHit = false; // Not very useful but already implemented so\r\n\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = false;\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = false;\r\n // If the horizontal check does not hit the vertical hit will be restored\r\n // The fact that the horizontal does not hit could be due to the fact that it thinks that the collision can be ignored\r\n // so restoring the vertical hit can be a bit safer (since u are actually colliding) but also can lead to false positive\r\n\r\n this.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision = false; // true gives less issues, but may also collide a bit more, resulting in less sliding\r\n this.myHorizontalPositionVerticalCheckDirection = CharacterColliderHorizontalPositionVerticalCheckDirection.UPWARD;\r\n\r\n this.myHorizontalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHorizontalCheckObjectsToIgnore = [];\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderVerticalCheckParams {\r\n\r\n constructor() {\r\n this.myVerticalCheckCircumferenceRadius = 0;\r\n\r\n this.myVerticalCheckCircumferenceSlices = 0;\r\n this.myVerticalCheckCircumferenceCentralCheckEnabled = false;\r\n this.myVerticalCheckCircumferenceRadialSteps = 0;\r\n this.myVerticalCheckCircumferenceRotationPerRadialStep = 0;\r\n\r\n this.myVerticalCheckFixedForwardEnabled = false;\r\n this.myVerticalCheckFixedForward = vec3_create();\r\n\r\n this.myVerticalMovementCheckEnabled = false;\r\n this.myVerticalMovementCheckReductionEnabled = false;\r\n this.myVerticalMovementCheckPerformCheckOnBothSides = false;\r\n\r\n this.myVerticalPositionCheckEnabled = false;\r\n\r\n this.myVerticalCheckAllowHitsInsideCollisionIfOneValid = false;\r\n // If at least one vertical raycast is valid (no hit, outside collision) is it ok if the other checks are completely inside a collision\r\n // let you keep moving vertically if only partially inside a wall\r\n\r\n this.myVerticalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myVerticalCheckObjectsToIgnore = [];\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport let CharacterColliderSlideFlickerPreventionMode = {\r\n NONE: 0,\r\n USE_PREVIOUS_RESULTS: 1, // Allow some flicker before stabilizing but avoid stopping for a 1 frame flicker only (false positive), is also less expensive\r\n COLLISION_ANGLE_ABOVE_90_DEGREES: 2, // Prevents most flicker apart those on almost flat surface, can have some false positive, always check when sliding into opposite direction\r\n COLLISION_ANGLE_ABOVE_90_DEGREES_OR_MOVEMENT_ANGLE_ABOVE_85_DEGREES: 3, // Less flicker than COLLISION_ANGLE_ABOVE_90_DEGREES but more false positive, always check when sliding into opposite direction\r\n ALWAYS: 4 // Less flicker than COLLISION_ANGLE_ABOVE_90_DEGREES_OR_MOVEMENT_ANGLE_ABOVE_85_DEGREES but more false positive\r\n};\r\n\r\nexport class CharacterColliderWallSlideParams {\r\n\r\n constructor() {\r\n this.myWallSlideEnabled = false;\r\n\r\n this.myWallSlideMaxAttempts = 0;\r\n\r\n this.myCheckBothWallSlideDirections = false;\r\n // Expensive, 2 times the checks since it basically check again on the other slide direction\r\n // This can fix some edge cases in which u can get stuck instead of sliding\r\n // It basically require that u also add flicker prevention\r\n\r\n this.myWallSlideFlickerPreventionMode = CharacterColliderSlideFlickerPreventionMode.NONE;\r\n\r\n this.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = false;\r\n // This flag make it so the prevention is done only if it was already sliding\r\n // This can lead to a few frames of flicker if u go toward a corner directly, but allow the movement to be more fluid, avoiding getting stuck and false positive\r\n\r\n this.myWallSlideFlickerPreventionForceCheckCounter = 0;\r\n // If the collision think it needs to check for flicker, it will keep checking for the next X frames based on this value even if the condition are not met anymore\r\n // This help in catching the flicker when the direction is not changing every frame but every 2-3 for example\r\n // It's especially useful if combo-ed with CharacterColliderSlideFlickerPreventionMode.USE_PREVIOUS_RESULTS, making it a bit less fluid but also less flickering\r\n\r\n this.my90DegreesWallSlideAdjustDirectionSign = false;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderSurfaceParams {\r\n\r\n constructor() {\r\n this.mySurfaceSnapEnabled = false;\r\n this.mySurfaceSnapMaxDistance = 0;\r\n\r\n this.mySurfacePopOutEnabled = false;\r\n this.mySurfacePopOutMaxDistance = 0;\r\n\r\n this.mySurfaceAngleToIgnore = 0;\r\n\r\n this.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle = null;\r\n // Between this value and mySurfaceAngleToIgnore, use the perceived angle to see if u can actually ignore the surface\r\n // This basically means that on steep surface u could still go up by moving diagonally\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance = null;\r\n this.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance = null;\r\n // If the collision with the surface is above this max value, even if the surface angle is ignorable do not ignore it\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = null;\r\n // If the collision with the surface happens during the horizontal movement check, if the horizontal movement left (total movement to perform minus hit distance)\r\n // is above this value do not ignore it otherwise you would ignore a surface but are actually going too much inside it\r\n\r\n this.myCollectSurfaceInfo = false;\r\n\r\n this.myOnSurfaceMaxOutsideDistance = 0;\r\n this.myOnSurfaceMaxInsideDistance = 0;\r\n\r\n this.myBaseInsideCollisionCheckEnabled = false;\r\n this.myOnSurfaceIfBaseInsideCollision = false;\r\n\r\n this.myCollectSurfaceNormalMaxOutsideDistance = 0;\r\n this.myCollectSurfaceNormalMaxInsideDistance = 0;\r\n\r\n this.myCollectSurfaceDistanceOutsideDistance = 0;\r\n this.myCollectSurfaceDistanceInsideDistance = 0;\r\n\r\n this.myCollectSurfaceCollisionHitOutsideDistance = 0;\r\n this.myCollectSurfaceCollisionHitInsideDistance = 0;\r\n\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = false;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = false;\r\n // This make it so when a character moves horizontally on a slope it also add a vertical movement so that the movement is actually on the slope plane\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle = null;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle = null;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle = null;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle = null;\r\n // This can be used to limit the adjustment so that on steep slopes u can bounce off, or anyway don't add a huge vertical movement due to a very steep slope\r\n\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill = false;\r\n // This make it so when a character moves vertically on a slope (sort of sliding down the slope) it also add a horizontal movement so that the movement is actually on the slope plane\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle = null;\r\n // This can be used to make it so the movement (and therefore the slide) only happens above a certain angle, like u want to slide down only on steep surfaces\r\n\r\n this.myMovementMustStayOnSurface = false;\r\n this.myMovementMustStayOnSurfaceHitMaxAngle = null;\r\n this.myMovementMustStayOnIgnorableSurfaceAngleDownhill = false;\r\n this.myMovementMustStayOnSurfaceAngleDownhill = null;\r\n\r\n this.myTeleportMustBeOnSurface = false;\r\n this.myTeleportMustBeOnIgnorableSurfaceAngle = false;\r\n this.myTeleportMustBeOnSurfaceAngle = null;\r\n\r\n this.myCheckTransformMustBeOnSurface = false;\r\n this.myCheckTransformMustBeOnIgnorableSurfaceAngle = false;\r\n this.myCheckTransformMustBeOnSurfaceAngle = null;\r\n\r\n this.myRecollectSurfaceInfoOnSurfaceCheckFailed = false;\r\n // Instead of copying the previous surface info on fail, regather them\r\n\r\n this.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle = false;\r\n // If u start on a not ignorable perceived angle (above angle to ignore) u normally can't even try to move uphill, this will let you try and see if with that movement\r\n // you could end up in a ignorable perceived angle position\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderSplitMovementParams {\r\n\r\n constructor() {\r\n this.mySplitMovementEnabled = false;\r\n\r\n this.mySplitMovementMaxSteps = null;\r\n this.mySplitMovementMaxStepLength = null;\r\n this.mySplitMovementMinStepLength = null;\r\n\r\n this.mySplitMovementStopOnHorizontalMovementFailed = false;\r\n this.mySplitMovementStopOnVerticalMovementFailed = false;\r\n\r\n /*\r\n this will not be available until the bridge is removed with a new implementation that directly use the collider and results\r\n \r\n this.mySplitMovementStopOnCallback = null; // Signature: callback(paramsToBeDefined)\r\n */\r\n\r\n this.mySplitMovementStopReturnPreviousResults = false;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderAdditionalParams {\r\n\r\n constructor() {\r\n this.myPositionOffsetLocal = vec3_create();\r\n this.myRotationOffsetLocalQuat = quat_create();\r\n\r\n /*\r\n these will not be available until the bridge is removed with a new implementation that directly use the collider and results\r\n\r\n this.myExtraMovementCheckCallback = null; // Signature: callback(paramsToBeDefined)\r\n this.myExtraTeleportCheckCallback = null; // Signature: callback(paramsToBeDefined)\r\n this.myExtraCheckTransformCheckCallback = null; // Signature: callback(paramsToBeDefined)\r\n */\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\nexport class CharacterColliderDebugParams {\r\n\r\n constructor() {\r\n this.myVisualDebugEnabled = false;\r\n\r\n this.myVisualDebugMovementEnabled = false;\r\n\r\n this.myVisualDebugHorizontalMovementCheckEnabled = false;\r\n this.myVisualDebugHorizontalPositionCheckEnabled = false;\r\n\r\n this.myVisualDebugVerticalMovementCheckEnabled = false;\r\n this.myVisualDebugVerticalPositionCheckEnabled = false;\r\n\r\n this.myVisualDebugSlideEnabled = false;\r\n\r\n this.myVisualDebugGroundInfoEnabled = false;\r\n this.myVisualDebugCeilingInfoEnabled = false;\r\n\r\n this.myVisualDebugResultsEnabled = false;\r\n }\r\n\r\n copy(other) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nCharacterColliderSetup.prototype.copy = function copy(other) {\r\n this.myHeight = other.myHeight;\r\n\r\n this.myHorizontalCheckParams.copy(other.myHorizontalCheckParams);\r\n this.myVerticalCheckParams.copy(other.myVerticalCheckParams);\r\n\r\n this.myWallSlideParams.copy(other.myWallSlideParams);\r\n\r\n this.myGroundParams.copy(other.myGroundParams);\r\n this.myCeilingParams.copy(other.myCeilingParams);\r\n\r\n this.mySplitMovementParams.copy(other.mySplitMovementParams);\r\n\r\n this.myAdditionalParams.copy(other.myAdditionalParams);\r\n\r\n this.myDebugParams.copy(other.myDebugParams);\r\n};\r\n\r\nCharacterColliderHorizontalCheckParams.prototype.copy = function copy(other) {\r\n this.myHorizontalCheckConeRadius = other.myHorizontalCheckConeRadius;\r\n this.myHorizontalCheckConeHalfAngle = other.myHorizontalCheckConeHalfAngle;\r\n\r\n this.myHorizontalHeightCheckEnabled = other.myHorizontalHeightCheckEnabled;\r\n\r\n this.myHorizontalCheckFeetDistanceToIgnore = other.myHorizontalCheckFeetDistanceToIgnore;\r\n this.myHorizontalCheckHeadDistanceToIgnore = other.myHorizontalCheckHeadDistanceToIgnore;\r\n\r\n this.myHorizontalCheckFixedForwardEnabled = other.myHorizontalCheckFixedForwardEnabled;\r\n this.myHorizontalCheckFixedForward.vec3_copy(other.myHorizontalCheckFixedForward);\r\n\r\n this.myHorizontalMovementCheckEnabled = other.myHorizontalMovementCheckEnabled;\r\n\r\n this.myHorizontalMovementCheckRadialSteps = other.myHorizontalMovementCheckRadialSteps;\r\n\r\n this.myHorizontalMovementCheckSplitMovementEnabled = other.myHorizontalMovementCheckSplitMovementEnabled;\r\n this.myHorizontalMovementCheckSplitMovementMaxSteps = other.myHorizontalMovementCheckSplitMovementMaxSteps;\r\n this.myHorizontalMovementCheckSplitMovementMaxStepLength = other.myHorizontalMovementCheckSplitMovementMaxStepLength;\r\n this.myHorizontalMovementCheckSplitMovementMinStepLength = other.myHorizontalMovementCheckSplitMovementMinStepLength;\r\n\r\n this.myHorizontalMovementCheckGetBetterReferenceHit = other.myHorizontalMovementCheckGetBetterReferenceHit;\r\n\r\n this.myHorizontalMovementHorizontalRadialCheckEnabled = other.myHorizontalMovementHorizontalRadialCheckEnabled;\r\n this.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled = other.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled;\r\n this.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled = other.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled;\r\n this.myHorizontalMovementHorizontalStraightCheckEnabled = other.myHorizontalMovementHorizontalStraightCheckEnabled;\r\n this.myHorizontalMovementHorizontalStraightCentralCheckEnabled = other.myHorizontalMovementHorizontalStraightCentralCheckEnabled;\r\n\r\n this.myHorizontalMovementHeightCheckSteps = other.myHorizontalMovementHeightCheckSteps;\r\n this.myHorizontalMovementHeightVerticalCheckEnabled = other.myHorizontalMovementHeightVerticalCheckEnabled;\r\n this.myHorizontalMovementHeightHorizontalCheckEnabled = other.myHorizontalMovementHeightHorizontalCheckEnabled;\r\n\r\n this.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled = other.myHorizontalMovementVerticalRadialDiagonalOutwardCheckEnabled;\r\n this.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled = other.myHorizontalMovementVerticalRadialDiagonalInwardCheckEnabled;\r\n\r\n this.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled;\r\n this.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled;\r\n this.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled;\r\n this.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled = other.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled;\r\n\r\n this.myHorizontalMovementVerticalStraightCheckEnabled = other.myHorizontalMovementVerticalStraightCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightCentralCheckEnabled = other.myHorizontalMovementVerticalStraightCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled;\r\n this.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = other.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled;\r\n\r\n this.myHorizontalPositionCheckEnabled = other.myHorizontalPositionCheckEnabled;\r\n this.myHorizontalPositionCheckConeHalfSlices = other.myHorizontalPositionCheckConeHalfSlices;\r\n this.myHorizontalPositionHorizontalBorderCheckEnabled = other.myHorizontalPositionHorizontalBorderCheckEnabled;\r\n this.myHorizontalPositionHorizontalRadialCheckEnabled = other.myHorizontalPositionHorizontalRadialCheckEnabled;\r\n\r\n this.myHorizontalPositionHeightCheckSteps = other.myHorizontalPositionHeightCheckSteps;\r\n this.myHorizontalPositionHeightHorizontalCheckEnabled = other.myHorizontalPositionHeightHorizontalCheckEnabled;\r\n this.myHorizontalPositionHeightVerticalCheckEnabled = other.myHorizontalPositionHeightVerticalCheckEnabled;\r\n\r\n this.myHorizontalPositionVerticalStraightCheckEnabled = other.myHorizontalPositionVerticalStraightCheckEnabled;\r\n this.myHorizontalPositionVerticalStraightCentralCheckEnabled = other.myHorizontalPositionVerticalStraightCentralCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled = other.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled = other.myHorizontalPositionVerticalRadialDiagonalInwardCheckEnabled;\r\n this.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled = other.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled;\r\n this.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled = other.myHorizontalPositionVerticalBorderDiagonalInwardCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled = other.myHorizontalPositionVerticalRadialBorderDiagonalOutwardCheckEnabled;\r\n this.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled = other.myHorizontalPositionVerticalRadialBorderDiagonalInwardCheckEnabled;\r\n\r\n this.myHorizontalPositionVerticalCheckGetFarthestHit = other.myHorizontalPositionVerticalCheckGetFarthestHit;\r\n\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = other.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit;\r\n this.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = other.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit;\r\n\r\n this.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision = other.myHorizontalPositionVerticalCheckIgnoreHitsInsideCollision;\r\n this.myHorizontalPositionVerticalCheckDirection = other.myHorizontalPositionVerticalCheckDirection;\r\n\r\n this.myHorizontalCheckBlockLayerFlags.setMask(other.myHorizontalCheckBlockLayerFlags.getMask());\r\n this.myHorizontalCheckObjectsToIgnore.pp_copy(other.myHorizontalCheckObjectsToIgnore);\r\n};\r\n\r\nCharacterColliderVerticalCheckParams.prototype.copy = function copy(other) {\r\n this.myVerticalCheckCircumferenceRadius = other.myVerticalCheckCircumferenceRadius;\r\n\r\n this.myVerticalCheckCircumferenceSlices = other.myVerticalCheckCircumferenceSlices;\r\n this.myVerticalCheckCircumferenceCentralCheckEnabled = other.myVerticalCheckCircumferenceCentralCheckEnabled;\r\n this.myVerticalCheckCircumferenceRadialSteps = other.myVerticalCheckCircumferenceRadialSteps;\r\n this.myVerticalCheckCircumferenceRotationPerRadialStep = other.myVerticalCheckCircumferenceRotationPerRadialStep;\r\n\r\n this.myVerticalCheckFixedForwardEnabled = other.myVerticalCheckFixedForwardEnabled;\r\n this.myVerticalCheckFixedForward.vec3_copy(other.myVerticalCheckFixedForward);\r\n\r\n this.myVerticalMovementCheckEnabled = other.myVerticalMovementCheckEnabled;\r\n this.myVerticalMovementCheckReductionEnabled = other.myVerticalMovementCheckReductionEnabled;\r\n this.myVerticalMovementCheckPerformCheckOnBothSides = other.myVerticalMovementCheckPerformCheckOnBothSides;\r\n\r\n this.myVerticalPositionCheckEnabled = other.myVerticalPositionCheckEnabled;\r\n\r\n this.myVerticalCheckAllowHitsInsideCollisionIfOneValid = other.myVerticalCheckAllowHitsInsideCollisionIfOneValid;\r\n\r\n this.myVerticalCheckBlockLayerFlags.setMask(other.myVerticalCheckBlockLayerFlags.getMask());\r\n this.myVerticalCheckObjectsToIgnore.pp_copy(other.myVerticalCheckObjectsToIgnore);\r\n};\r\n\r\nCharacterColliderWallSlideParams.prototype.copy = function copy(other) {\r\n this.myWallSlideEnabled = other.myWallSlideEnabled;\r\n\r\n this.myWallSlideMaxAttempts = other.myWallSlideMaxAttempts;\r\n\r\n this.myCheckBothWallSlideDirections = other.myCheckBothWallSlideDirections;\r\n\r\n this.myWallSlideFlickerPreventionMode = other.myWallSlideFlickerPreventionMode;\r\n\r\n this.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = other.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding;\r\n\r\n this.myWallSlideFlickerPreventionForceCheckCounter = other.myWallSlideFlickerPreventionForceCheckCounter;\r\n\r\n this.my90DegreesWallSlideAdjustDirectionSign = other.my90DegreesWallSlideAdjustDirectionSign;\r\n};\r\n\r\nCharacterColliderSurfaceParams.prototype.copy = function copy(other) {\r\n this.mySurfaceSnapEnabled = other.mySurfaceSnapEnabled;\r\n this.mySurfaceSnapMaxDistance = other.mySurfaceSnapMaxDistance;\r\n\r\n this.mySurfacePopOutEnabled = other.mySurfacePopOutEnabled;\r\n this.mySurfacePopOutMaxDistance = other.mySurfacePopOutMaxDistance;\r\n\r\n this.mySurfaceAngleToIgnore = other.mySurfaceAngleToIgnore;\r\n this.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle = other.mySurfaceAngleToIgnoreWithSurfacePerceivedAngle;\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance = other.myHorizontalMovementSurfaceAngleToIgnoreMaxVerticalDistance;\r\n this.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance = other.myHorizontalPositionSurfaceAngleToIgnoreMaxVerticalDistance;\r\n\r\n this.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = other.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n\r\n this.myCollectSurfaceInfo = other.myCollectSurfaceInfo;\r\n\r\n this.myOnSurfaceMaxOutsideDistance = other.myOnSurfaceMaxOutsideDistance;\r\n this.myOnSurfaceMaxInsideDistance = other.myOnSurfaceMaxInsideDistance;\r\n\r\n this.myBaseInsideCollisionCheckEnabled = other.myBaseInsideCollisionCheckEnabled;\r\n this.myOnSurfaceIfBaseInsideCollision = other.myOnSurfaceIfBaseInsideCollision;\r\n\r\n this.myCollectSurfaceNormalMaxOutsideDistance = other.myCollectSurfaceNormalMaxOutsideDistance;\r\n this.myCollectSurfaceNormalMaxInsideDistance = other.myCollectSurfaceNormalMaxInsideDistance;\r\n\r\n this.myCollectSurfaceDistanceOutsideDistance = other.myCollectSurfaceDistanceOutsideDistance;\r\n this.myCollectSurfaceDistanceInsideDistance = other.myCollectSurfaceDistanceInsideDistance;\r\n\r\n this.myCollectSurfaceCollisionHitOutsideDistance = other.myCollectSurfaceCollisionHitOutsideDistance;\r\n this.myCollectSurfaceCollisionHitInsideDistance = other.myCollectSurfaceCollisionHitInsideDistance;\r\n\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfaceAngle;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfaceAngle;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhillMaxSurfacePerceivedAngle;\r\n this.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle = other.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphillMaxSurfacePerceivedAngle;\r\n\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill = other.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhill;\r\n this.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle = other.myVerticalMovementAdjustHorizontalMovementOverSurfaceAngleDownhillMinSurfaceAngle;\r\n\r\n this.myMovementMustStayOnSurface = other.myMovementMustStayOnSurface;\r\n this.myMovementMustStayOnSurfaceHitMaxAngle = other.myMovementMustStayOnSurfaceHitMaxAngle;\r\n this.myMovementMustStayOnIgnorableSurfaceAngleDownhill = other.myMovementMustStayOnIgnorableSurfaceAngleDownhill;\r\n this.myMovementMustStayOnSurfaceAngleDownhill = other.myMovementMustStayOnSurfaceAngleDownhill;\r\n\r\n this.myTeleportMustBeOnSurface = other.myTeleportMustBeOnSurface;\r\n this.myTeleportMustBeOnIgnorableSurfaceAngle = other.myTeleportMustBeOnIgnorableSurfaceAngle;\r\n this.myTeleportMustBeOnSurfaceAngle = other.myTeleportMustBeOnSurfaceAngle;\r\n\r\n this.myCheckTransformMustBeOnSurface = other.myCheckTransformMustBeOnSurface;\r\n this.myCheckTransformMustBeOnIgnorableSurfaceAngle = other.myCheckTransformMustBeOnIgnorableSurfaceAngle;\r\n this.myCheckTransformMustBeOnSurfaceAngle = other.myCheckTransformMustBeOnSurfaceAngle;\r\n\r\n this.myRecollectSurfaceInfoOnSurfaceCheckFailed = other.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n\r\n this.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle = other.myHorizontalMovementAllowExitAttemptWhenOnNotIgnorableSurfacePerceivedAngle;\r\n};\r\n\r\nCharacterColliderSplitMovementParams.prototype.copy = function copy(other) {\r\n this.mySplitMovementEnabled = other.mySplitMovementEnabled;\r\n\r\n this.mySplitMovementMaxSteps = other.mySplitMovementMaxSteps;\r\n this.mySplitMovementMaxStepLength = other.mySplitMovementMaxStepLength;\r\n this.mySplitMovementMinStepLength = other.mySplitMovementMinStepLength;\r\n\r\n this.mySplitMovementStopOnHorizontalMovementFailed = other.mySplitMovementStopOnHorizontalMovementFailed;\r\n this.mySplitMovementStopOnVerticalMovementFailed = other.mySplitMovementStopOnVerticalMovementFailed;\r\n\r\n /*\r\n this.mySplitMovementStopOnCallback = other.mySplitMovementStopOnCallback;\r\n */\r\n\r\n this.mySplitMovementStopReturnPreviousResults = other.mySplitMovementStopReturnPreviousResults;\r\n};\r\n\r\nCharacterColliderAdditionalParams.prototype.copy = function copy(other) {\r\n this.myPositionOffsetLocal.vec3_copy(other.myPositionOffsetLocal);\r\n this.myRotationOffsetLocalQuat.quat_copy(other.myRotationOffsetLocalQuat);\r\n\r\n /*\r\n this.myExtraMovementCheckCallback = other.myExtraMovementCheckCallback;\r\n this.myExtraTeleportCheckCallback = other.myExtraTeleportCheckCallback;\r\n this.myExtraCheckTransformCheckCallback = other.myExtraCheckTransformCheckCallback;\r\n */\r\n};\r\n\r\nCharacterColliderDebugParams.prototype.copy = function copy(other) {\r\n this.myVisualDebugEnabled = other.myVisualDebugEnabled;\r\n\r\n this.myVisualDebugMovementEnabled = other.myVisualDebugMovementEnabled;\r\n\r\n this.myVisualDebugHorizontalMovementCheckEnabled = other.myVisualDebugHorizontalMovementCheckEnabled;\r\n this.myVisualDebugHorizontalPositionCheckEnabled = other.myVisualDebugHorizontalPositionCheckEnabled;\r\n\r\n this.myVisualDebugVerticalMovementCheckEnabled = other.myVisualDebugVerticalMovementCheckEnabled;\r\n this.myVisualDebugVerticalPositionCheckEnabled = other.myVisualDebugVerticalPositionCheckEnabled;\r\n\r\n this.myVisualDebugSlideEnabled = other.myVisualDebugSlideEnabled;\r\n\r\n this.myVisualDebugGroundInfoEnabled = other.myVisualDebugGroundInfoEnabled;\r\n this.myVisualDebugCeilingInfoEnabled = other.myVisualDebugCeilingInfoEnabled;\r\n\r\n this.myVisualDebugResultsEnabled = other.myVisualDebugResultsEnabled;\r\n};", "import { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport function computeGroundPerceivedAngle(surfaceNormal, direction, up) {\r\n return this.computeSurfacePerceivedAngle(surfaceNormal, direction, up, true);\r\n}\r\n\r\nexport function computeCeilingPerceivedAngle(surfaceNormal, direction, up) {\r\n return this.computeSurfacePerceivedAngle(surfaceNormal, direction, up, false);\r\n}\r\n\r\nexport let computeSurfacePerceivedAngle = function () {\r\n let directionOnSurface = vec3_create();\r\n let verticalDirection = vec3_create();\r\n return function computeSurfacePerceivedAngle(surfaceNormal, direction, up, ground) {\r\n let surfacePerceivedAngle = 0;\r\n\r\n verticalDirection.vec3_copy(up);\r\n if (!ground) {\r\n verticalDirection.vec3_negate(verticalDirection);\r\n }\r\n\r\n let surfaceAngle = surfaceNormal.vec3_angle(verticalDirection);\r\n if (surfaceAngle <= Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 0;\r\n } else if (surfaceAngle >= 180 - Math.PP_EPSILON_DEGREES) {\r\n surfaceAngle = 180;\r\n }\r\n\r\n directionOnSurface = direction.vec3_projectOnPlaneAlongAxis(surfaceNormal, up, directionOnSurface);\r\n surfacePerceivedAngle = directionOnSurface.vec3_angle(direction);\r\n\r\n let fartherOnUp = directionOnSurface.vec3_isFartherAlongAxis(direction, up);\r\n if ((!fartherOnUp && ground) || (fartherOnUp && !ground)) {\r\n surfacePerceivedAngle *= -1;\r\n }\r\n\r\n if (Math.abs(surfacePerceivedAngle) >= surfaceAngle) {\r\n if (surfaceAngle != 0 && surfaceAngle != 180) {\r\n surfacePerceivedAngle = surfaceAngle * Math.pp_sign(surfacePerceivedAngle);\r\n } else {\r\n surfacePerceivedAngle = surfaceAngle;\r\n }\r\n }\r\n\r\n return surfacePerceivedAngle;\r\n };\r\n}();\r\n\r\nexport let CharacterControllerUtils = {\r\n computeGroundPerceivedAngle,\r\n computeCeilingPerceivedAngle,\r\n computeSurfacePerceivedAngle\r\n};", "import { PhysicsLayerFlags } from \"../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { CharacterColliderSetup, CharacterColliderSlideFlickerPreventionMode } from \"./character_collider_setup.js\";\r\n\r\nexport let CharacterColliderSetupSimplifiedCreationAccuracyLevel = {\r\n VERY_LOW: 0,\r\n LOW: 1,\r\n MEDIUM: 2,\r\n HIGH: 3,\r\n VERY_HIGH: 4\r\n};\r\n\r\nexport class CharacterColliderSetupSimplifiedCreationParams {\r\n\r\n constructor() {\r\n this.myHeight = 0;\r\n this.myRadius = 0;\r\n\r\n this.myAccuracyLevel = CharacterColliderSetupSimplifiedCreationAccuracyLevel.VERY_LOW;\r\n\r\n this.myIsPlayer = false;\r\n\r\n this.myCheckOnlyFeet = false;\r\n\r\n this.myMaxSpeed = 0;\r\n this.myAverageFPS = 72;\r\n\r\n this.myCanFly = false;\r\n\r\n this.myShouldSlideAlongWall = false;\r\n\r\n this.myCollectGroundInfo = false;\r\n this.myShouldSnapOnGround = false;\r\n this.myMaxDistanceToSnapOnGround = 0;\r\n this.myMaxWalkableGroundAngle = 0;\r\n this.myMaxWalkableGroundStepHeight = 0;\r\n this.myShouldNotFallFromEdges = false;\r\n\r\n this.myHorizontalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHorizontalCheckObjectsToIgnore = [];\r\n\r\n this.myVerticalCheckBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myVerticalCheckObjectsToIgnore = [];\r\n\r\n this.myHorizontalCheckDebugEnabled = false;\r\n this.myVerticalCheckDebugEnabled = false;\r\n }\r\n}\r\n\r\nexport function createSimplified(simplifiedCreationParams, outCharacterColliderSetup = new CharacterColliderSetup()) {\r\n outCharacterColliderSetup.myHeight = simplifiedCreationParams.myHeight;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeRadius = simplifiedCreationParams.myRadius;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadius = simplifiedCreationParams.myRadius / 2;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForwardEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckFixedForward.vec3_set(0, 0, 1);\r\n\r\n if (!simplifiedCreationParams.myCheckOnlyFeet || simplifiedCreationParams.myCanFly) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalHeightCheckEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalPositionCheckEnabled = true;\r\n }\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideEnabled = simplifiedCreationParams.myShouldSlideAlongWall;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore = simplifiedCreationParams.myMaxWalkableGroundStepHeight;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myGroundParams.mySurfaceSnapMaxDistance = simplifiedCreationParams.myMaxDistanceToSnapOnGround;\r\n outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance = simplifiedCreationParams.myMaxDistanceToSnapOnGround > 0 ?\r\n simplifiedCreationParams.myMaxDistanceToSnapOnGround : (simplifiedCreationParams.myRadius > 0.1) ? 0.1 : 0.01;\r\n outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance = Math.max(outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance, outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore);\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = simplifiedCreationParams.myRadius * 0.75;\r\n\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceInfo = simplifiedCreationParams.myCollectGroundInfo || simplifiedCreationParams.myMaxWalkableGroundAngle > 0;\r\n outCharacterColliderSetup.myGroundParams.mySurfaceSnapEnabled = simplifiedCreationParams.myShouldSnapOnGround;\r\n outCharacterColliderSetup.myGroundParams.mySurfacePopOutEnabled = true;\r\n outCharacterColliderSetup.myGroundParams.mySurfaceAngleToIgnore = simplifiedCreationParams.myMaxWalkableGroundAngle;\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngle = true;\r\n\r\n outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxOutsideDistance = 0.001;\r\n outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxInsideDistance = 0.001;\r\n\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance = (simplifiedCreationParams.myRadius > 0.1) ? 0.1 : 0.01;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = true;\r\n outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = true;\r\n\r\n if (simplifiedCreationParams.myCanFly) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckHeadDistanceToIgnore = outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckFeetDistanceToIgnore;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceInfo = outCharacterColliderSetup.myGroundParams.myCollectSurfaceInfo;\r\n outCharacterColliderSetup.myCeilingParams.mySurfacePopOutEnabled = outCharacterColliderSetup.myGroundParams.mySurfacePopOutEnabled;\r\n outCharacterColliderSetup.myCeilingParams.mySurfaceAngleToIgnore = outCharacterColliderSetup.myGroundParams.mySurfaceAngleToIgnore;\r\n\r\n outCharacterColliderSetup.myCeilingParams.mySurfaceSnapMaxDistance = outCharacterColliderSetup.myGroundParams.mySurfaceSnapMaxDistance;\r\n outCharacterColliderSetup.myCeilingParams.mySurfacePopOutMaxDistance = outCharacterColliderSetup.myGroundParams.mySurfacePopOutMaxDistance;\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft = outCharacterColliderSetup.myGroundParams.myHorizontalMovementSurfaceAngleToIgnoreMaxHorizontalMovementLeft;\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngle = outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngle;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myOnSurfaceMaxOutsideDistance = outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myOnSurfaceMaxInsideDistance = outCharacterColliderSetup.myGroundParams.myOnSurfaceMaxInsideDistance;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceNormalMaxInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceNormalMaxInsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceDistanceOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceDistanceInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceDistanceInsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitOutsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitOutsideDistance;\r\n outCharacterColliderSetup.myCeilingParams.myCollectSurfaceCollisionHitInsideDistance = outCharacterColliderSetup.myGroundParams.myCollectSurfaceCollisionHitInsideDistance;\r\n\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill = outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleDownhill;\r\n outCharacterColliderSetup.myCeilingParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill = outCharacterColliderSetup.myGroundParams.myHorizontalMovementAdjustVerticalMovementOverSurfacePerceivedAngleUphill;\r\n }\r\n\r\n if (simplifiedCreationParams.myShouldNotFallFromEdges) {\r\n outCharacterColliderSetup.myGroundParams.myMovementMustStayOnSurface = true;\r\n outCharacterColliderSetup.myGroundParams.myMovementMustStayOnSurfaceAngleDownhill = Math.max(60, outCharacterColliderSetup.myGroundParams.mySurfaceAngleToIgnore);\r\n }\r\n\r\n\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckBlockLayerFlags.copy(simplifiedCreationParams.myHorizontalCheckBlockLayerFlags);\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckObjectsToIgnore.pp_copy(simplifiedCreationParams.myHorizontalCheckObjectsToIgnore);\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckBlockLayerFlags.copy(simplifiedCreationParams.myVerticalCheckBlockLayerFlags);\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckObjectsToIgnore.pp_copy(simplifiedCreationParams.myVerticalCheckObjectsToIgnore);\r\n\r\n\r\n\r\n if (simplifiedCreationParams.myHorizontalCheckDebugEnabled) {\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugHorizontalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugHorizontalPositionCheckEnabled = true;\r\n }\r\n\r\n if (simplifiedCreationParams.myVerticalCheckDebugEnabled) {\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugVerticalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myDebugParams.myVisualDebugVerticalPositionCheckEnabled = true;\r\n }\r\n\r\n\r\n\r\n // ACCURACY\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.VERY_LOW) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle = 60;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightVerticalCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightVerticalCheckEnabled = true;\r\n\r\n // Enable based on speed?\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckEnabled = false;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightCheckSteps = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalRadialCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalStraightCheckEnabled = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices = 4;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceCentralCheckEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 1;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckReductionEnabled = true;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckAllowHitsInsideCollisionIfOneValid = true;\r\n\r\n if (simplifiedCreationParams.myIsPlayer) {\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 2;\r\n outCharacterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign = true;\r\n }\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.LOW) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckRadialSteps = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightCheckSteps = 1;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 2;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep = 180 / outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 2;\r\n outCharacterColliderSetup.myWallSlideParams.myCheckBothWallSlideDirections = false;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionMode = CharacterColliderSlideFlickerPreventionMode.NONE;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = false;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionForceCheckCounter = 0;\r\n outCharacterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign = false;\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.MEDIUM) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightHorizontalCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalOutwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardUpwardCheckEnabled = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices = 2;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightHorizontalCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHorizontalBorderCheckEnabled = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalMovementCheckPerformCheckOnBothSides = true;\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices = 6;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 2;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep = 180 / outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 3;\r\n outCharacterColliderSetup.myWallSlideParams.my90DegreesWallSlideAdjustDirectionSign = true;\r\n\r\n if (simplifiedCreationParams.myIsPlayer) {\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionMode = CharacterColliderSlideFlickerPreventionMode.USE_PREVIOUS_RESULTS;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionCheckOnlyIfAlreadySliding = true;\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideFlickerPreventionForceCheckCounter = 4;\r\n }\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.HIGH) {\r\n if (outCharacterColliderSetup.myWallSlideParams.myWallSlideEnabled) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementCheckGetBetterReferenceHit = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = true;\r\n }\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalDiagonalInwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalStraightCentralCheckEnabled = false;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardUpwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalUpwardCentralCheckEnabled = false;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices = 8;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRadialSteps = 2;\r\n outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceRotationPerRadialStep = 180 / outCharacterColliderSetup.myVerticalCheckParams.myVerticalCheckCircumferenceSlices;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myWallSlideParams.myWallSlideMaxAttempts = 4;\r\n\r\n if (simplifiedCreationParams.myIsPlayer) {\r\n outCharacterColliderSetup.myWallSlideParams.myCheckBothWallSlideDirections = true;\r\n }\r\n\r\n\r\n\r\n outCharacterColliderSetup.myGroundParams.myBaseInsideCollisionCheckEnabled = true;\r\n outCharacterColliderSetup.myCeilingParams.myBaseInsideCollisionCheckEnabled = true;\r\n\r\n\r\n\r\n let safeRadius = simplifiedCreationParams.myRadius * 0.75;\r\n if (simplifiedCreationParams.myMaxSpeed / simplifiedCreationParams.myAverageFPS > safeRadius) {\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementEnabled = true;\r\n\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementMaxSteps = Math.ceil((simplifiedCreationParams.myMaxSpeed / simplifiedCreationParams.myAverageFPS) / safeRadius);\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementMaxStepLength = safeRadius;\r\n outCharacterColliderSetup.mySplitMovementParams.mySplitMovementMinStepLength = safeRadius;\r\n }\r\n }\r\n\r\n if (simplifiedCreationParams.myAccuracyLevel >= CharacterColliderSetupSimplifiedCreationAccuracyLevel.VERY_HIGH) {\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHeightCheckSteps = 2;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementHorizontalRadialCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalOutwardDownwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalDiagonalInwardDownwardCheckEnabled = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightCentralCheckEnabled = false;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalMovementVerticalStraightDiagonalDownwardCentralCheckEnabled = false;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionHeightCheckSteps = 2;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalRadialDiagonalOutwardCheckEnabled = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalBorderDiagonalOutwardCheckEnabled = true;\r\n\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHit = true;\r\n outCharacterColliderSetup.myHorizontalCheckParams.myHorizontalPositionVerticalCheckPerformHorizontalCheckOnHitKeepVerticalHitIfNoHorizontalHit = true;\r\n\r\n\r\n\r\n outCharacterColliderSetup.myGroundParams.myRecollectSurfaceInfoOnSurfaceCheckFailed = true;\r\n outCharacterColliderSetup.myCeilingParams.myRecollectSurfaceInfoOnSurfaceCheckFailed = outCharacterColliderSetup.myGroundParams.myRecollectSurfaceInfoOnSurfaceCheckFailed;\r\n }\r\n\r\n return outCharacterColliderSetup;\r\n}\r\n\r\nexport function createTeleportColliderSetupFromMovementColliderSetup(movementColliderSetup, outTeleportColliderSetup = new CharacterColliderSetup()) {\r\n outTeleportColliderSetup.copy(movementColliderSetup);\r\n\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle = 180;\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices =\r\n Math.round((outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle / movementColliderSetup.myHorizontalCheckParams.myHorizontalCheckConeHalfAngle)\r\n * movementColliderSetup.myHorizontalCheckParams.myHorizontalPositionCheckConeHalfSlices);\r\n\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForwardEnabled = true;\r\n outTeleportColliderSetup.myHorizontalCheckParams.myHorizontalCheckFixedForward.vec3_set(0, 0, 1);\r\n\r\n return outTeleportColliderSetup;\r\n}\r\n\r\nexport let CharacterColliderSetupUtils = {\r\n createSimplified,\r\n createTeleportColliderSetupFromMovementColliderSetup\r\n};", "import { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { Quat2Utils } from \"../../../../../cauldron/utils/array/quat2_utils.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { mat4_create, quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\n\r\nexport let NonVRReferenceSpaceMode = {\r\n NO_FLOOR: 0,\r\n FLOOR: 1,\r\n NO_FLOOR_THEN_KEEP_VR: 2,\r\n FLOOR_THEN_KEEP_VR: 3\r\n};\r\n\r\nexport class PlayerHeadManagerParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.mySessionChangeResyncEnabled = false;\r\n\r\n this.myBlurEndResyncEnabled = false;\r\n this.myBlurEndResyncRotation = false;\r\n\r\n this.myResetTransformOnViewResetEnabled = true;\r\n\r\n this.myNextEnterSessionResyncHeight = false;\r\n this.myEnterSessionResyncHeight = false;\r\n\r\n this.myExitSessionResyncHeight = false;\r\n this.myExitSessionResyncVerticalAngle = false;\r\n this.myExitSessionRemoveRightTilt = false; // For now right tilt is removed even if this setting is false, if the vertical angle has to be adjusted\r\n this.myExitSessionAdjustMaxVerticalAngle = false;\r\n this.myExitSessionMaxVerticalAngle = 0;\r\n this.myExitSessionResetNonVRTransformLocal = true;\r\n\r\n this.myNonVRFloorBasedMode = NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR;\r\n\r\n this.myRotateFeetKeepUp = false;\r\n\r\n this.myDefaultHeightNonVR = 0;\r\n this.myDefaultHeightVRWithoutFloor = 0;\r\n this.myDefaultHeightVRWithFloor = null; // null means just keep the detected one\r\n this.myForeheadExtraHeight = 0;\r\n // Can be used to always add a bit of height, for example to compensate the fact \r\n // that the default height is actually the eye height and you may want to also add a forehead offset\r\n\r\n this.myEngine = engine;\r\n\r\n this.myDebugEnabled = false;\r\n }\r\n}\r\n\r\n// Could be intended as the generic player body manager (maybe with hands and stuff also)\r\nexport class PlayerHeadManager {\r\n\r\n constructor(params = new PlayerHeadManagerParams()) {\r\n this._myParams = params;\r\n\r\n this._myCurrentHead = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n\r\n this._mySessionChangeResyncHeadTransform = null;\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myCurrentHeadTransformLocalQuat = quat2_create();\r\n\r\n this._myDelaySessionChangeResyncCounter = 0; // Needed because VR head takes some frames to get the tracked position\r\n this._myDelayBlurEndResyncCounter = 0;\r\n this._myDelayBlurEndResyncTimer = new Timer(5, false);\r\n this._myVisibilityHidden = false;\r\n\r\n this._mySessionActive = false;\r\n this._mySessionBlurred = false;\r\n\r\n this._myIsSyncedDelayCounter = 0;\r\n\r\n this._myViewResetThisFrame = false;\r\n this._myViewResetEventListener = null;\r\n\r\n this._myHeightNonVR = 0;\r\n this._myHeightNonVROnEnterSession = 0;\r\n this._myHeightVRWithoutFloor = null;\r\n this._myHeightVRWithFloor = null;\r\n this._myHeightOffsetWithFloor = 0;\r\n this._myHeightOffsetWithoutFloor = 0;\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n this._myDelayNextEnterSessionSetHeightVRCounter = 0;\r\n\r\n this._myLastReferenceSpaceIsFloorBased = null;\r\n\r\n this._myActive = true;\r\n this._myDestroyed = false;\r\n\r\n // Config\r\n\r\n this._myResyncCounterFrames = 3;\r\n this._myIsSyncedDelayCounterFrames = 1;\r\n }\r\n\r\n start() {\r\n this._setHeightHeadNonVR(this._myParams.myDefaultHeightNonVR);\r\n this._setHeightHeadVRWithoutFloor(this._myParams.myDefaultHeightVRWithoutFloor);\r\n this._setHeightHeadVRWithFloor(this._myParams.myDefaultHeightVRWithFloor);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, true, this._myParams.myEngine);\r\n }\r\n\r\n setActive(active) {\r\n this._myActive = active;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n getPlayer() {\r\n return Globals.getPlayerObjects(this._myParams.myEngine).myPlayer;\r\n }\r\n\r\n getHead() {\r\n return this._myCurrentHead;\r\n }\r\n\r\n getHeightHead() {\r\n return this.getHeightEyes() + this._myParams.myForeheadExtraHeight;\r\n }\r\n\r\n getHeightEyes() {\r\n // Implemented outside class definition\r\n }\r\n\r\n getTransformFeetQuat(outTransformFeetQuat = quat2_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getTransformHeadQuat(outTransformFeetQuat = quat2_create()) {\r\n return this.getHead().pp_getTransformQuat(outTransformFeetQuat);\r\n }\r\n\r\n getPositionFeet(outPositionFeet = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPositionHead(outPositionHead = vec3_create()) {\r\n return this._myCurrentHead.pp_getPosition(outPositionHead);\r\n }\r\n\r\n getRotationFeetQuat(outRotationFeetQuat = quat_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getRotationHeadQuat(outRotationHeadQuat = quat_create()) {\r\n return this.getHead().pp_getRotationQuat(outRotationHeadQuat);\r\n }\r\n\r\n isSynced() {\r\n return this._myIsSyncedDelayCounter == 0 && this._myDelaySessionChangeResyncCounter == 0 && this._myDelayNextEnterSessionSetHeightVRCounter == 0 && this._myDelayBlurEndResyncCounter == 0 && !this._myDelayBlurEndResyncTimer.isRunning() && !this._mySessionBlurred;\r\n }\r\n\r\n setHeightHead(height, setOnlyForActiveOne = true) {\r\n this._setHeightHead(height, height, height, setOnlyForActiveOne);\r\n }\r\n\r\n resetHeightHeadToDefault(resetOnlyForActiveOne = true) {\r\n this._setHeightHead(this._myHeightNonVR, this._myHeightVRWithoutFloor, this._myHeightVRWithFloor, resetOnlyForActiveOne);\r\n }\r\n\r\n setHeightHeadNonVR(height) {\r\n this._setHeightHeadNonVR(height);\r\n\r\n if (!this._mySessionActive) {\r\n this._updateHeightOffset();\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n }\r\n }\r\n\r\n setHeightHeadVRWithoutFloor(height) {\r\n this._setHeightHeadVRWithoutFloor(height);\r\n\r\n if (this._mySessionActive) {\r\n this._updateHeightOffset();\r\n }\r\n }\r\n\r\n resetHeightHeadVRWithFloor() {\r\n this.setHeightHeadVRWithFloor(null);\r\n }\r\n\r\n setHeightHeadVRWithFloor(height = null) {\r\n this._setHeightHeadVRWithFloor(height);\r\n\r\n if (this._mySessionActive) {\r\n this._updateHeightOffset();\r\n }\r\n }\r\n\r\n getDefaultHeightHeadNonVR() {\r\n return this._myHeightNonVR;\r\n }\r\n\r\n getDefaultHeightHeadVRWithoutFloor() {\r\n return this._myHeightVRWithoutFloor;\r\n }\r\n\r\n getDefaultHeightHeadVRWithFloor() {\r\n return this._myHeightVRWithFloor;\r\n }\r\n\r\n moveFeet(movement) {\r\n // Implemented outside class definition\r\n }\r\n\r\n moveHead(movement) {\r\n this.moveFeet(movement);\r\n }\r\n\r\n teleportPositionHead(teleportPosition) {\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPositionFeet(teleportPosition) {\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPlayerToHeadTransformQuat(headTransformQuat) {\r\n // Implemented outside class definition\r\n }\r\n\r\n rotateFeetQuat(rotationQuat, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n rotateHeadQuat(rotationQuat) {\r\n // #TODO Rotate feet with this and then rotate head freely if possible\r\n // Implemented outside class definition \r\n }\r\n\r\n canRotateFeet() {\r\n return true;\r\n }\r\n\r\n canRotateHead() {\r\n return !this._mySessionActive;\r\n }\r\n\r\n setRotationFeetQuat(rotationQuat, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n setRotationHeadQuat() {\r\n // Implemented outside class definition \r\n }\r\n\r\n lookAtFeet(position, up = null, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n lookToFeet(direction, up = null, keepUpOverride = null) {\r\n // Implemented outside class definition \r\n }\r\n\r\n lookAtHead(position, up = null) {\r\n }\r\n\r\n lookToHead(direction, up = null) {\r\n }\r\n\r\n resetCameraNonXR() {\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_resetTransformLocal();\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n }\r\n\r\n update(dt) {\r\n this._myViewResetThisFrame = false;\r\n\r\n if (this._myIsSyncedDelayCounter != 0) {\r\n this._myIsSyncedDelayCounter--;\r\n this._myIsSyncedDelayCounter = Math.max(0, this._myIsSyncedDelayCounter);\r\n }\r\n\r\n if (this._myDelaySessionChangeResyncCounter > 0) {\r\n this._myDelaySessionChangeResyncCounter--;\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n this._sessionChangeResync();\r\n this._myIsSyncedDelayCounter = this._myIsSyncedDelayCounterFrames;\r\n }\r\n }\r\n\r\n if (this._myDelayBlurEndResyncCounter > 0 && !this._myDelayBlurEndResyncTimer.isRunning()) {\r\n this._myDelayBlurEndResyncCounter--;\r\n if (this._myDelayBlurEndResyncCounter == 0) {\r\n this._blurEndResync();\r\n this._myIsSyncedDelayCounter = this._myIsSyncedDelayCounterFrames;\r\n }\r\n }\r\n\r\n // Not really used since visibility hidden end is not considered a special case anymore\r\n if (this._myDelayBlurEndResyncTimer.isRunning()) {\r\n if (this._myDelayBlurEndResyncCounter > 0) {\r\n this._myDelayBlurEndResyncCounter--;\r\n } else {\r\n this._myDelayBlurEndResyncTimer.update(dt);\r\n if (this._myDelayBlurEndResyncTimer.isDone()) {\r\n this._blurEndResync();\r\n this._myIsSyncedDelayCounter = this._myIsSyncedDelayCounterFrames;\r\n }\r\n }\r\n }\r\n\r\n if (this._myDelayNextEnterSessionSetHeightVRCounter > 0) {\r\n this._myDelayNextEnterSessionSetHeightVRCounter--;\r\n if (this._myDelayNextEnterSessionSetHeightVRCounter == 0) {\r\n if (this._mySessionActive) {\r\n let isFloor = XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine);\r\n if (isFloor && this._myNextEnterSessionSetHeightVRWithFloor) {\r\n let currentHeadPosition = this._myCurrentHead.pp_getPosition();\r\n\r\n let floorHeight = this._myHeightVRWithFloor - this._myParams.myForeheadExtraHeight;\r\n let currentHeadHeight = this._getPositionEyesHeight(currentHeadPosition);\r\n\r\n this._myHeightOffsetWithFloor = this._myHeightOffsetWithFloor + (floorHeight - currentHeadHeight);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n } else if (!isFloor && this._myNextEnterSessionSetHeightVRWithoutFloor) {\r\n let currentHeadPosition = this._myCurrentHead.pp_getPosition();\r\n\r\n let floorHeight = this._myHeightVRWithoutFloor - this._myParams.myForeheadExtraHeight;\r\n let currentHeadHeight = this._getPositionEyesHeight(currentHeadPosition);\r\n\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (floorHeight - currentHeadHeight);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.isSynced()) {\r\n this._myCurrentHead.pp_getTransformLocalQuat(this._myCurrentHeadTransformLocalQuat);\r\n }\r\n\r\n if (this._myParams.myDebugEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n this._debugUpdate(dt);\r\n }\r\n }\r\n\r\n _setHeightHead(heightNonVR, heightVRWithoutFloor, heightVRWithFloor, setOnlyForActiveOne = true) {\r\n if (!setOnlyForActiveOne || !this._mySessionActive) {\r\n this._setHeightHeadNonVR(heightNonVR);\r\n }\r\n\r\n if (!setOnlyForActiveOne || this._mySessionActive) {\r\n this._setHeightHeadVRWithoutFloor(heightVRWithoutFloor);\r\n this._setHeightHeadVRWithFloor(heightVRWithFloor);\r\n }\r\n\r\n this._updateHeightOffset();\r\n\r\n if (!this._mySessionActive) {\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n }\r\n }\r\n\r\n _setHeightHeadNonVR(height) {\r\n this._myHeightNonVR = height;\r\n this._myHeightNonVROnEnterSession = height;\r\n }\r\n\r\n _setHeightHeadVRWithoutFloor(heightWithoutFloor) {\r\n if (heightWithoutFloor != null) {\r\n this._myHeightVRWithoutFloor = heightWithoutFloor;\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n\r\n if (this._mySessionActive) {\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (heightWithoutFloor - this.getHeightHead());\r\n } else {\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = true;\r\n }\r\n } else {\r\n this._myHeightVRWithoutFloor = null;\r\n this._myHeightOffsetWithoutFloor = 0;\r\n }\r\n }\r\n\r\n _setHeightHeadVRWithFloor(heightWithFloor) {\r\n if (heightWithFloor != null) {\r\n this._myHeightVRWithFloor = heightWithFloor;\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n\r\n if (this._mySessionActive) {\r\n this._myHeightOffsetWithFloor = this._myHeightOffsetWithFloor + (heightWithFloor - this.getHeightHead());\r\n } else {\r\n this._myNextEnterSessionSetHeightVRWithFloor = true;\r\n }\r\n } else {\r\n this._myHeightVRWithFloor = null;\r\n this._myHeightOffsetWithFloor = 0;\r\n }\r\n }\r\n\r\n _shouldNonVRUseVRWithFloor() {\r\n return (this._myLastReferenceSpaceIsFloorBased == null && this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR) ||\r\n (this._myLastReferenceSpaceIsFloorBased != null && this._myLastReferenceSpaceIsFloorBased &&\r\n (this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.NO_FLOOR_THEN_KEEP_VR || this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR));\r\n }\r\n\r\n _shouldNonVRUseVRWithoutFloor() {\r\n return (this._myLastReferenceSpaceIsFloorBased == null && this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.NO_FLOOR_THEN_KEEP_VR) ||\r\n (this._myLastReferenceSpaceIsFloorBased != null && !this._myLastReferenceSpaceIsFloorBased &&\r\n (this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.NO_FLOOR_THEN_KEEP_VR || this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR));\r\n }\r\n\r\n _setCameraNonXRHeight(height) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _debugUpdate(dt) {\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawLineEnd(0, this.getPositionFeet(), this.getPositionHead(), vec4_create(1, 0, 0, 1), 0.01);\r\n\r\n console.error(this.getHeightEyes());\r\n }\r\n\r\n _getPositionEyesHeight(position) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionStart(manualCall, session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionEnd(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionBlurStart(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionBlurEnd(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onViewReset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _blurEndResync() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _sessionChangeResync() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setReferenceSpaceHeightOffset(offset, amountToRemove) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateHeightOffset() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _getHeadTransformFromLocal(transformLocal) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _resyncHeadRotationForward(resyncHeadRotation) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.getReferenceSpace(this._myParams.myEngine)?.removeEventListener?.(\"reset\", this._myViewResetEventListener);\r\n XRUtils.getSession(this._myParams.myEngine)?.removeEventListener(\"visibilitychange\", this._myVisibilityChangeEventListener);\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerHeadManager.prototype.getHeightEyes = function () {\r\n let headPosition = vec3_create();\r\n return function getHeightEyes() {\r\n headPosition = this._myCurrentHead.pp_getPosition(headPosition);\r\n let eyesHeight = this._getPositionEyesHeight(headPosition);\r\n\r\n return eyesHeight;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.getTransformFeetQuat = function () {\r\n let feetPosition = vec3_create();\r\n let feetRotationQuat = quat_create();\r\n return function getTransformFeetQuat(outTransformFeetQuat = quat2_create()) {\r\n outTransformFeetQuat.quat2_setPositionRotationQuat(this.getPositionFeet(feetPosition), this.getRotationFeetQuat(feetRotationQuat));\r\n return outTransformFeetQuat;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.getRotationFeetQuat = function () {\r\n let playerUp = vec3_create();\r\n let headForward = vec3_create();\r\n return function getRotationFeetQuat(outRotationFeetQuat = quat_create()) {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n headForward = this._myCurrentHead.pp_getForward(headForward);\r\n\r\n // Feet are considered to always be flat on the player up\r\n let angleWithUp = headForward.vec3_angle(playerUp);\r\n let mingAngle = 10;\r\n if (angleWithUp < mingAngle) {\r\n headForward = this._myCurrentHead.pp_getDown(headForward);\r\n } else if (angleWithUp > 180 - mingAngle) {\r\n headForward = this._myCurrentHead.pp_getUp(headForward);\r\n }\r\n\r\n headForward = headForward.vec3_removeComponentAlongAxis(playerUp, headForward);\r\n headForward.vec3_normalize(headForward);\r\n\r\n outRotationFeetQuat.quat_setUp(playerUp, headForward);\r\n return outRotationFeetQuat;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.getPositionFeet = function () {\r\n let headPosition = vec3_create();\r\n let playerUp = vec3_create();\r\n return function getPositionFeet(outPositionFeet = vec3_create()) {\r\n headPosition = this._myCurrentHead.pp_getPosition(headPosition);\r\n let headHeight = this._getPositionEyesHeight(headPosition);\r\n\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n outPositionFeet = headPosition.vec3_sub(playerUp.vec3_scale(headHeight, outPositionFeet), outPositionFeet);\r\n\r\n return outPositionFeet;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.moveFeet = function moveFeet(movement) {\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_translate(movement);\r\n};\r\n\r\nPlayerHeadManager.prototype.rotateFeetQuat = function () {\r\n let playerUp = vec3_create();\r\n let rotationAxis = vec3_create();\r\n let currentHeadPosition = vec3_create();\r\n let currentFeetRotation = quat_create();\r\n let newFeetRotation = quat_create();\r\n let fixedNewFeetRotation = quat_create();\r\n let newFeetForward = vec3_create();\r\n let fixedRotation = quat_create();\r\n let newHeadPosition = vec3_create();\r\n let headAdjustmentMovement = vec3_create();\r\n return function rotateFeetQuat(rotationQuat, keepUpOverride = null) {\r\n let angle = rotationQuat.quat_getAngleRadians();\r\n if (angle <= 0.00001) {\r\n return;\r\n }\r\n\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n rotationAxis = rotationQuat.quat_getAxis(rotationAxis);\r\n\r\n if (!rotationAxis.vec3_isOnAxis(playerUp) &&\r\n ((keepUpOverride == null && this._myParams.myFeetRotationKeepUp) || (keepUpOverride))) {\r\n currentFeetRotation = this.getRotationFeetQuat(currentFeetRotation);\r\n\r\n newFeetRotation = currentFeetRotation.quat_rotateQuat(rotationQuat, newFeetRotation);\r\n newFeetForward = newFeetRotation.quat_getForward(newFeetForward);\r\n\r\n fixedNewFeetRotation.quat_copy(newFeetRotation);\r\n fixedNewFeetRotation.quat_setUp(playerUp, newFeetForward);\r\n\r\n fixedRotation = currentFeetRotation.quat_rotationToQuat(fixedNewFeetRotation, fixedRotation);\r\n } else {\r\n fixedRotation.quat_copy(rotationQuat);\r\n }\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateAroundQuat(fixedRotation, currentHeadPosition);\r\n\r\n newHeadPosition = this._myCurrentHead.pp_getPosition(newHeadPosition);\r\n\r\n headAdjustmentMovement = currentHeadPosition.vec3_sub(newHeadPosition, headAdjustmentMovement);\r\n if (headAdjustmentMovement.vec3_length() > 0.00001) {\r\n this.moveFeet(headAdjustmentMovement);\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.rotateHeadQuat = function () {\r\n let newHeadRotation = quat_create();\r\n let newHeadUp = vec3_create();\r\n return function rotateHeadQuat(rotationQuat) {\r\n if (this.canRotateHead()) {\r\n this._myCurrentHead.pp_rotateQuat(rotationQuat);\r\n newHeadRotation = this._myCurrentHead.pp_getRotationQuat(newHeadRotation);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myHead.pp_setRotationQuat(newHeadRotation);\r\n\r\n if (!this._mySessionActive) {\r\n newHeadRotation = newHeadRotation.quat_rotateAxisRadians(Math.PI, newHeadRotation.quat_getUp(newHeadUp), newHeadRotation);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_setRotationQuat(newHeadRotation);\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.setRotationFeetQuat = function () {\r\n let currentRotationQuat = quat_create();\r\n let rotationQuatToRotate = quat_create();\r\n return function setRotationFeetQuat(rotationQuat, keepUpOverride = null) {\r\n currentRotationQuat = this.getRotationFeetQuat(currentRotationQuat);\r\n rotationQuatToRotate = currentRotationQuat.quat_rotationToQuat(rotationQuat, rotationQuatToRotate);\r\n this.rotateFeetQuat(rotationQuatToRotate, keepUpOverride);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.setRotationHeadQuat = function () {\r\n let currentRotationQuat = quat_create();\r\n let rotationQuatToRotate = quat_create();\r\n return function setRotationHeadQuat(rotationQuat) {\r\n currentRotationQuat = this.getRotationHeadQuat(currentRotationQuat);\r\n rotationQuatToRotate = currentRotationQuat.quat_rotationToQuat(rotationQuat, rotationQuatToRotate);\r\n this.rotateHeadQuat(rotationQuatToRotate);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.teleportPositionHead = function () {\r\n let currentHeadPosition = vec3_create();\r\n let teleportMovementToPerform = vec3_create();\r\n return function teleportPositionHead(teleportPosition) {\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n teleportMovementToPerform = teleportPosition.vec3_sub(currentHeadPosition, teleportMovementToPerform);\r\n this.moveFeet(teleportMovementToPerform);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.teleportPositionFeet = function () {\r\n let currentFeetPosition = vec3_create();\r\n let teleportMovementToPerform = vec3_create();\r\n return function teleportPositionFeet(teleportPosition) {\r\n currentFeetPosition = this.getPositionFeet(currentFeetPosition);\r\n teleportMovementToPerform = teleportPosition.vec3_sub(currentFeetPosition, teleportMovementToPerform);\r\n this.moveFeet(teleportMovementToPerform);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.teleportPlayerToHeadTransformQuat = function () {\r\n let headPosition = vec3_create();\r\n let playerUp = vec3_create();\r\n let flatCurrentPlayerPosition = vec3_create();\r\n let flatNewPlayerPosition = vec3_create();\r\n let teleportMovement = vec3_create();\r\n let playerForward = vec3_create();\r\n let headForward = vec3_create();\r\n let referenceSpaceForward = vec3_create();\r\n let referenceSpaceForwardNegated = vec3_create();\r\n let rotationToPerform = quat_create();\r\n return function teleportPlayerToHeadTransformQuat(headTransformQuat) {\r\n headPosition = headTransformQuat.quat2_getPosition(headPosition);\r\n\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n flatCurrentPlayerPosition = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getPosition(flatCurrentPlayerPosition).vec3_removeComponentAlongAxis(playerUp, flatCurrentPlayerPosition);\r\n flatNewPlayerPosition = headPosition.vec3_removeComponentAlongAxis(playerUp, flatNewPlayerPosition);\r\n\r\n teleportMovement = flatNewPlayerPosition.vec3_sub(flatCurrentPlayerPosition, teleportMovement);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_translate(teleportMovement);\r\n\r\n playerForward = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getForward(playerForward);\r\n headForward = headTransformQuat.quat2_getForward(headForward);\r\n\r\n rotationToPerform = playerForward.vec3_rotationToPivotedQuat(headForward, playerUp, rotationToPerform);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateQuat(rotationToPerform);\r\n\r\n // Adjust player rotation based on the reference space rotation, which should not actually be touched,\r\n // but just in case\r\n\r\n playerForward = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getForward(playerForward);\r\n\r\n referenceSpaceForward = Globals.getPlayerObjects(this._myParams.myEngine).myReferenceSpace.pp_getForward(referenceSpaceForward);\r\n referenceSpaceForwardNegated = referenceSpaceForward.vec3_negate(referenceSpaceForwardNegated);\r\n\r\n rotationToPerform = referenceSpaceForwardNegated.vec3_rotationToPivotedQuat(playerForward, playerUp, rotationToPerform);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateQuat(rotationToPerform);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookAtFeet = function () {\r\n let direction = vec3_create();\r\n let feetPosition = vec3_create();\r\n return function lookAtFeet(position, up = null, keepUpOverride = null) {\r\n feetPosition = this.getPositionFeet(feetPosition);\r\n direction = position.vec3_sub(feetPosition, direction).vec3_normalize(direction);\r\n\r\n this.lookToFeet(direction, up, keepUpOverride);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookToFeet = function () {\r\n let feetRotation = quat_create();\r\n return function lookToFeet(direction, up = null, keepUpOverride = null) {\r\n feetRotation = this.getRotationFeetQuat(feetRotation);\r\n feetRotation.quat_setForward(direction, up);\r\n this.setRotationFeetQuat(feetRotation, keepUpOverride);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookAtHead = function () {\r\n let direction = vec3_create();\r\n let headPosition = vec3_create();\r\n return function lookAtHead(position, up = null) {\r\n headPosition = this.getPositionHead(headPosition);\r\n direction = position.vec3_sub(headPosition, direction).vec3_normalize(direction);\r\n\r\n this.lookToHead(direction, up);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype.lookToHead = function () {\r\n let headRotation = quat_create();\r\n return function lookToHead(direction, up = null) {\r\n headRotation = this.getRotationHeadQuat(headRotation);\r\n headRotation.quat_setForward(direction, up);\r\n this.setRotationHeadQuat(headRotation);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._getPositionEyesHeight = function () {\r\n let playerPosition = vec3_create();\r\n let playerUp = vec3_create();\r\n let heightVector = vec3_create();\r\n return function _getPositionEyesHeight(position) {\r\n playerPosition = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getPosition(playerPosition);\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n heightVector = position.vec3_sub(playerPosition, heightVector).vec3_componentAlongAxis(playerUp, heightVector);\r\n let height = heightVector.vec3_length();\r\n if (!playerUp.vec3_isConcordant(heightVector)) {\r\n height = -height;\r\n }\r\n\r\n return height;\r\n };\r\n}();\r\n\r\n// #TODO What happens if the player go in the blurred state before the scene has loaded?\r\nPlayerHeadManager.prototype._onXRSessionStart = function () {\r\n return function _onXRSessionStart(manualCall, session) {\r\n let nonVRCurrentEyesHeight = this._getPositionEyesHeight(Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_getPosition());\r\n this._myHeightNonVROnEnterSession = nonVRCurrentEyesHeight + this._myParams.myForeheadExtraHeight;\r\n\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myVisibilityHidden = false;\r\n\r\n this._myDelaySessionChangeResyncCounter = 0;\r\n this._myDelayBlurEndResyncCounter = 0;\r\n this._myDelayBlurEndResyncTimer.reset();\r\n this._myDelayNextEnterSessionSetHeightVRCounter = 0;\r\n\r\n let referenceSpace = XRUtils.getReferenceSpace(this._myParams.myEngine);\r\n\r\n if (referenceSpace.addEventListener != null) {\r\n this._myViewResetEventListener = this._onViewReset.bind(this);\r\n referenceSpace.addEventListener(\"reset\", this._myViewResetEventListener);\r\n }\r\n\r\n this._myLastReferenceSpaceIsFloorBased = XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine);\r\n\r\n this._myVisibilityChangeEventListener = function (event) {\r\n if (event.session.visibilityState != \"visible\") {\r\n if (!this._mySessionBlurred) {\r\n this._onXRSessionBlurStart(event.session);\r\n }\r\n\r\n this._myVisibilityHidden = session.visibilityState == \"hidden\";\r\n } else {\r\n if (this._mySessionBlurred) {\r\n this._onXRSessionBlurEnd(event.session);\r\n }\r\n\r\n this._myVisibilityHidden = false;\r\n }\r\n }.bind(this);\r\n\r\n session.addEventListener(\"visibilitychange\", this._myVisibilityChangeEventListener);\r\n\r\n if (this._myParams.mySessionChangeResyncEnabled && !manualCall && this._myActive) {\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n this._mySessionChangeResyncHeadTransform = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n }\r\n\r\n this._myDelaySessionChangeResyncCounter = this._myResyncCounterFrames;\r\n } else {\r\n this._myDelaySessionChangeResyncCounter = 0;\r\n this._mySessionChangeResyncHeadTransform = null;\r\n }\r\n\r\n if (this._myNextEnterSessionSetHeightVRWithFloor || this._myNextEnterSessionSetHeightVRWithoutFloor) {\r\n this._myDelayNextEnterSessionSetHeightVRCounter = this._myResyncCounterFrames;\r\n }\r\n\r\n this._mySessionActive = true;\r\n this._mySessionBlurred = false;\r\n\r\n if (this._myActive) {\r\n this._updateHeightOffset();\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onXRSessionEnd = function () {\r\n return function _onXRSessionEnd(session) {\r\n if (this._myParams.mySessionChangeResyncEnabled && this._myActive) {\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n let previousHeadTransform = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n\r\n if (this._myBlurRecoverHeadTransform != null) {\r\n previousHeadTransform = this._myBlurRecoverHeadTransform;\r\n }\r\n\r\n this._mySessionChangeResyncHeadTransform = previousHeadTransform;\r\n }\r\n\r\n this._myDelaySessionChangeResyncCounter = this._myResyncCounterFrames;\r\n } else {\r\n this._myDelaySessionChangeResyncCounter = 0;\r\n this._mySessionChangeResyncHeadTransform = null;\r\n }\r\n\r\n this._myDelayNextEnterSessionSetHeightVRCounter = 0;\r\n\r\n this._myVisibilityChangeEventListener = null;\r\n this._myViewResetEventListener = null;\r\n\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myVisibilityHidden = false;\r\n\r\n this._myDelayBlurEndResyncCounter = 0;\r\n this._myDelayBlurEndResyncTimer.reset();\r\n\r\n this._mySessionActive = false;\r\n this._mySessionBlurred = false;\r\n\r\n if (this._myActive) {\r\n this._updateHeightOffset();\r\n\r\n if (this._myParams.myExitSessionResetNonVRTransformLocal) {\r\n this.resetCameraNonXR();\r\n } else {\r\n this._setCameraNonXRHeight(this._myHeightNonVROnEnterSession);\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onXRSessionBlurStart = function () {\r\n return function _onXRSessionBlurStart(session) {\r\n if (this._myActive) {\r\n if (this._myParams.myBlurEndResyncEnabled && this._myBlurRecoverHeadTransform == null && this._mySessionActive) {\r\n if (this._myDelaySessionChangeResyncCounter > 0) {\r\n this._myBlurRecoverHeadTransform = this._mySessionChangeResyncHeadTransform;\r\n } else {\r\n this._myBlurRecoverHeadTransform = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n }\r\n } else if (!this._mySessionActive || !this._myParams.myBlurEndResyncEnabled) {\r\n this._myBlurRecoverHeadTransform = null;\r\n }\r\n }\r\n\r\n this._myDelayBlurEndResyncCounter = 0;\r\n\r\n this._mySessionBlurred = true;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onXRSessionBlurEnd = function () {\r\n return function _onXRSessionBlurEnd(session) {\r\n if (this._myActive) {\r\n if (this._myDelaySessionChangeResyncCounter == 0) {\r\n if (this._myParams.myBlurEndResyncEnabled && this._myBlurRecoverHeadTransform != null && this._mySessionActive) {\r\n this._myDelayBlurEndResyncCounter = this._myResyncCounterFrames;\r\n if (this._myVisibilityHidden) {\r\n //this._myDelayBlurEndResyncTimer.start();\r\n\r\n // This was added because on the end of hidden u can have the resync delay cause of the guardian resync\r\n // but I just decided to skip this since it's not reliable and the guardian resync can happen in other cases\r\n // with no notification anyway\r\n }\r\n } else {\r\n this._myBlurRecoverHeadTransform = null;\r\n this._myDelayBlurEndResyncCounter = 0;\r\n }\r\n } else {\r\n this._myDelaySessionChangeResyncCounter = this._myResyncCounterFrames;\r\n this._myBlurRecoverHeadTransform = null;\r\n }\r\n }\r\n\r\n this._mySessionBlurred = false;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._onViewReset = function () {\r\n let identityTransformQuat = Quat2Utils.identity(quat2_create());\r\n let prevHeadPosition = vec3_create();\r\n let resetHeadPosition = vec3_create();\r\n return function _onViewReset() {\r\n if (this._myActive) {\r\n if (!this._myViewResetThisFrame && this._myParams.myResetTransformOnViewResetEnabled && this._mySessionActive && this.isSynced()) {\r\n this._myViewResetThisFrame = true;\r\n let previousHeadTransformQuat = this._getHeadTransformFromLocal(this._myCurrentHeadTransformLocalQuat);\r\n this.teleportPlayerToHeadTransformQuat(previousHeadTransformQuat);\r\n\r\n let isFloor = XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine);\r\n if (!isFloor) {\r\n let resetHeadTransformQuat = this._getHeadTransformFromLocal(identityTransformQuat);\r\n let prevHeadHeight = this._getPositionEyesHeight(previousHeadTransformQuat.quat2_getPosition(prevHeadPosition));\r\n let currentHeadHeight = this._getPositionEyesHeight(resetHeadTransformQuat.quat2_getPosition(resetHeadPosition));\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (prevHeadHeight - currentHeadHeight);\r\n this._updateHeightOffset();\r\n }\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._blurEndResync = function () {\r\n let playerUp = vec3_create();\r\n let currentHeadPosition = vec3_create();\r\n let recoverHeadPosition = vec3_create();\r\n let flatCurrentHeadPosition = vec3_create();\r\n let flatRecoverHeadPosition = vec3_create();\r\n let recoverMovement = vec3_create();\r\n let recoverHeadForward = vec3_create();\r\n let currentHeadForward = vec3_create();\r\n let rotationToPerform = quat_create();\r\n return function _blurEndResync() {\r\n if (this._myBlurRecoverHeadTransform != null) {\r\n if (this._mySessionChangeResyncHeadTransform != null) {\r\n this._myBlurRecoverHeadTransform = null;\r\n this._sessionChangeResync();\r\n } else {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n recoverHeadPosition = this._myBlurRecoverHeadTransform.quat2_getPosition(recoverHeadPosition);\r\n\r\n flatCurrentHeadPosition = currentHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatCurrentHeadPosition);\r\n flatRecoverHeadPosition = recoverHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatRecoverHeadPosition);\r\n\r\n recoverMovement = flatRecoverHeadPosition.vec3_sub(flatCurrentHeadPosition, recoverMovement);\r\n this.moveFeet(recoverMovement);\r\n\r\n recoverHeadForward = this._myBlurRecoverHeadTransform.quat2_getForward(recoverHeadForward);\r\n currentHeadForward = this._myCurrentHead.pp_getForward(currentHeadForward);\r\n rotationToPerform = currentHeadForward.vec3_rotationToPivotedQuat(recoverHeadForward, playerUp, rotationToPerform);\r\n\r\n if (this._myParams.myBlurEndResyncRotation) {\r\n this.rotateFeetQuat(rotationToPerform);\r\n }\r\n\r\n this._myBlurRecoverHeadTransform = null;\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._sessionChangeResync = function () {\r\n let currentHeadPosition = vec3_create();\r\n let resyncHeadPosition = vec3_create();\r\n let resyncHeadRotation = quat_create();\r\n let playerUp = vec3_create();\r\n let flatCurrentHeadPosition = vec3_create();\r\n let flatResyncHeadPosition = vec3_create();\r\n let resyncMovement = vec3_create();\r\n let resyncHeadForward = vec3_create();\r\n let resyncHeadUp = vec3_create();\r\n let resyncHeadRight = vec3_create();\r\n let playerPosition = vec3_create();\r\n let newPlayerPosition = vec3_create();\r\n let fixedHeadRight = vec3_create();\r\n let fixedHeadLeft = vec3_create();\r\n let fixedHeadUp = vec3_create();\r\n let fixedHeadForward = vec3_create();\r\n let fixedHeadRotation = quat_create();\r\n return function _sessionChangeResync() {\r\n if (this._myBlurRecoverHeadTransform == null && this._mySessionChangeResyncHeadTransform != null) {\r\n if (this._mySessionActive) {\r\n currentHeadPosition = this._myCurrentHead.pp_getPosition(currentHeadPosition);\r\n resyncHeadPosition = this._mySessionChangeResyncHeadTransform.quat2_getPosition(resyncHeadPosition);\r\n resyncHeadRotation = this._mySessionChangeResyncHeadTransform.quat2_getRotationQuat(resyncHeadRotation);\r\n\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n flatCurrentHeadPosition = currentHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatCurrentHeadPosition);\r\n flatResyncHeadPosition = resyncHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatResyncHeadPosition);\r\n\r\n resyncMovement = flatResyncHeadPosition.vec3_sub(flatCurrentHeadPosition, resyncMovement);\r\n this.moveFeet(resyncMovement);\r\n\r\n if (this._myParams.myEnterSessionResyncHeight || this._myParams.myNextEnterSessionResyncHeight) {\r\n this._myParams.myNextEnterSessionResyncHeight = false;\r\n let resyncHeadHeight = this._getPositionEyesHeight(resyncHeadPosition);\r\n let currentHeadHeight = this._getPositionEyesHeight(currentHeadPosition);\r\n\r\n this._myHeightVRWithoutFloor = resyncHeadHeight + this._myParams.myForeheadExtraHeight;\r\n this._myHeightVRWithFloor = resyncHeadHeight + this._myParams.myForeheadExtraHeight;\r\n this._myHeightOffsetWithFloor = this._myHeightOffsetWithFloor + (resyncHeadHeight - currentHeadHeight);\r\n this._myHeightOffsetWithoutFloor = this._myHeightOffsetWithoutFloor + (resyncHeadHeight - currentHeadHeight);\r\n\r\n this._updateHeightOffset();\r\n\r\n this._myNextEnterSessionSetHeightVRWithFloor = false;\r\n this._myNextEnterSessionSetHeightVRWithoutFloor = false;\r\n }\r\n\r\n this._resyncHeadRotationForward(resyncHeadRotation);\r\n } else {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n\r\n resyncHeadPosition = this._mySessionChangeResyncHeadTransform.quat2_getPosition(resyncHeadPosition);\r\n flatResyncHeadPosition = resyncHeadPosition.vec3_removeComponentAlongAxis(playerUp, flatResyncHeadPosition);\r\n\r\n playerPosition = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getPosition(playerPosition);\r\n newPlayerPosition = flatResyncHeadPosition.vec3_add(playerPosition.vec3_componentAlongAxis(playerUp, newPlayerPosition), newPlayerPosition);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_setPosition(newPlayerPosition);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_resetPositionLocal();\r\n\r\n if (this._myParams.myExitSessionResyncHeight) {\r\n let resyncHeadHeight = this._getPositionEyesHeight(resyncHeadPosition);\r\n this._myHeightNonVR = resyncHeadHeight + this._myParams.myForeheadExtraHeight;\r\n }\r\n\r\n this._updateHeightOffset();\r\n\r\n if (this._myParams.myExitSessionResyncHeight || this._myParams.myExitSessionResetNonVRTransformLocal) {\r\n this._setCameraNonXRHeight(this._myHeightNonVR);\r\n } else {\r\n this._setCameraNonXRHeight(this._myHeightNonVROnEnterSession);\r\n }\r\n\r\n resyncHeadRotation = this._mySessionChangeResyncHeadTransform.quat2_getRotationQuat(resyncHeadRotation);\r\n\r\n if (this._myParams.myExitSessionRemoveRightTilt ||\r\n this._myParams.myExitSessionAdjustMaxVerticalAngle || !this._myParams.myExitSessionResyncVerticalAngle) {\r\n resyncHeadForward = resyncHeadRotation.quat_getForward(resyncHeadForward);\r\n resyncHeadUp = resyncHeadRotation.quat_getUp(resyncHeadUp);\r\n\r\n fixedHeadRight = resyncHeadForward.vec3_cross(playerUp, fixedHeadRight);\r\n fixedHeadRight.vec3_normalize(fixedHeadRight);\r\n\r\n if (!resyncHeadUp.vec3_isConcordant(playerUp)) {\r\n let angleForwardUp = resyncHeadForward.vec3_angle(playerUp);\r\n let negateAngle = 45;\r\n if (angleForwardUp > (180 - negateAngle) || angleForwardUp < negateAngle) {\r\n // This way I get a good fixed result for both head upside down and head rotated on forward\r\n // When the head is looking down and a bit backward (more than 135 degrees), I want the forward to actually\r\n // be the opposite because it's like u rotate back the head up and look forward again\r\n fixedHeadRight.vec3_negate(fixedHeadRight);\r\n }\r\n }\r\n\r\n if (fixedHeadRight.vec3_isZero(0.000001)) {\r\n fixedHeadRight = resyncHeadRotation.quat_getRight(fixedHeadRight);\r\n }\r\n\r\n fixedHeadUp = fixedHeadRight.vec3_cross(resyncHeadForward, fixedHeadUp);\r\n fixedHeadUp.vec3_normalize(fixedHeadUp);\r\n fixedHeadForward = fixedHeadUp.vec3_cross(fixedHeadRight, fixedHeadForward);\r\n fixedHeadForward.vec3_normalize(fixedHeadForward);\r\n\r\n fixedHeadRotation.quat_fromAxes(fixedHeadRight.vec3_negate(fixedHeadLeft), fixedHeadUp, fixedHeadForward);\r\n resyncHeadRotation.quat_copy(fixedHeadRotation);\r\n }\r\n\r\n if (this._myParams.myExitSessionAdjustMaxVerticalAngle || !this._myParams.myExitSessionResyncVerticalAngle) {\r\n resyncHeadUp = resyncHeadRotation.quat_getUp(resyncHeadUp);\r\n resyncHeadRight = resyncHeadRotation.quat_getRight(resyncHeadRight);\r\n\r\n let maxVerticalAngle = Math.max(0, this._myParams.myExitSessionMaxVerticalAngle - 0.0001);\r\n if (!this._myParams.myExitSessionResyncVerticalAngle) {\r\n maxVerticalAngle = 0;\r\n }\r\n\r\n let angleWithUp = Math.pp_angleClamp(resyncHeadUp.vec3_angleSigned(playerUp, resyncHeadRight));\r\n if (Math.abs(angleWithUp) > maxVerticalAngle) {\r\n let fixAngle = (Math.abs(angleWithUp) - maxVerticalAngle) * Math.pp_sign(angleWithUp);\r\n resyncHeadRotation = resyncHeadRotation.quat_rotateAxis(fixAngle, resyncHeadRight, resyncHeadRotation);\r\n }\r\n }\r\n\r\n this.setRotationHeadQuat(resyncHeadRotation);\r\n }\r\n\r\n this._mySessionChangeResyncHeadTransform = null;\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._resyncHeadRotationForward = function () {\r\n let playerUp = vec3_create();\r\n let resyncHeadForward = vec3_create();\r\n let resyncHeadUp = vec3_create();\r\n let fixedResyncHeadRotation = quat_create();\r\n return function _resyncHeadRotationForward(resyncHeadRotation) {\r\n playerUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp(playerUp);\r\n resyncHeadForward = resyncHeadRotation.quat_getForward(resyncHeadForward);\r\n resyncHeadUp = resyncHeadRotation.quat_getUp(resyncHeadUp);\r\n fixedResyncHeadRotation.quat_copy(resyncHeadRotation);\r\n fixedResyncHeadRotation.quat_setUp(playerUp, resyncHeadForward);\r\n\r\n if (!resyncHeadUp.vec3_isConcordant(playerUp)) {\r\n // If it was upside down, it's like it has to rotate the neck back up,so the forward is actually on the opposite side\r\n fixedResyncHeadRotation.quat_rotateAxis(180, playerUp, fixedResyncHeadRotation);\r\n }\r\n\r\n this.setRotationFeetQuat(fixedResyncHeadRotation);\r\n return;\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._setCameraNonXRHeight = function () {\r\n let cameraNonVRPosition = vec3_create();\r\n let cameraNonVRPositionLocalToPlayer = vec3_create();\r\n let adjustedCameraNonVRPosition = vec3_create();\r\n let playerTranform = mat4_create();\r\n return function _setCameraNonXRHeight(height) {\r\n let eyeHeight = height - this._myParams.myForeheadExtraHeight;\r\n cameraNonVRPosition = Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_getPosition(cameraNonVRPosition);\r\n cameraNonVRPositionLocalToPlayer = cameraNonVRPosition.vec3_convertPositionToLocal(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), cameraNonVRPositionLocalToPlayer);\r\n cameraNonVRPositionLocalToPlayer.vec3_set(cameraNonVRPositionLocalToPlayer[0], eyeHeight, cameraNonVRPositionLocalToPlayer[2]);\r\n adjustedCameraNonVRPosition = cameraNonVRPositionLocalToPlayer.vec3_convertPositionToWorld(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), adjustedCameraNonVRPosition);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myCameraNonXR.pp_setPosition(adjustedCameraNonVRPosition);\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._updateHeightOffset = function () {\r\n return function _updateHeightOffset() {\r\n if (this._mySessionActive) {\r\n if (XRUtils.isReferenceSpaceFloorBased(this._myParams.myEngine)) {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithFloor, 0);\r\n } else {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithoutFloor, 0);\r\n }\r\n } else {\r\n if (this._shouldNonVRUseVRWithFloor()) {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithFloor, 0);\r\n } else if (this._shouldNonVRUseVRWithoutFloor()) {\r\n this._setReferenceSpaceHeightOffset(this._myHeightOffsetWithoutFloor, 0);\r\n } else if (this._myParams.myNonVRFloorBasedMode == NonVRReferenceSpaceMode.FLOOR) {\r\n this._setReferenceSpaceHeightOffset(0, 0);\r\n } else {\r\n this._setReferenceSpaceHeightOffset(this._myHeightNonVR, this._myParams.myForeheadExtraHeight);\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._setReferenceSpaceHeightOffset = function () {\r\n let referenceSpacePosition = vec3_create();\r\n let referenceSpacePositionLocalToPlayer = vec3_create();\r\n let adjustedReferenceSpacePosition = vec3_create();\r\n let playerTranform = mat4_create();\r\n return function _setReferenceSpaceHeightOffset(offset, amountToRemove) {\r\n if (offset != null) {\r\n referenceSpacePosition = Globals.getPlayerObjects(this._myParams.myEngine).myReferenceSpace.pp_getPosition(referenceSpacePosition);\r\n referenceSpacePositionLocalToPlayer = referenceSpacePosition.vec3_convertPositionToLocal(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), referenceSpacePositionLocalToPlayer);\r\n referenceSpacePositionLocalToPlayer.vec3_set(referenceSpacePositionLocalToPlayer[0], offset - amountToRemove, referenceSpacePositionLocalToPlayer[2]);\r\n adjustedReferenceSpacePosition = referenceSpacePositionLocalToPlayer.vec3_convertPositionToWorld(Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getTransform(playerTranform), adjustedReferenceSpacePosition);\r\n Globals.getPlayerObjects(this._myParams.myEngine).myReferenceSpace.pp_setPosition(adjustedReferenceSpacePosition);\r\n }\r\n };\r\n}();\r\n\r\nPlayerHeadManager.prototype._getHeadTransformFromLocal = function () {\r\n return function _getHeadTransformFromLocal(transformLocal) {\r\n return this._myCurrentHead.pp_convertTransformLocalToWorldQuat(transformLocal);\r\n };\r\n}();", "import { PhysicsLayerFlags } from \"../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { CollisionCheckBridge } from \"../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { CollisionCheckUtils } from \"../../../character_controller/collision/legacy/collision_check/collision_check_utils.js\";\r\nimport { CollisionCheckParams, CollisionRuntimeParams } from \"../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\n\r\nexport let PlayerTransformManagerSyncFlag = {\r\n BODY_COLLIDING: 0,\r\n HEAD_COLLIDING: 1,\r\n FAR: 2,\r\n FLOATING: 3\r\n};\r\n\r\nexport class PlayerTransformManagerParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n\r\n this.myMovementCollisionCheckParams = null;\r\n this.myTeleportCollisionCheckParams = null; // Can be left null and will be generated from the movement one\r\n this.myTeleportCollisionCheckParamsCopyFromMovement = false;\r\n this.myTeleportCollisionCheckParamsCheck360 = false;\r\n\r\n this.myAlwaysSyncPositionWithReal = false;\r\n this.myAlwaysSyncHeadPositionWithReal = false;\r\n\r\n // Sync for VR and Non VR\r\n this.mySyncEnabledFlagMap = new Map();\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, true);\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, true);\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FAR, true);\r\n this.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, true);\r\n\r\n this.mySyncPositionFlagMap = new Map();\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, true);\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.FAR, true);\r\n this.mySyncPositionFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, true);\r\n\r\n this.mySyncPositionHeadFlagMap = new Map();\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, true);\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n this.mySyncPositionHeadFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n this.mySyncRotationFlagMap = new Map();\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n this.mySyncRotationFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n this.mySyncHeightFlagMap = new Map();\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n this.mySyncHeightFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n this.myIsLeaningValidAboveDistance = false; // Used to make the character fall if it's leaning too much\r\n this.myLeaningValidDistance = 0;\r\n\r\n // Settings for both hop and lean\r\n this.myIsFloatingValidIfVerticalMovement = false;\r\n this.myIsFloatingValidIfVerticalMovementAndRealOnGround = false; // #TODO This is more an override\r\n this.myIsFloatingValidIfRealOnGround = false;\r\n this.myIsFloatingValidIfSteepGround = false;\r\n this.myIsFloatingValidIfVerticalMovementAndSteepGround = false;\r\n\r\n this.myFloatingSplitCheckEnabled = false;\r\n this.myFloatingSplitCheckMinLength = null;\r\n this.myFloatingSplitCheckMaxLength = null;\r\n this.myFloatingSplitCheckMaxSteps = null;\r\n this.myFloatingSplitCheckStepEqualLength = false;\r\n this.myFloatingSplitCheckStepEqualLengthMinLength = 0;\r\n\r\n this.myMaxDistanceFromRealToSyncEnabled = false;\r\n this.myMaxDistanceFromRealToSync = 0;\r\n // Max distance to resync valid with head, if you head is further do not resync\r\n\r\n this.myHeadRadius = 0;\r\n this.myHeadCollisionBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myHeadCollisionObjectsToIgnore = [];\r\n // Can be used if when resetting to feet there might be dynamic objects which you would like to exclude for this reset check,\r\n // but you might still to normally avoid, for example for opbject you can grab and therefore put close to the ehad, which are not a big deal\r\n // and you can accept being able to see inside them when resetting the head, but not for normal movements\r\n this.myHeadCollisionBlockLayerFlagsForResetToFeet = null;\r\n\r\n this.myRotateOnlyIfSynced = false;\r\n this.myResetRealResetRotationIfUpChanged = true;\r\n\r\n // This make it so the head must be able to reach from the feet to the real head, sort of\r\n // like you were teleported in a space squashed to your feet and then have to get up\r\n // It can be used to prevent being able to see through the floor, since when the head is reset to the real one\r\n // if the real one is on the other side of the above floor there would be no collision\r\n // The risk is that, if you have objects close to your feet, your head could get stuck on them while trying to \"get up\"\r\n // and the view could be obscured thinking you have those objects in your view\r\n this.myResetHeadToFeetInsteadOfReal = false;\r\n\r\n // This other flag is to fix the above issue, doing the \"squash and get up\" only if the head is not reachable normally\r\n // The above issue can still happen but should be more rare, only if you teleport to a place where there could be garbage stuff\r\n this.myResetHeadToFeetInsteadOfRealOnlyIfRealNotReachable = false;\r\n\r\n this.myResetHeadToFeetMoveTowardReal = true;\r\n\r\n // Can be used to specify that the head should reset a bit above the actual feet level, so to avoid small objects that could very frequently\r\n // happen to be close to the floor\r\n this.myResetHeadToFeetUpOffset = 0.25;\r\n this.myResetHeadToFeetGroudnAngleIgnoreEnabled = false;\r\n\r\n this.myResetHeadToRealMinDistance = 0;\r\n\r\n //this.myDistanceToStartApplyGravityWhenFloating = 0; // This should be moved outisde, that is, if it is floating stop gravity\r\n\r\n // Set valid if head synced (head manager)\r\n\r\n this.myRealMovementAllowVerticalAdjustments = false;\r\n // This true means that the real movement should also snap on ground or fix the vertical to pop from it\r\n // You may want this if u want that while real moving u can also climb stairs\r\n\r\n // Real movement apply vertical snap or not (other option to apply gravity) \r\n // (gravity inside this class?) only when movement is applied not for head only)\r\n\r\n this.myUpdatePositionValid = false;\r\n this.myUpdatePositionHeadValid = true;\r\n this.myUpdateRealPositionValid = false;\r\n this.myUpdateRealPositionHeadValid = false;\r\n\r\n this.myMinHeight = null;\r\n this.myMaxHeight = null;\r\n\r\n // These and the callbacks does not makes much sense\r\n // The colliding things are made to not sync the real position, but if the height is below and the body is not colliding\r\n // There is not reason not to resync, even if u put the real back on the valid the height will stay the same\r\n // If someone puts the head in the ground, there is no way for me to resync and make the head pop out sadly\r\n // In this case u either accept that u can move without seeing, or stop moving until the obscure is on\r\n this.myIsBodyCollidingWhenHeightBelowValue = null; // Could be removed and added with the custom check callback if u want it\r\n this.myIsBodyCollidingWhenHeightAboveValue = null;\r\n\r\n this.myIsBodyCollidingExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n this.myIsLeaningExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n this.myIsHoppingExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n this.myIsFarExtraCheckCallback = null; // Signature: callback(transformManager) -> bool\r\n\r\n this.myResetToValidOnEnterSession = false;\r\n this.myResetToValidOnExitSession = false;\r\n\r\n this.myAlwaysResetRealPositionNonVR = false;\r\n this.myAlwaysResetRealRotationNonVR = false;\r\n this.myAlwaysResetRealHeightNonVR = false;\r\n\r\n this.myAlwaysResetRealPositionVR = false;\r\n this.myAlwaysResetRealRotationVR = false;\r\n this.myAlwaysResetRealHeightVR = false;\r\n\r\n this.myNeverResetRealPositionNonVR = false;\r\n this.myNeverResetRealRotationNonVR = false;\r\n this.myNeverResetRealHeightNonVR = false;\r\n\r\n this.myResetRealHeightNonVROnExitSession = false;\r\n\r\n this.myNeverResetRealPositionVR = false;\r\n this.myNeverResetRealRotationVR = false;\r\n this.myNeverResetRealHeightVR = false;\r\n\r\n this.myResetRealOnMove = false;\r\n this.myResetRealOnTeleport = false;\r\n\r\n this.mySyncPositionDisabled = false;\r\n\r\n this.myEngine = engine;\r\n\r\n this.myDebugEnabled = false;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\nexport class PlayerTransformManager {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myRealMovementCollisionCheckParams = null;\r\n this._generateRealMovementParamsFromMovementParams();\r\n\r\n this._myCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myRealCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n if (this._myParams.myTeleportCollisionCheckParamsCopyFromMovement) {\r\n this._generateTeleportParamsFromMovementParams();\r\n }\r\n\r\n this._myHeadCollisionCheckParams = null;\r\n this._setupHeadCollisionCheckParams();\r\n\r\n this._myValidPosition = vec3_create();\r\n this._myValidRotationQuat = quat_create();\r\n this._myValidHeight = 0;\r\n this._myValidPositionHead = vec3_create();\r\n this._myValidPositionHeadBackupForResetToFeet = vec3_create();\r\n\r\n this._myIsBodyColliding = false;\r\n this._myIsHeadColliding = false;\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n this._myIsFar = false;\r\n\r\n this._myLastValidMovementDirection = vec3_create();\r\n this._myIsPositionValid = false;\r\n this._myIsPositionHeadValid = false;\r\n this._myIsRealPositionValid = false;\r\n this._myIsRealHeadositionValid = false;\r\n\r\n this._myResetRealOnHeadSynced = false;\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n\r\n this._myActive = true;\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this.resetToReal(true);\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, true, this._myParams.myEngine);\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setActive(active) {\r\n this._myActive = active;\r\n }\r\n\r\n // update should be before to check the new valid transform and if the head new transform is fine\r\n // then update movements, so that they will use the proper transform\r\n // pre/post update?\r\n // For sliding if previous frame no horizontal movement then reset sliding on pre update\r\n // In generale capire come fare per risolvere i problemi quando c'è un move solo verticale che sputtana i dati dello sliding precedente\r\n // che servono per far slidare bene anche dopo, magari un flag per dire non aggiornare le cose relative al movimento orizzontale\r\n // o un move check solo verticale\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n move(movement, outCollisionRuntimeParams = null, forceMove = false) {\r\n // Collision runtime will copy the result, so that u can use that for later reference like if it was sliding\r\n // Maybe there should be a way to sum all the things happened for proper movement in a summary runtime\r\n // or maybe the move should be done once per frame, or at least in theory\r\n\r\n // Collision check and move\r\n\r\n // Move should move the valid transform, but also move the player object so that they head, even is colliding is dragged with it\r\n // Also teleport, should get the difference from previous and move the player object, this will keep the relative position head-to-valid\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPosition(position, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n // Collision check and teleport, if force teleport teleport in any case\r\n // Use current valid rotation\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportPositionRotationQuat(position, rotationQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n // Collision check and teleport, if force teleport teleport in any case\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n teleportTransformQuat(transformQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n // Collision check and teleport, if force teleport teleport in any case\r\n\r\n // Implemented outside class definition\r\n }\r\n\r\n // Quick way to force teleport to a position and reset the real to this\r\n forceTeleportAndReset(position, rotationQuat) {\r\n this.teleportPositionRotationQuat(position, rotationQuat, null, true);\r\n\r\n this._myPlayerTransformManager.resetReal(true, true, undefined, undefined, undefined, true);\r\n }\r\n\r\n rotateQuat(rotationQuat) {\r\n // Implemented outside class definition\r\n }\r\n\r\n setRotationQuat(rotationQuat) {\r\n // Implemented outside class definition\r\n }\r\n\r\n setHeight(height, forceSet = false) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPlayer() {\r\n return this._myParams.myPlayerHeadManager.getPlayer();\r\n }\r\n\r\n getHead() {\r\n return this._myParams.myPlayerHeadManager.getHead();\r\n }\r\n\r\n getTransformQuat(outTransformQuat = quat2_create()) {\r\n return outTransformQuat.quat2_setPositionRotationQuat(this.getPosition(this._myValidPosition), this.getRotationQuat(this._myValidRotationQuat));\r\n }\r\n\r\n getPosition(outPosition = vec3_create()) {\r\n return outPosition.vec3_copy(this._myValidPosition);\r\n }\r\n\r\n getRotationQuat(outRotation = quat_create()) {\r\n return outRotation.quat_copy(this._myValidRotationQuat);\r\n }\r\n\r\n getPositionHead(outPosition = vec3_create()) {\r\n return outPosition.vec3_copy(this._myValidPositionHead);\r\n }\r\n\r\n getTransformHeadQuat(outTransformQuat = quat2_create()) {\r\n return outTransformQuat.quat2_setPositionRotationQuat(this.getPositionHead(this._myValidPositionHead), this.getRotationQuat(this._myValidRotationQuat));\r\n }\r\n\r\n getHeight() {\r\n return this._myValidHeight;\r\n }\r\n\r\n getTransformRealQuat(outTransformQuat = quat2_create()) {\r\n return this.getPlayerHeadManager().getTransformFeetQuat(outTransformQuat);\r\n }\r\n\r\n getTransformHeadRealQuat(outTransformQuat = quat2_create()) {\r\n return this.getPlayerHeadManager().getTransformHeadQuat(outTransformQuat);\r\n }\r\n\r\n getPositionReal(outPosition = vec3_create()) {\r\n return this.getPlayerHeadManager().getPositionFeet(outPosition);\r\n }\r\n\r\n getPositionHeadReal(outPosition = vec3_create()) {\r\n return this.getPlayerHeadManager().getPositionHead(outPosition);\r\n }\r\n\r\n getRotationRealQuat(outRotation = quat_create()) {\r\n return this.getPlayerHeadManager().getRotationFeetQuat(outRotation);\r\n }\r\n\r\n getHeightReal() {\r\n return this._myParams.myPlayerHeadManager.getHeightHead();\r\n }\r\n\r\n isSynced(syncFlagMap = null) {\r\n let isBodyColliding = this.isBodyColliding() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.BODY_COLLIDING));\r\n let isHeadColliding = this.isHeadColliding() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.HEAD_COLLIDING));\r\n let isFar = this.isFar() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.FAR));\r\n let isFloating = this.isFloating() && (syncFlagMap == null || syncFlagMap.get(PlayerTransformManagerSyncFlag.FLOATING));\r\n return !isBodyColliding && !isHeadColliding && !isFar && !isFloating;\r\n }\r\n\r\n resetReal(resetPosition = true, resetRotation = false, resetHeight = false, resetHeadToReal = true, updateValidToReal = false, ignoreResetHeadMinDistance = false) {\r\n // Implemented outside class definition\r\n }\r\n\r\n updateValidToReal() {\r\n this._updateValidToReal(0);\r\n }\r\n\r\n updateValidHeadToRealHead() {\r\n this._updateValidHeadToRealHead(0);\r\n }\r\n\r\n updateValidHeadToRealHeadIfNeeded() {\r\n if (this._myResetHeadToFeetDirty) {\r\n this._updateValidHeadToRealHead(0);\r\n }\r\n }\r\n\r\n resetToReal(resetToPlayerInsteadOfHead = false, updateValidToReal = false) {\r\n if (resetToPlayerInsteadOfHead) {\r\n this._myValidPosition = this.getPlayerHeadManager().getPlayer().pp_getPosition(this._myValidPosition);\r\n } else {\r\n this._myValidPosition = this.getPositionReal(this._myValidPosition);\r\n }\r\n\r\n if (!this._myParams.myAlwaysSyncPositionWithReal) {\r\n this._myValidPositionHead = this.getPositionHeadReal(this._myValidPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this._myResetHeadToFeetDirty = false;\r\n }\r\n\r\n if (resetToPlayerInsteadOfHead) {\r\n this._myValidRotationQuat = this.getPlayerHeadManager().getPlayer().pp_getRotationQuat(this._myValidRotationQuat);\r\n } else {\r\n this._myValidRotationQuat = this.getRotationRealQuat(this._myValidRotationQuat);\r\n }\r\n\r\n this._myValidHeight = Math.pp_clamp(this.getHeightReal(), this._myParams.myMinHeight, this._myParams.myMaxHeight);\r\n\r\n if (updateValidToReal) {\r\n this._updateValidToReal(0);\r\n }\r\n }\r\n\r\n resetHeadToReal() {\r\n if (!this._myParams.myAlwaysSyncPositionWithReal) {\r\n this._myValidPositionHead = this.getPositionHeadReal(this._myValidPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this._myResetHeadToFeetDirty = false;\r\n }\r\n }\r\n\r\n resetHeadToFeet() {\r\n // Implemented outside class definition\r\n }\r\n\r\n isBodyColliding() {\r\n return this._myIsBodyColliding;\r\n }\r\n\r\n isHeadColliding() {\r\n return this._myIsHeadColliding;\r\n }\r\n\r\n isFloating() {\r\n return this.isLeaning() || this.isHopping();\r\n }\r\n\r\n isLeaning() {\r\n return this._myIsLeaning;\r\n }\r\n\r\n isHopping() {\r\n return this._myIsHopping;\r\n }\r\n\r\n isFar() {\r\n return this._myIsFar;\r\n }\r\n\r\n getDistanceToReal() {\r\n // Implemented outside class definition\r\n }\r\n\r\n getDistanceToRealHead() {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPlayerHeadManager() {\r\n return this._myParams.myPlayerHeadManager;\r\n }\r\n\r\n getMovementCollisionCheckParams() {\r\n return this._myParams.myMovementCollisionCheckParams;\r\n }\r\n\r\n getTeleportCollisionCheckParams() {\r\n return this._myParams.myTeleportCollisionCheckParams;\r\n }\r\n\r\n collisionCheckParamsUpdated() {\r\n if (this._myParams.myTeleportCollisionCheckParamsCopyFromMovement) {\r\n this._generateTeleportParamsFromMovementParams();\r\n }\r\n\r\n this._generateRealMovementParamsFromMovementParams();\r\n }\r\n\r\n isPositionValid() {\r\n return this._myIsPositionValid;\r\n }\r\n\r\n isPositionHeadValid() {\r\n return this._myIsPositionHeadValid;\r\n }\r\n\r\n isPositionRealValid() {\r\n return this._myIsRealPositionValid;\r\n }\r\n\r\n isPositionHeadRealValid() {\r\n return this._myIsRealPositionHeadValid;\r\n }\r\n\r\n getCollisionRuntimeParams() {\r\n return this._myCollisionRuntimeParams;\r\n }\r\n\r\n getRealCollisionRuntimeParams() {\r\n return this._myRealCollisionRuntimeParams;\r\n }\r\n\r\n _updateCollisionHeight() {\r\n let validHeight = this.getHeight();\r\n let realHeight = Math.pp_clamp(this.getHeightReal(), this._myParams.myMinHeight, this._myParams.myMaxHeight);\r\n\r\n this._myParams.myMovementCollisionCheckParams.myHeight = validHeight;\r\n this._myParams.myTeleportCollisionCheckParams.myHeight = validHeight;\r\n\r\n this._myRealMovementCollisionCheckParams.myHeight = realHeight;\r\n }\r\n\r\n _setupHeadCollisionCheckParams() {\r\n this._myHeadCollisionCheckParams = new CollisionCheckParams();\r\n let params = this._myHeadCollisionCheckParams;\r\n\r\n params.myRadius = this._myParams.myHeadRadius;\r\n params.myDistanceFromFeetToIgnore = 0;\r\n params.myDistanceFromHeadToIgnore = 0;\r\n\r\n params.mySplitMovementEnabled = true;\r\n params.mySplitMovementMaxLengthEnabled = true;\r\n params.mySplitMovementMaxLength = params.myRadius * 0.75;\r\n params.mySplitMovementMinLengthEnabled = true;\r\n params.mySplitMovementMinLength = params.mySplitMovementMaxLength;\r\n params.mySplitMovementMaxStepsEnabled = true;\r\n params.mySplitMovementMaxSteps = 3;\r\n params.mySplitMovementStopWhenHorizontalMovementCanceled = true;\r\n params.mySplitMovementStopWhenVerticalMovementCanceled = true;\r\n\r\n params.myHorizontalMovementCheckEnabled = true;\r\n params.myHorizontalMovementRadialStepAmount = 1;\r\n params.myHorizontalMovementCheckDiagonalOutward = true;\r\n params.myHorizontalMovementCheckDiagonalInward = true;\r\n params.myHorizontalMovementCheckVerticalDiagonalUpwardOutward = true;\r\n params.myHorizontalMovementCheckVerticalDiagonalUpwardInward = true;\r\n\r\n params.myHorizontalPositionCheckEnabled = true;\r\n params.myHalfConeAngle = 180;\r\n params.myHalfConeSliceAmount = 3;\r\n params.myCheckConeBorder = true;\r\n params.myCheckConeRay = true;\r\n params.myHorizontalPositionCheckVerticalIgnoreHitsInsideCollision = false;\r\n params.myHorizontalPositionCheckVerticalDirectionType = 0;\r\n\r\n params.myHeight = params.myRadius; // On purpose the height \"radius\" is half, to avoid hitting before with head than body collision (through height)\r\n params.myPositionOffsetLocal.vec3_set(0, -params.myRadius / 2, 0);\r\n\r\n params.myCheckHeight = true;\r\n params.myCheckHeightVerticalMovement = true;\r\n params.myCheckHeightVerticalPosition = true;\r\n params.myHeightCheckStepAmountMovement = 2;\r\n params.myHeightCheckStepAmountPosition = 2;\r\n params.myCheckHeightTopMovement = true;\r\n params.myCheckHeightTopPosition = true;\r\n params.myCheckVerticalStraight = true;\r\n\r\n params.myCheckVerticalFixedForwardEnabled = true;\r\n params.myCheckVerticalFixedForward = vec3_create(0, 0, 1);\r\n\r\n params.myCheckHorizontalFixedForwardEnabled = true;\r\n params.myCheckHorizontalFixedForward = vec3_create(0, 0, 1);\r\n\r\n params.myVerticalMovementCheckEnabled = true;\r\n params.myVerticalPositionCheckEnabled = true;\r\n\r\n params.myGroundCircumferenceAddCenter = true;\r\n params.myGroundCircumferenceSliceAmount = 6;\r\n params.myGroundCircumferenceStepAmount = 2;\r\n params.myGroundCircumferenceRotationPerStep = 30;\r\n params.myFeetRadius = params.myRadius;\r\n\r\n params.myHorizontalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlags);\r\n params.myHorizontalObjectsToIgnore.pp_copy(this._myParams.myHeadCollisionObjectsToIgnore);\r\n params.myVerticalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlags);\r\n params.myVerticalObjectsToIgnore.pp_copy(this._myParams.myHeadCollisionObjectsToIgnore);\r\n\r\n params.myDebugEnabled = false;\r\n\r\n params.myDebugHorizontalMovementEnabled = false;\r\n params.myDebugHorizontalPositionEnabled = false;\r\n params.myDebugVerticalMovementEnabled = false;\r\n params.myDebugVerticalPositionEnabled = false;\r\n params.myDebugSlidingEnabled = false;\r\n params.myDebugGroundInfoEnabled = false;\r\n params.myDebugCeilingInfoEnabled = false;\r\n params.myDebugRuntimeParamsEnabled = false;\r\n params.myDebugMovementEnabled = false;\r\n }\r\n\r\n _generateTeleportParamsFromMovementParams() {\r\n if (this._myParams.myTeleportCollisionCheckParams == null) {\r\n this._myParams.myTeleportCollisionCheckParams = new CollisionCheckParams();\r\n }\r\n\r\n if (this._myParams.myTeleportCollisionCheckParamsCheck360) {\r\n this._myParams.myTeleportCollisionCheckParams = CollisionCheckUtils.generate360TeleportParamsFromMovementParams(this._myParams.myMovementCollisionCheckParams, this._myParams.myTeleportCollisionCheckParams);\r\n } else {\r\n this._myParams.myTeleportCollisionCheckParams.copy(this._myParams.myMovementCollisionCheckParams);\r\n }\r\n }\r\n\r\n _generateRealMovementParamsFromMovementParams() {\r\n if (this._myRealMovementCollisionCheckParams == null) {\r\n this._myRealMovementCollisionCheckParams = new CollisionCheckParams();\r\n }\r\n\r\n let params = this._myRealMovementCollisionCheckParams;\r\n params.copy(this._myParams.myMovementCollisionCheckParams);\r\n\r\n params.mySplitMovementEnabled = true;\r\n params.mySplitMovementMaxLengthEnabled = true;\r\n params.mySplitMovementMaxLength = params.myRadius * 0.75;\r\n params.mySplitMovementMinLengthEnabled = true;\r\n params.mySplitMovementMinLength = params.mySplitMovementMaxLength;\r\n params.mySplitMovementMaxStepsEnabled = true;\r\n params.mySplitMovementMaxSteps = 3;\r\n params.mySplitMovementStopWhenHorizontalMovementCanceled = true;\r\n params.mySplitMovementStopWhenVerticalMovementCanceled = true;\r\n\r\n params.mySlidingEnabled = false;\r\n\r\n if (!this._myParams.myRealMovementAllowVerticalAdjustments) {\r\n params.mySnapOnGroundEnabled = false;\r\n params.mySnapOnCeilingEnabled = false;\r\n params.myGroundPopOutEnabled = false;\r\n params.myCeilingPopOutEnabled = false;\r\n params.myAdjustVerticalMovementWithGroundAngleDownhill = false;\r\n params.myAdjustVerticalMovementWithGroundAngleUphill = false;\r\n params.myAdjustVerticalMovementWithCeilingAngleDownhill = false;\r\n params.myAdjustVerticalMovementWithCeilingAngleUphill = false;\r\n params.myAdjustHorizontalMovementWithGroundAngleDownhill = false;\r\n params.myAdjustHorizontalMovementWithCeilingAngleDownhill = false;\r\n params.myVerticalMovementReduceEnabled = false;\r\n }\r\n\r\n //params.myHorizontalMovementGroundAngleIgnoreHeight = 0.1 * 3;\r\n //params.myHorizontalMovementCeilingAngleIgnoreHeight = 0.1 * 3;\r\n\r\n params.myIsOnGroundIfInsideHit = true;\r\n\r\n params.myDebugEnabled = false;\r\n\r\n params.myDebugHorizontalMovementEnabled = false;\r\n params.myDebugHorizontalPositionEnabled = false;\r\n params.myDebugVerticalMovementEnabled = false;\r\n params.myDebugVerticalPositionEnabled = false;\r\n params.myDebugSlidingEnabled = false;\r\n params.myDebugGroundInfoEnabled = false;\r\n params.myDebugCeilingInfoEnabled = false;\r\n params.myDebugRuntimeParamsEnabled = false;\r\n params.myDebugMovementEnabled = false;\r\n }\r\n\r\n _onXRSessionStart(manualCall, session) {\r\n if (!manualCall) {\r\n if (this._myActive) {\r\n if (this._myParams.myResetToValidOnEnterSession) {\r\n this._myResetRealOnHeadSynced = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _onXRSessionEnd() {\r\n if (this._myActive) {\r\n if (this._myParams.myResetToValidOnExitSession) {\r\n this._myResetRealOnHeadSynced = true;\r\n }\r\n }\r\n }\r\n\r\n _updatePositionsValid(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateValidToReal(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _updateValidHeadToRealHead() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _debugUpdate(dt) {\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawPoint(0, this._myValidPosition, vec4_create(1, 0, 0, 1), 0.05);\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawLineEnd(0, this._myValidPosition, this.getPositionReal(), vec4_create(1, 0, 0, 1), 0.05);\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawLine(0, this._myValidPosition, this._myValidRotationQuat.quat_getForward(), 0.15, vec4_create(0, 1, 0, 1), 0.025);\r\n\r\n Globals.getDebugVisualManager(this._myParams.myEngine).drawPoint(0, this._myValidPositionHead, vec4_create(1, 1, 0, 1), 0.05);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerTransformManager.prototype.getDistanceToReal = function () {\r\n let position = vec3_create();\r\n let realPosition = vec3_create();\r\n return function getDistanceToReal() {\r\n realPosition = this.getPositionReal(realPosition);\r\n return realPosition.vec3_distance(this.getPosition(position));\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.getDistanceToRealHead = function () {\r\n let position = vec3_create();\r\n let realPosition = vec3_create();\r\n return function getDistanceToRealHead() {\r\n realPosition = this.getPositionHeadReal(realPosition);\r\n return realPosition.vec3_distance(this.getPositionHead(position));\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.resetReal = function () {\r\n let realUp = vec3_create();\r\n let validUp = vec3_create();\r\n let position = vec3_create();\r\n let rotationQuat = quat_create();\r\n\r\n let positionHeadReal = vec3_create();\r\n let distanceToRealHead = vec3_create();\r\n let validPositionHeadBackupForResetToFeet = vec3_create();\r\n return function resetReal(resetPosition = true, resetRotation = false, resetHeight = false, resetHeadToReal = true, updateValidToReal = false, ignoreResetHeadMinDistance = false) {\r\n let playerHeadManager = this.getPlayerHeadManager();\r\n\r\n if (resetPosition) {\r\n playerHeadManager.teleportPositionFeet(this.getPosition(position));\r\n }\r\n\r\n realUp = this.getPlayerHeadManager().getRotationFeetQuat(rotationQuat).quat_getUp(realUp);\r\n validUp = this.getRotationQuat(rotationQuat).quat_getUp(validUp);\r\n\r\n if (resetRotation || (realUp.vec3_angle(validUp) > Math.PP_EPSILON_DEGREES && this._myParams.myResetRealResetRotationIfUpChanged)) {\r\n playerHeadManager.setRotationFeetQuat(this.getRotationQuat(rotationQuat), false);\r\n }\r\n\r\n if (resetHeight) {\r\n playerHeadManager.setHeightHead(this.getHeight(), true);\r\n }\r\n\r\n if (updateValidToReal) {\r\n this._updateValidToReal(0);\r\n }\r\n\r\n if (resetHeadToReal) {\r\n positionHeadReal = this.getPositionHeadReal(positionHeadReal);\r\n distanceToRealHead = this._myValidPositionHead.vec3_distance(positionHeadReal);\r\n if (ignoreResetHeadMinDistance || distanceToRealHead >= this._myParams.myResetHeadToRealMinDistance) {\r\n if (this._myParams.myResetHeadToFeetInsteadOfRealOnlyIfRealNotReachable) {\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = true;\r\n validPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n this.resetHeadToFeet();\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(validPositionHeadBackupForResetToFeet);\r\n } else if (this._myParams.myResetHeadToFeetInsteadOfReal) {\r\n this.resetHeadToFeet();\r\n } else {\r\n this.resetHeadToReal();\r\n }\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.update = function () {\r\n return function update(dt) {\r\n // #TODO This should update ground and ceiling info but not sliding info \r\n\r\n if (this._myResetRealOnHeadSynced) {\r\n if (this.getPlayerHeadManager().isSynced()) {\r\n this._myResetRealOnHeadSynced = false;\r\n if (XRUtils.isSessionActive(this._myParams.myEngine)) {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionVR,\r\n !this._myParams.myNeverResetRealRotationVR,\r\n !this._myParams.myNeverResetRealHeightVR,\r\n true,\r\n true);\r\n } else {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionNonVR,\r\n !this._myParams.myNeverResetRealRotationNonVR,\r\n !this._myParams.myNeverResetRealHeightNonVR && this._myParams.myResetRealHeightNonVROnExitSession,\r\n true,\r\n true);\r\n }\r\n }\r\n }\r\n\r\n this._updateValidToReal(dt);\r\n this._updatePositionsValid(dt);\r\n\r\n if (this._myParams.myDebugEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n this._debugUpdate(dt);\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype._updateValidToReal = function () {\r\n let movementToCheck = vec3_create();\r\n let position = vec3_create();\r\n let positionReal = vec3_create();\r\n let transformQuat = quat2_create();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n let newPosition = vec3_create();\r\n let movementStep = vec3_create();\r\n let currentMovementStep = vec3_create();\r\n let transformUp = vec3_create();\r\n let verticalMovement = vec3_create();\r\n let movementChecked = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n let floatingTransformQuat = quat2_create();\r\n return function _updateValidToReal(dt) {\r\n // Check if new head is ok and update the data\r\n // If head is not synced (blurred or session changing) avoid this and keep last valid\r\n if (this.getPlayerHeadManager().isSynced()) {\r\n this._updateCollisionHeight();\r\n\r\n this._myIsBodyColliding = false;\r\n this._myIsHeadColliding = false;\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n this._myIsFar = false;\r\n\r\n movementToCheck = this.getPositionReal(positionReal).vec3_sub(this.getPosition(position), movementToCheck);\r\n if (movementToCheck.vec3_length() > 0.0001) {\r\n this._myLastValidMovementDirection = movementToCheck.vec3_normalize(this._myLastValidMovementDirection);\r\n }\r\n\r\n // Far\r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.FAR)) {\r\n if (this._myParams.myMaxDistanceFromRealToSyncEnabled && movementToCheck.vec3_length() > this._myParams.myMaxDistanceFromRealToSync) {\r\n this._myIsFar = true;\r\n } else if (this._myParams.myIsFarExtraCheckCallback != null && this._myParams.myIsFarExtraCheckCallback(this)) {\r\n this._myIsFar = true;\r\n }\r\n }\r\n\r\n // Body Colliding\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n collisionRuntimeParams.myIsOnGround = true; // #TODO Temp as long as surface infos are not actually updated\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n newPosition.vec3_copy(this._myValidPosition);\r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.BODY_COLLIDING)) {\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).move(movementToCheck, transformQuat, this._myRealMovementCollisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !collisionRuntimeParams.myVerticalMovementCanceled) {\r\n if (Math.pp_clamp(this._myRealMovementCollisionCheckParams.myHeight, this._myParams.myIsBodyCollidingWhenHeightBelowValue,\r\n this._myParams.myIsBodyCollidingWhenHeightAboveValue) != this._myRealMovementCollisionCheckParams.myHeight) {\r\n this._myIsBodyColliding = true;\r\n } else {\r\n if (this._myParams.myIsBodyCollidingExtraCheckCallback != null && this._myParams.myIsBodyCollidingExtraCheckCallback(this)) {\r\n this._myIsBodyColliding = true;\r\n } else {\r\n this._myIsBodyColliding = false;\r\n newPosition.vec3_copy(collisionRuntimeParams.myNewPosition);\r\n }\r\n }\r\n } else {\r\n this._myIsBodyColliding = true;\r\n }\r\n }\r\n\r\n if (this._myParams.myAlwaysSyncPositionWithReal) {\r\n newPosition.vec3_copy(positionReal);\r\n }\r\n\r\n // Floating \r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.FLOATING)) {\r\n\r\n if (!this._myIsBodyColliding) {\r\n movementToCheck = newPosition.vec3_sub(position, movementToCheck);\r\n } else {\r\n movementToCheck = positionReal.vec3_sub(position, movementToCheck);\r\n }\r\n\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n floatingTransformQuat.quat2_setPositionRotationQuat(this._myValidPosition, this._myValidRotationQuat);\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).updateSurfaceInfo(floatingTransformQuat, this._myRealMovementCollisionCheckParams, collisionRuntimeParams);\r\n // #TODO Utilizzare on ground del body gia calcolato, ma ora non c'è quindi va bene così\r\n\r\n if (collisionRuntimeParams.myIsOnGround) {\r\n transformUp = transformQuat.quat2_getUp(transformUp);\r\n verticalMovement = movementToCheck.vec3_componentAlongAxis(transformUp, verticalMovement);\r\n let isVertical = !verticalMovement.vec3_isZero(0.00001);\r\n if (!isVertical || !this._myParams.myIsFloatingValidIfVerticalMovement) {\r\n let movementStepAmount = 1;\r\n movementStep.vec3_copy(movementToCheck);\r\n if (!movementToCheck.vec3_isZero(0.00001) && this._myParams.myFloatingSplitCheckEnabled) {\r\n let minLength = this._myParams.myFloatingSplitCheckMinLength;\r\n let maxLength = this._myParams.myFloatingSplitCheckMaxLength;\r\n let maxSteps = this._myParams.myFloatingSplitCheckMaxSteps != null ? this._myParams.myFloatingSplitCheckMaxSteps : 1;\r\n\r\n let movementLength = movementToCheck.vec3_length();\r\n let equalStepLength = movementLength / maxSteps;\r\n\r\n let stepLength = Math.pp_clamp(equalStepLength, minLength, maxLength);\r\n if (stepLength != equalStepLength) {\r\n movementStepAmount = Math.ceil(movementLength / stepLength);\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(stepLength, movementStep);\r\n\r\n if (this._myParams.myFloatingSplitCheckMaxSteps != null) {\r\n movementStepAmount = Math.min(movementStepAmount, maxSteps);\r\n }\r\n } else {\r\n movementStepAmount = maxSteps;\r\n movementStep = movementStep.vec3_normalize(movementStep).vec3_scale(equalStepLength, movementStep);\r\n }\r\n\r\n movementStepAmount = Math.max(1, movementStepAmount);\r\n\r\n if (movementStepAmount == 1) {\r\n movementStep.vec3_copy(movementToCheck);\r\n }\r\n }\r\n\r\n let isOnValidGroundAngle = collisionRuntimeParams.myGroundAngle <= this._myRealMovementCollisionCheckParams.myGroundAngleToIgnore + 0.0001;\r\n\r\n movementChecked.vec3_zero();\r\n newFeetPosition.vec3_copy(this._myValidPosition);\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n\r\n let atLeastOneNotOnGround = false;\r\n let isOneOnGroundBetweenNoGround = false;\r\n let isLastOnGround = false;\r\n let isOneOnSteepGround = false;\r\n\r\n for (let i = 0; i < movementStepAmount; i++) {\r\n if (movementStepAmount == 1 || i != movementStepAmount - 1) {\r\n currentMovementStep.vec3_copy(movementStep);\r\n } else {\r\n currentMovementStep = movementToCheck.vec3_sub(movementChecked, currentMovementStep);\r\n }\r\n\r\n newFeetPosition = newFeetPosition.vec3_add(currentMovementStep, newFeetPosition);\r\n floatingTransformQuat.quat2_setPositionRotationQuat(newFeetPosition, this._myValidRotationQuat);\r\n collisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).updateSurfaceInfo(floatingTransformQuat, this._myRealMovementCollisionCheckParams, collisionRuntimeParams);\r\n movementChecked = movementChecked.vec3_add(currentMovementStep, movementChecked);\r\n\r\n if (!collisionRuntimeParams.myIsOnGround) {\r\n atLeastOneNotOnGround = true;\r\n } else {\r\n if (collisionRuntimeParams.myGroundAngle > this._myRealMovementCollisionCheckParams.myGroundAngleToIgnore + 0.0001) {\r\n isOneOnSteepGround = true;\r\n }\r\n\r\n if (atLeastOneNotOnGround) {\r\n isOneOnGroundBetweenNoGround = true;\r\n }\r\n\r\n if (i == movementStepAmount - 1) {\r\n isLastOnGround = true;\r\n }\r\n }\r\n }\r\n\r\n let isFloatingOnSteepGroundFail = isOneOnSteepGround && isOnValidGroundAngle &&\r\n !this._myParams.myIsFloatingValidIfSteepGround && (!isVertical || !this._myParams.myIsFloatingValidIfVerticalMovementAndSteepGround);\r\n if (atLeastOneNotOnGround || isFloatingOnSteepGroundFail) {\r\n if (isOneOnGroundBetweenNoGround) {\r\n this._myIsHopping = true;\r\n } else {\r\n this._myIsLeaning = true;\r\n }\r\n } else {\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n\r\n if (this._myParams.myIsLeaningExtraCheckCallback != null && this._myParams.myIsLeaningExtraCheckCallback(this)) {\r\n this._myIsLeaning = true;\r\n } else if (this._myParams.myIsHoppingExtraCheckCallback != null && this._myParams.myIsHoppingExtraCheckCallback(this)) {\r\n this._myIsHopping = true;\r\n }\r\n }\r\n\r\n if (this._myIsLeaning) {\r\n let distance = movementToCheck.vec3_length();\r\n if (this._myParams.myIsLeaningValidAboveDistance && distance > this._myParams.myLeaningValidDistance) {\r\n this._myIsLeaning = false;\r\n }\r\n }\r\n\r\n if (this._myIsLeaning || this._myIsHopping) {\r\n if (isLastOnGround && this._myParams.myIsFloatingValidIfRealOnGround) {\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n } else if (isLastOnGround && isVertical && this._myParams.myIsFloatingValidIfVerticalMovementAndRealOnGround) {\r\n this._myIsLeaning = false;\r\n this._myIsHopping = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ((this.isSynced(this._myParams.mySyncPositionFlagMap) || this._myParams.myAlwaysSyncPositionWithReal) && !this._myParams.mySyncPositionDisabled) {\r\n this._myValidPosition.vec3_copy(newPosition);\r\n // Reset real position since the new position might be influenced by the snap?\r\n }\r\n\r\n if (this.isSynced(this._myParams.mySyncRotationFlagMap)) {\r\n this._myValidRotationQuat = this.getRotationRealQuat(this._myValidRotationQuat);\r\n }\r\n\r\n if (this.isSynced(this._myParams.mySyncHeightFlagMap)) {\r\n this._myValidHeight = this._myRealMovementCollisionCheckParams.myHeight;\r\n this._updateCollisionHeight();\r\n }\r\n\r\n this._updateValidHeadToRealHead(dt);\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype._updateValidHeadToRealHead = function () {\r\n let movementToCheck = vec3_create();\r\n let position = vec3_create();\r\n let positionReal = vec3_create();\r\n let transformQuat = quat2_create();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n let newPositionHead = vec3_create();\r\n\r\n let backupHorizontalBlockLayerFlags = new PhysicsLayerFlags();\r\n let backupVerticalBlockLayerFlags = new PhysicsLayerFlags();\r\n return function _updateValidHeadToRealHead(dt) {\r\n if (this.getPlayerHeadManager().isSynced()) {\r\n this._myIsHeadColliding = false;\r\n\r\n backupHorizontalBlockLayerFlags.copy(this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags);\r\n backupVerticalBlockLayerFlags.copy(this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags);\r\n\r\n let backupVerticalMovementReduceEnabled = this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled;\r\n\r\n let backupGroundAngleToIgnore = this._myHeadCollisionCheckParams.myGroundAngleToIgnore;\r\n let backupGroundAngleToIgnoreWithPerceivedAngle = this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle;\r\n let backupHorizontalMovementGroundAngleIgnoreHeight = this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight;\r\n let backupHorizontalPositionGroundAngleIgnoreHeight = this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight;\r\n let backupHorizontalMovementGroundAngleIgnoreMaxMovementLeft = this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n\r\n let headReducedVerticalMovementFeetAdjustment = false;\r\n\r\n // Head Colliding\r\n let firstHeadCollidingCheckDone = false;\r\n do {\r\n if (firstHeadCollidingCheckDone && this._myResetHeadToFeetOnNextUpdateValidToReal) {\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this.resetHeadToFeet();\r\n }\r\n\r\n if (this._myResetHeadToFeetOnNextUpdateValidToReal) {\r\n this._myValidPositionHead.vec3_copy(this._myValidPositionHeadBackupForResetToFeet);\r\n this._myResetHeadToFeetDirty = false;\r\n }\r\n\r\n if (this._myResetHeadToFeetDirty) {\r\n if (this._myParams.myHeadCollisionBlockLayerFlagsForResetToFeet != null) {\r\n this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlagsForResetToFeet);\r\n this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags.copy(this._myParams.myHeadCollisionBlockLayerFlagsForResetToFeet);\r\n }\r\n\r\n if (this._myParams.myResetHeadToFeetMoveTowardReal) {\r\n this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled = true;\r\n }\r\n\r\n if (this._myParams.myResetHeadToFeetGroudnAngleIgnoreEnabled) {\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnore = this._myParams.myMovementCollisionCheckParams.myGroundAngleToIgnore;\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = this._myParams.myMovementCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle;\r\n\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = this._myParams.myMovementCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = this._myParams.myMovementCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight;\r\n\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = this._myParams.myMovementCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n }\r\n\r\n this._myResetHeadToFeetDirty = false;\r\n } else {\r\n this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags.copy(backupHorizontalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags.copy(backupVerticalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled = backupVerticalMovementReduceEnabled;\r\n\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnore = backupGroundAngleToIgnore;\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = backupGroundAngleToIgnoreWithPerceivedAngle;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = backupHorizontalMovementGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = backupHorizontalPositionGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = backupHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n }\r\n\r\n movementToCheck = this.getPositionHeadReal(positionReal).vec3_sub(this.getPositionHead(position), movementToCheck);\r\n collisionRuntimeParams.reset();\r\n transformQuat = this.getTransformHeadQuat(transformQuat); // Get eyes transform\r\n newPositionHead.vec3_copy(this._myValidPositionHead);\r\n if (this._myParams.mySyncEnabledFlagMap.get(PlayerTransformManagerSyncFlag.HEAD_COLLIDING)) {\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).move(movementToCheck, transformQuat, this._myHeadCollisionCheckParams, collisionRuntimeParams);\r\n\r\n if (!collisionRuntimeParams.myHorizontalMovementCanceled && !collisionRuntimeParams.myVerticalMovementCanceled) {\r\n if (!backupVerticalMovementReduceEnabled && collisionRuntimeParams.myHasReducedVerticalMovement) {\r\n this._myIsHeadColliding = true;\r\n headReducedVerticalMovementFeetAdjustment = true;\r\n } else {\r\n this._myIsHeadColliding = false;\r\n }\r\n\r\n newPositionHead.vec3_copy(collisionRuntimeParams.myNewPosition);\r\n } else {\r\n this._myIsHeadColliding = true;\r\n }\r\n }\r\n\r\n firstHeadCollidingCheckDone = true;\r\n } while (this._myIsHeadColliding && this._myResetHeadToFeetOnNextUpdateValidToReal);\r\n\r\n {\r\n this._myHeadCollisionCheckParams.myHorizontalBlockLayerFlags.copy(backupHorizontalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalBlockLayerFlags.copy(backupVerticalBlockLayerFlags);\r\n this._myHeadCollisionCheckParams.myVerticalMovementReduceEnabled = backupVerticalMovementReduceEnabled;\r\n\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnore = backupGroundAngleToIgnore;\r\n this._myHeadCollisionCheckParams.myGroundAngleToIgnoreWithPerceivedAngle = backupGroundAngleToIgnoreWithPerceivedAngle;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreHeight = backupHorizontalMovementGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalPositionGroundAngleIgnoreHeight = backupHorizontalPositionGroundAngleIgnoreHeight;\r\n this._myHeadCollisionCheckParams.myHorizontalMovementGroundAngleIgnoreMaxMovementLeft = backupHorizontalMovementGroundAngleIgnoreMaxMovementLeft;\r\n }\r\n\r\n this._myResetHeadToFeetOnNextUpdateValidToReal = false;\r\n this._myResetHeadToFeetDirty = false;\r\n\r\n if (this._myParams.myAlwaysSyncHeadPositionWithReal) {\r\n newPositionHead.vec3_copy(positionReal);\r\n }\r\n\r\n let backupIsHeadColliding = this._myIsHeadColliding;\r\n if (headReducedVerticalMovementFeetAdjustment) {\r\n // This is to allow the sync of the head if this is the only think preventing it\r\n this._myIsHeadColliding = false;\r\n }\r\n\r\n if (this.isSynced(this._myParams.mySyncPositionHeadFlagMap) || this._myParams.myAlwaysSyncHeadPositionWithReal\r\n || (this.isSynced(this._myParams.mySyncPositionFlagMap) && this._myParams.myAlwaysSyncPositionWithReal)) {\r\n this._myValidPositionHead.vec3_copy(newPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n }\r\n\r\n if (headReducedVerticalMovementFeetAdjustment) {\r\n // Restoring it to colliding after\r\n this._myIsHeadColliding = backupIsHeadColliding;\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype._updatePositionsValid = function () {\r\n let transformQuat = quat2_create();\r\n let collisionRuntimeParams = new CollisionRuntimeParams();\r\n let headCollisionRuntimeParams = new CollisionRuntimeParams();\r\n let transformUp = vec3_create();\r\n let horizontalDirection = vec3_create();\r\n let rotationQuat = quat_create();\r\n return function _updatePositionsValid(dt) {\r\n if (this._myParams.myUpdatePositionValid) {\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n transformUp = transformQuat.quat2_getUp(transformUp);\r\n rotationQuat = transformQuat.quat2_getRotationQuat(rotationQuat);\r\n horizontalDirection = this._myLastValidMovementDirection.vec3_removeComponentAlongAxis(transformUp, horizontalDirection);\r\n if (!horizontalDirection.vec3_isZero(0.00001)) {\r\n horizontalDirection.vec3_normalize(horizontalDirection);\r\n rotationQuat.quat_setForward(horizontalDirection);\r\n transformQuat.quat2_setRotationQuat(rotationQuat);\r\n }\r\n let debugBackup = this._myParams.myMovementCollisionCheckParams.myDebugEnabled;\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myParams.myMovementCollisionCheckParams, collisionRuntimeParams);\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = debugBackup;\r\n this._myIsPositionValid = collisionRuntimeParams.myIsPositionOk;\r\n } else {\r\n this._myIsPositionValid = true;\r\n }\r\n\r\n if (this._myParams.myUpdatePositionHeadValid) {\r\n transformQuat = this.getTransformHeadQuat(transformQuat);\r\n let debugBackup = this._myHeadCollisionCheckParams.myDebugEnabled;\r\n this._myHeadCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myHeadCollisionCheckParams, headCollisionRuntimeParams);\r\n this._myHeadCollisionCheckParams.myDebugEnabled = debugBackup;\r\n this._myIsPositionHeadValid = headCollisionRuntimeParams.myIsPositionOk;\r\n } else {\r\n this._myIsPositionHeadValid = true;\r\n }\r\n\r\n if (this._myParams.myUpdateRealPositionValid) {\r\n transformQuat = this.getTransformRealQuat(transformQuat);\r\n transformUp = transformQuat.quat2_getUp(transformUp);\r\n rotationQuat = transformQuat.quat2_getRotationQuat(rotationQuat);\r\n horizontalDirection = this._myLastValidMovementDirection.vec3_removeComponentAlongAxis(transformUp, horizontalDirection);\r\n if (!horizontalDirection.vec3_isZero(0.00001)) {\r\n horizontalDirection.vec3_normalize(horizontalDirection);\r\n rotationQuat.quat_setForward(horizontalDirection);\r\n transformQuat.quat2_setRotationQuat(rotationQuat);\r\n }\r\n\r\n let debugBackup = this._myParams.myMovementCollisionCheckParams.myDebugEnabled;\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myParams.myMovementCollisionCheckParams, this._myRealCollisionRuntimeParams);\r\n this._myIsRealPositionValid = this._myRealCollisionRuntimeParams.myIsPositionOk;\r\n this._myParams.myMovementCollisionCheckParams.myDebugEnabled = debugBackup;\r\n } else {\r\n this._myIsRealPositionValid = true;\r\n }\r\n\r\n if (this._myParams.myUpdateRealPositionHeadValid) {\r\n transformQuat = this.getTransformHeadRealQuat(transformQuat);\r\n let debugBackup = this._myHeadCollisionCheckParams.myDebugEnabled;\r\n this._myHeadCollisionCheckParams.myDebugEnabled = false;\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myHeadCollisionCheckParams, headCollisionRuntimeParams);\r\n this._myHeadCollisionCheckParams.myDebugEnabled = debugBackup;\r\n this._myIsRealPositionHeadValid = headCollisionRuntimeParams.myIsPositionOk;\r\n } else {\r\n this._myIsRealPositionHeadValid = true;\r\n }\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.move = function () {\r\n let transformQuat = quat2_create();\r\n let fixedMovement = vec3_create();\r\n return function move(movement, outCollisionRuntimeParams = null, forceMove = false) {\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).move(movement, transformQuat, this._myParams.myMovementCollisionCheckParams, this._myCollisionRuntimeParams);\r\n if (outCollisionRuntimeParams != null) {\r\n outCollisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n }\r\n\r\n if (!forceMove) {\r\n fixedMovement.vec3_copy(this._myCollisionRuntimeParams.myFixedMovement);\r\n } else {\r\n fixedMovement.vec3_copy(movement);\r\n }\r\n\r\n if (!fixedMovement.vec3_isZero(0.00001)) {\r\n this._myValidPosition.vec3_add(fixedMovement, this._myValidPosition);\r\n this.getPlayerHeadManager().moveFeet(fixedMovement);\r\n }\r\n\r\n // This make reset happens even for gravity, maybe u should do it manually\r\n if (this._myParams.myResetRealOnMove) {\r\n if (!this.isSynced()) {\r\n if (XRUtils.isSessionActive(this._myParams.myEngine)) {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionVR,\r\n !this._myParams.myNeverResetRealRotationVR,\r\n !this._myParams.myNeverResetRealHeightVR,\r\n true);\r\n } else {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionNonVR,\r\n !this._myParams.myNeverResetRealRotationNonVR,\r\n !this._myParams.myNeverResetRealHeightNonVR,\r\n true);\r\n }\r\n }\r\n }\r\n\r\n // #TODO Add move callback\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.teleportPosition = function () {\r\n let teleportTransformQuat = quat2_create();\r\n return function teleportPosition(teleportPosition, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n teleportTransformQuat = this.getTransformQuat(teleportTransformQuat);\r\n teleportTransformQuat.quat2_setPosition(teleportPosition);\r\n this.teleportTransformQuat(teleportTransformQuat, outCollisionRuntimeParams, forceTeleport);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.teleportPositionRotationQuat = function () {\r\n let teleportTransformQuat = quat2_create();\r\n return function teleportPositionRotationQuat(teleportPosition, teleportRotationQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n teleportTransformQuat = this.getTransformQuat(teleportTransformQuat);\r\n teleportTransformQuat.quat2_setPositionRotationQuat(teleportPosition, teleportRotationQuat);\r\n this.teleportTransformQuat(teleportTransformQuat, outCollisionRuntimeParams, forceTeleport);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.teleportTransformQuat = function () {\r\n let currentPosition = vec3_create();\r\n let teleportPositionVec = vec3_create();\r\n let teleportRotation = quat_create();\r\n let rotatedTransformQuat = quat2_create();\r\n let fixedMovement = vec3_create();\r\n return function teleportTransformQuat(teleportTransformQuat, outCollisionRuntimeParams = null, forceTeleport = false) {\r\n currentPosition = this.getPosition(currentPosition);\r\n teleportPositionVec = teleportTransformQuat.quat2_getPosition(teleportPositionVec);\r\n teleportRotation = teleportTransformQuat.quat2_getRotationQuat(teleportRotation);\r\n\r\n rotatedTransformQuat.quat2_setPositionRotationQuat(currentPosition, teleportRotation);\r\n\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).teleport(teleportPositionVec, rotatedTransformQuat, this._myParams.myTeleportCollisionCheckParams, this._myCollisionRuntimeParams);\r\n if (outCollisionRuntimeParams != null) {\r\n outCollisionRuntimeParams.copy(this._myCollisionRuntimeParams);\r\n }\r\n\r\n fixedMovement.vec3_zero();\r\n if (!forceTeleport) {\r\n if (!this._myCollisionRuntimeParams.myTeleportCanceled) {\r\n fixedMovement = this._myCollisionRuntimeParams.myFixedTeleportPosition.vec3_sub(currentPosition, fixedMovement);\r\n }\r\n } else {\r\n fixedMovement = teleportPositionVec.vec3_sub(currentPosition, fixedMovement);\r\n }\r\n\r\n if (!this._myCollisionRuntimeParams.myTeleportCanceled || forceTeleport) {\r\n this._myValidRotationQuat.quat_copy(teleportRotation);\r\n this.getPlayerHeadManager().setRotationFeetQuat(teleportRotation);\r\n }\r\n\r\n if (!fixedMovement.vec3_isZero(0.00001)) {\r\n this._myValidPosition.vec3_add(fixedMovement, this._myValidPosition);\r\n this.getPlayerHeadManager().moveFeet(fixedMovement);\r\n }\r\n\r\n if (this._myParams.myResetRealOnTeleport) {\r\n if (!this.isSynced()) {\r\n if (XRUtils.isSessionActive(this._myParams.myEngine)) {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionVR,\r\n !this._myParams.myNeverResetRealRotationVR,\r\n !this._myParams.myNeverResetRealHeightVR,\r\n true);\r\n } else {\r\n this.resetReal(\r\n !this._myParams.myNeverResetRealPositionNonVR,\r\n !this._myParams.myNeverResetRealRotationNonVR,\r\n !this._myParams.myNeverResetRealHeightNonVR,\r\n true);\r\n }\r\n }\r\n }\r\n\r\n // #TODO Add teleport callback\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.rotateQuat = function () {\r\n return function rotateQuat(rotationQuat) {\r\n this._myValidRotationQuat.quat_rotateQuat(rotationQuat, this._myValidRotationQuat);\r\n this.getPlayerHeadManager().rotateFeetQuat(rotationQuat);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.setRotationQuat = function () {\r\n let rotationToPerform = quat_create();\r\n return function setRotationQuat(rotationQuat) {\r\n rotationToPerform = this._myValidRotationQuat.quat_rotationToQuat(rotationQuat, rotationToPerform);\r\n this.rotateQuat(rotationToPerform);\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.setHeight = function () {\r\n let transformQuat = quat2_create();\r\n return function setHeight(height, forceSet = false) {\r\n let fixedHeight = Math.pp_clamp(height, this._myParams.myMinHeight, this._myParams.myMaxHeight);\r\n let previousHeight = this.getHeight();\r\n\r\n this._myValidHeight = fixedHeight;\r\n this._updateCollisionHeight();\r\n\r\n transformQuat = this.getTransformQuat(transformQuat);\r\n\r\n CollisionCheckBridge.getCollisionCheck(this._myParams.myEngine).positionCheck(true, transformQuat, this._myParams.myMovementCollisionCheckParams, this._myCollisionRuntimeParams);\r\n\r\n if (this._myCollisionRuntimeParams.myIsPositionOk || forceSet) {\r\n this.getPlayerHeadManager().setHeightHead(this.getHeight(), true);\r\n } else {\r\n this._myValidHeight = previousHeight;\r\n }\r\n\r\n this._updateCollisionHeight();\r\n };\r\n}();\r\n\r\nPlayerTransformManager.prototype.resetHeadToFeet = function () {\r\n let transformQuat = quat2_create();\r\n let headUp = vec3_create();\r\n return function resetHeadToFeet() {\r\n this._myValidPositionHead = this.getPosition(this._myValidPositionHead);\r\n\r\n transformQuat = this.getTransformHeadQuat(transformQuat);\r\n headUp = transformQuat.quat2_getUp(headUp);\r\n this._myValidPositionHead.vec3_add(headUp.vec3_scale(this._myHeadCollisionCheckParams.myHeight / 2 + 0.00001 + this._myParams.myResetHeadToFeetUpOffset, headUp), this._myValidPositionHead);\r\n this._myValidPositionHeadBackupForResetToFeet.vec3_copy(this._myValidPositionHead);\r\n\r\n this._myResetHeadToFeetDirty = true;\r\n };\r\n}();\r\n\r\n// #TODO Sliding info, surface info, update", "import { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../input/cauldron/input_types.js\";\r\nimport { GamepadAxesID } from \"../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat_create, vec3_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\n\r\nexport class PlayerLocomotionRotateParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n\r\n this.myHorizontalRotationEnabled = true;\r\n this.myVerticalRotationEnabled = true;\r\n\r\n this.myMaxRotationSpeed = 0;\r\n this.myIsSnapTurn = false;\r\n this.mySnapTurnOnlyVR = false;\r\n\r\n this.mySmoothSnapEnabled = true;\r\n this.mySmoothSnapSpeedDegrees = 240;\r\n\r\n this.myRotationMinStickIntensityThreshold = 0;\r\n this.mySnapTurnActivateThreshold = 0;\r\n this.mySnapTurnResetThreshold = 0;\r\n\r\n this.myClampVerticalAngle = true;\r\n this.myMaxVerticalAngle = 89;\r\n\r\n this.myHandedness = Handedness.RIGHT;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionRotate {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._mySnapCharge = false;\r\n\r\n this._mySmoothSnapHorizontalRunning = false;\r\n this._mySmoothSnapHorizontalAngleToPerform = 0;\r\n\r\n this._mySmoothSnapVerticalRunning = false;\r\n this._mySmoothSnapVerticalAngleToPerform = 0;\r\n\r\n //Globals.getEasyTuneVariables(this._myParams.myEngine).add(new EasyTuneNumber(\"Teleport Smooth Speed\", this._myParams.mySmoothSnapSpeedDegrees, 10, 3, 0, undefined, undefined, this._myParams.myEngine));\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n stop() {\r\n this._mySmoothSnapHorizontalRunning = false;\r\n this._mySmoothSnapHorizontalAngleToPerform = 0;\r\n\r\n this._mySmoothSnapVerticalRunning = false;\r\n this._mySmoothSnapVerticalAngleToPerform = 0;\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n update(dt) {\r\n //this._myParams.mySmoothSnapSpeedDegrees = Globals.getEasyTuneVariables(this._myParams.myEngine).get(\"Teleport Smooth Speed\");\r\n\r\n if (this._myParams.myHorizontalRotationEnabled) {\r\n this._rotateHeadHorizontally(dt);\r\n }\r\n\r\n if (this._myParams.myVerticalRotationEnabled && this._myParams.myPlayerHeadManager.canRotateHead()) {\r\n this._rotateHeadVertically(dt);\r\n }\r\n }\r\n\r\n _rotateHeadHorizontally(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _rotateHeadVertically(dt) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionRotate.prototype._rotateHeadHorizontally = function () {\r\n let playerUp = vec3_create();\r\n let headRotation = quat_create();\r\n return function _rotateHeadHorizontally(dt) {\r\n playerUp = this._myParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n headRotation.quat_identity();\r\n\r\n let axes = Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n\r\n if (!this._myParams.myIsSnapTurn || (this._myParams.mySnapTurnOnlyVR && !XRUtils.isSessionActive(this._myParams.myEngine))) {\r\n if (Math.abs(axes[0]) > this._myParams.myRotationMinStickIntensityThreshold) {\r\n let rotationIntensity = -axes[0];\r\n let speed = Math.pp_lerp(0, this._myParams.myMaxRotationSpeed, Math.abs(rotationIntensity)) * Math.pp_sign(rotationIntensity);\r\n\r\n headRotation.quat_fromAxis(speed * dt, playerUp);\r\n }\r\n } else {\r\n if (!this._mySnapCharge) {\r\n if (Math.abs(axes.vec2_length()) < this._myParams.mySnapTurnResetThreshold) {\r\n this._mySnapCharge = true;\r\n }\r\n } else if (!this._mySmoothSnapHorizontalRunning) {\r\n if (Math.abs(axes[0]) > this._myParams.mySnapTurnActivateThreshold) {\r\n let angleToRotate = -Math.pp_sign(axes[0]) * this._myParams.mySnapTurnAngle;\r\n\r\n if (!this._myParams.mySmoothSnapEnabled) {\r\n headRotation.quat_fromAxis(angleToRotate, playerUp);\r\n } else {\r\n this._mySmoothSnapHorizontalRunning = true;\r\n this._mySmoothSnapHorizontalAngleToPerform = angleToRotate;\r\n }\r\n\r\n this._mySnapCharge = false;\r\n }\r\n }\r\n }\r\n\r\n if (this._mySmoothSnapHorizontalRunning) {\r\n let angleToRotate = Math.pp_sign(this._mySmoothSnapHorizontalAngleToPerform) * (this._myParams.mySmoothSnapSpeedDegrees * dt);\r\n if (Math.abs(angleToRotate) > Math.abs(this._mySmoothSnapHorizontalAngleToPerform) - Math.PP_EPSILON) {\r\n angleToRotate = this._mySmoothSnapHorizontalAngleToPerform;\r\n }\r\n\r\n headRotation.quat_fromAxis(angleToRotate, playerUp);\r\n this._mySmoothSnapHorizontalAngleToPerform -= angleToRotate;\r\n\r\n if (Math.abs(this._mySmoothSnapHorizontalAngleToPerform) < Math.PP_EPSILON) {\r\n this._mySmoothSnapHorizontalRunning = false;\r\n this._mySmoothSnapHorizontalAngleToPerform = 0;\r\n }\r\n }\r\n\r\n if (headRotation.quat_getAngle() > Math.PP_EPSILON_DEGREES) {\r\n this._myParams.myPlayerTransformManager.rotateQuat(headRotation);\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionRotate.prototype._rotateHeadVertically = function () {\r\n let headForward = vec3_create();\r\n let headUp = vec3_create();\r\n let referenceUp = vec3_create();\r\n let referenceUpNegate = vec3_create();\r\n let referenceRight = vec3_create();\r\n let newUp = vec3_create();\r\n let headRotation = quat_create();\r\n return function _rotateHeadVertically(dt) {\r\n let head = this._myParams.myPlayerHeadManager.getHead();\r\n\r\n headForward = head.pp_getForward(headForward);\r\n headUp = head.pp_getUp(headUp);\r\n\r\n referenceUp = this._myParams.myPlayerHeadManager.getPlayer().pp_getUp(referenceUp);\r\n referenceUpNegate = referenceUp.vec3_negate(referenceUpNegate);\r\n referenceRight = headForward.vec3_cross(referenceUp, referenceRight);\r\n\r\n let minAngle = 1;\r\n if (headForward.vec3_angle(referenceUp) < minAngle) {\r\n referenceRight = headUp.vec3_negate(referenceRight).vec3_cross(referenceUp, referenceRight);\r\n } else if (headForward.vec3_angle(referenceUpNegate) < minAngle) {\r\n referenceRight = headUp.vec3_cross(referenceUp, referenceRight);\r\n } else if (!headUp.vec3_isConcordant(referenceUp)) {\r\n referenceRight.vec3_negate(referenceRight);\r\n }\r\n\r\n referenceRight.vec3_normalize(referenceRight);\r\n\r\n let axes = Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n let angleToRotate = 0;\r\n\r\n if (!this._myParams.myIsSnapTurn || (this._myParams.mySnapTurnOnlyVR && !XRUtils.isSessionActive(this._myParams.myEngine))) {\r\n if (Math.abs(axes[1]) > this._myParams.myRotationMinStickIntensityThreshold) {\r\n let rotationIntensity = axes[1];\r\n angleToRotate = Math.pp_lerp(0, this._myParams.myMaxRotationSpeed, Math.abs(rotationIntensity)) * Math.pp_sign(rotationIntensity) * dt;\r\n }\r\n } else {\r\n if (!this._mySnapCharge) {\r\n if (Math.abs(axes.vec2_length()) < this._myParams.mySnapTurnResetThreshold) {\r\n this._mySnapCharge = true;\r\n }\r\n } else if (!this._mySmoothSnapVerticalRunning) {\r\n if (Math.abs(axes[1]) > this._myParams.mySnapTurnActivateThreshold) {\r\n angleToRotate = Math.pp_sign(axes[1]) * this._myParams.mySnapTurnAngle;\r\n\r\n // Adjust rotation to closest snap step\r\n\r\n let angleWithUp = Math.pp_angleClamp(headUp.vec3_angleSigned(referenceUp, referenceRight));\r\n let snapStep = Math.round(angleWithUp / this._myParams.mySnapTurnAngle);\r\n\r\n let snapAngle = Math.pp_angleClamp(snapStep * this._myParams.mySnapTurnAngle);\r\n let angleToAlign = -Math.pp_angleDistanceSigned(angleWithUp, snapAngle);\r\n\r\n if (Math.abs(angleToAlign) > 1) {\r\n if (Math.pp_sign(angleToRotate) == Math.pp_sign(angleToAlign)) {\r\n angleToRotate = angleToAlign;\r\n } else {\r\n angleToRotate = (-Math.pp_sign(angleToAlign) * this._myParams.mySnapTurnAngle) + angleToAlign;\r\n }\r\n } else if (Math.abs(angleToAlign) > Math.PP_EPSILON_DEGREES) {\r\n angleToRotate += angleToAlign;\r\n }\r\n\r\n if (this._myParams.mySmoothSnapEnabled) {\r\n this._mySmoothSnapVerticalRunning = true;\r\n this._mySmoothSnapVerticalAngleToPerform = angleToRotate;\r\n }\r\n\r\n this._mySnapCharge = false;\r\n }\r\n }\r\n }\r\n\r\n if (this._mySmoothSnapVerticalRunning) {\r\n angleToRotate = Math.pp_sign(this._mySmoothSnapVerticalAngleToPerform) * (this._myParams.mySmoothSnapSpeedDegrees * dt);\r\n if (Math.abs(angleToRotate) > Math.abs(this._mySmoothSnapVerticalAngleToPerform) - Math.PP_EPSILON) {\r\n angleToRotate = this._mySmoothSnapVerticalAngleToPerform;\r\n }\r\n\r\n this._mySmoothSnapVerticalAngleToPerform -= angleToRotate;\r\n\r\n if (Math.abs(this._mySmoothSnapVerticalAngleToPerform) < Math.PP_EPSILON) {\r\n this._mySmoothSnapVerticalRunning = false;\r\n this._mySmoothSnapVerticalAngleToPerform = 0;\r\n }\r\n }\r\n\r\n if (angleToRotate != 0) {\r\n headRotation.quat_fromAxis(angleToRotate, referenceRight);\r\n this._myParams.myPlayerHeadManager.rotateHeadQuat(headRotation);\r\n\r\n if (this._myParams.myClampVerticalAngle) {\r\n let maxVerticalAngle = Math.max(0, this._myParams.myMaxVerticalAngle - 0.0001);\r\n newUp = head.pp_getUp(newUp);\r\n let angleWithUp = Math.pp_angleClamp(newUp.vec3_angleSigned(referenceUp, referenceRight));\r\n if (Math.abs(angleWithUp) > maxVerticalAngle) {\r\n let fixAngle = (Math.abs(angleWithUp) - maxVerticalAngle) * Math.pp_sign(angleWithUp);\r\n headRotation.quat_fromAxis(fixAngle, referenceRight);\r\n this._myParams.myPlayerHeadManager.rotateHeadQuat(headRotation);\r\n }\r\n }\r\n }\r\n };\r\n}();", "export class PlayerLocomotionMovementRuntimeParams {\r\n\r\n constructor() {\r\n this.myIsFlying = false;\r\n this.myGravitySpeed = 0;\r\n this.myCollisionRuntimeParams = null;\r\n\r\n this.myIsTeleportDetecting = false;\r\n this.myIsTeleporting = false;\r\n this.myTeleportJustPerformed = false;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionMovement {\r\n\r\n constructor(locomotionRuntimeParams) {\r\n this._myLocomotionRuntimeParams = locomotionRuntimeParams;\r\n }\r\n\r\n getRuntimeParams() {\r\n return this._myLocomotionRuntimeParams;\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n stop() {\r\n\r\n }\r\n\r\n canStop() {\r\n return true;\r\n }\r\n}", "import { Emitter, PhysXComponent } from \"@wonderlandengine/api\";\r\nimport { FSM } from \"../../../../../cauldron/fsm/fsm.js\";\r\nimport { PhysicsLayerFlags } from \"../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { EasingFunction } from \"../../../../../cauldron/utils/math_utils.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../../../../input/cauldron/input_utils.js\";\r\nimport { GamepadUtils } from \"../../../../../input/gamepad/cauldron/gamepad_utils.js\";\r\nimport { GamepadButtonID } from \"../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec3_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { CharacterColliderSetupSimplifiedCreationParams, CharacterColliderSetupUtils } from \"../../../character_controller/collision/character_collider_setup_utils.js\";\r\nimport { CollisionCheckBridge } from \"../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { CollisionCheckUtils } from \"../../../character_controller/collision/legacy/collision_check/collision_check_utils.js\";\r\nimport { CollisionCheckParams, CollisionRuntimeParams } from \"../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\nimport { NonVRReferenceSpaceMode, PlayerHeadManager, PlayerHeadManagerParams } from \"./player_head_manager.js\";\r\nimport { PlayerLocomotionMovementRuntimeParams } from \"./player_locomotion_movement.js\";\r\nimport { PlayerLocomotionRotate, PlayerLocomotionRotateParams } from \"./player_locomotion_rotate.js\";\r\nimport { PlayerLocomotionSmooth, PlayerLocomotionSmoothParams } from \"./player_locomotion_smooth.js\";\r\nimport { PlayerObscureManager, PlayerObscureManagerParams } from \"./player_obscure_manager.js\";\r\nimport { PlayerTransformManager, PlayerTransformManagerParams, PlayerTransformManagerSyncFlag } from \"./player_transform_manager.js\";\r\nimport { PlayerLocomotionTeleport, PlayerLocomotionTeleportParams } from \"./teleport/player_locomotion_teleport.js\";\r\nimport { PlayerLocomotionTeleportTeleportType } from \"./teleport/player_locomotion_teleport_teleport_state.js\";\r\n\r\nexport let PlayerLocomotionDirectionReferenceType = {\r\n HEAD: 0,\r\n HAND: 1,\r\n CUSTOM_OBJECT: 2,\r\n};\r\n\r\nexport let PlayerLocomotionType = {\r\n SMOOTH: 0,\r\n TELEPORT: 1\r\n};\r\n\r\nexport class PlayerLocomotionParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myDefaultLocomotionType = PlayerLocomotionType.SMOOTH;\r\n this.myAlwaysSmoothForNonVR = true;\r\n this.mySwitchLocomotionTypeShortcutEnabled = true; // Double press main hand (default left) thumbstick to switch\r\n\r\n this.myDefaultHeight = 0;\r\n\r\n this.myMaxSpeed = 0;\r\n this.myMaxRotationSpeed = 0;\r\n\r\n this.myGravityAcceleration = 0;\r\n this.myMaxGravitySpeed = 0;\r\n\r\n this.myCharacterRadius = 0;\r\n\r\n this.mySpeedSlowDownPercentageOnWallSlid = 1;\r\n\r\n this.myIsSnapTurn = false;\r\n this.mySnapTurnOnlyVR = false;\r\n this.mySnapTurnAngle = 0;\r\n this.mySnapTurnSpeedDegrees = 0;\r\n\r\n this.myFlyEnabled = false;\r\n this.myStartFlying = false;\r\n this.myFlyWithButtonsEnabled = false;\r\n this.myFlyWithViewAngleEnabled = false;\r\n this.myMinAngleToFlyUpNonVR = 0;\r\n this.myMinAngleToFlyDownNonVR = 0;\r\n this.myMinAngleToFlyUpVR = 0;\r\n this.myMinAngleToFlyDownVR = 0;\r\n this.myMinAngleToFlyRight = 0;\r\n\r\n this.myMainHand = Handedness.LEFT;\r\n\r\n this.myDirectionInvertForwardWhenUpsideDown = true;\r\n this.myVRDirectionReferenceType = PlayerLocomotionDirectionReferenceType.HEAD;\r\n this.myVRDirectionReferenceObject = null;\r\n\r\n this.myForeheadExtraHeight = 0;\r\n\r\n this.myTeleportType = PlayerLocomotionTeleportTeleportType.INSTANT;\r\n this.myTeleportMaxDistance = 0;\r\n this.myTeleportMaxHeightDifference = 0;\r\n this.myTeleportRotationOnUpEnabled = null;\r\n this.myTeleportValidMaterial = null;\r\n this.myTeleportInvalidMaterial = null;\r\n this.myTeleportPositionObject = null;\r\n this.myTeleportPositionObjectRotateWithHead = null;\r\n this.myTeleportParableStartReferenceObject = null;\r\n\r\n this.myResetRealOnStart = true;\r\n\r\n // #WARN With @myResetRealOnStartFramesAmount at 1 it can happen that you enter the session like 1 frame before the game load\r\n // and the head pose might have not been properly initialized yet in the WebXR API, so the reset real will not happen has expected\r\n // Since this is a sort of edge case (either u enter after the load, or you were already in for more than 2-3 frames), and that\r\n // setting this to more than 1 can cause a visible (even if very short) stutter after the load (due to resetting the head multiple times),\r\n // it's better to keep this value at 1\r\n // A possible effect of the edge case is the view being obscured on start because it thinks you are colliding\r\n //\r\n // A value of 3 will make u sure that the head pose will be initialized and the reset real will happen as expected in any case\r\n // For example, if u have a total fade at start and nothing can be seen aside the clear color for at least, let's say, 10 frames, \r\n // you can set this to 3 safely, since there will be no visible stutter to be seen (beside the clear color)\r\n this.myResetRealOnStartFramesAmount = 1;\r\n\r\n // Can fix some head through floor issues, when you can move your head completely to the other side of the floor\r\n // If the floors are thick enough that this can't happen, you can leave this to false\r\n this.myResetHeadToFeetInsteadOfReal = false;\r\n this.myResetHeadToRealMinDistance = 0;\r\n\r\n // these 2 flags works 100% properly only if both true or false\r\n this.mySyncWithRealWorldPositionOnlyIfValid = true; // valid means the real player has not moved inside walls\r\n this.myViewOcclusionInsideWallsEnabled = true;\r\n\r\n this.mySyncNonVRHeightWithVROnExitSession = false;\r\n this.mySyncNonVRVerticalAngleWithVROnExitSession = false;\r\n\r\n this.mySyncHeadWithRealAfterLocomotionUpdateIfNeeded = false;\r\n\r\n this.myColliderAccuracy = null;\r\n this.myColliderCheckOnlyFeet = false;\r\n this.myColliderSlideAlongWall = false;\r\n this.myColliderMaxWalkableGroundAngle = 0;\r\n this.myColliderSnapOnGround = false;\r\n this.myColliderMaxDistanceToSnapOnGround = 0;\r\n this.myColliderMaxWalkableGroundStepHeight = 0;\r\n this.myColliderPreventFallingFromEdges = false;\r\n\r\n this.myDebugFlyShortcutEnabled = false; // main hand (default left) select + thumbstick press, auto switch to smooth\r\n this.myDebugFlyMaxSpeedMultiplier = 5;\r\n this.myMoveThroughCollisionShortcutEnabled = false; // main hand (default left) thumbstick pressed while moving\r\n this.myMoveHeadShortcutEnabled = false; // non main hand (default right) thumbstick pressed while moving\r\n this.myTripleSpeedShortcutEnabled = false; // main hand (default left) select pressed while moving\r\n\r\n this.myDebugHorizontalEnabled = false;\r\n this.myDebugVerticalEnabled = false;\r\n\r\n this.myCollisionCheckDisabled = false;\r\n\r\n this.myPhysicsBlockLayerFlags = new PhysicsLayerFlags();\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\n// #TODO Add lerped snap on vertical over like half a second to avoid the \"snap effect\"\r\n// This could be done by detatching the actual vertical position of the player from the collision real one when a snap is detected above a certain threshold\r\n// with a timer, after which the vertical position is just copied, while during the detatching is lerped toward the collision vertical one\r\nexport class PlayerLocomotion {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myCollisionCheckParamsMovement = new CollisionCheckParams();\r\n this._setupCollisionCheckParamsMovement();\r\n this._myCollisionCheckParamsTeleport = null;\r\n this._setupCollisionCheckParamsTeleport();\r\n\r\n this._myCollisionRuntimeParams = new CollisionRuntimeParams();\r\n this._myMovementRuntimeParams = new PlayerLocomotionMovementRuntimeParams();\r\n this._myMovementRuntimeParams.myIsFlying = this._myParams.myStartFlying;\r\n this._myMovementRuntimeParams.myCollisionRuntimeParams = this._myCollisionRuntimeParams;\r\n\r\n {\r\n let params = new PlayerHeadManagerParams(this._myParams.myEngine);\r\n\r\n params.mySessionChangeResyncEnabled = true;\r\n\r\n params.myBlurEndResyncEnabled = true;\r\n params.myBlurEndResyncRotation = true;\r\n\r\n params.myEnterSessionResyncHeight = false;\r\n params.myExitSessionResyncHeight = this._myParams.mySyncNonVRHeightWithVROnExitSession;\r\n params.myExitSessionResyncVerticalAngle = this._myParams.mySyncNonVRVerticalAngleWithVROnExitSession;\r\n params.myExitSessionRemoveRightTilt = true;\r\n params.myExitSessionAdjustMaxVerticalAngle = true;\r\n params.myExitSessionMaxVerticalAngle = 90;\r\n\r\n params.myNonVRFloorBasedMode = NonVRReferenceSpaceMode.FLOOR_THEN_KEEP_VR;\r\n\r\n params.myDefaultHeightNonVR = this._myParams.myDefaultHeight;\r\n params.myDefaultHeightVRWithoutFloor = this._myParams.myDefaultHeight;\r\n params.myForeheadExtraHeight = this._myParams.myForeheadExtraHeight;\r\n\r\n params.myFeetRotationKeepUp = true;\r\n\r\n params.myDebugEnabled = false;\r\n\r\n this._myPlayerHeadManager = new PlayerHeadManager(params);\r\n }\r\n\r\n {\r\n let params = new PlayerTransformManagerParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n\r\n params.myMovementCollisionCheckParams = this._myCollisionCheckParamsMovement;\r\n params.myTeleportCollisionCheckParams = null;\r\n params.myTeleportCollisionCheckParamsCopyFromMovement = true;\r\n params.myTeleportCollisionCheckParamsCheck360 = true;\r\n\r\n params.myHeadCollisionBlockLayerFlags.copy(params.myMovementCollisionCheckParams.myHorizontalBlockLayerFlags);\r\n params.myHeadCollisionBlockLayerFlags.add(params.myMovementCollisionCheckParams.myVerticalBlockLayerFlags);\r\n params.myHeadCollisionObjectsToIgnore.pp_copy(params.myMovementCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n for (let objectToIgnore of params.myMovementCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n params.myHeadCollisionObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n params.myCollisionRuntimeParams = this._myCollisionRuntimeParams;\r\n\r\n params.myHeadRadius = 0.2;\r\n\r\n params.myAlwaysSyncPositionWithReal = !this._myParams.mySyncWithRealWorldPositionOnlyIfValid;\r\n params.myAlwaysSyncHeadPositionWithReal = false;\r\n\r\n if (!this._myParams.myViewOcclusionInsideWallsEnabled && !this._myParams.mySyncWithRealWorldPositionOnlyIfValid) {\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.BODY_COLLIDING, false);\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.HEAD_COLLIDING, false);\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FAR, false);\r\n params.mySyncEnabledFlagMap.set(PlayerTransformManagerSyncFlag.FLOATING, false);\r\n\r\n params.myAlwaysSyncHeadPositionWithReal = !this._myParams.mySyncWithRealWorldPositionOnlyIfValid;\r\n }\r\n\r\n params.myMaxDistanceFromRealToSyncEnabled = true;\r\n params.myMaxDistanceFromRealToSync = 0.5;\r\n\r\n params.myIsFloatingValidIfVerticalMovement = false;\r\n params.myIsFloatingValidIfVerticalMovementAndRealOnGround = false;\r\n params.myIsFloatingValidIfSteepGround = false;\r\n params.myIsFloatingValidIfVerticalMovementAndSteepGround = false;\r\n params.myIsFloatingValidIfRealOnGround = false;\r\n params.myFloatingSplitCheckEnabled = true;\r\n params.myFloatingSplitCheckMinLength = this._myCollisionCheckParamsMovement.myFeetRadius * 1.5;\r\n params.myFloatingSplitCheckMaxLength = this._myCollisionCheckParamsMovement.myFeetRadius * 1.5;\r\n params.myFloatingSplitCheckMaxSteps = 3;\r\n params.myRealMovementAllowVerticalAdjustments = false;\r\n\r\n params.myUpdateRealPositionValid = false;\r\n params.myUpdatePositionValid = false;\r\n\r\n params.myIsBodyCollidingWhenHeightBelowValue = null;\r\n params.myIsBodyCollidingWhenHeightAboveValue = null;\r\n\r\n params.myResetToValidOnEnterSession = true;\r\n params.myResetToValidOnExitSession = true;\r\n\r\n params.myAlwaysResetRealPositionNonVR = true;\r\n params.myAlwaysResetRealRotationNonVR = true;\r\n params.myAlwaysResetRealHeightNonVR = true;\r\n\r\n params.myAlwaysResetRealPositionVR = false;\r\n params.myAlwaysResetRealRotationVR = false;\r\n params.myAlwaysResetRealHeightVR = false;\r\n\r\n params.myNeverResetRealPositionNonVR = false;\r\n params.myNeverResetRealRotationNonVR = true;\r\n params.myNeverResetRealHeightNonVR = false;\r\n\r\n params.myResetRealHeightNonVROnExitSession = this._myParams.mySyncNonVRHeightWithVROnExitSession;\r\n\r\n params.myResetHeadToFeetInsteadOfRealOnlyIfRealNotReachable = this._myParams.myResetHeadToFeetInsteadOfReal;\r\n params.myResetHeadToRealMinDistance = this._myParams.myResetHeadToRealMinDistance;\r\n\r\n params.myNeverResetRealPositionVR = false;\r\n params.myNeverResetRealRotationVR = false;\r\n params.myNeverResetRealHeightVR = true;\r\n\r\n params.myDebugEnabled = false;\r\n\r\n this._myPlayerTransformManager = new PlayerTransformManager(params);\r\n }\r\n\r\n {\r\n let params = new PlayerLocomotionRotateParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n\r\n params.myMaxRotationSpeed = this._myParams.myMaxRotationSpeed;\r\n params.myIsSnapTurn = this._myParams.myIsSnapTurn;\r\n params.mySnapTurnOnlyVR = this._myParams.mySnapTurnOnlyVR;\r\n params.mySnapTurnAngle = this._myParams.mySnapTurnAngle;\r\n\r\n if (this._myParams.mySnapTurnSpeedDegrees > Math.PP_EPSILON) {\r\n params.mySmoothSnapEnabled = true;\r\n params.mySmoothSnapSpeedDegrees = this._myParams.mySnapTurnSpeedDegrees;\r\n } else {\r\n params.mySmoothSnapEnabled = false;\r\n }\r\n\r\n params.myRotationMinStickIntensityThreshold = 0.1;\r\n params.mySnapTurnActivateThreshold = 0.5;\r\n params.mySnapTurnResetThreshold = 0.4;\r\n\r\n params.myClampVerticalAngle = true;\r\n params.myMaxVerticalAngle = 89;\r\n\r\n this._myPlayerLocomotionRotate = new PlayerLocomotionRotate(params);\r\n\r\n params.myHandedness = InputUtils.getOppositeHandedness(this._myParams.myMainHand);\r\n }\r\n\r\n {\r\n {\r\n let params = new PlayerLocomotionSmoothParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n\r\n params.myCollisionCheckParams = this._myCollisionCheckParamsMovement;\r\n\r\n params.myHandedness = this._myParams.myMainHand;\r\n\r\n params.myMaxSpeed = this._myParams.myMaxSpeed;\r\n params.mySpeedSlowDownPercentageOnWallSlid = this._myParams.mySpeedSlowDownPercentageOnWallSlid;\r\n\r\n params.myMovementMinStickIntensityThreshold = 0.1;\r\n\r\n params.myFlyEnabled = this._myParams.myFlyEnabled;\r\n params.myFlyWithButtonsEnabled = this._myParams.myFlyWithButtonsEnabled;\r\n params.myFlyWithViewAngleEnabled = this._myParams.myFlyWithViewAngleEnabled;\r\n params.myMinAngleToFlyUpNonVR = this._myParams.myMinAngleToFlyUpNonVR;\r\n params.myMinAngleToFlyDownNonVR = this._myParams.myMinAngleToFlyDownNonVR;\r\n params.myMinAngleToFlyUpVR = this._myParams.myMinAngleToFlyUpVR;\r\n params.myMinAngleToFlyDownVR = this._myParams.myMinAngleToFlyDownVR;\r\n params.myMinAngleToFlyRight = this._myParams.myMinAngleToFlyRight;\r\n\r\n params.myGravityAcceleration = this._myParams.myGravityAcceleration;\r\n params.myMaxGravitySpeed = this._myParams.myMaxGravitySpeed;\r\n\r\n params.myDirectionInvertForwardWhenUpsideDown = this._myParams.myDirectionInvertForwardWhenUpsideDown;\r\n params.myVRDirectionReferenceType = this._myParams.myVRDirectionReferenceType;\r\n params.myVRDirectionReferenceObject = this._myParams.myVRDirectionReferenceObject;\r\n\r\n params.myDebugFlyMaxSpeedMultiplier = this._myParams.myDebugFlyMaxSpeedMultiplier;\r\n params.myMoveThroughCollisionShortcutEnabled = this._myParams.myMoveThroughCollisionShortcutEnabled;\r\n params.myMoveHeadShortcutEnabled = this._myParams.myMoveHeadShortcutEnabled;\r\n params.myTripleSpeedShortcutEnabled = this._myParams.myTripleSpeedShortcutEnabled;\r\n\r\n this._myPlayerLocomotionSmooth = new PlayerLocomotionSmooth(params, this._myMovementRuntimeParams);\r\n }\r\n\r\n {\r\n let params = new PlayerLocomotionTeleportParams(this._myParams.myEngine);\r\n\r\n params.myPlayerHeadManager = this._myPlayerHeadManager;\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n\r\n params.myCollisionCheckParams = this._myCollisionCheckParamsTeleport;\r\n\r\n params.myHandedness = this._myParams.myMainHand;\r\n\r\n params.myDetectionParams.myMaxDistance = this._myParams.myTeleportMaxDistance;\r\n params.myDetectionParams.myMaxHeightDifference = this._myParams.myTeleportMaxHeightDifference;\r\n params.myDetectionParams.myGroundAngleToIgnoreUpward = this._myCollisionCheckParamsMovement.myGroundAngleToIgnore;\r\n params.myDetectionParams.myRotationOnUpEnabled = this._myParams.myTeleportRotationOnUpEnabled;\r\n params.myDetectionParams.myMustBeOnGround = true;\r\n\r\n params.myDetectionParams.myTeleportBlockLayerFlags.copy(this._myParams.myPhysicsBlockLayerFlags);\r\n params.myDetectionParams.myTeleportFloorLayerFlags.copy(this._myParams.myPhysicsBlockLayerFlags);\r\n\r\n params.myDetectionParams.myTeleportFeetPositionMustBeVisible = false;\r\n params.myDetectionParams.myTeleportHeadPositionMustBeVisible = false;\r\n params.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible = true;\r\n\r\n params.myDetectionParams.myTeleportParableStartReferenceObject = this._myParams.myTeleportParableStartReferenceObject;\r\n\r\n params.myDetectionParams.myVisibilityBlockLayerFlags.copy(params.myDetectionParams.myTeleportBlockLayerFlags);\r\n\r\n params.myTeleportParams.myTeleportType = this._myParams.myTeleportType;\r\n\r\n params.myVisualizerParams.myTeleportPositionObject = this._myParams.myTeleportPositionObject;\r\n params.myVisualizerParams.myTeleportValidMaterial = this._myParams.myTeleportValidMaterial;\r\n params.myVisualizerParams.myTeleportInvalidMaterial = this._myParams.myTeleportInvalidMaterial;\r\n params.myVisualizerParams.myTeleportPositionObjectRotateWithHead = this._myParams.myTeleportPositionObjectRotateWithHead;\r\n\r\n params.myPerformTeleportAsMovement = false;\r\n params.myTeleportAsMovementRemoveVerticalMovement = true;\r\n params.myTeleportAsMovementExtraVerticalMovementPerMeter = -2;\r\n\r\n params.myGravityAcceleration = this._myParams.myGravityAcceleration;\r\n params.myMaxGravitySpeed = this._myParams.myMaxGravitySpeed;\r\n\r\n params.myDebugEnabled = false;\r\n params.myDebugDetectEnabled = true;\r\n params.myDebugShowEnabled = true;\r\n params.myDebugVisibilityEnabled = false;\r\n\r\n this._myPlayerLocomotionTeleport = new PlayerLocomotionTeleport(params, this._myMovementRuntimeParams);\r\n }\r\n\r\n {\r\n let params = new PlayerObscureManagerParams(this._myParams.myEngine);\r\n\r\n params.myPlayerTransformManager = this._myPlayerTransformManager;\r\n params.myPlayerLocomotionTeleport = this._myPlayerLocomotionTeleport;\r\n\r\n params.myEnabled = this._myParams.myViewOcclusionInsideWallsEnabled;\r\n\r\n params.myObscureObject = null;\r\n params.myObscureMaterial = null;\r\n params.myObscureRadius = 0.5;\r\n\r\n params.myObscureFadeOutSeconds = 0;\r\n params.myObscureFadeInSeconds = 0.25;\r\n\r\n params.myObscureFadeEasingFunction = EasingFunction.linear;\r\n params.myObscureLevelRelativeDistanceEasingFunction = EasingFunction.linear;\r\n\r\n params.myDistanceToStartObscureWhenBodyColliding = 0.75;\r\n params.myDistanceToStartObscureWhenHeadColliding = 0;\r\n params.myDistanceToStartObscureWhenFloating = 0.75;\r\n params.myDistanceToStartObscureWhenFar = 0.75;\r\n\r\n params.myRelativeDistanceToMaxObscureWhenBodyColliding = 0.5;\r\n params.myRelativeDistanceToMaxObscureWhenHeadColliding = 0.05;\r\n params.myRelativeDistanceToMaxObscureWhenFloating = 0.5;\r\n params.myRelativeDistanceToMaxObscureWhenFar = 0.5;\r\n\r\n this._myPlayerObscureManager = new PlayerObscureManager(params);\r\n }\r\n\r\n }\r\n\r\n this._setupLocomotionMovementFSM();\r\n\r\n this._mySwitchToTeleportOnEnterSession = false;\r\n\r\n this._myIdle = false;\r\n\r\n this._myActive = true;\r\n this._myStarted = false;\r\n\r\n this._myResetRealOnStartCounter = this._myParams.myResetRealOnStartFramesAmount;\r\n\r\n this._myPreUpdateEmitter = new Emitter(); // Signature: callback(dt, playerLocomotion)\r\n this._myPostUpdateEmitter = new Emitter(); // Signature: callback(dt, playerLocomotion)\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._fixAlmostUp();\r\n\r\n this._myPlayerHeadManager.start();\r\n this._myPlayerTransformManager.start();\r\n\r\n this._myPlayerObscureManager.start();\r\n\r\n this._myPlayerLocomotionRotate.start();\r\n\r\n if (this._myParams.myDefaultLocomotionType == PlayerLocomotionType.SMOOTH) {\r\n this._myLocomotionMovementFSM.perform(\"startSmooth\");\r\n } else {\r\n this._myLocomotionMovementFSM.perform(\"startTeleport\");\r\n }\r\n\r\n this._myStarted = true;\r\n\r\n let currentActive = this._myActive;\r\n this._myActive = !this._myActive;\r\n this.setActive(currentActive);\r\n }\r\n\r\n // #WARN Only a few params are actually used by this class after the setup phase, like @myCollisionCheckDisabled\r\n // Params like @myMaxSpeed must be edited directly on the PlayerLocomotionSmooth object\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this._myActive = active;\r\n\r\n if (this._myStarted) {\r\n if (this._myActive) {\r\n this._myPlayerObscureManager.start();\r\n if (!this._myIdle) {\r\n this._myLocomotionMovementFSM.perform(\"resume\");\r\n }\r\n } else {\r\n this._myLocomotionMovementFSM.perform(\"idle\");\r\n this._myPlayerObscureManager.stop();\r\n }\r\n }\r\n\r\n this._myPlayerHeadManager.setActive(this._myActive);\r\n this._myPlayerTransformManager.setActive(this._myActive);\r\n }\r\n }\r\n\r\n isStarted() {\r\n return this._myStarted;\r\n }\r\n\r\n canStop() {\r\n let canStop = false;\r\n\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\") && this._myPlayerLocomotionSmooth.canStop()) {\r\n canStop = true;\r\n } else if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n canStop = true;\r\n }\r\n\r\n return canStop;\r\n }\r\n\r\n update(dt) {\r\n this._myPreUpdateEmitter.notify(dt, this);\r\n\r\n let collisionCheckEnabledBackup = false;\r\n let maxGravitySpeedBackup = 0;\r\n if (this._myParams.myCollisionCheckDisabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n collisionCheckEnabledBackup = CollisionCheckBridge.isCollisionCheckDisabled();\r\n maxGravitySpeedBackup = this.getPlayerLocomotionSmooth().getParams().myMaxGravitySpeed;\r\n CollisionCheckBridge.setCollisionCheckDisabled(true);\r\n this.getPlayerLocomotionSmooth().getParams().myMaxGravitySpeed = 0;\r\n }\r\n\r\n this._myPlayerHeadManager.update(dt);\r\n\r\n if (this._myParams.myResetRealOnStart && this._myResetRealOnStartCounter > 0) {\r\n this._myResetRealOnStartCounter--;\r\n\r\n this._myPlayerTransformManager.resetReal(true, true, undefined, undefined, undefined, true);\r\n this._myPlayerTransformManager.update(dt);\r\n\r\n if (this._myPlayerHeadManager.isSynced()) {\r\n this._updateCollisionHeight();\r\n }\r\n } else {\r\n this._myPlayerTransformManager.update(dt);\r\n\r\n if (!this._myPlayerLocomotionSmooth.isDebugFlyEnabled() || !Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n if (!this._myParams.myAlwaysSmoothForNonVR || XRUtils.isSessionActive()) {\r\n if (this._myParams.mySwitchLocomotionTypeShortcutEnabled &&\r\n this._getMainHandGamepad().getButtonInfo(GamepadButtonID.THUMBSTICK).isPressEnd(2)) {\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\") && this._myPlayerLocomotionSmooth.canStop()) {\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n } else if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myAlwaysSmoothForNonVR && !XRUtils.isSessionActive()) {\r\n if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n this._mySwitchToTeleportOnEnterSession = true;\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n } else if (this._mySwitchToTeleportOnEnterSession && XRUtils.isSessionActive()) {\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\") && this._myPlayerLocomotionSmooth.canStop()) {\r\n this._mySwitchToTeleportOnEnterSession = false;\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.myDebugFlyShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n if (GamepadUtils.areButtonsPressEnd([this._getMainHandGamepad(), GamepadButtonID.SELECT, GamepadButtonID.THUMBSTICK])) {\r\n if (this._myLocomotionMovementFSM.isInState(\"teleport\") && this._myPlayerLocomotionTeleport.canStop()) {\r\n this._myLocomotionMovementFSM.perform(\"next\");\r\n }\r\n\r\n if (this._myLocomotionMovementFSM.isInState(\"smooth\")) {\r\n this._myPlayerLocomotionSmooth.setDebugFlyEnabled(!this._myPlayerLocomotionSmooth.isDebugFlyEnabled());\r\n this._mySwitchToTeleportOnEnterSession = false;\r\n }\r\n }\r\n }\r\n\r\n if (this._myPlayerHeadManager.isSynced()) {\r\n this._updateCollisionHeight();\r\n\r\n if (!this._myIdle) {\r\n this._myPlayerLocomotionRotate.update(dt);\r\n this._myLocomotionMovementFSM.update(dt);\r\n }\r\n }\r\n }\r\n\r\n if (this._myParams.mySyncHeadWithRealAfterLocomotionUpdateIfNeeded) {\r\n this._myPlayerTransformManager.updateValidHeadToRealHeadIfNeeded();\r\n }\r\n\r\n this._myPlayerObscureManager.update(dt);\r\n\r\n if (this._myParams.myCollisionCheckDisabled && Globals.isDebugEnabled(this._myParams.myEngine)) {\r\n CollisionCheckBridge.setCollisionCheckDisabled(collisionCheckEnabledBackup);\r\n this.getPlayerLocomotionSmooth().getParams().myMaxGravitySpeed = maxGravitySpeedBackup;\r\n }\r\n\r\n this._myPostUpdateEmitter.notify(dt, this);\r\n }\r\n\r\n setIdle(idle) {\r\n this._myIdle = idle;\r\n\r\n if (idle) {\r\n this._myLocomotionMovementFSM.perform(\"idle\");\r\n } else {\r\n this._myLocomotionMovementFSM.perform(\"resume\");\r\n }\r\n }\r\n\r\n getPlayerLocomotionSmooth() {\r\n return this._myPlayerLocomotionSmooth;\r\n }\r\n\r\n getPlayerLocomotionTeleport() {\r\n return this._myPlayerLocomotionTeleport;\r\n }\r\n\r\n getPlayerTransformManager() {\r\n return this._myPlayerTransformManager;\r\n }\r\n\r\n getPlayerLocomotionRotate() {\r\n return this._myPlayerLocomotionRotate;\r\n }\r\n\r\n getPlayerHeadManager() {\r\n return this._myPlayerHeadManager;\r\n }\r\n\r\n getPlayerObscureManager() {\r\n return this._myPlayerObscureManager;\r\n }\r\n\r\n registerPreUpdateCallback(id, callback) {\r\n this._myPreUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPreUpdateCallback(id) {\r\n this._myPreUpdateEmitter.remove(id);\r\n }\r\n\r\n registerPostUpdateCallback(id, callback) {\r\n this._myPostUpdateEmitter.add(callback, { id: id });\r\n }\r\n\r\n unregisterPostUpdateCallback(id) {\r\n this._myPostUpdateEmitter.remove(id);\r\n }\r\n\r\n _updateCollisionHeight() {\r\n this._myCollisionCheckParamsMovement.myHeight = this._myPlayerHeadManager.getHeightHead();\r\n if (this._myCollisionCheckParamsMovement.myHeight <= 0.000001) {\r\n this._myCollisionCheckParamsMovement.myHeight = 0;\r\n }\r\n this._myCollisionCheckParamsTeleport.myHeight = this._myCollisionCheckParamsMovement.myHeight;\r\n }\r\n\r\n _setupCollisionCheckParamsMovement() {\r\n let simplifiedParams = new CharacterColliderSetupSimplifiedCreationParams();\r\n\r\n simplifiedParams.myHeight = this._myParams.myDefaultHeight;\r\n simplifiedParams.myRadius = this._myParams.myCharacterRadius;\r\n\r\n simplifiedParams.myAccuracyLevel = this._myParams.myColliderAccuracy;\r\n\r\n simplifiedParams.myIsPlayer = true;\r\n\r\n simplifiedParams.myCheckOnlyFeet = this._myParams.myColliderCheckOnlyFeet;\r\n\r\n simplifiedParams.myMaxSpeed = this._myParams.myMaxSpeed;\r\n\r\n simplifiedParams.myCanFly = this._myParams.myFlyEnabled;\r\n\r\n simplifiedParams.myShouldSlideAlongWall = this._myParams.myColliderSlideAlongWall;\r\n\r\n simplifiedParams.myCollectGroundInfo = true;\r\n simplifiedParams.myMaxWalkableGroundAngle = this._myParams.myColliderMaxWalkableGroundAngle;\r\n simplifiedParams.myShouldSnapOnGround = this._myParams.myColliderSnapOnGround;\r\n simplifiedParams.myMaxDistanceToSnapOnGround = this._myParams.myColliderMaxDistanceToSnapOnGround;\r\n simplifiedParams.myMaxWalkableGroundStepHeight = this._myParams.myColliderMaxWalkableGroundStepHeight;\r\n simplifiedParams.myShouldNotFallFromEdges = this._myParams.myColliderPreventFallingFromEdges;\r\n\r\n simplifiedParams.myHorizontalCheckBlockLayerFlags.copy(this._myParams.myPhysicsBlockLayerFlags);\r\n let physXComponents = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getComponents(PhysXComponent);\r\n for (let physXComponent of physXComponents) {\r\n simplifiedParams.myHorizontalCheckObjectsToIgnore.pp_pushUnique(physXComponent.object, (first, second) => first.pp_equals(second));\r\n }\r\n simplifiedParams.myVerticalCheckBlockLayerFlags.copy(simplifiedParams.myHorizontalCheckBlockLayerFlags);\r\n simplifiedParams.myVerticalCheckObjectsToIgnore.pp_copy(simplifiedParams.myHorizontalCheckObjectsToIgnore);\r\n\r\n simplifiedParams.myHorizontalCheckDebugEnabled = this._myParams.myDebugHorizontalEnabled && Globals.isDebugEnabled(this._myParams.myEngine);\r\n simplifiedParams.myVerticalCheckDebugEnabled = this._myParams.myDebugVerticalEnabled && Globals.isDebugEnabled(this._myParams.myEngine);\r\n\r\n let colliderSetup = CharacterColliderSetupUtils.createSimplified(simplifiedParams);\r\n\r\n this._myCollisionCheckParamsMovement = CollisionCheckBridge.convertCharacterColliderSetupToCollisionCheckParams(colliderSetup, this._myCollisionCheckParamsMovement, this._myParams.myEngine);\r\n }\r\n\r\n _setupCollisionCheckParamsTeleport() {\r\n this._myCollisionCheckParamsTeleport = CollisionCheckUtils.generate360TeleportParamsFromMovementParams(this._myCollisionCheckParamsMovement);\r\n\r\n // Increased so to let teleport on steep slopes from above (from below is fixed through detection myGroundAngleToIgnoreUpward)\r\n this._myCollisionCheckParamsTeleport.myGroundAngleToIgnore = 61;\r\n this._myCollisionCheckParamsTeleport.myTeleportMustBeOnIgnorableGroundAngle = true;\r\n this._myCollisionCheckParamsTeleport.myTeleportMustBeOnGround = true;\r\n\r\n /*\r\n this._myCollisionCheckParamsTeleport.myExtraTeleportCheckCallback = function (\r\n offsetTeleportPosition, endPosition, feetPosition, transformUp, transformForward, height,\r\n collisionCheckParams, prevCollisionRuntimeParams, collisionRuntimeParams, newFeetPosition\r\n \r\n ) {\r\n let isTeleportingUpward = endPosition.vec3_isFartherAlongAxis(feetPosition, transformUp);\r\n if (isTeleportingUpward) {\r\n collisionRuntimeParams.myTeleportCanceled = collisionRuntimeParams.myGroundAngle > 30 + 0.0001;\r\n console.error(collisionRuntimeParams.myTeleportCanceled);\r\n }\r\n \r\n return newFeetPosition;\r\n }*/\r\n\r\n // This is needed for when u want to perform the teleport as a movement\r\n // Maybe this should be another set of collsion check params copied from the smooth ones?\r\n // When you teleport as move, u check with the teleport for the position, and this other params for the move, so that u can use a smaller\r\n // cone, and sliding if desired\r\n // If nothing is specified it's copied from the teleport and if greater than 90 cone is tuned down, and also the below settings are applied\r\n\r\n // You could also do this if u want to perform the teleport as movement, instead of using the smooth\r\n // but this will make even the final teleport check be halved\r\n //this._myCollisionCheckParamsTeleport.myHalfConeAngle = 90;\r\n //this._myCollisionCheckParamsTeleport.myHalfConeSliceAmount = 3;\r\n //this._myCollisionCheckParamsTeleport.myCheckHorizontalFixedForwardEnabled = false;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementEnabled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMaxLengthEnabled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMaxLength = this._myCollisionCheckParamsTeleport.myRadius * 0.75;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMinLengthEnabled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementMinLength = params.mySplitMovementMaxLength;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementStopWhenHorizontalMovementCanceled = true;\r\n //this._myCollisionCheckParamsTeleport.mySplitMovementStopWhenVerticalMovementCanceled = true;\r\n\r\n //this._myCollisionCheckParamsTeleport.myDebugEnabled = true;\r\n }\r\n\r\n _fixAlmostUp() {\r\n // Get rotation on y and adjust if it's slightly tilted when it's almsot 0,1,0\r\n\r\n let defaultUp = vec3_create(0, 1, 0);\r\n let angleWithDefaultUp = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getUp().vec3_angle(defaultUp);\r\n if (angleWithDefaultUp < 1) {\r\n let forward = Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_getForward();\r\n let flatForward = forward.vec3_clone();\r\n flatForward[1] = 0;\r\n\r\n let defaultForward = vec3_create(0, 0, 1);\r\n let angleWithDefaultForward = defaultForward.vec3_angleSigned(flatForward, defaultUp);\r\n\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_resetRotation();\r\n Globals.getPlayerObjects(this._myParams.myEngine).myPlayer.pp_rotateAxis(angleWithDefaultForward, defaultUp);\r\n }\r\n }\r\n\r\n _setupLocomotionMovementFSM() {\r\n this._myLocomotionMovementFSM = new FSM();\r\n //this._myLocomotionMovementFSM.setLogEnabled(true, \"Locomotion Movement\");\r\n\r\n this._myLocomotionMovementFSM.addState(\"init\");\r\n this._myLocomotionMovementFSM.addState(\"smooth\", (dt) => this._myPlayerLocomotionSmooth.update(dt));\r\n this._myLocomotionMovementFSM.addState(\"teleport\", (dt) => this._myPlayerLocomotionTeleport.update(dt));\r\n this._myLocomotionMovementFSM.addState(\"idleSmooth\");\r\n this._myLocomotionMovementFSM.addState(\"idleTeleport\");\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"init\", \"smooth\", \"startSmooth\", function () {\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"init\", \"teleport\", \"startTeleport\", function () {\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"smooth\", \"teleport\", \"next\", function () {\r\n this._myPlayerLocomotionSmooth.stop();\r\n this._myPlayerLocomotionTeleport.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"teleport\", \"smooth\", \"next\", function () {\r\n this._myPlayerLocomotionTeleport.stop();\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"smooth\", \"idleSmooth\", \"idle\", function () {\r\n this._myPlayerLocomotionSmooth.stop();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"teleport\", \"idleTeleport\", \"idle\", function () {\r\n this._myPlayerLocomotionTeleport.stop();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"idleSmooth\", \"smooth\", \"resume\", function () {\r\n this._myPlayerLocomotionSmooth.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.addTransition(\"idleTeleport\", \"teleport\", \"resume\", function () {\r\n this._myPlayerLocomotionTeleport.start();\r\n }.bind(this));\r\n\r\n this._myLocomotionMovementFSM.init(\"init\");\r\n }\r\n\r\n _getMainHandGamepad() {\r\n return Globals.getGamepads(this._myParams.myEngine)[this._myParams.myMainHand];\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myPlayerHeadManager.destroy();\r\n this._myPlayerLocomotionSmooth.destroy();\r\n this._myPlayerTransformManager.destroy();\r\n this._myPlayerObscureManager.destroy();\r\n this._myPlayerLocomotionTeleport.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { GamepadButtonID } from \"../gamepad_buttons.js\";\r\n\r\nlet _mySimultaneousPressMaxDelay = 0.15;\r\nlet _mySimultaneousTouchMaxDelay = 0.15;\r\n\r\nexport function setSimultaneousPressMaxDelay(simultaneousPressMaxDelay) {\r\n _mySimultaneousPressMaxDelay = simultaneousPressMaxDelay;\r\n}\r\n\r\nexport function setSimultaneousTouchMaxDelay(simultaneousTouchMaxDelay) {\r\n _mySimultaneousTouchMaxDelay = simultaneousTouchMaxDelay;\r\n}\r\n\r\nexport function getSimultaneousPressMaxDelay() {\r\n return _mySimultaneousPressMaxDelay;\r\n}\r\n\r\nexport function getSimultaneousTouchMaxDelay() {\r\n return _mySimultaneousTouchMaxDelay;\r\n}\r\n\r\n\r\n// gamepadButtonIDsList is a sequence of a gamepads and a list of buttonIDs like this ([gamepad1, squeeze, top, select], [gamepad2, bottom, squeeze, select], ...)\r\n// If the first parameter is a number it's used as multiplePressCount\r\n// If the buttonIDs list is empty for a given gamepad, it means that every button will be included\r\nexport function isAnyButtonPressStart(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonPressStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isPressStart(multiplePressCount)) {\r\n atLeastOneButtonPressStart = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonPressStart) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonPressStart;\r\n}\r\n\r\n// gamepadButtonIDsList is a sequence of a gamepads and a list of buttonIDs like this ([gamepad1, squeeze, top, select], [gamepad2, bottom, squeeze, select], ...)\r\n// If the first parameter is a number it's used as multiplePressCount\r\n// If the buttonIDs list is empty for a given gamepad, it means that every button will be included\r\nexport function areButtonsPressStart(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonPressedRecently = true;\r\n let atLeastOneButtonPressStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(button.myPressed && (multiplePressCount == null || button.myMultiplePressStartCount == multiplePressCount) && button.myTimePressed < _mySimultaneousPressMaxDelay)) {\r\n areButtonPressedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isPressStart(multiplePressCount)) {\r\n atLeastOneButtonPressStart = true;\r\n }\r\n }\r\n\r\n if (!areButtonPressedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonPressedRecently && atLeastOneButtonPressStart;\r\n}\r\n\r\nexport function isAnyButtonPressEnd(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonPressEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isPressEnd(multiplePressCount)) {\r\n atLeastOneButtonPressEnd = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonPressEnd) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonPressEnd;\r\n}\r\n\r\nexport function areButtonsPressEnd(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonNotPressedRecently = true;\r\n let atLeastOneButtonPressEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(!button.myPressed && (multiplePressCount == null || button.myMultiplePressEndCount == multiplePressCount) && button.myTimeNotPressed < _mySimultaneousPressMaxDelay)) {\r\n areButtonNotPressedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isPressEnd(multiplePressCount)) {\r\n atLeastOneButtonPressEnd = true;\r\n }\r\n }\r\n\r\n if (!areButtonNotPressedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonNotPressedRecently && atLeastOneButtonPressEnd;\r\n}\r\n\r\nexport function isAnyButtonTouchStart(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonTouchStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isTouchStart(multiplePressCount)) {\r\n atLeastOneButtonTouchStart = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonTouchStart) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonTouchStart;\r\n}\r\n\r\nexport function areButtonsTouchStart(...gamepadButtonIDsList) {\r\n let multipleTouchCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multipleTouchCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonTouchedRecently = true;\r\n let atLeastOneButtonTouchStart = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(button.myTouched && (multipleTouchCount == null || button.myMultipleTouchStartCount == multipleTouchCount) && button.myTimeTouched < _mySimultaneousTouchMaxDelay)) {\r\n areButtonTouchedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isTouchStart(multipleTouchCount)) {\r\n atLeastOneButtonTouchStart = true;\r\n }\r\n }\r\n\r\n if (!areButtonTouchedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonTouchedRecently && atLeastOneButtonTouchStart;\r\n}\r\n\r\nexport function isAnyButtonTouchEnd(...gamepadButtonIDsList) {\r\n let multiplePressCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multiplePressCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let atLeastOneButtonTouchEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (button.isTouchEnd(multiplePressCount)) {\r\n atLeastOneButtonTouchEnd = true;\r\n break;\r\n }\r\n }\r\n\r\n if (atLeastOneButtonTouchEnd) {\r\n break;\r\n }\r\n }\r\n\r\n return atLeastOneButtonTouchEnd;\r\n}\r\n\r\nexport function areButtonsTouchEnd(...gamepadButtonIDsList) {\r\n let multipleTouchCount = null;\r\n let realGamepadButtonIDsList = gamepadButtonIDsList;\r\n if (!isNaN(gamepadButtonIDsList[0])) {\r\n multipleTouchCount = gamepadButtonIDsList[0];\r\n realGamepadButtonIDsList = gamepadButtonIDsList.slice(1);\r\n }\r\n\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n if (gamepadButtonIDs.length == 1) {\r\n for (let key in GamepadButtonID) {\r\n gamepadButtonIDs.push(GamepadButtonID[key]);\r\n }\r\n }\r\n }\r\n\r\n let areButtonNotTouchedRecently = true;\r\n let atLeastOneButtonTouchEnd = false;\r\n for (let gamepadButtonIDs of realGamepadButtonIDsList) {\r\n let gamepad = gamepadButtonIDs[0];\r\n for (let i = 1; i < gamepadButtonIDs.length; i++) {\r\n let buttonID = gamepadButtonIDs[i];\r\n let button = gamepad.getButtonInfo(buttonID);\r\n\r\n if (!(!button.myTouched && (multipleTouchCount == null || button.myMultipleTouchEndCount == multipleTouchCount) && button.myTimeNotTouched < _mySimultaneousTouchMaxDelay)) {\r\n areButtonNotTouchedRecently = false;\r\n break;\r\n }\r\n\r\n if (button.isTouchEnd(multipleTouchCount)) {\r\n atLeastOneButtonTouchEnd = true;\r\n }\r\n }\r\n\r\n if (!areButtonNotTouchedRecently) {\r\n break;\r\n }\r\n }\r\n\r\n return areButtonNotTouchedRecently && atLeastOneButtonTouchEnd;\r\n}\r\n\r\nexport let GamepadUtils = {\r\n setSimultaneousPressMaxDelay,\r\n setSimultaneousTouchMaxDelay,\r\n getSimultaneousPressMaxDelay,\r\n getSimultaneousTouchMaxDelay,\r\n isAnyButtonPressStart,\r\n areButtonsPressStart,\r\n isAnyButtonPressEnd,\r\n areButtonsPressEnd,\r\n isAnyButtonTouchStart,\r\n areButtonsTouchStart,\r\n isAnyButtonTouchEnd,\r\n areButtonsTouchEnd\r\n};", "// Even if this can be sued to generally fade, it should be called collision obscure to hint that is meant for collision obscuring\r\n\r\nimport { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { FSM } from \"../../../../../cauldron/fsm/fsm.js\";\r\nimport { EasingFunction } from \"../../../../../cauldron/utils/math_utils.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { VisualMesh, VisualMeshParams } from \"../../../../../cauldron/visual/elements/visual_mesh.js\";\r\nimport { MaterialUtils } from \"../../../../../cauldron/wl/utils/material_utils.js\";\r\nimport { vec3_create, vec4_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\n\r\n// Occlude\r\nexport class PlayerObscureManagerParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerTransformManager = null;\r\n this.myPlayerLocomotionTeleport = null;\r\n\r\n this.myEnabled = true;\r\n\r\n this.myObscureObject = null;\r\n this.myObscureMaterial = null;\r\n this.myObscureRadius = 0;\r\n\r\n this.myObscureFadeOutSeconds = 0.1;\r\n this.myObscureFadeInSeconds = 0.1;\r\n\r\n this.myObscureFadeEasingFunction = EasingFunction.linear;\r\n\r\n this.myDistanceToStartObscureWhenHeadColliding = 0;\r\n this.myDistanceToStartObscureWhenBodyColliding = 0;\r\n this.myDistanceToStartObscureWhenFloating = 0;\r\n this.myDistanceToStartObscureWhenFar = 0;\r\n\r\n this.myRelativeDistanceToMaxObscureWhenHeadColliding = 0; // Relative to the start distance, 1 means that in 1 meters after it started it will be completely obscured\r\n this.myRelativeDistanceToMaxObscureWhenBodyColliding = 0;\r\n this.myRelativeDistanceToMaxObscureWhenFloating = 0;\r\n this.myRelativeDistanceToMaxObscureWhenFar = 0;\r\n\r\n this.myObscureLevelRelativeDistanceEasingFunction = EasingFunction.linear;\r\n\r\n this.myDisableObscureWhileTeleporting = true;\r\n this.myDisableObscureWhileTeleportingDuration = 0.5;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class PlayerObscureManager {\r\n\r\n constructor(params) {\r\n this._myParams = params;\r\n\r\n this._myObscureMaterial = null;\r\n this._myObscureParentObject = null;\r\n\r\n this._myCurrentObscureLevel = 0;\r\n this._myTargetObscureLevel = 0;\r\n this._myLastTargetObscureLevel = null;\r\n this._myLastIsFadingIn = null;\r\n\r\n this._myInstantObscureFramesCount = 0;\r\n\r\n this._myFadeTimer = new Timer(0, false);\r\n\r\n this._myDisableObscureWhileTeleportingTimer = null;\r\n if (this._myParams.myDisableObscureWhileTeleportingDuration != null) {\r\n this._myDisableObscureWhileTeleportingTimer = new Timer(this._myParams.myDisableObscureWhileTeleportingDuration);\r\n } else {\r\n this._myDisableObscureWhileTeleportingTimer = new Timer(0, false);\r\n }\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \" Obscure\");\r\n\r\n this._myFSM.addState(\"init\");\r\n\r\n this._myFSM.addState(\"inactive\");\r\n this._myFSM.addState(\"idle\", this._idleUpdate.bind(this));\r\n this._myFSM.addState(\"fading\", this._fadingUpdate.bind(this));\r\n\r\n this._myFSM.addTransition(\"init\", \"inactive\", \"end\", this._setObscureLevel.bind(this, 0));\r\n\r\n this._myFSM.addTransition(\"inactive\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"fading\", \"fade\", this._startFading.bind(this));\r\n this._myFSM.addTransition(\"fading\", \"idle\", \"done\", this._fadingDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"inactive\", \"inactive\", \"stop\", this._setObscureLevel.bind(this, 0));\r\n this._myFSM.addTransition(\"idle\", \"inactive\", \"stop\", this._setObscureLevel.bind(this, 0));\r\n this._myFSM.addTransition(\"fading\", \"inactive\", \"stop\", this._setObscureLevel.bind(this, 0));\r\n\r\n this._myFSM.init(\"init\");\r\n\r\n this._setupVisuals();\r\n\r\n this._myFSM.perform(\"end\");\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), false, false, this._myParams.myEngine);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._myFSM.perform(\"start\");\r\n }\r\n\r\n stop() {\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n update(dt) {\r\n if (!this._myParams.myPlayerLocomotionTeleport.isTeleporting()) {\r\n if (this._myParams.myDisableObscureWhileTeleportingDuration != null) {\r\n this._myDisableObscureWhileTeleportingTimer.start();\r\n } else {\r\n this._myDisableObscureWhileTeleportingTimer.reset();\r\n }\r\n } else {\r\n this._myDisableObscureWhileTeleportingTimer.update(dt);\r\n }\r\n\r\n this._myObscureParentObject.pp_resetTransformLocal();\r\n\r\n this._updateObscured();\r\n\r\n this._myFSM.update(dt);\r\n\r\n this._setObscureVisible(this.isObscured());\r\n\r\n if (this._myInstantObscureFramesCount > 0) {\r\n this._myInstantObscureFramesCount--;\r\n }\r\n }\r\n\r\n isStarted() {\r\n return !this._myFSM.isInState(\"inactive\");\r\n }\r\n\r\n isObscured() {\r\n return this._myCurrentObscureLevel > 0;\r\n }\r\n\r\n isFading() {\r\n return this._myFSM.isInState(\"fading\");\r\n }\r\n\r\n isFadingIn() {\r\n return this.isFading() && this._myCurrentObscureLevel > this._myTargetObscureLevel;\r\n }\r\n\r\n isFadingOut() {\r\n return this.isFading() && this._myCurrentObscureLevel <= this._myTargetObscureLevel;\r\n }\r\n\r\n getObscureLevel() {\r\n return this._myCurrentObscureLevel;\r\n }\r\n\r\n getTargetObscureLevel() {\r\n return this._myTargetObscureLevel;\r\n }\r\n\r\n getCurrentObscureLevel() {\r\n this._myCurrentObscureLevel;\r\n }\r\n\r\n overrideObscureLevel(obscureLevel, instantFade = false) {\r\n this._myObscureLevelOverride = obscureLevel;\r\n\r\n if (instantFade && this.isStarted()) {\r\n this._setObscureLevel(obscureLevel);\r\n }\r\n }\r\n\r\n resetObscureLevelOverride() {\r\n this._myObscureLevelOverride = null;\r\n }\r\n\r\n _idleUpdate(dt) {\r\n if (Math.abs(this._myTargetObscureLevel - this._myCurrentObscureLevel) > Math.PP_EPSILON) {\r\n if (this._myInstantObscureFramesCount > 0) {\r\n this._setObscureAlpha(this._myTargetObscureLevel);\r\n this._myCurrentObscureLevel = this._myTargetObscureLevel;\r\n } else {\r\n this._myFSM.perform(\"fade\");\r\n }\r\n }\r\n }\r\n\r\n _fadingUpdate(dt) {\r\n if (Math.abs(this._myTargetObscureLevel - this._myCurrentObscureLevel) <= Math.PP_EPSILON) {\r\n this._myFSM.perform(\"done\");\r\n return;\r\n }\r\n\r\n if (this._myLastTargetObscureLevel != this._myTargetObscureLevel) {\r\n this._refreshFadeTimer();\r\n this._myLastTargetObscureLevel = this._myTargetObscureLevel;\r\n }\r\n\r\n this._myFadeTimer.update(dt);\r\n\r\n if (this._myInstantObscureFramesCount > 0) {\r\n this._myFadeTimer.end();\r\n }\r\n\r\n let newObscureLevel = this._myParams.myObscureFadeEasingFunction(this._myFadeTimer.getPercentage());\r\n\r\n let isFadingIn = this._myCurrentObscureLevel > this._myTargetObscureLevel;\r\n if (!isFadingIn) {\r\n newObscureLevel = Math.min(newObscureLevel, this._myTargetObscureLevel);\r\n } else {\r\n newObscureLevel = Math.pp_clamp(1 - newObscureLevel, 0, 1);\r\n newObscureLevel = Math.max(newObscureLevel, this._myTargetObscureLevel);\r\n }\r\n\r\n this._setObscureAlpha(newObscureLevel);\r\n this._myCurrentObscureLevel = newObscureLevel;\r\n\r\n if (Math.abs(this._myTargetObscureLevel - this._myCurrentObscureLevel) <= Math.PP_EPSILON || this._myFadeTimer.isDone()) {\r\n this._myFSM.perform(\"done\");\r\n }\r\n }\r\n\r\n _startFading() {\r\n this._myLastTargetObscureLevel = null;\r\n this._myLastIsFadingIn = null;\r\n }\r\n\r\n _fadingDone() {\r\n this._setObscureLevel(this._myTargetObscureLevel);\r\n }\r\n\r\n _refreshFadeTimer() {\r\n let isFadingIn = this._myCurrentObscureLevel > this._myTargetObscureLevel;\r\n\r\n if (this._myLastIsFadingIn != isFadingIn) {\r\n this._setFadeTimerToObscureLevel(isFadingIn);\r\n }\r\n\r\n this._myLastIsFadingIn = isFadingIn;\r\n }\r\n\r\n _setFadeTimerToObscureLevel(isFadingIn) {\r\n let percentage = 0;\r\n let closestPercentage = 0;\r\n let steps = 1000;\r\n let increment = 1 / steps;\r\n\r\n while (percentage < 1) {\r\n if (Math.abs(this._myParams.myObscureFadeEasingFunction(percentage) - this._myCurrentObscureLevel) <\r\n Math.abs(this._myParams.myObscureFadeEasingFunction(closestPercentage) - this._myCurrentObscureLevel)) {\r\n closestPercentage = percentage;\r\n }\r\n\r\n percentage += increment;\r\n }\r\n\r\n if (Math.abs(this._myParams.myObscureFadeEasingFunction(1) - this._myCurrentObscureLevel) <\r\n Math.abs(this._myParams.myObscureFadeEasingFunction(closestPercentage) - this._myCurrentObscureLevel)) {\r\n closestPercentage = 1;\r\n }\r\n\r\n if (isFadingIn) {\r\n this._myFadeTimer.start(this._myParams.myObscureFadeInSeconds);\r\n this._myFadeTimer.setPercentage(Math.pp_clamp(1 - closestPercentage, 0, 1));\r\n } else {\r\n this._myFadeTimer.start(this._myParams.myObscureFadeOutSeconds);\r\n this._myFadeTimer.setPercentage(Math.pp_clamp(closestPercentage, 0, 1));\r\n }\r\n }\r\n\r\n _setObscureLevel(obscureLevel) {\r\n this._myTargetObscureLevel = obscureLevel;\r\n this._myCurrentObscureLevel = obscureLevel;\r\n this._setObscureAlpha(obscureLevel);\r\n this._setObscureVisible(this.isObscured());\r\n }\r\n\r\n _setObscureAlpha(alpha) {\r\n if (this._myParams.myObscureObject == null) {\r\n MaterialUtils.setAlpha(this._myObscureMaterial, alpha);\r\n } else {\r\n MaterialUtils.setObjectAlpha(this._myParams.myObscureObject, alpha);\r\n }\r\n }\r\n\r\n _updateObscured() {\r\n this._myTargetObscureLevel = 0;\r\n\r\n if (this._myParams.myEnabled) {\r\n if (this._myObscureLevelOverride != null) {\r\n this._myTargetObscureLevel = this._myObscureLevelOverride;\r\n } else if (!this._myParams.myPlayerLocomotionTeleport.isTeleporting() || !this._myParams.myDisableObscureWhileTeleporting || this._myDisableObscureWhileTeleportingTimer.isDone()) {\r\n // #TODO Check if VALID head is colliding, in that case use max obscure level\r\n // This prevent being able to see when resetting head to real even though real is colliding\r\n // For example if u stand up and go with the head in the ceiling and reset by moving\r\n // Add a setting for this though, since someone could prefer being able to see in this case,\r\n // so to be able to know where to move (since it might be resetting to this invalid position)\r\n if (this._myParams.myPlayerTransformManager.isHeadColliding() || !this._myParams.myPlayerTransformManager.isPositionHeadValid()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToRealHead();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenHeadColliding;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenHeadColliding, 0, 1);\r\n if (isNaN(relativeDistancePercentage) || !this._myParams.myPlayerTransformManager.isPositionHeadValid()) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n\r\n if (this._myParams.myPlayerTransformManager.isBodyColliding()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToReal();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenBodyColliding;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenBodyColliding, 0, 1);\r\n if (isNaN(relativeDistancePercentage)) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n\r\n if (this._myParams.myPlayerTransformManager.isFloating()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToReal();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenFloating;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenFloating, 0, 1);\r\n if (isNaN(relativeDistancePercentage)) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n\r\n if (this._myParams.myPlayerTransformManager.isFar()) {\r\n let distance = this._myParams.myPlayerTransformManager.getDistanceToReal();\r\n let relativeDistance = distance - this._myParams.myDistanceToStartObscureWhenFar;\r\n if (relativeDistance >= 0) {\r\n let relativeDistancePercentage = Math.pp_clamp(relativeDistance / this._myParams.myRelativeDistanceToMaxObscureWhenFar, 0, 1);\r\n if (isNaN(relativeDistancePercentage)) {\r\n relativeDistancePercentage = 1;\r\n }\r\n let targetObscureLevel = this._myParams.myObscureLevelRelativeDistanceEasingFunction(relativeDistancePercentage);\r\n this._myTargetObscureLevel = Math.max(this._myTargetObscureLevel, targetObscureLevel);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _setupVisuals() {\r\n this._myObscureMaterial = null;\r\n if (this._myParams.myObscureMaterial != null) {\r\n this._myObscureMaterial = this._myParams.myObscureMaterial;\r\n } else {\r\n this._myObscureMaterial = Globals.getDefaultMaterials(this._myParams.myEngine).myFlatTransparentNoDepth.clone();\r\n this._myObscureMaterial.color = vec4_create(0, 0, 0, 1);\r\n }\r\n\r\n this._myObscureParentObject = Globals.getPlayerObjects(this._myParams.myEngine).myCauldron.pp_addObject();\r\n\r\n let obscureVisualParams = new VisualMeshParams(this._myParams.myEngine);\r\n obscureVisualParams.myMesh = Globals.getDefaultMeshes(this._myParams.myEngine).myInvertedSphere;\r\n obscureVisualParams.myMaterial = (this._myParams.myObscureMaterial != null) ? this._myParams.myObscureMaterial : this._myObscureMaterial;\r\n obscureVisualParams.myParent = this._myObscureParentObject;\r\n obscureVisualParams.myLocal = true;\r\n obscureVisualParams.myTransform.mat4_setScale(vec3_create(this._myParams.myObscureRadius, this._myParams.myObscureRadius, this._myParams.myObscureRadius));\r\n this._myObscureVisual = new VisualMesh(obscureVisualParams);\r\n\r\n if (this._myParams.myObscureObject != null) {\r\n this._myParams.myObscureObject.pp_setParent(this._myObscureParentObject, false);\r\n this._myParams.myObscureObject.pp_resetTransformLocal();\r\n }\r\n\r\n this._setObscureVisible(false);\r\n }\r\n\r\n _setObscureVisible(visible) {\r\n if (this._myParams.myObscureObject == null) {\r\n this._myObscureVisual.setVisible(visible);\r\n } else {\r\n this._myObscureVisual.setVisible(false);\r\n this._myParams.myObscureObject.pp_setActive(visible);\r\n }\r\n\r\n if (visible) {\r\n this._myObscureParentObject.pp_setParent(this._myParams.myPlayerTransformManager.getHead(), false);\r\n } else {\r\n this._myObscureParentObject.pp_setParent(Globals.getPlayerObjects(this._myParams.myEngine)?.myCauldron, false);\r\n }\r\n }\r\n\r\n _onXRSessionStart() {\r\n this._myInstantObscureFramesCount = 5;\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._myInstantObscureFramesCount = 5;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myObscureVisual.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { VisualArrow, VisualArrowParams } from \"../../../../../../cauldron/visual/elements/visual_arrow.js\";\r\nimport { VisualLine, VisualLineParams } from \"../../../../../../cauldron/visual/elements/visual_line.js\";\r\nimport { VisualPoint, VisualPointParams } from \"../../../../../../cauldron/visual/elements/visual_point.js\";\r\nimport { VisualTorus, VisualTorusParams } from \"../../../../../../cauldron/visual/elements/visual_torus.js\";\r\nimport { quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\n\r\nexport class PlayerLocomotionTeleportDetectionVisualizerParams {\r\n\r\n constructor() {\r\n this.myTeleportValidMaterial = null;\r\n this.myTeleportInvalidMaterial = null;\r\n\r\n this.myTeleportPositionObject = null;\r\n this.myTeleportPositionObjectRotateWithHead = true;\r\n\r\n this.myTeleportParableLineEndOffset = 0.05;\r\n this.myTeleportParableMinVerticalDistanceToShowVerticalLine = 0.80;\r\n this.myTeleportParableShowVerticalLineMaxLength = 0.30;\r\n\r\n this.myTeleportParablePositionUpOffset = 0.05;\r\n\r\n this.myTeleportParablePositionVisualAlignOnSurface = true;\r\n\r\n this.myVisualTeleportPositionLerpEnabled = true;\r\n this.myVisualTeleportPositionLerpFactor = 10;\r\n this.myVisualTeleportPositionMinDistanceToResetLerp = 0.005;\r\n this.myVisualTeleportPositionMinDistanceToLerp = 0.15;\r\n this.myVisualTeleportPositionMaxDistanceToLerp = 5;\r\n\r\n this.myVisualTeleportPositionMinDistanceToCloseLerpFactor = 0.02;\r\n this.myVisualTeleportPositionCloseLerpFactor = 30;\r\n\r\n this.myVisualTeleportPositionMinAngleDistanceToResetLerp = 0.1;\r\n this.myVisualTeleportPositionMinAngleDistanceToLerp = 1;\r\n this.myVisualTeleportPositionMaxAngleDistanceToLerp = 180;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportDetectionVisualizer {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, detectionRuntimeParams) {\r\n this._myDetectionRuntimeParams = detectionRuntimeParams;\r\n\r\n this._myTeleportParams = teleportParams;\r\n this._myTeleportRuntimeParams = teleportRuntimeParams;\r\n\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformQuat = quat2_create();\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Min Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToLerp, 1, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Max Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxDistanceToLerp, 1, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Min Angle Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToLerp, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Max Angle Distance Lerp\", this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxAngleDistanceToLerp, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n this._setupVisuals();\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n\r\n }\r\n\r\n end() {\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n\r\n this._hideTeleportPosition();\r\n }\r\n\r\n update(dt) {\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Min Distance Lerp\");\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Max Distance Lerp\");\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Min Angle Distance Lerp\");\r\n //this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxAngleDistanceToLerp = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Max Angle Distance Lerp\");\r\n\r\n if (this._myDetectionRuntimeParams.myTeleportDetectionValid) {\r\n this._showTeleportPosition(dt);\r\n } else {\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n this._hideTeleportPosition();\r\n }\r\n }\r\n\r\n _showTeleportPosition(dt) {\r\n this._showTeleportParable(dt);\r\n }\r\n\r\n _hideTeleportPosition() {\r\n for (let visualLine of this._myValidVisualLines) {\r\n visualLine.setVisible(false);\r\n }\r\n\r\n for (let visualLine of this._myInvalidVisualLines) {\r\n visualLine.setVisible(false);\r\n }\r\n\r\n this._myValidVisualPoint.setVisible(false);\r\n this._myInvalidVisualPoint.setVisible(false);\r\n\r\n this._myValidVisualVerticalArrow.setVisible(false);\r\n\r\n this._myValidVisualTeleportPositionTorus.setVisible(false);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(false);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject != null) {\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(false);\r\n }\r\n }\r\n\r\n _addVisualLines(amount) {\r\n for (let i = 0; i < amount; i++) {\r\n {\r\n let visualParams = new VisualLineParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n this._myValidVisualLines.push(new VisualLine(visualParams));\r\n }\r\n\r\n {\r\n let visualParams = new VisualLineParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportInvalidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportInvalidMaterial;\r\n }\r\n\r\n this._myInvalidVisualLines.push(new VisualLine(visualParams));\r\n }\r\n }\r\n }\r\n\r\n _showTeleportParablePosition(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _showTeleportParable(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _setupVisuals() {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let visual of this._myValidVisualLines) {\r\n visual.destroy();\r\n }\r\n\r\n for (let visual of this._myInvalidVisualLines) {\r\n visual.destroy();\r\n }\r\n\r\n this._myValidVisualPoint.destroy();\r\n this._myInvalidVisualPoint.destroy();\r\n\r\n this._myValidVisualVerticalArrow.destroy();\r\n this._myValidVisualTeleportPositionTorus.destroy();\r\n this._myValidVisualTeleportPositionTorusInner.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportDetectionVisualizer.prototype._setupVisuals = function () {\r\n let innerTorusPosition = vec3_create();\r\n return function _setupVisuals() {\r\n this._myTeleportValidMaterial = Globals.getDefaultMaterials(this._myTeleportParams.myEngine).myFlatOpaque.clone();\r\n this._myTeleportValidMaterial.color = vec4_create(0, 0.5, 1, 1);\r\n this._myTeleportInvalidMaterial = Globals.getDefaultMaterials(this._myTeleportParams.myEngine).myFlatOpaque.clone();\r\n this._myTeleportInvalidMaterial.color = vec4_create(0.75, 0.05, 0, 1);\r\n\r\n this._myValidVisualLines = [];\r\n this._myInvalidVisualLines = [];\r\n this._addVisualLines(30);\r\n\r\n {\r\n let visualParams = new VisualPointParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n this._myValidVisualPoint = new VisualPoint(visualParams);\r\n }\r\n\r\n {\r\n let visualParams = new VisualPointParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportInvalidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportInvalidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportInvalidMaterial;\r\n }\r\n\r\n this._myInvalidVisualPoint = new VisualPoint(visualParams);\r\n }\r\n\r\n {\r\n let visualParams = new VisualArrowParams(this._myTeleportParams.myEngine);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n this._myValidVisualVerticalArrow = new VisualArrow(visualParams);\r\n }\r\n\r\n this._myVisualTeleportPositionObject = Globals.getPlayerObjects(this._myTeleportParams.myEngine).myCauldron.pp_addObject();\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Torus Radius\", 0.175, 0.1, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneInt(\"Teleport Torus Segments\", 24, 1, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Torus Thickness\", 0.02, 0.1, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Torus Inner Radius\", 0.04, 0.1, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n {\r\n let visualParams = new VisualTorusParams(this._myTeleportParams.myEngine);\r\n visualParams.myRadius = 0.175;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n visualParams.myParent = this._myVisualTeleportPositionObject;\r\n visualParams.myLocal = true;\r\n\r\n this._myValidVisualTeleportPositionTorus = new VisualTorus(visualParams);\r\n }\r\n\r\n {\r\n let visualParams = new VisualTorusParams(this._myTeleportParams.myEngine);\r\n visualParams.myRadius = 0.04;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Inner Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial != null) {\r\n visualParams.myMaterial = this._myTeleportParams.myVisualizerParams.myTeleportValidMaterial;\r\n } else {\r\n visualParams.myMaterial = this._myTeleportValidMaterial;\r\n }\r\n\r\n visualParams.myParent = this._myVisualTeleportPositionObject;\r\n visualParams.myLocal = true;\r\n\r\n let visualTorusParams = this._myValidVisualTeleportPositionTorus.getParams();\r\n\r\n let innerTorusCenter = (visualTorusParams.myRadius - (visualTorusParams.mySegmentThickness / 2)) / 2;\r\n innerTorusPosition.vec3_set(0, 0, innerTorusCenter);\r\n\r\n visualParams.myTransform.mat4_setPosition(innerTorusPosition);\r\n\r\n this._myValidVisualTeleportPositionTorusInner = new VisualTorus(visualParams);\r\n }\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject != null) {\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setParent(this._myVisualTeleportPositionObject);\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_resetTransformLocal();\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(false);\r\n }\r\n\r\n this._hideTeleportPosition();\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionVisualizer.prototype._showTeleportParable = function () {\r\n let currentPosition = vec3_create();\r\n let nextPosition = vec3_create();\r\n\r\n let playerUp = vec3_create();\r\n let upDifference = vec3_create();\r\n return function _showTeleportParable(dt) {\r\n let showParableDistance = Math.max(this._myDetectionRuntimeParams.myParableDistance - this._myTeleportParams.myVisualizerParams.myTeleportParableLineEndOffset);\r\n let lastParableIndex = this._myDetectionRuntimeParams.myParable.getPositionIndexByDistance(showParableDistance);\r\n let lastParableIndexDistance = this._myDetectionRuntimeParams.myParable.getDistance(lastParableIndex);\r\n\r\n if (lastParableIndex + 1 > this._myValidVisualLines.length) {\r\n this._addVisualLines(lastParableIndex + 1, this._myValidVisualLines.length);\r\n }\r\n\r\n const usedVisualLines = [];\r\n for (let i = 0; i <= lastParableIndex; i++) {\r\n currentPosition = this._myDetectionRuntimeParams.myParable.getPosition(i, currentPosition);\r\n nextPosition = this._myDetectionRuntimeParams.myParable.getPosition(i + 1, nextPosition);\r\n\r\n let visuaLine = (this._myDetectionRuntimeParams.myTeleportPositionValid) ? this._myValidVisualLines[i] : this._myInvalidVisualLines[i];\r\n usedVisualLines.push(visuaLine);\r\n\r\n let currentVisualLineParams = visuaLine.getParams();\r\n\r\n if (i == lastParableIndex) {\r\n let stepLength = Math.max(0, showParableDistance - lastParableIndexDistance);\r\n nextPosition = nextPosition.vec3_sub(currentPosition, nextPosition).vec3_normalize(nextPosition);\r\n nextPosition = currentPosition.vec3_add(nextPosition.vec3_scale(stepLength, nextPosition), nextPosition);\r\n }\r\n\r\n currentVisualLineParams.setStartEnd(currentPosition, nextPosition);\r\n currentVisualLineParams.myThickness = 0.005;\r\n\r\n visuaLine.paramsUpdated();\r\n visuaLine.setVisible(true);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugShowEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, currentPosition, vec4_create(1, 0, 0, 1), 0.01);\r\n }\r\n }\r\n\r\n for (let visualLine of this._myValidVisualLines) {\r\n if (usedVisualLines.indexOf(visualLine) == -1) {\r\n visualLine.setVisible(false);\r\n }\r\n }\r\n\r\n for (let visualLine of this._myInvalidVisualLines) {\r\n if (usedVisualLines.indexOf(visualLine) == -1) {\r\n visualLine.setVisible(false);\r\n }\r\n }\r\n\r\n let visualPoint = (this._myDetectionRuntimeParams.myTeleportPositionValid) ? this._myValidVisualPoint : this._myInvalidVisualPoint;\r\n let visualPointParams = visualPoint.getParams();\r\n visualPointParams.myPosition.vec3_copy(nextPosition);\r\n visualPointParams.myRadius = 0.01;\r\n visualPoint.paramsUpdated();\r\n visualPoint.setVisible(true);\r\n\r\n let unusedVisualPoint = (this._myDetectionRuntimeParams.myTeleportPositionValid) ? this._myInvalidVisualPoint : this._myValidVisualPoint;\r\n unusedVisualPoint.setVisible(false);\r\n\r\n if (this._myDetectionRuntimeParams.myTeleportPositionValid) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n upDifference = nextPosition.vec3_sub(this._myTeleportRuntimeParams.myTeleportPosition, upDifference).vec3_componentAlongAxis(playerUp, upDifference);\r\n let upDistance = upDifference.vec3_length();\r\n if (upDistance >= this._myTeleportParams.myVisualizerParams.myTeleportParableMinVerticalDistanceToShowVerticalLine) {\r\n let lineLength = Math.min(upDistance - this._myTeleportParams.myVisualizerParams.myTeleportParableMinVerticalDistanceToShowVerticalLine, this._myTeleportParams.myVisualizerParams.myTeleportParableShowVerticalLineMaxLength);\r\n\r\n let visualArrowParams = this._myValidVisualVerticalArrow.getParams();\r\n\r\n visualArrowParams.myStart.vec3_copy(nextPosition);\r\n visualArrowParams.myDirection = playerUp.vec3_negate(visualArrowParams.myDirection);\r\n visualArrowParams.myLength = lineLength;\r\n visualArrowParams.myThickness = 0.005;\r\n\r\n visualArrowParams.myArrowThickness = visualPointParams.myRadius;\r\n visualArrowParams.myArrowLength = visualArrowParams.myArrowThickness * 3.5 / 1.5;\r\n\r\n this._myValidVisualVerticalArrow.paramsUpdated();\r\n this._myValidVisualVerticalArrow.setVisible(true);\r\n } else {\r\n this._myValidVisualVerticalArrow.setVisible(false);\r\n }\r\n\r\n this._showTeleportParablePosition(dt);\r\n } else {\r\n this._myValidVisualTeleportPositionTorus.setVisible(false);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(false);\r\n\r\n this._myValidVisualVerticalArrow.setVisible(false);\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject != null) {\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(false);\r\n }\r\n\r\n this._myVisualTeleportTransformQuatReset = true;\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionVisualizer.prototype._showTeleportParablePosition = function () {\r\n let playerUp = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n let feetRotationQuat = quat_create();\r\n\r\n let parableFirstPosition = vec3_create();\r\n let parableSecondPosition = vec3_create();\r\n let parableDirection = vec3_create();\r\n\r\n let visualPosition = vec3_create();\r\n let visualForward = vec3_create();\r\n let visualRotationQuat = quat_create();\r\n\r\n let currentVisualTeleportTransformQuat = quat2_create();\r\n let currentVisualTeleportPosition = vec3_create();\r\n let currentVisualTeleportRotationQuat = quat_create();\r\n let differenceRotationQuat = quat_create();\r\n\r\n return function _showTeleportParablePosition(dt) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n feetRotationQuat = feetTransformQuat.quat2_getRotationQuat(feetRotationQuat);\r\n feetRotationQuat = feetRotationQuat.quat_rotateAxis(this._myTeleportRuntimeParams.myTeleportRotationOnUp, playerUp, feetRotationQuat);\r\n\r\n visualPosition = this._myTeleportRuntimeParams.myTeleportPosition.vec3_add(playerUp.vec3_scale(this._myTeleportParams.myVisualizerParams.myTeleportParablePositionUpOffset, visualPosition), visualPosition);\r\n\r\n visualForward = feetRotationQuat.quat_getForward(visualForward);\r\n\r\n if (!this._myTeleportParams.myVisualizerParams.myTeleportPositionObjectRotateWithHead) {\r\n parableFirstPosition = this._myDetectionRuntimeParams.myParable.getPosition(0, parableFirstPosition);\r\n parableSecondPosition = this._myDetectionRuntimeParams.myParable.getPosition(1, parableSecondPosition);\r\n parableDirection = parableSecondPosition.vec3_sub(parableFirstPosition, parableDirection).vec3_removeComponentAlongAxis(playerUp, parableDirection);\r\n if (parableDirection.vec3_length() > Math.PP_EPSILON) {\r\n visualForward = parableDirection.vec3_normalize(visualForward);\r\n }\r\n }\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportParablePositionVisualAlignOnSurface) {\r\n visualRotationQuat.quat_setUp(this._myDetectionRuntimeParams.myTeleportSurfaceNormal, visualForward);\r\n } else {\r\n visualRotationQuat.quat_setUp(playerUp, visualForward);\r\n }\r\n\r\n this._myVisualTeleportTransformQuat.quat2_setPositionRotationQuat(visualPosition, visualRotationQuat);\r\n\r\n if (this._myVisualTeleportTransformQuatReset || !this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionLerpEnabled) {\r\n this._myVisualTeleportPositionObject.pp_setTransformQuat(this._myVisualTeleportTransformQuat);\r\n this._myVisualTeleportTransformQuatReset = false;\r\n } else {\r\n currentVisualTeleportTransformQuat = this._myVisualTeleportPositionObject.pp_getTransformQuat(currentVisualTeleportTransformQuat);\r\n currentVisualTeleportPosition = currentVisualTeleportTransformQuat.quat2_getPosition(currentVisualTeleportPosition);\r\n currentVisualTeleportRotationQuat = currentVisualTeleportTransformQuat.quat2_getRotationQuat(currentVisualTeleportRotationQuat);\r\n currentVisualTeleportRotationQuat.quat_rotationToQuat(visualRotationQuat, differenceRotationQuat);\r\n\r\n let positionDistance = currentVisualTeleportPosition.vec3_distance(visualPosition);\r\n let rotationAngleDistance = differenceRotationQuat.quat_getAngle();\r\n\r\n if ((!this._myVisualTeleportTransformPositionLerping || positionDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToResetLerp) &&\r\n (positionDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToLerp ||\r\n positionDistance > this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxDistanceToLerp)) {\r\n this._myVisualTeleportTransformPositionLerping = false;\r\n currentVisualTeleportPosition.vec3_copy(visualPosition);\r\n } else {\r\n this._myVisualTeleportTransformPositionLerping = true;\r\n\r\n let interpolationFactor = this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionLerpFactor * dt;\r\n if (positionDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinDistanceToCloseLerpFactor) {\r\n interpolationFactor = this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionCloseLerpFactor * dt;\r\n }\r\n currentVisualTeleportPosition.vec3_lerp(visualPosition, interpolationFactor, currentVisualTeleportPosition);\r\n }\r\n\r\n if ((!this._myVisualTeleportTransformRotationLerping || rotationAngleDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToResetLerp) &&\r\n (rotationAngleDistance < this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMinAngleDistanceToLerp ||\r\n positionDistance > this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionMaxAngleDistanceToLerp)) {\r\n this._myVisualTeleportTransformRotationLerping = false;\r\n currentVisualTeleportRotationQuat.quat_copy(visualRotationQuat);\r\n } else {\r\n let interpolationFactor = this._myTeleportParams.myVisualizerParams.myVisualTeleportPositionLerpFactor * dt;\r\n\r\n this._myVisualTeleportTransformRotationLerping = true;\r\n currentVisualTeleportRotationQuat.quat_slerp(visualRotationQuat, interpolationFactor, currentVisualTeleportRotationQuat);\r\n }\r\n\r\n currentVisualTeleportTransformQuat.quat2_setPositionRotationQuat(currentVisualTeleportPosition, currentVisualTeleportRotationQuat);\r\n this._myVisualTeleportPositionObject.pp_setTransformQuat(currentVisualTeleportTransformQuat);\r\n }\r\n\r\n {\r\n let visualParams = this._myValidVisualTeleportPositionTorus.getParams();\r\n visualParams.myRadius = 0.175;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n this._myValidVisualTeleportPositionTorus.paramsUpdated();\r\n }\r\n\r\n {\r\n let visualParams = this._myValidVisualTeleportPositionTorusInner.getParams();\r\n visualParams.myRadius = 0.04;\r\n visualParams.mySegmentsAmount = 24;\r\n visualParams.mySegmentThickness = 0.02;\r\n\r\n //visualParams.myRadius = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Inner Radius\");\r\n //visualParams.mySegmentsAmount = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Segments\");\r\n //visualParams.mySegmentThickness = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Torus Thickness\");\r\n\r\n this._myValidVisualTeleportPositionTorusInner.paramsUpdated();\r\n }\r\n\r\n if (this._myTeleportParams.myVisualizerParams.myTeleportPositionObject == null) {\r\n this._myValidVisualTeleportPositionTorus.setVisible(true);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(true);\r\n } else {\r\n this._myValidVisualTeleportPositionTorus.setVisible(false);\r\n this._myValidVisualTeleportPositionTorusInner.setVisible(false);\r\n this._myTeleportParams.myVisualizerParams.myTeleportPositionObject.pp_setActive(true);\r\n }\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugShowEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, this._myTeleportRuntimeParams.myTeleportPosition, vec4_create(0, 0, 1, 1), 0.02);\r\n }\r\n };\r\n}();", "import { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class PlayerLocomotionTeleportParable {\r\n\r\n constructor() {\r\n this._myStartPosition = vec3_create();\r\n\r\n this._myForward = vec3_create();\r\n this._myUp = vec3_create();\r\n\r\n this._mySpeed = 0;\r\n this._myGravity = 0;\r\n this._myStepLength = 0;\r\n }\r\n\r\n setStartPosition(startPosition) {\r\n this._myStartPosition.vec3_copy(startPosition);\r\n }\r\n\r\n setForward(forward) {\r\n this._myForward.vec3_copy(forward);\r\n }\r\n\r\n setUp(up) {\r\n this._myUp.vec3_copy(up);\r\n }\r\n\r\n setSpeed(speed) {\r\n this._mySpeed = speed;\r\n }\r\n\r\n setGravity(gravity) {\r\n this._myGravity = gravity;\r\n }\r\n\r\n setStepLength(stepLength) {\r\n this._myStepLength = stepLength;\r\n }\r\n\r\n getPosition(positionIndex, outPosition = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getDistance(positionIndex) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPositionIndexByDistance(distance) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getPositionByDistance(distance, outPosition = vec3_create()) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getDistanceOverFlatDistance(flatDistance, maxParableDistance) {\r\n // Implemented outside class definition\r\n }\r\n\r\n getFlatDistanceOverDistance(distance) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportParable.prototype.getPosition = function () {\r\n let forwardPosition = vec3_create();\r\n let upPosition = vec3_create();\r\n return function getPosition(positionIndex, outPosition = vec3_create()) {\r\n let deltaTimePerStep = this._myStepLength / this._mySpeed;\r\n\r\n let elapsedTime = deltaTimePerStep * positionIndex;\r\n\r\n forwardPosition = this._myForward.vec3_scale(this._mySpeed * elapsedTime, forwardPosition);\r\n forwardPosition = forwardPosition.vec3_add(this._myStartPosition, forwardPosition);\r\n\r\n upPosition = this._myUp.vec3_scale(this._myGravity * elapsedTime * elapsedTime / 2, upPosition);\r\n\r\n outPosition = forwardPosition.vec3_add(upPosition, outPosition);\r\n\r\n return outPosition;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getDistance = function () {\r\n let currentPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n return function getDistance(positionIndex) {\r\n let distance = 0;\r\n prevPosition.vec3_copy(this._myStartPosition);\r\n\r\n for (let i = 1; i <= positionIndex; i++) {\r\n currentPosition = this.getPosition(i, currentPosition);\r\n distance += currentPosition.vec3_distance(prevPosition);\r\n\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return distance;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getPositionIndexByDistance = function () {\r\n let currentPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n return function getPositionIndexByDistance(distance) {\r\n let currentDistance = 0;\r\n let currentIndex = 0;\r\n prevPosition = this.getPosition(currentIndex, prevPosition);\r\n\r\n while (currentDistance < distance) {\r\n currentPosition = this.getPosition(currentIndex + 1, currentPosition);\r\n currentDistance += currentPosition.vec3_distance(prevPosition);\r\n currentIndex++;\r\n\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return Math.max(0, currentIndex - 1);\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getPositionByDistance = function () {\r\n let currentPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n let prevToCurrent = vec3_create();\r\n return function getPositionByDistance(distance, outPosition = vec3_create()) {\r\n let currentDistance = 0;\r\n let currentIndex = 0;\r\n let found = false;\r\n\r\n prevPosition = this.getPosition(currentIndex, prevPosition);\r\n while (!found) {\r\n currentPosition = this.getPosition(currentIndex + 1, currentPosition);\r\n currentDistance += currentPosition.vec3_distance(prevPosition);\r\n currentIndex++;\r\n\r\n if (currentDistance > distance) {\r\n let lengthToRemove = currentDistance - distance;\r\n prevToCurrent = currentPosition.vec3_sub(prevPosition, prevToCurrent);\r\n let lengthToAdd = prevToCurrent.vec3_length() - lengthToRemove;\r\n prevToCurrent.vec3_normalize(prevToCurrent);\r\n\r\n outPosition = prevPosition.vec3_add(prevToCurrent.vec3_scale(lengthToAdd, outPosition), outPosition);\r\n found = true;\r\n }\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return outPosition;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getDistanceOverFlatDistance = function () {\r\n let currentPosition = vec3_create();\r\n let flatCurrentPosition = vec3_create();\r\n let flatStartPosition = vec3_create();\r\n let prevPosition = vec3_create();\r\n let prevToCurrent = vec3_create();\r\n let startToCurrentFlat = vec3_create();\r\n return function getDistanceOverFlatDistance(flatDistance, maxParableDistance) {\r\n if (flatDistance < 0.00001) {\r\n return 0;\r\n }\r\n\r\n let currentDistance = 0;\r\n let currentIndex = 0;\r\n flatStartPosition = this._myStartPosition.vec3_removeComponentAlongAxis(this._myUp, flatStartPosition);\r\n prevPosition = this.getPosition(currentIndex, prevPosition);\r\n\r\n let distanceOverFlatDistance = 0;\r\n\r\n while (currentDistance <= maxParableDistance) {\r\n currentPosition = this.getPosition(currentIndex + 1, currentPosition);\r\n currentDistance += currentPosition.vec3_distance(prevPosition);\r\n currentIndex++;\r\n\r\n flatCurrentPosition = currentPosition.vec3_removeComponentAlongAxis(this._myUp, flatCurrentPosition);\r\n startToCurrentFlat = flatCurrentPosition.vec3_sub(flatStartPosition, startToCurrentFlat);\r\n let currentFlatDistance = startToCurrentFlat.vec3_length();\r\n if (currentFlatDistance >= flatDistance) {\r\n let flatDifference = currentFlatDistance - flatDistance;\r\n prevToCurrent = currentPosition.vec3_sub(prevPosition, prevToCurrent);\r\n let angleWithFlat = prevToCurrent.vec3_angleRadians(startToCurrentFlat);\r\n let cos = Math.cos(angleWithFlat);\r\n let lengthToRemove = prevToCurrent.vec3_length();\r\n if (cos != 0) {\r\n lengthToRemove = flatDifference / Math.cos(angleWithFlat);\r\n }\r\n\r\n distanceOverFlatDistance = currentDistance - lengthToRemove;\r\n break;\r\n\r\n } else {\r\n distanceOverFlatDistance = currentDistance;\r\n }\r\n\r\n prevPosition.vec3_copy(currentPosition);\r\n }\r\n\r\n return Math.min(maxParableDistance, distanceOverFlatDistance);\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportParable.prototype.getFlatDistanceOverDistance = function () {\r\n let positionByDistance = vec3_create();\r\n let flatPositionByDistance = vec3_create();\r\n let flatStartPosition = vec3_create();\r\n return function getFlatDistanceOverDistance(distance) {\r\n positionByDistance = this.getPositionByDistance(distance, positionByDistance);\r\n\r\n flatPositionByDistance = positionByDistance.vec3_removeComponentAlongAxis(this._myUp, flatPositionByDistance);\r\n flatStartPosition = this._myStartPosition.vec3_removeComponentAlongAxis(this._myUp, flatStartPosition);\r\n\r\n return flatStartPosition.vec3_distance(flatPositionByDistance);\r\n };\r\n}();", "import { State } from \"../../../../../../cauldron/fsm/state.js\";\r\nimport { InputUtils } from \"../../../../../../input/cauldron/input_utils.js\";\r\nimport { GamepadButtonID } from \"../../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, quat_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckBridge } from \"../../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { CollisionRuntimeParams } from \"../../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\n\r\nexport class PlayerLocomotionTeleportState extends State {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super();\r\n\r\n this._myLocomotionRuntimeParams = locomotionRuntimeParams;\r\n\r\n this._myTeleportParams = teleportParams;\r\n this._myTeleportRuntimeParams = teleportRuntimeParams;\r\n\r\n this._myTeleportAsMovementFailed = false;\r\n }\r\n\r\n _checkTeleport(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams = null) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _checkTeleportAsMovement(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _teleportToPosition(teleportPosition, rotationOnUp, collisionRuntimeParams, forceTeleport = false) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportState.prototype._checkTeleport = function () {\r\n return function _checkTeleport(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams = null) {\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).teleport(teleportPosition, feetTransformQuat, this._myTeleportParams.myCollisionCheckParams, collisionRuntimeParams);\r\n if (checkTeleportCollisionRuntimeParams != null) {\r\n checkTeleportCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportState.prototype._checkTeleportAsMovement = function () {\r\n let checkTeleportMovementCollisionRuntimeParams = new CollisionRuntimeParams();\r\n let feetRotationQuat = quat_create();\r\n let feetPosition = vec3_create();\r\n let feetUp = vec3_create();\r\n let teleportFeetForward = vec3_create();\r\n let teleportFeetRotationQuat = quat_create();\r\n let teleportFeetTransformQuat = quat2_create();\r\n\r\n let currentFeetPosition = vec3_create();\r\n let fixedTeleportPosition = vec3_create();\r\n\r\n let teleportMovement = vec3_create();\r\n let extraVerticalMovement = vec3_create();\r\n let movementToTeleportPosition = vec3_create();\r\n let movementFeetTransformQuat = quat2_create();\r\n return function _checkTeleportAsMovement(teleportPosition, feetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams) {\r\n feetPosition = feetTransformQuat.quat2_getPosition(feetPosition);\r\n feetRotationQuat = feetTransformQuat.quat2_getRotationQuat(feetRotationQuat);\r\n\r\n // First try a normal teleport\r\n feetUp = feetRotationQuat.quat_getUp(feetUp);\r\n teleportFeetForward = teleportPosition.vec3_sub(feetPosition, teleportFeetForward).vec3_removeComponentAlongAxis(feetUp, teleportFeetForward);\r\n teleportFeetForward.vec3_normalize(teleportFeetForward);\r\n if (teleportFeetForward.vec3_isZero(0.00001)) {\r\n teleportFeetForward = feetRotationQuat.quat_getForward(teleportFeetForward);\r\n }\r\n\r\n teleportFeetRotationQuat.quat_setUp(feetUp, teleportFeetForward);\r\n teleportFeetTransformQuat.quat2_setPositionRotationQuat(feetPosition, teleportFeetRotationQuat);\r\n\r\n this._checkTeleport(teleportPosition, teleportFeetTransformQuat, collisionRuntimeParams, checkTeleportCollisionRuntimeParams);\r\n\r\n // If teleport is ok then we can check movement knowing we have to move toward the teleported position (which has also snapped/fixed the position)\r\n if (!collisionRuntimeParams.myTeleportCanceled) {\r\n let teleportMovementValid = false;\r\n\r\n checkTeleportMovementCollisionRuntimeParams.copy(collisionRuntimeParams);\r\n fixedTeleportPosition.vec3_copy(collisionRuntimeParams.myNewPosition);\r\n currentFeetPosition.vec3_copy(feetPosition);\r\n for (let i = 0; i < this._myTeleportParams.myTeleportAsMovementMaxSteps; i++) {\r\n teleportMovement = fixedTeleportPosition.vec3_sub(currentFeetPosition, teleportMovement);\r\n\r\n if (this._myTeleportParams.myTeleportAsMovementRemoveVerticalMovement) {\r\n teleportMovement = teleportMovement.vec3_removeComponentAlongAxis(feetUp, teleportMovement);\r\n }\r\n\r\n if (this._myTeleportParams.myTeleportAsMovementExtraVerticalMovementPerMeter != 0) {\r\n let meters = teleportMovement.vec3_length();\r\n let extraVerticalMovementValue = meters * this._myTeleportParams.myTeleportAsMovementExtraVerticalMovementPerMeter;\r\n extraVerticalMovement = feetUp.vec3_scale(extraVerticalMovementValue, extraVerticalMovement);\r\n teleportMovement = teleportMovement.vec3_add(extraVerticalMovement, teleportMovement);\r\n }\r\n\r\n movementFeetTransformQuat.quat2_setPositionRotationQuat(currentFeetPosition, feetRotationQuat);\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).move(teleportMovement, movementFeetTransformQuat, this._myTeleportParams.myCollisionCheckParams, checkTeleportMovementCollisionRuntimeParams);\r\n\r\n if (!checkTeleportMovementCollisionRuntimeParams.myHorizontalMovementCanceled && !checkTeleportMovementCollisionRuntimeParams.myVerticalMovementCanceled) {\r\n movementToTeleportPosition = fixedTeleportPosition.vec3_sub(checkTeleportMovementCollisionRuntimeParams.myNewPosition, movementToTeleportPosition);\r\n //console.error(movementToTeleportPosition.vec3_length());\r\n if (movementToTeleportPosition.vec3_length() < this._myTeleportParams.myTeleportAsMovementMaxDistanceFromTeleportPosition + 0.00001) {\r\n teleportMovementValid = true;\r\n break;\r\n } else {\r\n teleportMovement.vec3_copy(movementToTeleportPosition);\r\n currentFeetPosition.vec3_copy(checkTeleportMovementCollisionRuntimeParams.myNewPosition);\r\n }\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (!teleportMovementValid) {\r\n collisionRuntimeParams.myTeleportCanceled = true;\r\n }\r\n\r\n this._myTeleportAsMovementFailed = !teleportMovementValid;\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportState.prototype._teleportToPosition = function () {\r\n let playerUp = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n let newFeetTransformQuat = quat2_create();\r\n let newFeetRotationQuat = quat_create();\r\n let teleportRotation = quat_create();\r\n return function _teleportToPosition(teleportPosition, rotationOnUp, collisionRuntimeParams, forceTeleport = false) {\r\n this._myTeleportAsMovementFailed = false;\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n newFeetRotationQuat = feetTransformQuat.quat2_getRotationQuat(newFeetRotationQuat);\r\n if (rotationOnUp != 0) {\r\n newFeetRotationQuat = newFeetRotationQuat.quat_rotateAxis(rotationOnUp, playerUp, newFeetRotationQuat);\r\n }\r\n\r\n newFeetTransformQuat.quat2_setPositionRotationQuat(teleportPosition, newFeetRotationQuat);\r\n\r\n if (Globals.getGamepads(this._myTeleportParams.myEngine)[InputUtils.getOppositeHandedness(this._myTeleportParams.myHandedness)].getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressed()) {\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).positionCheck(true, newFeetTransformQuat, this._myTeleportParams.myCollisionCheckParams, collisionRuntimeParams);\r\n\r\n this._myTeleportParams.myPlayerHeadManager.teleportPositionFeet(teleportPosition);\r\n if (rotationOnUp != 0) {\r\n teleportRotation.quat_fromAxis(rotationOnUp, playerUp);\r\n this._myTeleportParams.myPlayerHeadManager.rotateFeetQuat(teleportRotation);\r\n }\r\n } else {\r\n // Should teleport then rotate\r\n this._myTeleportParams.myPlayerTransformManager.teleportTransformQuat(newFeetTransformQuat, collisionRuntimeParams, forceTeleport);\r\n }\r\n };\r\n}();", "import { PhysicsLayerFlags } from \"../../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { RaycastParams, RaycastResults } from \"../../../../../../cauldron/physics/physics_raycast_params.js\";\r\nimport { PhysicsUtils } from \"../../../../../../cauldron/physics/physics_utils.js\";\r\nimport { XRUtils } from \"../../../../../../cauldron/utils/xr_utils.js\";\r\nimport { MouseButtonID } from \"../../../../../../input/cauldron/mouse.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, quat_create, vec3_create, vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionRuntimeParams } from \"../../../../character_controller/collision/legacy/collision_check/collision_params.js\";\r\nimport { PlayerLocomotionTeleportDetectionVisualizer } from \"./player_locomotion_teleport_detection_visualizer.js\";\r\nimport { PlayerLocomotionTeleportParable } from \"./player_locomotion_teleport_parable.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportDetectionParams {\r\n\r\n constructor() {\r\n this.myMaxDistance = 0;\r\n this.myMaxHeightDifference = 0;\r\n this.myGroundAngleToIgnoreUpward = 0;\r\n // This can be used to make it so the teleport position is valid on a steeper angle when going downward by setting the higher value on the collision params\r\n // and then use this to specify that when going upward u want it to be less, basically to be able to teleprot down a cliff even on a steep ground\r\n // that would not let you go up\r\n this.myMustBeOnGround = false;\r\n\r\n this.myTeleportBlockLayerFlags = new PhysicsLayerFlags();\r\n this.myTeleportFloorLayerFlags = new PhysicsLayerFlags();\r\n\r\n this.myParableForwardMinAngleToBeValidUp = 30;\r\n this.myParableForwardMinAngleToBeValidDown = 0;\r\n\r\n this.myTeleportParableStartReferenceObject = null;\r\n\r\n // Used if reference is null\r\n this.myTeleportParableStartPositionOffset = vec3_create(0, -0.04, 0.08);\r\n this.myTeleportParableStartRotationOffset = vec3_create(30, 0, 0);\r\n\r\n this.myTeleportParableSpeed = 15;\r\n this.myTeleportParableGravity = -30;\r\n this.myTeleportParableStepLength = 0.25;\r\n\r\n this.myRotationOnUpMinStickIntensity = 0.5;\r\n this.myRotationOnUpEnabled = false;\r\n\r\n this.myTeleportFeetPositionMustBeVisible = false;\r\n this.myTeleportHeadPositionMustBeVisible = false;\r\n this.myTeleportHeadOrFeetPositionMustBeVisible = false; // Wins over previous parameters\r\n\r\n this.myVisibilityCheckRadius = 0.05;\r\n this.myVisibilityCheckFeetPositionVerticalOffset = 0.1;\r\n this.myVisibilityCheckDistanceFromHitThreshold = 0.1;\r\n this.myVisibilityCheckCircumferenceSliceAmount = 6;\r\n this.myVisibilityCheckCircumferenceStepAmount = 1;\r\n this.myVisibilityCheckCircumferenceRotationPerStep = 30;\r\n this.myVisibilityBlockLayerFlags = new PhysicsLayerFlags();\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportDetectionRuntimeParams {\r\n\r\n constructor() {\r\n this.myTeleportDetectionValid = false;\r\n this.myTeleportPositionValid = false;\r\n this.myTeleportSurfaceNormal = vec3_create();\r\n\r\n this.myParable = new PlayerLocomotionTeleportParable();\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportDetectionState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myDetectionRuntimeParams = new PlayerLocomotionTeleportDetectionRuntimeParams();\r\n\r\n this._myVisualizer = new PlayerLocomotionTeleportDetectionVisualizer(this._myTeleportParams, this._myTeleportRuntimeParams, this._myDetectionRuntimeParams);\r\n\r\n this._myTeleportRotationOnUpNext = 0;\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Parable Steps\", this._myTeleportParams.myDetectionParams.myTeleportParableStepLength, 1, 3, 0.01, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Parable Gravity\", this._myTeleportParams.myDetectionParams.myTeleportParableGravity, 10, 3, undefined, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Parable Speed\", this._myTeleportParams.myDetectionParams.myTeleportParableSpeed, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Teleport Max Distance\", this._myTeleportParams.myDetectionParams.myMaxDistance, 10, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n this._myLocomotionRuntimeParams.myIsTeleportDetecting = true;\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = 0;\r\n this._myTeleportRotationOnUpNext = 0;\r\n\r\n this._myDetectionRuntimeParams.myParable.setSpeed(this._myTeleportParams.myDetectionParams.myTeleportParableSpeed);\r\n this._myDetectionRuntimeParams.myParable.setGravity(this._myTeleportParams.myDetectionParams.myTeleportParableGravity);\r\n this._myDetectionRuntimeParams.myParable.setStepLength(this._myTeleportParams.myDetectionParams.myTeleportParableStepLength);\r\n\r\n this._myTeleportParams.myPlayerTransformManager.resetReal();\r\n\r\n this._myVisualizer.start();\r\n }\r\n\r\n end() {\r\n this._myLocomotionRuntimeParams.myIsTeleportDetecting = false;\r\n this._myVisualizer.end();\r\n }\r\n\r\n update(dt, fsm) {\r\n this._detectTeleportPosition();\r\n\r\n this._myVisualizer.update(dt);\r\n\r\n if (this._confirmTeleport()) {\r\n if (this._myDetectionRuntimeParams.myTeleportPositionValid) {\r\n fsm.perform(\"teleport\");\r\n } else {\r\n fsm.perform(\"cancel\");\r\n }\r\n } else if (this._cancelTeleport()) {\r\n fsm.perform(\"cancel\");\r\n }\r\n }\r\n\r\n _confirmTeleport() {\r\n let confirmTeleport = false;\r\n\r\n if (!XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n if (Globals.getMouse(this._myTeleportParams.myEngine).isInsideView()) {\r\n confirmTeleport = Globals.getMouse(this._myTeleportParams.myEngine).isButtonPressEnd(MouseButtonID.MIDDLE);\r\n }\r\n } else {\r\n let axes = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n if (axes.vec2_length() <= this._myTeleportParams.myStickIdleThreshold) {\r\n confirmTeleport = true;\r\n }\r\n }\r\n\r\n return confirmTeleport;\r\n }\r\n\r\n _cancelTeleport() {\r\n let cancelTeleport = false;\r\n\r\n if (!XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n cancelTeleport = Globals.getMouse(this._myTeleportParams.myEngine).isButtonPressEnd(MouseButtonID.RIGHT) || !Globals.getMouse(this._myTeleportParams.myEngine).isInsideView();\r\n } else {\r\n cancelTeleport = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed();\r\n }\r\n\r\n return cancelTeleport;\r\n }\r\n\r\n _detectTeleportPosition() {\r\n //this._myDetectionRuntimeParams.myParable.setSpeed(Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Parable Speed\"));\r\n //this._myDetectionRuntimeParams.myParable.setGravity(Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Parable Gravity\"));\r\n //this._myDetectionRuntimeParams.myParable.setStepLength(Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Parable Steps\"));\r\n //this._myTeleportParams.myDetectionParams.myMaxDistance = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Teleport Max Distance\");\r\n\r\n if (XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n this._detectTeleportRotationVR();\r\n this._detectTeleportPositionVR();\r\n } else {\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = 0;\r\n this._myTeleportRotationOnUpNext = 0;\r\n this._detectTeleportPositionNonVR();\r\n }\r\n }\r\n\r\n _isTeleportPositionValid(teleportPosition, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isTeleportHitValid(hit, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _detectTeleportRotationVR(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myVisualizer.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportPositionNonVR = function () {\r\n let mousePosition = vec3_create();\r\n let mouseDirection = vec3_create();\r\n\r\n let playerUp = vec3_create();\r\n return function _detectTeleportPositionNonVR(dt) {\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = false;\r\n this._myDetectionRuntimeParams.myTeleportDetectionValid = true;\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n Globals.getMouse(this._myTeleportParams.myEngine).getOriginWorld(mousePosition);\r\n Globals.getMouse(this._myTeleportParams.myEngine).getDirectionWorld(mouseDirection);\r\n\r\n this._detectTeleportPositionParable(mousePosition, mouseDirection, playerUp);\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportPositionVR = function () {\r\n let teleportStartTransformLocal = quat2_create();\r\n let teleportStartTransformWorld = quat2_create();\r\n\r\n let teleportStartPosition = vec3_create();\r\n let teleportDirection = vec3_create();\r\n\r\n let playerUp = vec3_create();\r\n let playerUpNegate = vec3_create();\r\n return function _detectTeleportPositionVR(dt) {\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = false;\r\n this._myDetectionRuntimeParams.myTeleportDetectionValid = false;\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportParableStartReferenceObject == null) {\r\n let referenceObject = Globals.getPlayerObjects(this._myTeleportParams.myEngine).myHands[this._myTeleportParams.myHandedness];\r\n\r\n teleportStartTransformLocal.quat2_setPositionRotationDegrees(this._myTeleportParams.myDetectionParams.myTeleportParableStartPositionOffset, this._myTeleportParams.myDetectionParams.myTeleportParableStartRotationOffset);\r\n teleportStartTransformWorld = referenceObject.pp_convertTransformObjectToWorldQuat(teleportStartTransformLocal, teleportStartTransformWorld);\r\n } else {\r\n let referenceObject = this._myTeleportParams.myDetectionParams.myTeleportParableStartReferenceObject;\r\n\r\n referenceObject.pp_getTransformQuat(teleportStartTransformWorld);\r\n }\r\n\r\n teleportStartPosition = teleportStartTransformWorld.quat2_getPosition(teleportStartPosition);\r\n teleportDirection = teleportStartTransformWorld.quat2_getForward(teleportDirection);\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n playerUpNegate = playerUp.vec3_negate(playerUpNegate);\r\n\r\n if (teleportDirection.vec3_angle(playerUp) >= this._myTeleportParams.myDetectionParams.myParableForwardMinAngleToBeValidUp &&\r\n teleportDirection.vec3_angle(playerUpNegate) >= this._myTeleportParams.myDetectionParams.myParableForwardMinAngleToBeValidDown\r\n ) {\r\n this._myDetectionRuntimeParams.myTeleportDetectionValid = true;\r\n }\r\n\r\n if (this._myDetectionRuntimeParams.myTeleportDetectionValid) {\r\n this._detectTeleportPositionParable(teleportStartPosition, teleportDirection, playerUp);\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportPositionParable = function () {\r\n let parablePosition = vec3_create();\r\n let prevParablePosition = vec3_create();\r\n let parableFinalPosition = vec3_create();\r\n\r\n let raycastParams = new RaycastParams();\r\n let raycastResult = new RaycastResults();\r\n\r\n let parableHitPosition = vec3_create();\r\n let parableHitNormal = vec3_create();\r\n\r\n let verticalHitOrigin = vec3_create();\r\n let verticalHitDirection = vec3_create();\r\n\r\n let flatTeleportHorizontalHitNormal = vec3_create();\r\n let flatParableHitNormal = vec3_create();\r\n let flatParableDirectionNegate = vec3_create();\r\n\r\n let teleportCollisionRuntimeParams = new CollisionRuntimeParams();\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function _detectTeleportPositionParable(startPosition, direction, up) {\r\n this._myDetectionRuntimeParams.myParable.setStartPosition(startPosition);\r\n this._myDetectionRuntimeParams.myParable.setForward(direction);\r\n this._myDetectionRuntimeParams.myParable.setUp(up);\r\n\r\n let currentPositionIndex = 1;\r\n let positionFlatDistance = 0;\r\n let positionParableDistance = 0;\r\n prevParablePosition = this._myDetectionRuntimeParams.myParable.getPosition(currentPositionIndex - 1, prevParablePosition);\r\n\r\n raycastParams.myIgnoreHitsInsideCollision = true;\r\n raycastParams.myBlockLayerFlags.setMask(this._myTeleportParams.myDetectionParams.myTeleportBlockLayerFlags.getMask());\r\n raycastParams.myPhysics = Globals.getPhysics(this._myTeleportParams.myEngine);\r\n\r\n raycastParams.myObjectsToIgnore.pp_copy(this._myTeleportParams.myCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n for (let objectToIgnore of this._myTeleportParams.myCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n raycastParams.myObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n let maxParableDistance = this._myTeleportParams.myDetectionParams.myMaxDistance * 2;\r\n\r\n do {\r\n parablePosition = this._myDetectionRuntimeParams.myParable.getPosition(currentPositionIndex, parablePosition);\r\n\r\n raycastParams.myOrigin.vec3_copy(prevParablePosition);\r\n raycastParams.myDirection = parablePosition.vec3_sub(prevParablePosition, raycastParams.myDirection);\r\n raycastParams.myDistance = raycastParams.myDirection.vec3_length();\r\n raycastParams.myDirection.vec3_normalize(raycastParams.myDirection);\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n prevParablePosition.vec3_copy(parablePosition);\r\n positionFlatDistance = parablePosition.vec3_sub(startPosition, parablePosition).vec3_removeComponentAlongAxis(up, parablePosition).vec3_length();\r\n positionParableDistance = this._myDetectionRuntimeParams.myParable.getDistance(currentPositionIndex);\r\n\r\n currentPositionIndex++;\r\n } while (\r\n positionFlatDistance <= this._myTeleportParams.myDetectionParams.myMaxDistance &&\r\n positionParableDistance <= maxParableDistance &&\r\n !raycastResult.isColliding());\r\n\r\n let maxParableDistanceOverFlatDistance = this._myDetectionRuntimeParams.myParable.getDistanceOverFlatDistance(this._myTeleportParams.myDetectionParams.myMaxDistance, maxParableDistance);\r\n\r\n let fixedPositionParableDistance = positionParableDistance;\r\n if (positionParableDistance > maxParableDistanceOverFlatDistance || positionParableDistance > maxParableDistance) {\r\n fixedPositionParableDistance = Math.min(maxParableDistanceOverFlatDistance, maxParableDistance);\r\n }\r\n\r\n this._myDetectionRuntimeParams.myParableDistance = fixedPositionParableDistance;\r\n\r\n let hitCollisionValid = false;\r\n\r\n let bottomCheckMaxLength = 100;\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n let hitParableDistance = positionParableDistance - (raycastParams.myDistance - hit.myDistance);\r\n\r\n if (hitParableDistance <= fixedPositionParableDistance) {\r\n hitCollisionValid = true;\r\n\r\n this._myDetectionRuntimeParams.myParableDistance = hitParableDistance;\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n\r\n parableHitPosition.vec3_copy(hit.myPosition);\r\n parableHitNormal.vec3_copy(hit.myNormal);\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n verticalHitOrigin = hit.myPosition.vec3_add(hit.myNormal.vec3_scale(0.01, verticalHitOrigin), verticalHitOrigin);\r\n verticalHitDirection = up.vec3_negate(verticalHitDirection);\r\n\r\n raycastParams.myOrigin.vec3_copy(verticalHitOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid &&\r\n !this._myTeleportAsMovementFailed &&\r\n teleportCollisionRuntimeParams.myTeleportCanceled &&\r\n teleportCollisionRuntimeParams.myIsCollidingHorizontally) {\r\n flatTeleportHorizontalHitNormal = teleportCollisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, flatTeleportHorizontalHitNormal);\r\n\r\n if (!flatTeleportHorizontalHitNormal.vec3_isZero(0.00001)) {\r\n flatTeleportHorizontalHitNormal.vec3_normalize(flatTeleportHorizontalHitNormal);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatTeleportHorizontalHitNormal.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n } else {\r\n //console.error(\"2\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n flatParableHitNormal = parableHitNormal.vec3_removeComponentAlongAxis(up, flatParableHitNormal);\r\n if (!flatParableHitNormal.vec3_isZero(0.00001)) {\r\n flatParableHitNormal.vec3_normalize(flatParableHitNormal);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatParableHitNormal.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n } else {\r\n //console.error(\"3\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n flatParableDirectionNegate = direction.vec3_negate(flatParableDirectionNegate).vec3_removeComponentAlongAxis(up, flatParableDirectionNegate).vec3_normalize(flatParableDirectionNegate);\r\n\r\n if (!flatParableDirectionNegate.vec3_isZero(0.00001)) {\r\n flatParableDirectionNegate.vec3_normalize(flatParableDirectionNegate);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatParableDirectionNegate.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n } else {\r\n //console.error(\"4\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n }\r\n } else {\r\n //console.error(\"1\", this._myDetectionRuntimeParams.myTeleportPositionValid, this._myTeleportAsMovementFailed);\r\n }\r\n }\r\n }\r\n\r\n //console.error(\"-\");\r\n\r\n if (!hitCollisionValid) {\r\n parableFinalPosition = this._myDetectionRuntimeParams.myParable.getPositionByDistance(this._myDetectionRuntimeParams.myParableDistance, parableFinalPosition);\r\n\r\n verticalHitOrigin.vec3_copy(parableFinalPosition);\r\n verticalHitDirection = up.vec3_negate(verticalHitDirection);\r\n\r\n raycastParams.myOrigin.vec3_copy(verticalHitOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid &&\r\n !this._myTeleportAsMovementFailed &&\r\n teleportCollisionRuntimeParams.myTeleportCanceled &&\r\n teleportCollisionRuntimeParams.myIsCollidingHorizontally) {\r\n flatTeleportHorizontalHitNormal = teleportCollisionRuntimeParams.myHorizontalCollisionHit.myNormal.vec3_removeComponentAlongAxis(up, flatTeleportHorizontalHitNormal);\r\n\r\n if (!flatTeleportHorizontalHitNormal.vec3_isZero(0.00001)) {\r\n flatTeleportHorizontalHitNormal.vec3_normalize(flatTeleportHorizontalHitNormal);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatTeleportHorizontalHitNormal.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n }\r\n\r\n if (!this._myDetectionRuntimeParams.myTeleportPositionValid && !this._myTeleportAsMovementFailed) {\r\n flatParableDirectionNegate = direction.vec3_negate(flatParableDirectionNegate).vec3_removeComponentAlongAxis(up, flatParableDirectionNegate).vec3_normalize(flatParableDirectionNegate);\r\n\r\n if (!flatParableDirectionNegate.vec3_isZero(0.00001)) {\r\n flatParableDirectionNegate.vec3_normalize(flatParableDirectionNegate);\r\n\r\n let backwardStep = this._myTeleportParams.myCollisionCheckParams.myRadius * 1.1;\r\n raycastParams.myOrigin = verticalHitOrigin.vec3_add(flatParableDirectionNegate.vec3_scale(backwardStep, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection.vec3_copy(verticalHitDirection);\r\n raycastParams.myDistance = bottomCheckMaxLength;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugDetectEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawPoint(0, raycastParams.myOrigin, vec4_create(0, 0, 0, 1), 0.03);\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n teleportCollisionRuntimeParams.reset();\r\n this._myDetectionRuntimeParams.myTeleportPositionValid = this._isTeleportHitValid(hit, this._myTeleportRuntimeParams.myTeleportRotationOnUp, teleportCollisionRuntimeParams);\r\n\r\n this._myTeleportRuntimeParams.myTeleportPosition.vec3_copy(teleportCollisionRuntimeParams.myNewPosition);\r\n this._myDetectionRuntimeParams.myTeleportSurfaceNormal.vec3_copy(teleportCollisionRuntimeParams.myGroundNormal);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._detectTeleportRotationVR = function () {\r\n let axesVec3 = vec3_create();\r\n let axesForward = vec3_create(0, 0, 1);\r\n let axesUp = vec3_create(0, 1, 0);\r\n return function _detectTeleportRotationVR(dt) {\r\n let axes = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n\r\n if (axes.vec2_length() > this._myTeleportParams.myDetectionParams.myRotationOnUpMinStickIntensity) {\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = this._myTeleportRotationOnUpNext;\r\n\r\n axesVec3.vec3_set(axes[0], 0, axes[1]);\r\n this._myTeleportRotationOnUpNext = axesVec3.vec3_angleSigned(axesForward, axesUp);\r\n }\r\n\r\n if (!this._myTeleportParams.myDetectionParams.myRotationOnUpEnabled) {\r\n this._myTeleportRuntimeParams.myTeleportRotationOnUp = 0;\r\n this._myTeleportRotationOnUpNext = 0;\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isTeleportHitValid = function () {\r\n let raycastParams = new RaycastParams();\r\n let raycastResult = new RaycastResults();\r\n\r\n let playerUp = vec3_create();\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function _isTeleportHitValid(hit, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n let isValid = false;\r\n\r\n this._myTeleportAsMovementFailed = false;\r\n\r\n if (hit.isValid() && !hit.myInsideCollision) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n // #TODO is hitValidEvenWhenNotConcordant needed or was it a debug that should be removed?\r\n let hitValidEvenWhenNotConcordant = true;\r\n if (hit.myNormal.vec3_isConcordant(playerUp) || hitValidEvenWhenNotConcordant) {\r\n // #TODO When the flags on the physx will be available just check that the hit object physx has the floor flag\r\n\r\n raycastParams.myIgnoreHitsInsideCollision = true;\r\n raycastParams.myBlockLayerFlags.setMask(this._myTeleportParams.myDetectionParams.myTeleportFloorLayerFlags.getMask());\r\n raycastParams.myPhysics = Globals.getPhysics(this._myTeleportParams.myEngine);\r\n\r\n raycastParams.myObjectsToIgnore.pp_copy(this._myTeleportParams.myCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n for (let objectToIgnore of this._myTeleportParams.myCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n raycastParams.myObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n let distanceToCheck = 0.01;\r\n raycastParams.myOrigin = hit.myPosition.vec3_add(hit.myNormal.vec3_scale(distanceToCheck, raycastParams.myOrigin), raycastParams.myOrigin);\r\n raycastParams.myDirection = hit.myNormal.vec3_negate(raycastParams.myDirection);\r\n raycastParams.myDistance = distanceToCheck * 1.25;\r\n raycastParams.myDirection.vec3_normalize(raycastParams.myDirection);\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (raycastResult.isColliding()) {\r\n let floorHit = raycastResult.myHits.pp_first();\r\n if (floorHit.myObject.pp_equals(hit.myObject)) {\r\n isValid = this._isTeleportPositionValid(hit.myPosition, rotationOnUp, checkTeleportCollisionRuntimeParams);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return isValid;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isTeleportPositionValid = function () {\r\n let playerUp = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n let feetRotationQuat = quat_create();\r\n let feetPosition = vec3_create();\r\n let differenceOnUpVector = vec3_create();\r\n let teleportCheckCollisionRuntimeParams = new CollisionRuntimeParams();\r\n return function _isTeleportPositionValid(teleportPosition, rotationOnUp, checkTeleportCollisionRuntimeParams) {\r\n let isValid = false;\r\n\r\n let positionVisible = this._isTeleportPositionVisible(teleportPosition);\r\n\r\n if (positionVisible) {\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n feetPosition = feetTransformQuat.quat2_getPosition(feetPosition);\r\n if (rotationOnUp != 0) {\r\n feetRotationQuat = feetTransformQuat.quat2_getRotationQuat(feetRotationQuat);\r\n feetRotationQuat = feetRotationQuat.quat_rotateAxis(rotationOnUp, playerUp, feetRotationQuat);\r\n feetTransformQuat.quat2_setPositionRotationQuat(feetPosition, feetRotationQuat);\r\n }\r\n\r\n let differenceOnUp = teleportPosition.vec3_sub(feetPosition, differenceOnUpVector).vec3_componentAlongAxis(playerUp, differenceOnUpVector).vec3_length();\r\n\r\n if (differenceOnUp < this._myTeleportParams.myDetectionParams.myMaxHeightDifference + 0.00001) {\r\n let teleportCheckValid = false;\r\n teleportCheckCollisionRuntimeParams.copy(this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n\r\n if (!this._myTeleportParams.myPerformTeleportAsMovement) {\r\n this._checkTeleport(teleportPosition, feetTransformQuat, teleportCheckCollisionRuntimeParams, checkTeleportCollisionRuntimeParams);\r\n } else {\r\n this._checkTeleportAsMovement(teleportPosition, feetTransformQuat, teleportCheckCollisionRuntimeParams, checkTeleportCollisionRuntimeParams);\r\n }\r\n\r\n if (!teleportCheckCollisionRuntimeParams.myTeleportCanceled) {\r\n teleportCheckValid = true;\r\n }\r\n\r\n if (teleportCheckValid && (!this._myTeleportParams.myDetectionParams.myMustBeOnGround || teleportCheckCollisionRuntimeParams.myIsOnGround)) {\r\n\r\n let groundAngleValid = true;\r\n let isTeleportingUpward = teleportCheckCollisionRuntimeParams.myNewPosition.vec3_isFartherAlongAxis(feetPosition, playerUp);\r\n if (isTeleportingUpward) {\r\n groundAngleValid = teleportCheckCollisionRuntimeParams.myGroundAngle < this._myTeleportParams.myDetectionParams.myGroundAngleToIgnoreUpward + 0.0001;\r\n }\r\n\r\n if (groundAngleValid) {\r\n isValid = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return isValid;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isTeleportPositionVisible = function () {\r\n let playerUp = vec3_create();\r\n\r\n let offsetFeetTeleportPosition = vec3_create();\r\n let headTeleportPosition = vec3_create();\r\n return function _isTeleportPositionVisible(teleportPosition) {\r\n let isVisible = true;\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportFeetPositionMustBeVisible ||\r\n this._myTeleportParams.myDetectionParams.myTeleportHeadPositionMustBeVisible ||\r\n this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible) {\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n let isHeadVisible = false;\r\n let isFeetVisible = false;\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible ||\r\n this._myTeleportParams.myDetectionParams.myTeleportHeadPositionMustBeVisible) {\r\n let headheight = this._myTeleportParams.myPlayerHeadManager.getHeightHead();\r\n headTeleportPosition = teleportPosition.vec3_add(playerUp.vec3_scale(headheight, headTeleportPosition), headTeleportPosition);\r\n isHeadVisible = this._isPositionVisible(headTeleportPosition);\r\n } else {\r\n isHeadVisible = true;\r\n }\r\n\r\n if (this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible && isHeadVisible) {\r\n isFeetVisible = true;\r\n } else {\r\n if (this._myTeleportParams.myDetectionParams.myTeleportHeadOrFeetPositionMustBeVisible ||\r\n (this._myTeleportParams.myDetectionParams.myTeleportFeetPositionMustBeVisible && isHeadVisible)) {\r\n offsetFeetTeleportPosition = teleportPosition.vec3_add(playerUp.vec3_scale(this._myTeleportParams.myDetectionParams.myVisibilityCheckFeetPositionVerticalOffset, offsetFeetTeleportPosition), offsetFeetTeleportPosition);\r\n isFeetVisible = this._isPositionVisible(offsetFeetTeleportPosition);\r\n } else {\r\n isFeetVisible = true;\r\n }\r\n }\r\n\r\n isVisible = isHeadVisible && isFeetVisible;\r\n }\r\n\r\n return isVisible;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._isPositionVisible = function () {\r\n let playerUp = vec3_create();\r\n let standardUp = vec3_create(0, 1, 0);\r\n let standardUpNegated = vec3_create(0, -1, 0);\r\n let standardForward = vec3_create(0, 0, 1);\r\n let referenceUp = vec3_create();\r\n let headPosition = vec3_create();\r\n let direction = vec3_create();\r\n let fixedRight = vec3_create();\r\n let fixedForward = vec3_create();\r\n let fixedUp = vec3_create();\r\n let raycastEndPosition = vec3_create();\r\n\r\n let raycastParams = new RaycastParams();\r\n let raycastResult = new RaycastResults();\r\n\r\n let objectsEqualCallback = (first, second) => first.pp_equals(second);\r\n return function _isPositionVisible(position) {\r\n let isVisible = true;\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n let currentHead = this._myTeleportParams.myPlayerHeadManager.getHead();\r\n headPosition = currentHead.pp_getPosition(headPosition);\r\n direction = position.vec3_sub(headPosition, direction).vec3_normalize(direction);\r\n\r\n referenceUp.vec3_copy(standardUp);\r\n if (direction.vec3_angle(standardUp) < 0.0001 || direction.vec3_angle(standardUpNegated) < 0.0001) {\r\n referenceUp.vec3_copy(standardForward);\r\n }\r\n\r\n fixedRight = direction.vec3_cross(referenceUp, fixedRight);\r\n fixedUp = fixedRight.vec3_cross(direction, fixedUp);\r\n fixedForward.vec3_copy(direction);\r\n\r\n fixedUp.vec3_normalize(fixedUp);\r\n fixedForward.vec3_normalize(fixedForward);\r\n\r\n let checkPositions = this._getVisibilityCheckPositions(headPosition, fixedUp, fixedForward);\r\n\r\n let distance = headPosition.vec3_distance(position);\r\n\r\n for (let checkPosition of checkPositions) {\r\n raycastParams.myOrigin.vec3_copy(checkPosition);\r\n raycastParams.myDirection.vec3_copy(fixedForward);\r\n raycastParams.myDistance = distance;\r\n raycastParams.myPhysics = Globals.getPhysics(this._myTeleportParams.myEngine);\r\n\r\n raycastParams.myBlockLayerFlags.setMask(this._myTeleportParams.myDetectionParams.myVisibilityBlockLayerFlags.getMask());\r\n\r\n raycastParams.myObjectsToIgnore.pp_copy(this._myTeleportParams.myCollisionCheckParams.myHorizontalObjectsToIgnore);\r\n for (let objectToIgnore of this._myTeleportParams.myCollisionCheckParams.myVerticalObjectsToIgnore) {\r\n raycastParams.myObjectsToIgnore.pp_pushUnique(objectToIgnore, objectsEqualCallback);\r\n }\r\n\r\n raycastParams.myIgnoreHitsInsideCollision = true;\r\n\r\n raycastResult = PhysicsUtils.raycast(raycastParams, raycastResult);\r\n\r\n if (this._myTeleportParams.myDebugEnabled && this._myTeleportParams.myDebugVisibilityEnabled && Globals.isDebugEnabled(this._myTeleportParams.myEngine)) {\r\n Globals.getDebugVisualManager(this._myTeleportParams.myEngine).drawRaycast(0, raycastResult);\r\n }\r\n\r\n if (raycastResult.isColliding()) {\r\n raycastEndPosition = checkPosition.vec3_add(fixedForward.vec3_scale(distance, raycastEndPosition), raycastEndPosition);\r\n let hit = raycastResult.myHits.pp_first();\r\n\r\n if (this._myTeleportParams.myDetectionParams.myVisibilityCheckDistanceFromHitThreshold == 0 || hit.myPosition.vec3_distance(raycastEndPosition) > this._myTeleportParams.myDetectionParams.myVisibilityCheckDistanceFromHitThreshold + 0.00001) {\r\n isVisible = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return isVisible;\r\n };\r\n}();\r\n\r\nPlayerLocomotionTeleportDetectionState.prototype._getVisibilityCheckPositions = function () {\r\n let checkPositions = [];\r\n let cachedCheckPositions = [];\r\n let currentCachedCheckPositionIndex = 0;\r\n let _localGetCachedCheckPosition = function () {\r\n let item = null;\r\n while (cachedCheckPositions.length <= currentCachedCheckPositionIndex) {\r\n cachedCheckPositions.push(vec3_create());\r\n }\r\n\r\n item = cachedCheckPositions[currentCachedCheckPositionIndex];\r\n currentCachedCheckPositionIndex++;\r\n return item;\r\n };\r\n\r\n let currentDirection = vec3_create();\r\n return function _getVisibilityCheckPositions(position, up, forward) {\r\n checkPositions.length = 0;\r\n currentCachedCheckPositionIndex = 0;\r\n\r\n {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n tempCheckPosition.vec3_copy(position);\r\n checkPositions.push(tempCheckPosition);\r\n }\r\n\r\n let radiusStep = this._myTeleportParams.myDetectionParams.myVisibilityCheckRadius / this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceStepAmount;\r\n let sliceAngle = 360 / this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceSliceAmount;\r\n let currentStepRotation = 0;\r\n for (let i = 0; i < this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceStepAmount; i++) {\r\n let currentRadius = radiusStep * (i + 1);\r\n\r\n currentDirection = up.vec3_rotateAxis(currentStepRotation, forward, currentDirection);\r\n for (let j = 0; j < this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceSliceAmount; j++) {\r\n let tempCheckPosition = _localGetCachedCheckPosition();\r\n let sliceDirection = currentDirection.vec3_rotateAxis(sliceAngle * j, forward, tempCheckPosition);\r\n checkPositions.push(position.vec3_add(sliceDirection.vec3_scale(currentRadius, sliceDirection), sliceDirection));\r\n }\r\n\r\n currentStepRotation += this._myTeleportParams.myDetectionParams.myVisibilityCheckCircumferenceRotationPerStep;\r\n }\r\n\r\n return checkPositions;\r\n };\r\n}();", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../../../cauldron/cauldron/timer.js\";\r\nimport { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { TimerState } from \"../../../../../../cauldron/fsm/states/timer_state.js\";\r\nimport { vec4_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { NumberOverFactor } from \"../../../../../cauldron/cauldron/number_over_factor.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportTeleportBlinkState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myBlinkSphere = Globals.getPlayerObjects(this._myTeleportParams.myEngine).myCauldron.pp_addObject();\r\n this._myBlinkSphereMeshComponent = this._myBlinkSphere.pp_addComponent(MeshComponent);\r\n this._myBlinkSphereMeshComponent.mesh = Globals.getDefaultMeshes(this._myTeleportParams.myEngine).myInvertedSphere;\r\n this._myBlinkSphereMeshComponent.material = Globals.getDefaultMaterials(this._myTeleportParams.myEngine).myFlatTransparentNoDepth.clone();\r\n this._myBlinkSphereMaterialColor = vec4_create(\r\n this._myTeleportParams.myTeleportParams.myBlinkSphereColor[0] / 255,\r\n this._myTeleportParams.myTeleportParams.myBlinkSphereColor[1] / 255,\r\n this._myTeleportParams.myTeleportParams.myBlinkSphereColor[2] / 255,\r\n 0);\r\n\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n\r\n this._myBlinkSphere.pp_resetTransformLocal();\r\n this._myBlinkSphere.pp_setScaleLocal(this._myTeleportParams.myTeleportParams.myBlinkSphereScale);\r\n this._myBlinkSphere.pp_setActive(false);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport Teleport Blink\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\");\r\n\r\n this._myFSM.addState(\"fade_out\", this._fadeOutUpdate.bind(this));\r\n this._myFSM.addState(\"wait\", new TimerState(this._myTeleportParams.myTeleportParams.myBlinkWaitSeconds, \"done\"));\r\n this._myFSM.addState(\"fade_in\", this._fadeInUpdate.bind(this));\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"fade_out\", \"teleport\", this._startFadeOut.bind(this));\r\n this._myFSM.addTransition(\"fade_out\", \"wait\", \"done\", this._teleport.bind(this));\r\n this._myFSM.addTransition(\"wait\", \"fade_in\", \"done\", this._startFadeIn.bind(this));\r\n this._myFSM.addTransition(\"fade_in\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"fade_out\", \"idle\", \"stop\", this._stop.bind(this, true));\r\n this._myFSM.addTransition(\"wait\", \"idle\", \"stop\", this._stop.bind(this, false));\r\n this._myFSM.addTransition(\"fade_in\", \"idle\", \"stop\", this._stop.bind(this, false));\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n\r\n this._myFadeInTimer = new Timer(this._myTeleportParams.myTeleportParams.myBlinkFadeInSeconds);\r\n this._myFadeOutTimer = new Timer(this._myTeleportParams.myTeleportParams.myBlinkFadeOutSeconds);\r\n this._myFadeOutAlphaOverTime = new NumberOverFactor(0, 1, 0, 1);\r\n this._myFadeInAlphaOverTime = new NumberOverFactor(1, 0, 0, 1);\r\n }\r\n\r\n start(fsm) {\r\n this._myParentFSM = fsm;\r\n\r\n this._myFSM.perform(\"teleport\");\r\n }\r\n\r\n end() {\r\n this._myBlinkSphere.pp_setActive(false);\r\n this._myBlinkSphere.pp_setParent(Globals.getPlayerObjects(this._myTeleportParams.myEngine).myCauldron, false);\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n update(dt, fsm) {\r\n this._myBlinkSphere.pp_setParent(this._myTeleportParams.myPlayerHeadManager.getHead(), false);\r\n this._myBlinkSphere.pp_resetTransformLocal();\r\n\r\n this._myFSM.update(dt);\r\n }\r\n\r\n _startFadeOut() {\r\n this._myFadeOutTimer.start();\r\n this._myBlinkSphereMaterialColor[3] = 0;\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n this._myBlinkSphere.pp_setActive(true);\r\n\r\n this._myLocomotionRuntimeParams.myIsTeleporting = true;\r\n }\r\n\r\n _startFadeIn() {\r\n this._myFadeInTimer.start();\r\n }\r\n\r\n _fadeOutUpdate(dt, fsm) {\r\n this._myFadeOutTimer.update(dt);\r\n\r\n let alpha = this._myFadeOutAlphaOverTime.get(this._myFadeOutTimer.getPercentage());\r\n this._myBlinkSphereMaterialColor[3] = alpha;\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n\r\n if (this._myFadeOutTimer.isDone()) {\r\n fsm.perform(\"done\");\r\n }\r\n }\r\n\r\n _fadeInUpdate(dt, fsm) {\r\n this._myFadeInTimer.update(dt);\r\n\r\n let alpha = this._myFadeInAlphaOverTime.get(this._myFadeInTimer.getPercentage());\r\n this._myBlinkSphereMaterialColor[3] = alpha;\r\n this._myBlinkSphereMeshComponent.material.color = this._myBlinkSphereMaterialColor;\r\n\r\n if (this._myFadeInTimer.isDone()) {\r\n fsm.perform(\"done\");\r\n }\r\n }\r\n\r\n _teleportDone() {\r\n this._myBlinkSphere.pp_setActive(false);\r\n\r\n this._myParentFSM.performDelayed(\"done\");\r\n }\r\n\r\n _stop(teleport) {\r\n this._myBlinkSphere.pp_setActive(false);\r\n\r\n if (teleport) {\r\n this._teleport();\r\n }\r\n }\r\n\r\n _teleport() {\r\n this._myLocomotionRuntimeParams.myIsTeleporting = false;\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = true;\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myTeleportRuntimeParams.myTeleportRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n }\r\n}", "import { Timer } from \"../../../../../../cauldron/cauldron/timer.js\";\r\nimport { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportTeleportShiftState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport Teleport Shift\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\");\r\n\r\n this._myFSM.addState(\"shifting\", this._shiftingUpdate.bind(this));\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"shifting\", \"teleport\", this._startShifting.bind(this));\r\n this._myFSM.addTransition(\"shifting\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"shifting\", \"idle\", \"stop\", this._stop.bind(this));\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n\r\n this._myShiftMovementTimer = new Timer(this._myTeleportParams.myTeleportParams.myShiftMovementSeconds);\r\n this._myShiftRotateTimer = new Timer(this._myTeleportParams.myTeleportParams.myShiftRotateSeconds, false);\r\n\r\n this._myFeetStartPosition = vec3_create();\r\n\r\n this._myCurrentRotationOnUp = 0;\r\n this._myStartRotationOnUp = 0;\r\n\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Shift Movement Seconds\", this._myTeleportParams.myTeleportParams.myShiftMovementSeconds, 0.5, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Shift Rotate Seconds\", this._myTeleportParams.myTeleportParams.myShiftRotateSeconds, 0.5, 3, 0, undefined, undefined, this._myTeleportParams.myEngine));\r\n //Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).add(new EasyTuneNumber(\"Shift Rotate Start Percentage\", this._myTeleportParams.myTeleportParams.myShiftRotateStartAfterMovementPercentage, 0.5, 3, 0, 1, undefined, this._myTeleportParams.myEngine));\r\n }\r\n\r\n start(fsm) {\r\n this._myParentFSM = fsm;\r\n\r\n this._myFSM.perform(\"teleport\");\r\n }\r\n\r\n end() {\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n update(dt, fsm) {\r\n //this._myTeleportParams.myTeleportParams.myShiftMovementSeconds = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Shift Movement Seconds\");\r\n //this._myTeleportParams.myTeleportParams.myShiftRotateSeconds = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Shift Rotate Seconds\");\r\n //this._myTeleportParams.myTeleportParams.myShiftRotateStartAfterMovementPercentage = Globals.getEasyTuneVariables(this._myTeleportParams.myEngine).get(\"Shift Rotate Start Percentage\");\r\n\r\n this._myFSM.update(dt);\r\n }\r\n\r\n _startShifting() {\r\n this._myTeleportParams.myPlayerTransformManager.getParams().mySyncPositionDisabled = true;\r\n\r\n this._myLocomotionRuntimeParams.myIsTeleporting = true;\r\n this._myFeetStartPosition = this._myTeleportParams.myPlayerHeadManager.getPositionFeet(this._myFeetStartPosition);\r\n\r\n this._myShiftMovementTimer.start(this._myTeleportParams.myTeleportParams.myShiftMovementSeconds);\r\n\r\n if (this._myTeleportParams.myTeleportParams.myShiftMovementSecondsMultiplierOverDistanceFunction) {\r\n let distance = this._myTeleportRuntimeParams.myTeleportPosition.vec3_distance(this._myFeetStartPosition);\r\n let multiplier = this._myTeleportParams.myTeleportParams.myShiftMovementSecondsMultiplierOverDistanceFunction(distance);\r\n this._myShiftMovementTimer.start(this._myTeleportParams.myTeleportParams.myShiftMovementSeconds * multiplier);\r\n }\r\n\r\n this._myShiftRotateTimer.reset(this._myTeleportParams.myTeleportParams.myShiftRotateSeconds);\r\n if (this._myTeleportParams.myTeleportParams.myShiftRotateSecondsMultiplierOverAngleFunction) {\r\n let multiplier = this._myTeleportParams.myTeleportParams.myShiftRotateSecondsMultiplierOverAngleFunction(Math.abs(this._myTeleportRuntimeParams.myTeleportRotationOnUp));\r\n this._myShiftRotateTimer.reset(this._myTeleportParams.myTeleportParams.myShiftRotateSeconds * multiplier);\r\n }\r\n\r\n this._myStartRotationOnUp = this._myTeleportRuntimeParams.myTeleportRotationOnUp;\r\n this._myCurrentRotationOnUp = 0;\r\n }\r\n\r\n _stop() {\r\n this._teleport();\r\n }\r\n\r\n _teleportDone() {\r\n this._teleport();\r\n this._myParentFSM.performDelayed(\"done\");\r\n }\r\n\r\n _teleport() {\r\n this._myTeleportParams.myPlayerTransformManager.getParams().mySyncPositionDisabled = false;\r\n this._myLocomotionRuntimeParams.myIsTeleporting = false;\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = true;\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myStartRotationOnUp - this._myCurrentRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n }\r\n\r\n _shiftingUpdate(dt, fsm) {\r\n // Implemented outside class definition\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleportTeleportShiftState.prototype._shiftingUpdate = function () {\r\n let movementToTeleportFeet = vec3_create();\r\n let newFeetPosition = vec3_create();\r\n return function _shiftingUpdate(dt, fsm) {\r\n this._myShiftMovementTimer.update(dt);\r\n this._myShiftRotateTimer.update(dt);\r\n\r\n if (this._myShiftRotateTimer.isDone() && this._myShiftMovementTimer.isDone()) {\r\n fsm.perform(\"done\");\r\n } else {\r\n newFeetPosition.vec3_copy(this._myTeleportRuntimeParams.myTeleportPosition);\r\n\r\n if (this._myShiftMovementTimer.isStarted() || this._myShiftMovementTimer.isJustDone()) {\r\n\r\n let interpolationFactor = this._myTeleportParams.myTeleportParams.myShiftMovementEasingFunction(this._myShiftMovementTimer.getPercentage());\r\n\r\n if (interpolationFactor >= this._myTeleportParams.myTeleportParams.myShiftRotateStartAfterMovementPercentage && !this._myShiftRotateTimer.isStarted()) {\r\n this._myShiftRotateTimer.start();\r\n this._myShiftRotateTimer.update(dt);\r\n }\r\n\r\n movementToTeleportFeet = this._myTeleportRuntimeParams.myTeleportPosition.vec3_sub(this._myFeetStartPosition, movementToTeleportFeet);\r\n movementToTeleportFeet.vec3_scale(interpolationFactor, movementToTeleportFeet);\r\n newFeetPosition = this._myFeetStartPosition.vec3_add(movementToTeleportFeet, newFeetPosition);\r\n }\r\n\r\n let rotationOnUp = 0;\r\n if (this._myShiftRotateTimer.isRunning() || this._myShiftRotateTimer.isJustDone()) {\r\n let interpolationFactor = this._myTeleportParams.myTeleportParams.myShiftRotateEasingFunction(this._myShiftRotateTimer.getPercentage());\r\n\r\n let newCurrentRotationOnUp = this._myStartRotationOnUp * interpolationFactor;\r\n rotationOnUp = newCurrentRotationOnUp - this._myCurrentRotationOnUp;\r\n\r\n this._myCurrentRotationOnUp = newCurrentRotationOnUp;\r\n }\r\n\r\n this._teleportToPosition(newFeetPosition, rotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams, true);\r\n }\r\n };\r\n}();", "import { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { EasingFunction } from \"../../../../../../cauldron/utils/math_utils.js\";\r\nimport { vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { PlayerLocomotionTeleportState } from \"./player_locomotion_teleport_state.js\";\r\nimport { PlayerLocomotionTeleportTeleportBlinkState } from \"./player_locomotion_teleport_teleport_blink_state.js\";\r\nimport { PlayerLocomotionTeleportTeleportShiftState } from \"./player_locomotion_teleport_teleport_shift_state.js\";\r\n\r\nexport let PlayerLocomotionTeleportTeleportType = {\r\n INSTANT: 0,\r\n BLINK: 1,\r\n SHIFT: 2\r\n};\r\n\r\nexport class PlayerLocomotionTeleportTeleportParams {\r\n\r\n constructor() {\r\n this.myTeleportType = PlayerLocomotionTeleportTeleportType.SHIFT;\r\n\r\n this.myBlinkFadeOutSeconds = 0.1;\r\n this.myBlinkFadeInSeconds = 0.1;\r\n this.myBlinkWaitSeconds = 0.1;\r\n this.myBlinkSphereColor = vec3_create();\r\n this.myBlinkSphereScale = 0.1;\r\n\r\n this.myShiftMovementSeconds = 0.15;\r\n this.myShiftMovementSecondsMultiplierOverDistanceFunction = null;\r\n this.myShiftMovementEasingFunction = EasingFunction.easeInOut;\r\n\r\n this.myShiftRotateSeconds = 1;\r\n this.myShiftRotateSecondsMultiplierOverAngleFunction = null;\r\n this.myShiftRotateEasingFunction = EasingFunction.easeOut;\r\n this.myShiftRotateStartAfterMovementPercentage = 0.7;\r\n\r\n this.myShiftRotateSecondsMultiplierOverAngleFunction = function (angle) {\r\n return EasingFunction.easeOut(angle / 180);\r\n };\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportTeleportState extends PlayerLocomotionTeleportState {\r\n\r\n constructor(teleportParams, teleportRuntimeParams, locomotionRuntimeParams) {\r\n super(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport Teleport\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\");\r\n\r\n this._myBlinkState = new PlayerLocomotionTeleportTeleportBlinkState(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n this._myShiftState = new PlayerLocomotionTeleportTeleportShiftState(teleportParams, teleportRuntimeParams, locomotionRuntimeParams);\r\n\r\n this._myFSM.addState(\"instant_teleport\", this._instantUpdate.bind(this));\r\n this._myFSM.addState(\"blink_teleport\", this._myBlinkState);\r\n this._myFSM.addState(\"shift_teleport\", this._myShiftState);\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"instant_teleport\", \"start_instant\");\r\n this._myFSM.addTransition(\"idle\", \"blink_teleport\", \"start_blink\");\r\n this._myFSM.addTransition(\"idle\", \"shift_teleport\", \"start_shift\");\r\n\r\n this._myFSM.addTransition(\"instant_teleport\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n this._myFSM.addTransition(\"blink_teleport\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n this._myFSM.addTransition(\"shift_teleport\", \"idle\", \"done\", this._teleportDone.bind(this));\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"instant_teleport\", \"idle\", \"stop\", this._instantStop.bind(this));\r\n this._myFSM.addTransition(\"blink_teleport\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"shift_teleport\", \"idle\", \"stop\");\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n }\r\n\r\n start(fsm) {\r\n this._myParentFSM = fsm;\r\n\r\n switch (this._myTeleportParams.myTeleportParams.myTeleportType) {\r\n case PlayerLocomotionTeleportTeleportType.INSTANT:\r\n this._myFSM.perform(\"start_instant\");\r\n break;\r\n case PlayerLocomotionTeleportTeleportType.BLINK:\r\n this._myFSM.perform(\"start_blink\");\r\n break;\r\n case PlayerLocomotionTeleportTeleportType.SHIFT:\r\n this._myFSM.perform(\"start_shift\");\r\n break;\r\n default:\r\n this._myFSM.perform(\"start_instant\");\r\n }\r\n }\r\n\r\n end() {\r\n }\r\n\r\n update(dt, fsm) {\r\n this._myFSM.update(dt);\r\n }\r\n\r\n completeTeleport() {\r\n this._myFSM.perform(\"stop\");\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myTeleportRuntimeParams.myTeleportRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n }\r\n\r\n _instantUpdate(dt, fsm) {\r\n this._teleportToPosition(this._myTeleportRuntimeParams.myTeleportPosition, this._myTeleportRuntimeParams.myTeleportRotationOnUp, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = true;\r\n fsm.perform(\"done\");\r\n }\r\n\r\n _instantStop(fsm) {\r\n this._instantUpdate(0, fsm);\r\n }\r\n\r\n _teleportDone() {\r\n this._myTeleportParams.myPlayerTransformManager.resetReal();\r\n\r\n this._myParentFSM.performDelayed(\"done\");\r\n }\r\n}", "import { FSM } from \"../../../../../../cauldron/fsm/fsm.js\";\r\nimport { XRUtils } from \"../../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../../input/cauldron/input_types.js\";\r\nimport { MouseButtonID } from \"../../../../../../input/cauldron/mouse.js\";\r\nimport { GamepadAxesID } from \"../../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../../pp/globals.js\";\r\nimport { CollisionCheckBridge } from \"../../../../character_controller/collision/collision_check_bridge.js\";\r\nimport { PlayerLocomotionMovement } from \"../player_locomotion_movement.js\";\r\nimport { PlayerLocomotionTeleportDetectionParams, PlayerLocomotionTeleportDetectionState } from \"./player_locomotion_teleport_detection_state.js\";\r\nimport { PlayerLocomotionTeleportDetectionVisualizerParams } from \"./player_locomotion_teleport_detection_visualizer.js\";\r\nimport { PlayerLocomotionTeleportTeleportParams, PlayerLocomotionTeleportTeleportState } from \"./player_locomotion_teleport_teleport_state.js\";\r\n\r\nexport class PlayerLocomotionTeleportParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n\r\n this.myCollisionCheckParams = null;\r\n\r\n this.myDetectionParams = new PlayerLocomotionTeleportDetectionParams();\r\n this.myVisualizerParams = new PlayerLocomotionTeleportDetectionVisualizerParams();\r\n this.myTeleportParams = new PlayerLocomotionTeleportTeleportParams();\r\n\r\n this.myHandedness = Handedness.LEFT;\r\n\r\n this.myPerformTeleportAsMovement = false;\r\n this.myTeleportAsMovementMaxDistanceFromTeleportPosition = 0.001;\r\n this.myTeleportAsMovementMaxSteps = 2;\r\n // When checking teleport as movement u may need to move more times to get to the position due to snap and gravity\r\n // This specifies how many movement u can try to get to the teleport position\r\n\r\n this.myTeleportAsMovementRemoveVerticalMovement = true;\r\n // This can be used to remove the vertical movement from the difference from the current and teleport position so that u can apply just\r\n // the gravity as vertical movement\r\n this.myTeleportAsMovementExtraVerticalMovementPerMeter = 1; // This simulate the gravity for the teleport movement\r\n\r\n this.myStickIdleThreshold = 0.1;\r\n\r\n this.myAdjustPositionEveryFrame = false;\r\n this.myGravityAcceleration = 0;\r\n this.myMaxGravitySpeed = 0;\r\n\r\n this.myEngine = engine;\r\n\r\n this.myDebugEnabled = false;\r\n this.myDebugDetectEnabled = false;\r\n this.myDebugShowEnabled = false;\r\n this.myDebugVisibilityEnabled = false;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleportRuntimeParams {\r\n\r\n constructor() {\r\n this.myTeleportPosition = vec3_create();\r\n this.myTeleportRotationOnUp = 0;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionTeleport extends PlayerLocomotionMovement {\r\n\r\n constructor(teleportParams, locomotionRuntimeParams) {\r\n super(locomotionRuntimeParams);\r\n\r\n this._myTeleportParams = teleportParams;\r\n this._myTeleportRuntimeParams = new PlayerLocomotionTeleportRuntimeParams();\r\n\r\n this._myStickIdleCharge = true;\r\n\r\n this._myDetectionState = new PlayerLocomotionTeleportDetectionState(this._myTeleportParams, this._myTeleportRuntimeParams, this._myLocomotionRuntimeParams);\r\n this._myTeleportState = new PlayerLocomotionTeleportTeleportState(this._myTeleportParams, this._myTeleportRuntimeParams, this._myLocomotionRuntimeParams);\r\n\r\n this._myFSM = new FSM();\r\n //this._myFSM.setLogEnabled(true, \"Locomotion Teleport\");\r\n\r\n this._myFSM.addState(\"init\");\r\n this._myFSM.addState(\"idle\", this._idleUpdate.bind(this));\r\n this._myFSM.addState(\"detect\", this._myDetectionState);\r\n this._myFSM.addState(\"teleport\", this._myTeleportState);\r\n\r\n this._myFSM.addTransition(\"init\", \"idle\", \"start\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"detect\", \"detect\");\r\n this._myFSM.addTransition(\"detect\", \"teleport\", \"teleport\");\r\n this._myFSM.addTransition(\"detect\", \"idle\", \"cancel\");\r\n this._myFSM.addTransition(\"teleport\", \"idle\", \"done\");\r\n\r\n this._myFSM.addTransition(\"idle\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"detect\", \"idle\", \"stop\");\r\n this._myFSM.addTransition(\"teleport\", \"idle\", \"stop\", this._completeTeleport.bind(this));\r\n\r\n this._myFSM.init(\"init\");\r\n this._myFSM.perform(\"start\");\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n start() {\r\n }\r\n\r\n stop() {\r\n this._myFSM.perform(\"stop\");\r\n }\r\n\r\n canStop() {\r\n return this._myFSM.isInState(\"idle\");\r\n }\r\n\r\n isTeleporting() {\r\n return this._myFSM.isInState(\"teleport\");\r\n }\r\n\r\n getParams() {\r\n return this._myTeleportParams;\r\n }\r\n\r\n getTeleportRuntimeParams() {\r\n return this._myTeleportRuntimeParams;\r\n }\r\n\r\n update(dt) {\r\n this._myLocomotionRuntimeParams.myTeleportJustPerformed = false;\r\n\r\n this._myFSM.update(dt);\r\n\r\n if (!this._myLocomotionRuntimeParams.myIsTeleporting && (this._myTeleportParams.myAdjustPositionEveryFrame || this._myTeleportParams.myGravityAcceleration != 0)) {\r\n this._applyGravity(dt);\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n }\r\n }\r\n\r\n _idleUpdate(dt) {\r\n if (this._startDetecting()) {\r\n this._myFSM.perform(\"detect\");\r\n }\r\n }\r\n\r\n _startDetecting() {\r\n let startDetecting = false;\r\n\r\n if (!XRUtils.isSessionActive(this._myTeleportParams.myEngine)) {\r\n startDetecting = Globals.getMouse(this._myTeleportParams.myEngine).isButtonPressStart(MouseButtonID.MIDDLE) &&\r\n Globals.getMouse(this._myTeleportParams.myEngine).isTargetingRenderCanvas();\r\n } else {\r\n let axes = Globals.getGamepads(this._myTeleportParams.myEngine)[this._myTeleportParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n\r\n if (axes.vec2_length() <= this._myTeleportParams.myStickIdleThreshold) {\r\n this._myStickIdleCharge = true;\r\n }\r\n\r\n if (this._myStickIdleCharge && axes[1] >= 0.75) {\r\n this._myStickIdleCharge = false;\r\n startDetecting = true;\r\n }\r\n }\r\n\r\n return startDetecting;\r\n }\r\n\r\n _completeTeleport() {\r\n this._myTeleportState.completeTeleport();\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myDetectionState.destroy();\r\n\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionTeleport.prototype._applyGravity = function () {\r\n let playerUp = vec3_create();\r\n let gravityMovement = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n return function _applyGravity(dt) {\r\n // If gravity is zero it's still important to move to remain snapped and gather proper surface data even when not teleporting\r\n\r\n playerUp = this._myTeleportParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n gravityMovement.vec3_zero();\r\n if (!this._myLocomotionRuntimeParams.myIsFlying && !this._myLocomotionRuntimeParams.myIsTeleporting) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed += this._myTeleportParams.myGravityAcceleration * dt;\r\n\r\n if (Math.abs(this._myLocomotionRuntimeParams.myGravitySpeed) > Math.abs(this._myTeleportParams.myMaxGravitySpeed)) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = Math.pp_sign(this._myTeleportParams.myGravityAcceleration) * Math.abs(this._myTeleportParams.myMaxGravitySpeed);\r\n }\r\n\r\n gravityMovement = playerUp.vec3_scale(this._myLocomotionRuntimeParams.myGravitySpeed * dt, gravityMovement);\r\n } else {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n\r\n feetTransformQuat = this._myTeleportParams.myPlayerHeadManager.getTransformFeetQuat(feetTransformQuat);\r\n CollisionCheckBridge.getCollisionCheck(this._myTeleportParams.myEngine).move(gravityMovement, feetTransformQuat, this._myTeleportParams.myCollisionCheckParams, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n if (!this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myVerticalMovementCanceled) {\r\n this._myTeleportParams.myPlayerHeadManager.teleportPositionFeet(this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myNewPosition);\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myGravitySpeed > 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnCeiling ||\r\n this._myLocomotionRuntimeParams.myGravitySpeed < 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n };\r\n}();", "import { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { XRUtils } from \"../../../../../cauldron/utils/xr_utils.js\";\r\nimport { Handedness } from \"../../../../../input/cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../../../../input/cauldron/input_utils.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { quat2_create, vec3_create } from \"../../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { Direction2DTo3DConverter, Direction2DTo3DConverterParams } from \"../../../../cauldron/cauldron/direction_2D_to_3D_converter.js\";\r\nimport { PlayerLocomotionDirectionReferenceType } from \"./player_locomotion.js\";\r\nimport { PlayerLocomotionMovement } from \"./player_locomotion_movement.js\";\r\n\r\nexport class PlayerLocomotionSmoothParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myPlayerHeadManager = null;\r\n this.myPlayerTransformManager = null;\r\n\r\n this.myCollisionCheckParams = null;\r\n\r\n this.myMaxSpeed = 0;\r\n this.mySpeedSlowDownPercentageOnWallSlid = 1; // this is the target value for a 90 degrees slid, the more u move toward the wall the slower u go \r\n\r\n this.myMovementMinStickIntensityThreshold = 0;\r\n\r\n this.myFlyEnabled = false;\r\n this.myFlyWithButtonsEnabled = false;\r\n this.myFlyWithViewAngleEnabled = false;\r\n this.myMinAngleToFlyUpNonVR = 0;\r\n this.myMinAngleToFlyDownNonVR = 0;\r\n this.myMinAngleToFlyUpVR = 0;\r\n this.myMinAngleToFlyDownVR = 0;\r\n this.myMinAngleToFlyRight = 0;\r\n\r\n this.myGravityAcceleration = 0;\r\n this.myMaxGravitySpeed = 0;\r\n\r\n this.myVRDirectionReferenceType = PlayerLocomotionDirectionReferenceType.HEAD;\r\n this.myVRDirectionReferenceObject = null;\r\n\r\n this.myHandedness = Handedness.LEFT;\r\n\r\n this.myDebugFlyMaxSpeedMultiplier = 5;\r\n this.myMoveThroughCollisionShortcutEnabled = false;\r\n this.myMoveHeadShortcutEnabled = false;\r\n this.myTripleSpeedShortcutEnabled = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n}\r\n\r\nexport class PlayerLocomotionSmooth extends PlayerLocomotionMovement {\r\n\r\n constructor(params, locomotionRuntimeParams) {\r\n super(locomotionRuntimeParams);\r\n\r\n this._myParams = params;\r\n\r\n this._myCurrentSpeed = 0;\r\n this._myLastHorizontalMovement = vec3_create();\r\n\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n\r\n this._myStickIdleTimer = new Timer(0.25, false);\r\n\r\n let directionConverterNonVRParams = new Direction2DTo3DConverterParams(this._myParams.myEngine);\r\n directionConverterNonVRParams.myAutoUpdateFlyForward = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterNonVRParams.myAutoUpdateFlyRight = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterNonVRParams.myMinAngleToFlyForwardUp = this._myParams.myMinAngleToFlyUpNonVR;\r\n directionConverterNonVRParams.myMinAngleToFlyForwardDown = this._myParams.myMinAngleToFlyDownNonVR;\r\n directionConverterNonVRParams.myMinAngleToFlyRightUp = this._myParams.myMinAngleToFlyRight;\r\n directionConverterNonVRParams.myMinAngleToFlyRightDown = this._myParams.myMinAngleToFlyRight;\r\n directionConverterNonVRParams.myInvertForwardWhenUpsideDown = this._myParams.myDirectionInvertForwardWhenUpsideDown;\r\n\r\n let directionConverterVRParams = new Direction2DTo3DConverterParams(this._myParams.myEngine);\r\n directionConverterVRParams.myAutoUpdateFlyForward = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterVRParams.myAutoUpdateFlyRight = this._myParams.myFlyEnabled && this._myParams.myFlyWithViewAngleEnabled;\r\n directionConverterVRParams.myMinAngleToFlyForwardUp = this._myParams.myMinAngleToFlyUpVR;\r\n directionConverterVRParams.myMinAngleToFlyForwardDown = this._myParams.myMinAngleToFlyDownVR;\r\n directionConverterVRParams.myMinAngleToFlyRightUp = this._myParams.myMinAngleToFlyRight;\r\n directionConverterVRParams.myMinAngleToFlyRightDown = this._myParams.myMinAngleToFlyRight;\r\n directionConverterVRParams.myInvertForwardWhenUpsideDown = this._myParams.myDirectionInvertForwardWhenUpsideDown;\r\n\r\n this._myDirectionConverterNonVR = new Direction2DTo3DConverter(directionConverterNonVRParams);\r\n this._myDirectionConverterVR = new Direction2DTo3DConverter(directionConverterVRParams);\r\n this._myCurrentDirectionConverter = this._myDirectionConverterNonVR;\r\n\r\n this._myDebugFlyEnabled = false;\r\n\r\n this._myDestroyed = false;\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myParams.myEngine);\r\n }\r\n\r\n start() {\r\n this._myCurrentSpeed = 0;\r\n this._myLastHorizontalMovement.vec3_zero();\r\n }\r\n\r\n getParams() {\r\n return this._myParams;\r\n }\r\n\r\n getCurrentSpeed() {\r\n return this._myCurrentSpeed;\r\n }\r\n\r\n getLastHorizontalSpeed() {\r\n return this._myLastHorizontalMovement;\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n setDebugFlyEnabled(enabled) {\r\n if (this._myDebugFlyEnabled != enabled) {\r\n if (!enabled) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n this._myCurrentDirectionConverter.resetFly();\r\n }\r\n }\r\n\r\n this._myDebugFlyEnabled = enabled;\r\n }\r\n\r\n isDebugFlyEnabled() {\r\n return this._myDebugFlyEnabled;\r\n }\r\n\r\n _onXRSessionStart(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _onXRSessionEnd(session) {\r\n // Implemented outside class definition\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myParams.myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nPlayerLocomotionSmooth.prototype.update = function () {\r\n let playerUp = vec3_create();\r\n let headMovement = vec3_create();\r\n let direction = vec3_create();\r\n let directionOnUp = vec3_create();\r\n let verticalMovement = vec3_create();\r\n let feetTransformQuat = quat2_create();\r\n\r\n let directionReferenceTransformQuat = quat2_create();\r\n return function update(dt) {\r\n let debugFlyEnabled = this._myDebugFlyEnabled && Globals.isDebugEnabled(this._myParams.myEngine);\r\n\r\n this._myCurrentSpeed = 0;\r\n this._myLastHorizontalMovement.vec3_zero();\r\n\r\n playerUp = this._myParams.myPlayerHeadManager.getPlayer().pp_getUp(playerUp);\r\n\r\n headMovement.vec3_zero();\r\n\r\n let axes = Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getAxesInfo(GamepadAxesID.THUMBSTICK).getAxes();\r\n axes[0] = Math.abs(axes[0]) > this._myParams.myMovementMinStickIntensityThreshold ? axes[0] : 0;\r\n axes[1] = Math.abs(axes[1]) > this._myParams.myMovementMinStickIntensityThreshold ? axes[1] : 0;\r\n\r\n let isManuallyMoving = false;\r\n let maxSpeed = this._myParams.myMaxSpeed;\r\n if (debugFlyEnabled) {\r\n maxSpeed = maxSpeed * this._myParams.myDebugFlyMaxSpeedMultiplier;\r\n }\r\n\r\n if ((this._myParams.myTripleSpeedShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine)) || debugFlyEnabled) {\r\n if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.SELECT).isPressed()) {\r\n maxSpeed *= 3;\r\n }\r\n }\r\n\r\n if (debugFlyEnabled && Globals.getGamepads(this._myParams.myEngine)[InputUtils.getOppositeHandedness(this._myParams.myHandedness)].getButtonInfo(GamepadButtonID.SELECT).isPressed()) {\r\n maxSpeed = this._myParams.myMaxSpeed;\r\n }\r\n\r\n if (!axes.vec2_isZero()) {\r\n this._myStickIdleTimer.start();\r\n\r\n direction = this._myCurrentDirectionConverter.convertTransformQuat(axes, this._myDirectionReference.pp_getTransformQuat(directionReferenceTransformQuat), playerUp, direction);\r\n\r\n if (!direction.vec3_isZero()) {\r\n this._myLocomotionRuntimeParams.myIsFlying = this._myLocomotionRuntimeParams.myIsFlying || direction.vec3_componentAlongAxis(playerUp, directionOnUp).vec3_length() > 0.000001;\r\n if (!this._myLocomotionRuntimeParams.myIsFlying) {\r\n direction = direction.vec3_removeComponentAlongAxis(playerUp, direction);\r\n }\r\n\r\n let movementIntensity = axes.vec2_length();\r\n this._myCurrentSpeed = Math.pp_lerp(0, maxSpeed, movementIntensity);\r\n\r\n if (this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsSliding && this._myParams.mySpeedSlowDownPercentageOnWallSlid != 1) {\r\n let slowPercentage = this._myParams.mySpeedSlowDownPercentageOnWallSlid;\r\n\r\n let slidStrength = Math.pp_mapToRange(Math.abs(this._myLocomotionRuntimeParams.myCollisionRuntimeParams.mySlidingMovementAngle), 0, 90, 0, 1);\r\n slowPercentage = Math.pp_lerp(1, slowPercentage, slidStrength);\r\n\r\n this._myCurrentSpeed = this._myCurrentSpeed * slowPercentage;\r\n }\r\n\r\n headMovement = direction.vec3_scale(this._myCurrentSpeed * dt, headMovement);\r\n\r\n isManuallyMoving = true;\r\n }\r\n } else {\r\n if (this._myStickIdleTimer.isRunning()) {\r\n this._myStickIdleTimer.update(dt);\r\n if (this._myStickIdleTimer.isDone()) {\r\n this._myCurrentDirectionConverter.resetFly();\r\n }\r\n }\r\n }\r\n\r\n if ((this._myParams.myFlyEnabled && this._myParams.myFlyWithButtonsEnabled) || debugFlyEnabled) {\r\n if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) {\r\n verticalMovement = playerUp.vec3_scale(maxSpeed * dt, verticalMovement);\r\n headMovement = headMovement.vec3_add(verticalMovement, headMovement);\r\n this._myLocomotionRuntimeParams.myIsFlying = true;\r\n\r\n isManuallyMoving = true;\r\n } else if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressed()) {\r\n verticalMovement = playerUp.vec3_scale(-maxSpeed * dt, verticalMovement);\r\n headMovement = headMovement.vec3_add(verticalMovement, headMovement);\r\n this._myLocomotionRuntimeParams.myIsFlying = true;\r\n\r\n isManuallyMoving = true;\r\n }\r\n\r\n if (Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressEnd(2)) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n }\r\n }\r\n\r\n if (this._myParams.myMoveHeadShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine) &&\r\n Globals.getGamepads(this._myParams.myEngine)[InputUtils.getOppositeHandedness(this._myParams.myHandedness)].getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed()) {\r\n this._myParams.myPlayerTransformManager.getPlayerHeadManager().moveFeet(headMovement);\r\n } else if ((this._myParams.myMoveThroughCollisionShortcutEnabled && Globals.isDebugEnabled(this._myParams.myEngine) &&\r\n Globals.getGamepads(this._myParams.myEngine)[this._myParams.myHandedness].getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed())\r\n || debugFlyEnabled) {\r\n this._myParams.myPlayerTransformManager.move(headMovement, this._myLocomotionRuntimeParams.myCollisionRuntimeParams, true);\r\n if (isManuallyMoving) {\r\n this._myParams.myPlayerTransformManager.resetReal();\r\n }\r\n } else {\r\n if (!this._myLocomotionRuntimeParams.myIsFlying) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed += this._myParams.myGravityAcceleration * dt;\r\n\r\n if (Math.abs(this._myLocomotionRuntimeParams.myGravitySpeed) > Math.abs(this._myParams.myMaxGravitySpeed)) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = Math.pp_sign(this._myParams.myGravityAcceleration) * Math.abs(this._myParams.myMaxGravitySpeed);\r\n }\r\n\r\n verticalMovement = playerUp.vec3_scale(this._myLocomotionRuntimeParams.myGravitySpeed * dt, verticalMovement);\r\n headMovement = headMovement.vec3_add(verticalMovement, headMovement);\r\n } else {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n\r\n feetTransformQuat = this._myParams.myPlayerTransformManager.getTransformQuat(feetTransformQuat);\r\n\r\n this._myParams.myPlayerTransformManager.move(headMovement, this._myLocomotionRuntimeParams.myCollisionRuntimeParams);\r\n if (isManuallyMoving) {\r\n this._myParams.myPlayerTransformManager.resetReal();\r\n\r\n this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myFixedMovement.vec3_removeComponentAlongAxis(\r\n this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myOriginalUp,\r\n this._myLastHorizontalMovement\r\n );\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myGravitySpeed > 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnCeiling ||\r\n this._myLocomotionRuntimeParams.myGravitySpeed < 0 && this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myGravitySpeed = 0;\r\n }\r\n }\r\n\r\n if (this._myLocomotionRuntimeParams.myCollisionRuntimeParams.myIsOnGround) {\r\n this._myLocomotionRuntimeParams.myIsFlying = false;\r\n this._myCurrentDirectionConverter.resetFly();\r\n }\r\n };\r\n}();\r\n\r\nPlayerLocomotionSmooth.prototype._onXRSessionStart = function () {\r\n return function _onXRSessionStart(session) {\r\n switch (this._myParams.myVRDirectionReferenceType) {\r\n case 0:\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n break;\r\n case 1:\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHands[this._myParams.myHandedness];\r\n break;\r\n case 2:\r\n this._myDirectionReference = this._myParams.myVRDirectionReferenceObject;\r\n break;\r\n }\r\n\r\n this._myCurrentDirectionConverter = this._myDirectionConverterVR;\r\n this._myCurrentDirectionConverter.resetFly();\r\n };\r\n}();\r\n\r\nPlayerLocomotionSmooth.prototype._onXRSessionEnd = function () {\r\n return function _onXRSessionEnd(session) {\r\n this._myDirectionReference = Globals.getPlayerObjects(this._myParams.myEngine).myHead;\r\n this._myCurrentDirectionConverter = this._myDirectionConverterNonVR;\r\n\r\n this._myCurrentDirectionConverter.resetFly();\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../../cauldron/cauldron/timer.js\";\r\nimport { PhysicsLayerFlags } from \"../../../../../cauldron/physics/physics_layer_flags.js\";\r\nimport { PhysicsUtils } from \"../../../../../cauldron/physics/physics_utils.js\";\r\nimport { InputUtils } from \"../../../../../input/cauldron/input_utils.js\";\r\nimport { Globals } from \"../../../../../pp/globals.js\";\r\nimport { PlayerLocomotion, PlayerLocomotionParams } from \"./player_locomotion.js\";\r\n\r\nexport class PlayerLocomotionComponent extends Component {\r\n static TypeName = \"pp-player-locomotion\";\r\n static Properties = {\r\n _myDefaultLocomotionType: Property.enum([\"Smooth\", \"Teleport\"], \"Smooth\"),\r\n _myAlwaysSmoothForNonVR: Property.bool(true),\r\n _mySwitchLocomotionTypeShortcutEnabled: Property.bool(true), // Double press main hand (default left) thumbstick to switch\r\n _myPhysicsBlockLayerFlags: Property.string(\"0, 0, 0, 0, 0, 0, 0, 0\"),\r\n _myDefaultHeight: Property.float(1.70),\r\n _myCharacterRadius: Property.float(0.3),\r\n _myMaxSpeed: Property.float(2),\r\n _myMaxRotationSpeed: Property.float(100),\r\n _myGravityAcceleration: Property.float(-20),\r\n _myMaxGravitySpeed: Property.float(-15),\r\n _mySpeedSlowDownPercentageOnWallSlid: Property.float(1),\r\n _myIsSnapTurn: Property.bool(true),\r\n _mySnapTurnOnlyVR: Property.bool(true),\r\n _mySnapTurnAngle: Property.float(30),\r\n _mySnapTurnSpeedDegrees: Property.float(0),\r\n\r\n _myFlyEnabled: Property.bool(false),\r\n _myStartFlying: Property.bool(false),\r\n _myFlyWithButtonsEnabled: Property.bool(true),\r\n _myFlyWithViewAngleEnabled: Property.bool(true),\r\n _myMinAngleToFlyUpNonVR: Property.float(30),\r\n _myMinAngleToFlyDownNonVR: Property.float(50),\r\n _myMinAngleToFlyUpVR: Property.float(60),\r\n _myMinAngleToFlyDownVR: Property.float(1),\r\n _myMinAngleToFlyRight: Property.float(60),\r\n\r\n _myMainHand: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myDirectionInvertForwardWhenUpsideDown: Property.bool(true),\r\n _myVRDirectionReferenceType: Property.enum([\"Head\", \"Hand\", \"Custom Object\"], \"Head\"),\r\n _myVRDirectionReferenceObject: Property.object(),\r\n\r\n _myTeleportType: Property.enum([\"Instant\", \"Blink\", \"Shift\"], \"Shift\"),\r\n _myTeleportMaxDistance: Property.float(3),\r\n _myTeleportMaxHeightDifference: Property.float(1.25),\r\n _myTeleportRotationOnUpEnabled: Property.bool(false),\r\n _myTeleportValidMaterial: Property.material(),\r\n _myTeleportInvalidMaterial: Property.material(),\r\n _myTeleportPositionObject: Property.object(),\r\n _myTeleportPositionObjectRotateWithHead: Property.bool(true),\r\n _myTeleportParableStartReferenceObject: Property.object(),\r\n\r\n _myResetRealOnStart: Property.bool(true),\r\n\r\n // #WARN With @myResetRealOnStartFramesAmount at 1 it can happen that you enter the session like 1 frame before the game load\r\n // and the head pose might have not been properly initialized yet in the WebXR API, so the reset real will not happen has expected\r\n // Since this is a sort of edge case (either u enter after the load, or you were already in for more than 2-3 frames), and that\r\n // setting this to more than 1 can cause a visible (even if very short) stutter after the load (due to resetting the head multiple times),\r\n // it's better to keep this value at 1\r\n // A possible effect of the edge case is the view being obscured on start because it thinks you are colliding\r\n //\r\n // A value of 3 will make u sure that the head pose will be initialized and the reset real will happen as expected in any case\r\n // For example, if u have a total fade at start and nothing can be seen aside the clear color for at least, let's say, 10 frames, \r\n // you can set this to 3 safely, since there will be no visible stutter to be seen (beside the clear color)\r\n _myResetRealOnStartFramesAmount: Property.int(1),\r\n\r\n // Can fix some head through floor issues, when you can move your head completely to the other side of the floor\r\n // If the floors are thick enough that this can't happen, you can leave this to false\r\n _myResetHeadToFeetInsteadOfReal: Property.bool(true),\r\n _myResetHeadToRealMinDistance: Property.float(0.25),\r\n\r\n // these 2 flags works 100% properly only if both true or false\r\n _mySyncWithRealWorldPositionOnlyIfValid: Property.bool(true), // valid means the real player has not moved inside walls\r\n _myViewOcclusionInsideWallsEnabled: Property.bool(true),\r\n\r\n _mySyncNonVRHeightWithVROnExitSession: Property.bool(false),\r\n _mySyncNonVRVerticalAngleWithVROnExitSession: Property.bool(false),\r\n\r\n _mySyncHeadWithRealAfterLocomotionUpdateIfNeeded: Property.bool(true),\r\n\r\n _myColliderAccuracy: Property.enum([\"Very Low\", \"Low\", \"Medium\", \"High\", \"Very High\"], \"High\"),\r\n _myColliderCheckOnlyFeet: Property.bool(false),\r\n _myColliderSlideAlongWall: Property.bool(true),\r\n _myColliderMaxWalkableGroundAngle: Property.float(30),\r\n _myColliderSnapOnGround: Property.bool(true),\r\n _myColliderMaxDistanceToSnapOnGround: Property.float(0.1),\r\n _myColliderMaxWalkableGroundStepHeight: Property.float(0.1),\r\n _myColliderPreventFallingFromEdges: Property.bool(false),\r\n\r\n _myDebugFlyShortcutEnabled: Property.bool(false), // main hand (default left) select + thumbstick press, auto switch to smooth\r\n _myDebugFlyMaxSpeedMultiplier: Property.float(5),\r\n _myMoveThroughCollisionShortcutEnabled: Property.bool(false), // main hand (default left) thumbstick pressed while moving\r\n _myMoveHeadShortcutEnabled: Property.bool(false), // non main hand (default right) thumbstick pressed while moving\r\n _myTripleSpeedShortcutEnabled: Property.bool(false), // main hand (default left) select pressed while moving\r\n\r\n _myDebugHorizontalEnabled: Property.bool(false),\r\n _myDebugVerticalEnabled: Property.bool(false),\r\n\r\n _myCollisionCheckDisabled: Property.bool(false),\r\n\r\n _myRaycastCountLogEnabled: Property.bool(false),\r\n _myRaycastVisualDebugEnabled: Property.bool(false),\r\n _myPerformanceLogEnabled: Property.bool(false)\r\n };\r\n\r\n start() {\r\n let params = new PlayerLocomotionParams(this.engine);\r\n\r\n params.myDefaultLocomotionType = this._myDefaultLocomotionType;\r\n params.myAlwaysSmoothForNonVR = this._myAlwaysSmoothForNonVR;\r\n params.mySwitchLocomotionTypeShortcutEnabled = this._mySwitchLocomotionTypeShortcutEnabled;\r\n\r\n params.myDefaultHeight = this._myDefaultHeight;\r\n\r\n params.myMaxSpeed = this._myMaxSpeed;\r\n params.myMaxRotationSpeed = this._myMaxRotationSpeed;\r\n params.myGravityAcceleration = this._myGravityAcceleration;\r\n params.myMaxGravitySpeed = this._myMaxGravitySpeed;\r\n\r\n params.myCharacterRadius = this._myCharacterRadius;\r\n\r\n params.mySpeedSlowDownPercentageOnWallSlid = this._mySpeedSlowDownPercentageOnWallSlid;\r\n\r\n params.myIsSnapTurn = this._myIsSnapTurn;\r\n params.mySnapTurnOnlyVR = this._mySnapTurnOnlyVR;\r\n params.mySnapTurnAngle = this._mySnapTurnAngle;\r\n params.mySnapTurnSpeedDegrees = this._mySnapTurnSpeedDegrees;\r\n\r\n params.myFlyEnabled = this._myFlyEnabled;\r\n params.myStartFlying = this._myStartFlying;\r\n params.myFlyWithButtonsEnabled = this._myFlyWithButtonsEnabled;\r\n params.myFlyWithViewAngleEnabled = this._myFlyWithViewAngleEnabled;\r\n params.myMinAngleToFlyUpNonVR = this._myMinAngleToFlyUpNonVR;\r\n params.myMinAngleToFlyDownNonVR = this._myMinAngleToFlyDownNonVR;\r\n params.myMinAngleToFlyUpVR = this._myMinAngleToFlyUpVR;\r\n params.myMinAngleToFlyDownVR = this._myMinAngleToFlyDownVR;\r\n params.myMinAngleToFlyRight = this._myMinAngleToFlyRight;\r\n\r\n params.myMainHand = InputUtils.getHandednessByIndex(this._myMainHand);\r\n\r\n params.myDirectionInvertForwardWhenUpsideDown = this._myDirectionInvertForwardWhenUpsideDown;\r\n params.myVRDirectionReferenceType = this._myVRDirectionReferenceType;\r\n params.myVRDirectionReferenceObject = this._myVRDirectionReferenceObject;\r\n\r\n params.myForeheadExtraHeight = 0.1;\r\n\r\n params.myTeleportType = this._myTeleportType;\r\n params.myTeleportMaxDistance = this._myTeleportMaxDistance;\r\n params.myTeleportMaxHeightDifference = this._myTeleportMaxHeightDifference;\r\n params.myTeleportRotationOnUpEnabled = this._myTeleportRotationOnUpEnabled;\r\n params.myTeleportValidMaterial = this._myTeleportValidMaterial;\r\n params.myTeleportInvalidMaterial = this._myTeleportInvalidMaterial;\r\n params.myTeleportPositionObject = this._myTeleportPositionObject;\r\n params.myTeleportPositionObjectRotateWithHead = this._myTeleportPositionObjectRotateWithHead;\r\n params.myTeleportParableStartReferenceObject = this._myTeleportParableStartReferenceObject;\r\n\r\n params.myResetRealOnStart = this._myResetRealOnStart;\r\n params.myResetRealOnStartFramesAmount = this._myResetRealOnStartFramesAmount;\r\n params.myResetHeadToFeetInsteadOfReal = this._myResetHeadToFeetInsteadOfReal;\r\n params.myResetHeadToRealMinDistance = this._myResetHeadToRealMinDistance;\r\n\r\n params.mySyncWithRealWorldPositionOnlyIfValid = this._mySyncWithRealWorldPositionOnlyIfValid;\r\n params.myViewOcclusionInsideWallsEnabled = this._myViewOcclusionInsideWallsEnabled;\r\n\r\n params.mySyncNonVRHeightWithVROnExitSession = this._mySyncNonVRHeightWithVROnExitSession;\r\n params.mySyncNonVRVerticalAngleWithVROnExitSession = this._mySyncNonVRVerticalAngleWithVROnExitSession;\r\n\r\n params.mySyncHeadWithRealAfterLocomotionUpdateIfNeeded = this._mySyncHeadWithRealAfterLocomotionUpdateIfNeeded;\r\n\r\n params.myColliderAccuracy = this._myColliderAccuracy;\r\n params.myColliderCheckOnlyFeet = this._myColliderCheckOnlyFeet;\r\n params.myColliderSlideAlongWall = this._myColliderSlideAlongWall;\r\n params.myColliderMaxWalkableGroundAngle = this._myColliderMaxWalkableGroundAngle;\r\n params.myColliderSnapOnGround = this._myColliderSnapOnGround;\r\n params.myColliderMaxDistanceToSnapOnGround = this._myColliderMaxDistanceToSnapOnGround;\r\n params.myColliderMaxWalkableGroundStepHeight = this._myColliderMaxWalkableGroundStepHeight;\r\n params.myColliderPreventFallingFromEdges = this._myColliderPreventFallingFromEdges;\r\n\r\n params.myDebugFlyShortcutEnabled = this._myDebugFlyShortcutEnabled;\r\n params.myDebugFlyMaxSpeedMultiplier = this._myDebugFlyMaxSpeedMultiplier;\r\n params.myMoveThroughCollisionShortcutEnabled = this._myMoveThroughCollisionShortcutEnabled;\r\n params.myMoveHeadShortcutEnabled = this._myMoveHeadShortcutEnabled;\r\n params.myTripleSpeedShortcutEnabled = this._myTripleSpeedShortcutEnabled;\r\n\r\n params.myDebugHorizontalEnabled = this._myDebugHorizontalEnabled;\r\n params.myDebugVerticalEnabled = this._myDebugVerticalEnabled;\r\n\r\n params.myCollisionCheckDisabled = this._myCollisionCheckDisabled;\r\n\r\n params.myPhysicsBlockLayerFlags.copy(this._getPhysicsBlockLayersFlags());\r\n\r\n this._myPlayerLocomotion = new PlayerLocomotion(params);\r\n\r\n this._myLocomotionStarted = false;\r\n this._myResetReal = true;\r\n\r\n this._myDebugPerformanceLogTimer = new Timer(0.5);\r\n this._myDebugPerformanceLogTotalTime = 0;\r\n this._myDebugPerformanceLogFrameCount = 0;\r\n\r\n Globals.getHeadPose(this.engine).registerPostPoseUpdatedEventEventListener(this, this.onPostPoseUpdatedEvent.bind(this));\r\n }\r\n\r\n onPostPoseUpdatedEvent(dt, pose, manualUpdate) {\r\n if (manualUpdate) return;\r\n\r\n let startTime = 0;\r\n if (this._myPerformanceLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n startTime = window.performance.now();\r\n }\r\n\r\n let raycastVisualDebugEnabledBackup = false;\r\n if (this._myRaycastVisualDebugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n raycastVisualDebugEnabledBackup = PhysicsUtils.isRaycastVisualDebugEnabled(this.engine.physics);\r\n PhysicsUtils.setRaycastVisualDebugEnabled(true, this.engine.physics);\r\n }\r\n\r\n if (this._myRaycastCountLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n PhysicsUtils.resetRaycastCount(this.engine.physics);\r\n }\r\n\r\n if (!this._myLocomotionStarted) {\r\n this._myLocomotionStarted = true;\r\n this._myPlayerLocomotion.start();\r\n }\r\n\r\n this._myPlayerLocomotion.update(dt);\r\n\r\n if (this._myPerformanceLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n let endTime = window.performance.now();\r\n this._myDebugPerformanceLogTotalTime += endTime - startTime;\r\n this._myDebugPerformanceLogFrameCount++;\r\n\r\n this._myDebugPerformanceLogTimer.update(dt);\r\n if (this._myDebugPerformanceLogTimer.isDone()) {\r\n this._myDebugPerformanceLogTimer.start();\r\n\r\n let averageTime = this._myDebugPerformanceLogTotalTime / this._myDebugPerformanceLogFrameCount;\r\n\r\n console.log(\"Locomotion ms: \" + averageTime.toFixed(3));\r\n\r\n this._myDebugPerformanceLogTotalTime = 0;\r\n this._myDebugPerformanceLogFrameCount = 0;\r\n }\r\n }\r\n\r\n if (this._myRaycastVisualDebugEnabled && Globals.isDebugEnabled(this.engine)) {\r\n PhysicsUtils.setRaycastVisualDebugEnabled(raycastVisualDebugEnabledBackup, this.engine.physics);\r\n }\r\n\r\n if (this._myRaycastCountLogEnabled && Globals.isDebugEnabled(this.engine)) {\r\n console.log(\"Raycast count: \" + PhysicsUtils.getRaycastCount(this.engine.physics));\r\n PhysicsUtils.resetRaycastCount(this.engine.physics);\r\n }\r\n }\r\n\r\n getPlayerLocomotion() {\r\n return this._myPlayerLocomotion;\r\n }\r\n\r\n onActivate() {\r\n if (this._myPlayerLocomotion != null) {\r\n this._myPlayerLocomotion.setActive(true);\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myPlayerLocomotion != null) {\r\n this._myPlayerLocomotion.setActive(false);\r\n }\r\n }\r\n\r\n _getPhysicsBlockLayersFlags() {\r\n let physicsFlags = new PhysicsLayerFlags();\r\n\r\n let flags = [...this._myPhysicsBlockLayerFlags.split(\",\")];\r\n for (let i = 0; i < flags.length; i++) {\r\n physicsFlags.setFlagActive(i, flags[i].trim() == \"1\");\r\n }\r\n\r\n return physicsFlags;\r\n }\r\n\r\n onDestroy() {\r\n this._myPlayerLocomotion?.destroy();\r\n }\r\n}", "import { Collider, CollisionComponent, Component, Property } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputSourceType, TrackedHandJointID } from \"../input_types.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class FingerCursorComponent extends Component {\r\n static TypeName = \"pp-finger-cursor\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myMultipleClicksEnabled: Property.bool(true),\r\n _myCollisionGroup: Property.int(1),\r\n _myCollisionSize: Property.float(0.0125),\r\n _myCursorObject: Property.object(null)\r\n };\r\n\r\n init() {\r\n this._myLastTarget = null;\r\n this._myHandInputSource = null;\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n this._myDoubleClickTimer = 0;\r\n this._myTripleClickTimer = 0;\r\n this._myMultipleClickObject = null;\r\n this._myMultipleClickDelay = 0.3;\r\n }\r\n\r\n start() {\r\n this._myCursorParentObject = this.object.pp_addObject();\r\n\r\n if (this._myCursorObject == null) {\r\n this._myCursorObject = this._myCursorParentObject.pp_addObject();\r\n } else {\r\n this._myCursorObject.pp_setParent(this._myCursorParentObject);\r\n }\r\n\r\n this._myCollisionComponent = this._myCursorObject.pp_addComponent(CollisionComponent);\r\n this._myCollisionComponent.collider = Collider.Sphere;\r\n this._myCollisionComponent.group = 1 << this._myCollisionGroup;\r\n this._myCollisionComponent.extents = vec3_create(this._myCollisionSize, this._myCollisionSize, this._myCollisionSize);\r\n }\r\n\r\n update(dt) {\r\n if (this._myDoubleClickTimer > 0) {\r\n this._myDoubleClickTimer -= dt;\r\n }\r\n\r\n if (this._myTripleClickTimer > 0) {\r\n this._myTripleClickTimer -= dt;\r\n }\r\n\r\n this._myCursorParentObject.pp_setTransformQuat(Globals.getPlayerObjects(this.engine).myReferenceSpace.pp_getTransformQuat());\r\n this._updateHand();\r\n\r\n if (this._myHandInputSource) {\r\n let overlaps = this._myCollisionComponent.queryOverlaps();\r\n let overlapTarget = null;\r\n for (let i = 0; i < overlaps.length; ++i) {\r\n let collision = overlaps[i];\r\n if (collision.group & this._myCollisionComponent.group) {\r\n let object = collision.object;\r\n let target = object.pp_getComponent(CursorTarget);\r\n if (target && (overlapTarget == null || !target.isSurface)) {\r\n overlapTarget = target;\r\n if (!target.isSurface) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!overlapTarget) {\r\n this._targetTouchEnd();\r\n } else if (!overlapTarget.equals(this._myLastTarget)) {\r\n this._targetTouchEnd();\r\n\r\n this._myLastTarget = overlapTarget;\r\n\r\n this._targetTouchStart();\r\n }\r\n } else {\r\n this._targetTouchEnd();\r\n }\r\n }\r\n\r\n _targetTouchStart() {\r\n this._myLastTarget.onHover.notify(this._myLastTarget.object, this);\r\n this._myLastTarget.onDown.notify(this._myLastTarget.object, this);\r\n }\r\n\r\n _targetTouchEnd() {\r\n if (this._myLastTarget) {\r\n this._myLastTarget.onClick.notify(this._myLastTarget.object, this);\r\n\r\n if (this._myMultipleClicksEnabled && this._myTripleClickTimer > 0 && this._myMultipleClickObject && this._myMultipleClickObject.pp_equals(this._myLastTarget.object)) {\r\n this._myLastTarget.onTripleClick.notify(this._myLastTarget.object, this);\r\n\r\n this._myTripleClickTimer = 0;\r\n } else if (this._myMultipleClicksEnabled && this._myDoubleClickTimer > 0 && this._myMultipleClickObject && this._myMultipleClickObject.pp_equals(this._myLastTarget.object)) {\r\n this._myLastTarget.onDoubleClick.notify(this._myLastTarget.object, this);\r\n\r\n this._myTripleClickTimer = this._myMultipleClickDelay;\r\n this._myDoubleClickTimer = 0;\r\n } else {\r\n this._myLastTarget.onSingleClick.notify(this._myLastTarget.object, this);\r\n\r\n this._myTripleClickTimer = 0;\r\n this._myDoubleClickTimer = this._myMultipleClickDelay;\r\n this._myMultipleClickObject = this._myLastTarget.object;\r\n }\r\n\r\n this._myLastTarget.onUp.notify(this._myLastTarget.object, this);\r\n this._myLastTarget.onUpWithDown.notify(this._myLastTarget.object, this);\r\n\r\n this._myLastTarget.onUnhover.notify(this._myLastTarget.object, this);\r\n\r\n this._myLastTarget = null;\r\n }\r\n }\r\n\r\n onActivate() {\r\n this._myCursorParentObject.pp_setActive(true);\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myCursorParentObject != null) {\r\n this._myCursorParentObject.pp_setActive(false);\r\n }\r\n }\r\n\r\n _updateHand() {\r\n this._myHandInputSource = InputUtils.getInputSource(this._myHandednessType, InputSourceType.TRACKED_HAND, this.engine);\r\n\r\n if (this._myHandInputSource) {\r\n let tip = null;\r\n\r\n try {\r\n tip = XRUtils.getFrame(this.engine).getJointPose(this._myHandInputSource.hand.get(TrackedHandJointID.INDEX_FINGER_TIP), XRUtils.getReferenceSpace(this.engine));\r\n } catch (error) {\r\n // Do nothing\r\n }\r\n\r\n if (tip) {\r\n this._myCursorObject.pp_setRotationLocalQuat([\r\n tip.transform.orientation.x,\r\n tip.transform.orientation.y,\r\n tip.transform.orientation.z,\r\n tip.transform.orientation.w]);\r\n\r\n this._myCursorObject.pp_setPositionLocal([\r\n tip.transform.position.x,\r\n tip.transform.position.y,\r\n tip.transform.position.z]);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { InputSourceType } from \"../input_types.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class SwitchHandObjectComponent extends Component {\r\n static TypeName = \"pp-switch-hand-object\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myGamepad: Property.object(),\r\n _myTrackedHand: Property.object(),\r\n _myDisableHandsWhenNonXR: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myFirstUpdate = true;\r\n\r\n this._myCurrentInputSourceType = null;\r\n }\r\n\r\n onActivate() {\r\n this._myFirstUpdate = true;\r\n }\r\n\r\n update(dt) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n this._start();\r\n }\r\n\r\n if (this._myDisableHandsWhenNonXR && !XRUtils.isSessionActive()) {\r\n if (this._myCurrentInputSourceType != null) {\r\n this._myCurrentInputSourceType = null;\r\n\r\n this._myGamepad.pp_setActive(false);\r\n this._myTrackedHand.pp_setActive(false);\r\n }\r\n } else {\r\n let inputSourceType = InputUtils.getInputSourceTypeByHandedness(this._myHandednessType, this.engine);\r\n if (inputSourceType != null && this._myCurrentInputSourceType != inputSourceType) {\r\n this._myCurrentInputSourceType = inputSourceType;\r\n\r\n if (inputSourceType == InputSourceType.TRACKED_HAND) {\r\n if (this._myGamepad != null) {\r\n this._myGamepad.pp_setActive(false);\r\n }\r\n if (this._myTrackedHand != null) {\r\n this._myTrackedHand.pp_setActive(true);\r\n }\r\n } else if (inputSourceType == InputSourceType.GAMEPAD) {\r\n if (this._myTrackedHand != null) {\r\n this._myTrackedHand.pp_setActive(false);\r\n }\r\n if (this._myGamepad != null) {\r\n this._myGamepad.pp_setActive(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _start() {\r\n if (this._myGamepad != null) {\r\n this._myGamepad.pp_setActive(false);\r\n }\r\n\r\n if (this._myTrackedHand != null) {\r\n this._myTrackedHand.pp_setActive(false);\r\n }\r\n\r\n this._myCurrentInputSourceType = null;\r\n }\r\n}", "import { Component, MeshComponent, Property } from \"@wonderlandengine/api\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class TrackedHandDrawJointComponent extends Component {\r\n static TypeName = \"pp-tracked-hand-draw-joint\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myJointID: Property.enum(\r\n [\r\n \"Wrist\",\r\n \"Thumb Metacarpal\", \"Thumb Phalanx Proximal\", \"Thumb Phalanx Distal\", \"Thumb Tip\",\r\n \"Index Metacarpal\", \"Index Phalanx Proximal\", \"Index Phalanx Intermediate\", \"Index Phalanx Distal\", \"Index Tip\",\r\n \"Middle Metacarpal\", \"Middle Phalanx Proximal\", \"Middle Phalanx Intermediate\", \"Middle Phalanx Distal\", \"Middle Tip\",\r\n \"Ring Metacarpal\", \"Ring Phalanx Proximal\", \"Ring Phalanx Intermediate\", \"Ring Phalanx Distal\", \"Ring Tip\",\r\n \"Pinky Metacarpal\", \"Pinky Phalanx Proximal\", \"Pinky Phalanx Intermediate\", \"Pinky Phalanx Distal\", \"Pinky Tip\"\r\n ],\r\n \"Wrist\"),\r\n _myJointMesh: Property.mesh(),\r\n _myJointMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myJointIDType = InputUtils.getJointIDByIndex(this._myJointID);\r\n\r\n this._buildTrackedHandHierarchy();\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _buildTrackedHandHierarchy() {\r\n this._myJointMeshObject = this.object.pp_addObject();\r\n\r\n let mesh = this._myJointMeshObject.pp_addComponent(MeshComponent);\r\n mesh.mesh = this._myJointMesh;\r\n mesh.material = this._myJointMaterial;\r\n\r\n this._myJointMeshObject.pp_setScaleLocal(0);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nTrackedHandDrawJointComponent.prototype.update = function () {\r\n let transformQuat = quat2_create();\r\n return function update(dt) {\r\n let jointPose = Globals.getTrackedHandPose(this._myHandednessType, this.engine).getJointPose(this._myJointIDType);\r\n\r\n this._myJointMeshObject.pp_setTransformLocalQuat(jointPose.getTransformQuat(transformQuat, null));\r\n this._myJointMeshObject.pp_setScaleLocal(jointPose.getJointRadius());\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { TrackedHandJointID, TrackedHandJointIDIndex } from \"../input_types.js\";\r\nimport { TrackedHandDrawJointComponent } from \"./tracked_hand_draw_joint_component.js\";\r\n\r\nexport class TrackedHandDrawAllJointsComponent extends Component {\r\n static TypeName = \"pp-tracked-hand-draw-all-joints\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myHideMetacarpals: Property.bool(true),\r\n _myJointMesh: Property.mesh(),\r\n _myJointMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._buildTrackedHandHierarchy();\r\n }\r\n\r\n _buildTrackedHandHierarchy() {\r\n this._myTrackedHandMeshObject = this.object.pp_addObject();\r\n\r\n this._myJointMeshObjectList = [];\r\n\r\n for (let jointIDKey in TrackedHandJointID) {\r\n let jointID = TrackedHandJointID[jointIDKey];\r\n if (!this._myHideMetacarpals ||\r\n (jointID != TrackedHandJointID.THUMB_METACARPAL &&\r\n jointID != TrackedHandJointID.INDEX_FINGER_METACARPAL && jointID != TrackedHandJointID.MIDDLE_FINGER_METACARPAL &&\r\n jointID != TrackedHandJointID.RING_FINGER_METACARPAL && jointID != TrackedHandJointID.PINKY_FINGER_METACARPAL)\r\n ) {\r\n let jointObject = this._myTrackedHandMeshObject.pp_addObject();\r\n this._myJointMeshObjectList[jointID] = jointObject;\r\n\r\n jointObject.pp_addComponent(TrackedHandDrawJointComponent,\r\n {\r\n \"_myHandedness\": this._myHandedness,\r\n \"_myJointID\": TrackedHandJointIDIndex[jointIDKey],\r\n \"_myJointMesh\": this._myJointMesh,\r\n \"_myJointMaterial\": this._myJointMaterial,\r\n });\r\n\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ObjectUtils } from \"../../../cauldron/wl/utils/object_utils.js\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../input_utils.js\";\r\n\r\nexport class TrackedHandDrawSkinComponent extends Component {\r\n static TypeName = \"pp-tracked-hand-draw-skin\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myHandSkin: Property.skin(null)\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n this._prepareJoints();\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _prepareJoints() {\r\n this._myJoints = [];\r\n\r\n let skinJointIDs = this._myHandSkin.jointIds;\r\n\r\n for (let i = 0; i < skinJointIDs.length; i++) {\r\n this._myJoints[i] = ObjectUtils.wrapObject(skinJointIDs[i]);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nTrackedHandDrawSkinComponent.prototype.update = function () {\r\n let transformQuat = quat2_create();\r\n return function update(dt) {\r\n for (let i = 0; i < this._myJoints.length; i++) {\r\n let jointObject = this._myJoints[i];\r\n\r\n let jointID = jointObject.pp_getName(); // Joint name must match the TrackedHandJointID enum value\r\n let jointPose = Globals.getTrackedHandPose(this._myHandednessType, this.engine).getJointPose(jointID);\r\n\r\n jointObject.pp_setTransformLocalQuat(jointPose.getTransformQuat(transformQuat, null));\r\n }\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { HandednessIndex } from \"../../cauldron/input_types.js\";\r\nimport { GamepadAxesEvent, GamepadAxesID, GamepadButtonEvent, GamepadButtonID } from \"../gamepad_buttons.js\";\r\n\r\nexport class GamepadMeshAnimatorComponent extends Component {\r\n static TypeName = \"pp-gamepad-mesh-animator\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _mySelect: Property.object(null),\r\n _mySqueeze: Property.object(null),\r\n _myThumbstick: Property.object(null),\r\n _myTopButton: Property.object(null),\r\n _myBottomButton: Property.object(null),\r\n _mySelectRotateAngle: Property.float(15),\r\n _mySqueezeRotateAngle: Property.float(11),\r\n _myThumbstickRotateAngle: Property.float(15),\r\n _myThumbstickPressOffset: Property.float(0.000625),\r\n _myTopButtonPressOffset: Property.float(0.0015),\r\n _myBottomButtonPressOffset: Property.float(0.0015),\r\n _myUsePressForSqueeze: Property.bool(false),\r\n _mySqueezePressOffset: Property.float(0.0015)\r\n };\r\n\r\n start() {\r\n let gamepad = null;\r\n if (this._myHandedness == HandednessIndex.LEFT) {\r\n gamepad = Globals.getLeftGamepad(this.engine);\r\n } else {\r\n gamepad = Globals.getRightGamepad(this.engine);\r\n }\r\n\r\n if (this._mySelect != null) {\r\n this._mySelectOriginalRotation = this._mySelect.pp_getRotationLocalQuat();\r\n this._mySelectOriginalLeft = this._mySelect.pp_getLeftLocal();\r\n }\r\n\r\n if (this._mySqueeze != null) {\r\n this._mySqueezeOriginalPosition = this._mySqueeze.pp_getPositionLocal();\r\n this._mySqueezeOriginalRotation = this._mySqueeze.pp_getRotationLocalQuat();\r\n this._mySqueezeOriginalLeft = this._mySqueeze.pp_getLeftLocal();\r\n this._mySqueezeOriginalForward = this._mySqueeze.pp_getForwardLocal();\r\n }\r\n\r\n if (this._myThumbstick != null) {\r\n this._myThumbstickOriginalPosition = this._myThumbstick.pp_getPositionLocal();\r\n this._myThumbstickOriginalRotation = this._myThumbstick.pp_getRotationLocalQuat();\r\n this._myThumbstickOriginalLeft = this._myThumbstick.pp_getLeftLocal();\r\n this._myThumbstickOriginalUp = this._myThumbstick.pp_getUpLocal();\r\n this._myThumbstickOriginalForward = this._myThumbstick.pp_getForwardLocal();\r\n }\r\n\r\n if (this._myTopButton != null) {\r\n this._myTopButtonOriginalPosition = this._myTopButton.pp_getPositionLocal();\r\n this._myTopButtonOriginalUp = this._myTopButton.pp_getUpLocal();\r\n }\r\n\r\n if (this._myBottomButton != null) {\r\n this._myBottomButtonOriginalPosition = this._myBottomButton.pp_getPositionLocal();\r\n this._myBottomButtonOriginalUp = this._myBottomButton.pp_getUpLocal();\r\n }\r\n\r\n // PRESSED\r\n if (this._myThumbstick != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.THUMBSTICK, GamepadButtonEvent.PRESS_START, this, this._thumbstickPressedStart.bind(this));\r\n gamepad.registerButtonEventListener(GamepadButtonID.THUMBSTICK, GamepadButtonEvent.PRESS_END, this, this._thumbstickPressedEnd.bind(this));\r\n }\r\n\r\n if (this._myTopButton != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.TOP_BUTTON, GamepadButtonEvent.PRESS_START, this, this._topButtonPressedStart.bind(this));\r\n gamepad.registerButtonEventListener(GamepadButtonID.TOP_BUTTON, GamepadButtonEvent.PRESS_END, this, this._topButtonPressedEnd.bind(this));\r\n }\r\n\r\n if (this._myBottomButton != null) {\r\n\r\n gamepad.registerButtonEventListener(GamepadButtonID.BOTTOM_BUTTON, GamepadButtonEvent.PRESS_START, this, this._bottomButtonPressedStart.bind(this));\r\n gamepad.registerButtonEventListener(GamepadButtonID.BOTTOM_BUTTON, GamepadButtonEvent.PRESS_END, this, this._bottomButtonPressedEnd.bind(this));\r\n }\r\n\r\n // VALUE CHANGED\r\n if (this._mySelect != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.SELECT, GamepadButtonEvent.VALUE_CHANGED, this, this._selectValueChanged.bind(this));\r\n }\r\n\r\n if (this._mySqueeze != null) {\r\n gamepad.registerButtonEventListener(GamepadButtonID.SQUEEZE, GamepadButtonEvent.VALUE_CHANGED, this, this._squeezeValueChanged.bind(this));\r\n }\r\n\r\n // AXES CHANGED\r\n if (this._myThumbstick != null) {\r\n gamepad.registerAxesEventListener(GamepadAxesID.THUMBSTICK, GamepadAxesEvent.AXES_CHANGED, this, this._thumbstickValueChanged.bind(this));\r\n }\r\n }\r\n\r\n _thumbstickPressedStart() {\r\n // Implemented outside class definition\r\n }\r\n\r\n _thumbstickPressedEnd(buttonInfo, gamepad) {\r\n this._myThumbstick.pp_setPositionLocal(this._myThumbstickOriginalPosition);\r\n }\r\n\r\n _topButtonPressedStart(buttonInfo, gamepad) {\r\n this._myTopButton.pp_translateAxisLocal(-this._myTopButtonPressOffset, this._myTopButtonOriginalUp);\r\n }\r\n\r\n _topButtonPressedEnd(buttonInfo, gamepad) {\r\n this._myTopButton.pp_setPositionLocal(this._myTopButtonOriginalPosition);\r\n }\r\n\r\n _bottomButtonPressedStart(buttonInfo, gamepad) {\r\n this._myBottomButton.pp_translateAxisLocal(-this._myBottomButtonPressOffset, this._myBottomButtonOriginalUp);\r\n }\r\n\r\n _bottomButtonPressedEnd(buttonInfo, gamepad) {\r\n this._myBottomButton.pp_setPositionLocal(this._myBottomButtonOriginalPosition);\r\n }\r\n\r\n _selectValueChanged(buttonInfo, gamepad) {\r\n this._mySelect.pp_setRotationLocalQuat(this._mySelectOriginalRotation);\r\n\r\n if (buttonInfo.getValue() > 0.00001) {\r\n this._mySelect.pp_rotateAxisLocal(this._mySelectRotateAngle * buttonInfo.getValue(), this._mySelectOriginalLeft);\r\n }\r\n }\r\n\r\n _squeezeValueChanged(buttonInfo, gamepad) {\r\n this._mySqueeze.pp_setPositionLocal(this._mySqueezeOriginalPosition);\r\n this._mySqueeze.pp_setRotationLocalQuat(this._mySqueezeOriginalRotation);\r\n\r\n if (buttonInfo.getValue() > 0.00001) {\r\n if (this._myUsePressForSqueeze) {\r\n let translation = this._mySqueezePressOffset;\r\n if (this._myHandedness == 1) {\r\n translation *= -1;\r\n }\r\n\r\n this._mySqueeze.pp_translateAxisLocal(translation * buttonInfo.getValue(), this._mySqueezeOriginalLeft);\r\n } else {\r\n let rotation = -this._mySqueezeRotateAngle;\r\n if (this._myHandedness == 1) {\r\n rotation *= -1;\r\n }\r\n\r\n this._mySqueeze.pp_rotateAxisLocal(rotation * buttonInfo.getValue(), this._mySqueezeOriginalForward);\r\n }\r\n }\r\n }\r\n\r\n _thumbstickValueChanged(axesInfo, gamepad) {\r\n this._myThumbstick.pp_setRotationLocalQuat(this._myThumbstickOriginalRotation);\r\n\r\n let leftRotation = this._myThumbstickRotateAngle * axesInfo.myAxes[1];\r\n let forwardRotation = this._myThumbstickRotateAngle * axesInfo.myAxes[0];\r\n\r\n if (Math.abs(leftRotation) > 0.0001) {\r\n this._myThumbstick.pp_rotateAxisLocal(leftRotation, this._myThumbstickOriginalLeft);\r\n }\r\n\r\n if (Math.abs(forwardRotation) > 0.0001) {\r\n this._myThumbstick.pp_rotateAxisLocal(forwardRotation, this._myThumbstickOriginalForward);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nGamepadMeshAnimatorComponent.prototype._thumbstickPressedStart = function () {\r\n let upTranslation = vec3_create();\r\n return function _thumbstickPressedStart(buttonInfo, gamepad) {\r\n // Since thumbstick object rotate you need to specifically use its original up to translate it\r\n this._myThumbstickOriginalUp.vec3_scale(-this._myThumbstickPressOffset, upTranslation);\r\n this._myThumbstick.pp_translateLocal(upTranslation);\r\n };\r\n}();", "import { Alignment, Component, Justification, MeshComponent, Property, TextComponent } from \"@wonderlandengine/api\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class GamepadControlSchemeComponent extends Component {\r\n static TypeName = \"pp-gamepad-control-scheme\";\r\n static Properties = {\r\n _myShowOnStart: Property.bool(true),\r\n\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n\r\n _mySelectText: Property.string(\"\"),\r\n _mySqueezeText: Property.string(\"\"),\r\n _myThumbstickText: Property.string(\"\"),\r\n _myBottomButtonText: Property.string(\"\"),\r\n _myTopButtonText: Property.string(\"\"),\r\n\r\n _mySelect: Property.object(null),\r\n _mySqueeze: Property.object(null),\r\n _myThumbstick: Property.object(null),\r\n _myBottomButton: Property.object(null),\r\n _myTopButton: Property.object(null),\r\n\r\n _myTextScaleMultiplier: Property.float(1),\r\n _myTextOffsetMultiplier: Property.float(1),\r\n _myLineLengthMultiplier: Property.float(1),\r\n _myLineThicknessMultiplier: Property.float(1),\r\n _myDistanceFromButtonsMultiplier: Property.float(1),\r\n\r\n _myTextMaterial: Property.material(),\r\n _myLineMaterial: Property.material()\r\n };\r\n\r\n start() {\r\n this._myTextMaterialFinal = (this._myTextMaterial != null) ? this._myTextMaterial : Globals.getDefaultMaterials(this.engine).myText.clone();\r\n this._myLineMaterialFinal = (this._myLineMaterial != null) ? this._myLineMaterial : Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myControlSchemeDirection = (this._myHandednessType == Handedness.LEFT) ? 1 : -1;\r\n\r\n this._myVisible = false;\r\n this._mySetVisibleNextUpdate = false;\r\n\r\n this._createControlScheme();\r\n this.setVisible(this._myShowOnStart);\r\n\r\n this._myVisibleBackup = this._myVisible;\r\n }\r\n\r\n update(dt) {\r\n if (this._mySetVisibleNextUpdate) {\r\n this._mySetVisibleNextUpdate = false;\r\n this.setVisible(false);\r\n this.setVisible(this._myVisibleBackup);\r\n }\r\n }\r\n\r\n onActivate() {\r\n this._mySetVisibleNextUpdate = true;\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myVisible != null) {\r\n this._myVisibleBackup = this._myVisible;\r\n this.setVisible(false);\r\n }\r\n }\r\n\r\n isVisible() {\r\n return this._myVisible;\r\n }\r\n\r\n setVisible(visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myParentObject != null) {\r\n this._myParentObject.pp_setActive(this._myVisible);\r\n\r\n if (this._myVisible) {\r\n this._hideEmptySchemes();\r\n }\r\n }\r\n }\r\n\r\n setSelectText(text) {\r\n this._mySelectText = text;\r\n this._mySelectTextComponent.text = this._mySelectText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setSqueezeText(text) {\r\n this._mySqueezeText = text;\r\n this._mySqueezeTextComponent.text = this._mySqueezeText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setThumbstickText(text) {\r\n this._myThumbstickText = text;\r\n this._myThumbstickTextComponent.text = this._myThumbstickText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setBottomButtonText(text) {\r\n this._myBottomButtonText = text;\r\n this._myBottomButtonTextComponent.text = this._myBottomButtonText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setTopButtonText(text) {\r\n this._myTopButtonText = text;\r\n this._myTopButtonTextComponent.text = this._myTopButtonText;\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n _createControlScheme() {\r\n this._myParentObject = this.object.pp_addObject();\r\n\r\n let distanceFromButton = 0.02 * this._myDistanceFromButtonsMultiplier;\r\n let lineLength = 0.0935 * this._myLineLengthMultiplier;\r\n\r\n let referenceObject = this._myThumbstick;\r\n\r\n this._mySelectObject = this._myParentObject.pp_addObject();\r\n this._mySelectTextComponent = this._addScheme(this._mySelect, referenceObject,\r\n vec3_create(0, 0, distanceFromButton),\r\n vec3_create(lineLength * this._myControlSchemeDirection, 0, 0),\r\n this._mySelectObject);\r\n this._mySelectTextComponent.text = this._mySelectText;\r\n\r\n this._mySqueezeObject = this._myParentObject.pp_addObject();\r\n this._mySqueezeTextComponent = this._addScheme(this._mySqueeze, referenceObject,\r\n vec3_create(distanceFromButton * this._myControlSchemeDirection, 0, 0),\r\n vec3_create(lineLength * this._myControlSchemeDirection, 0, 0),\r\n this._mySqueezeObject);\r\n this._mySqueezeTextComponent.text = this._mySqueezeText;\r\n\r\n this._myThumbstickObject = this._myParentObject.pp_addObject();\r\n this._myThumbstickTextComponent = this._addScheme(this._myThumbstick, referenceObject,\r\n vec3_create(0, distanceFromButton, 0),\r\n vec3_create(-lineLength * this._myControlSchemeDirection, 0, 0),\r\n this._myThumbstickObject);\r\n this._myThumbstickTextComponent.text = this._myThumbstickText;\r\n\r\n let thumbstickPositionLocal = this._myThumbstick.pp_getPositionLocal();\r\n let thumbstickUpLocal = this._myThumbstick.pp_getUpLocal();\r\n\r\n {\r\n let bottomButtonPositionLocal = this._myBottomButton.pp_getPositionLocal();\r\n let difference = bottomButtonPositionLocal.vec3_sub(thumbstickPositionLocal);\r\n let differenceOnUp = difference.vec3_valueAlongAxis(thumbstickUpLocal);\r\n\r\n this._myBottomButtonObject = this._myParentObject.pp_addObject();\r\n this._myBottomButtonTextComponent = this._addScheme(this._myBottomButton, referenceObject,\r\n vec3_create(0, distanceFromButton - differenceOnUp, 0),\r\n vec3_create(0, 0, -lineLength),\r\n this._myBottomButtonObject);\r\n this._myBottomButtonTextComponent.text = this._myBottomButtonText;\r\n }\r\n\r\n {\r\n let topButtonPositionLocal = this._myTopButton.pp_getPositionLocal();\r\n let difference = topButtonPositionLocal.vec3_sub(thumbstickPositionLocal);\r\n let differenceOnUp = difference.vec3_valueAlongAxis(thumbstickUpLocal);\r\n\r\n this._myTopButtonObject = this._myParentObject.pp_addObject();\r\n this._myTopButtonTextComponent = this._addScheme(this._myTopButton, referenceObject,\r\n vec3_create(0, distanceFromButton - differenceOnUp, 0),\r\n vec3_create(-lineLength * this._myControlSchemeDirection, 0, 0).vec3_rotateAxis(-45 * this._myControlSchemeDirection, vec3_create(0, 1, 0)),\r\n this._myTopButtonObject);\r\n this._myTopButtonTextComponent.text = this._myTopButtonText;\r\n }\r\n }\r\n\r\n _addScheme(buttonObject, referenceObject, startOffset, endOffset, parentObject) {\r\n let buttonPosition = buttonObject.pp_getPositionLocal();\r\n let referenceForward = referenceObject.pp_getForwardLocal();\r\n let referenceRight = referenceObject.pp_getRightLocal();\r\n let referenceUp = referenceObject.pp_getUpLocal();\r\n\r\n let lineStart = buttonPosition.vec3_add(referenceRight.vec3_scale(startOffset[0]));\r\n lineStart.vec3_add(referenceUp.vec3_scale(startOffset[1]), lineStart);\r\n lineStart.vec3_add(referenceForward.vec3_scale(startOffset[2]), lineStart);\r\n\r\n let lineEnd = lineStart.vec3_add(referenceRight.vec3_scale(endOffset[0]));\r\n lineEnd.vec3_add(referenceUp.vec3_scale(endOffset[1]), lineEnd);\r\n lineEnd.vec3_add(referenceForward.vec3_scale(endOffset[2]), lineEnd);\r\n\r\n let textOffset = 0.01 * this._myTextOffsetMultiplier;\r\n let textPosition = lineEnd.vec3_add(referenceForward.vec3_scale(-textOffset));\r\n\r\n this._addLine(lineStart, lineEnd, parentObject);\r\n let textComponent = this._addText(textPosition, referenceForward, referenceUp, parentObject);\r\n\r\n return textComponent;\r\n }\r\n\r\n _addLine(start, end, parentObject) {\r\n let lineDirection = end.vec3_sub(start);\r\n let length = lineDirection.vec3_length();\r\n lineDirection.vec3_normalize(lineDirection);\r\n\r\n let lineParentObject = parentObject.pp_addObject();\r\n let lineObject = lineParentObject.pp_addObject();\r\n\r\n let lineMesh = lineObject.pp_addComponent(MeshComponent);\r\n lineMesh.mesh = Globals.getDefaultMeshes(this.engine).myCylinder;\r\n lineMesh.material = this._myLineMaterialFinal;\r\n\r\n lineParentObject.pp_setPositionLocal(start);\r\n\r\n let thickness = 0.001 * this._myLineThicknessMultiplier;\r\n lineObject.pp_scaleObject(vec3_create(thickness / 2, length / 2, thickness / 2));\r\n\r\n lineObject.pp_setUpLocal(lineDirection);\r\n lineObject.pp_translateObject(vec3_create(0, length / 2, 0));\r\n }\r\n\r\n _addText(position, forward, up, parentObject) {\r\n let textObject = parentObject.pp_addObject();\r\n textObject.pp_setPositionLocal(position);\r\n textObject.pp_lookToLocal(up, forward);\r\n textObject.pp_scaleObject(0.0935 * this._myTextScaleMultiplier);\r\n\r\n let textComponent = textObject.pp_addComponent(TextComponent);\r\n textComponent.alignment = Alignment.Center;\r\n textComponent.justification = Justification.Top;\r\n textComponent.material = this._myTextMaterialFinal;\r\n\r\n return textComponent;\r\n }\r\n\r\n _hideEmptySchemes() {\r\n if (this._mySelectText.length == 0) {\r\n this._mySelectObject.pp_setActive(false);\r\n }\r\n if (this._mySqueezeText.length == 0) {\r\n this._mySqueezeObject.pp_setActive(false);\r\n }\r\n if (this._myThumbstickText.length == 0) {\r\n this._myThumbstickObject.pp_setActive(false);\r\n }\r\n if (this._myBottomButtonText.length == 0) {\r\n this._myBottomButtonObject.pp_setActive(false);\r\n }\r\n if (this._myTopButtonText.length == 0) {\r\n this._myTopButtonObject.pp_setActive(false);\r\n }\r\n }\r\n}", "import { GamepadCore } from \"./gamepad_core.js\";\r\n\r\nexport class VirtualGamepadGamepadCore extends GamepadCore {\r\n\r\n constructor(virtualGamepad, handPose) {\r\n super(handPose);\r\n\r\n this._myVirtualGamepad = virtualGamepad;\r\n\r\n // Support Variables\r\n this._myButtonData = this._createButtonData();\r\n this._myAxesData = this._createAxesData();\r\n this._myHapticActuators = [];\r\n }\r\n\r\n isGamepadCoreActive() {\r\n return this._myVirtualGamepad.isVisible();\r\n }\r\n\r\n getButtonData(buttonID) {\r\n this._myButtonData.myPressed = false;\r\n this._myButtonData.myTouched = false;\r\n this._myButtonData.myValue = 0;\r\n\r\n if (this.isGamepadCoreActive()) {\r\n if (this._myVirtualGamepad.isButtonPressed(this.getHandedness(), buttonID)) {\r\n this._myButtonData.myPressed = true;\r\n this._myButtonData.myTouched = true;\r\n this._myButtonData.myValue = 1;\r\n }\r\n }\r\n\r\n return this._myButtonData;\r\n }\r\n\r\n getAxesData(axesID) {\r\n this._myAxesData.vec2_zero();\r\n\r\n if (this.isGamepadCoreActive()) {\r\n this._myVirtualGamepad.getAxes(this.getHandedness(), axesID, this._myAxesData);\r\n }\r\n\r\n return this._myAxesData;\r\n }\r\n\r\n getHapticActuators() {\r\n return this._myHapticActuators;\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport let VirtualGamepadIconType = {\r\n NONE: 0,\r\n LABEL: 1,\r\n IMAGE: 2,\r\n DOT: 3,\r\n CIRCLE: 4,\r\n SQUARE: 5,\r\n RING: 6,\r\n FRAME: 7\r\n};\r\n\r\nexport class VirtualGamepadIconParams {\r\n\r\n constructor() {\r\n this.myBackgroundColor = \"\";\r\n this.myBackgroundPressedColor = \"\";\r\n this.myIconColor = \"\";\r\n this.myIconPressedColor = \"\";\r\n\r\n this.myIconType = VirtualGamepadIconType.NONE;\r\n\r\n this.myOverallHoveredBrightness = 1;\r\n\r\n // If icon type is label\r\n\r\n this.myLabel = \"\";\r\n this.myLabelFontSize = 0;\r\n this.myLabelFontFamily = \"\";\r\n this.myLabelFontWeight = \"\";\r\n\r\n // If icon type is image\r\n\r\n this.myImageURL = \"\";\r\n this.myImagePressedBrightness = 1;\r\n }\r\n}\r\n\r\nexport class VirtualGamepadIcon {\r\n\r\n constructor(iconElementParent, iconParams, minSizeMultiplier, scale, engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myParams = iconParams;\r\n\r\n this._myIconContainerElement = null;\r\n this._myBackgroundElement = null;\r\n this._myIconElement = null;\r\n\r\n this._myPressed = false;\r\n\r\n this._myMouseHover = false;\r\n this._myMouseHoverEnabled = true;\r\n\r\n this._myDestroyed = false;\r\n\r\n this._build(iconElementParent, minSizeMultiplier, scale);\r\n }\r\n\r\n update(dt) {\r\n if (this._myPressed || !this._myMouseHover || !this._myMouseHoverEnabled) {\r\n this._myIconContainerElement.style.filter = \"none\";\r\n } else {\r\n this._myIconContainerElement.style.filter = \"brightness(\" + this._myParams.myOverallHoveredBrightness + \")\";\r\n }\r\n }\r\n\r\n reset() {\r\n this.setPressed(false);\r\n this._myMouseHover = false;\r\n this._myIconContainerElement.style.filter = \"none\";\r\n }\r\n\r\n setPressed(pressed) {\r\n if (this._myPressed != pressed) {\r\n this._myPressed = pressed;\r\n\r\n if (this._myPressed) {\r\n this._myBackgroundElement.style.fill = this._myParams.myBackgroundPressedColor;\r\n if (this._myIconElement != null) {\r\n if (this._myIconElement.style.strokeWidth.length > 0) {\r\n this._myIconElement.style.stroke = this._myParams.myIconPressedColor;\r\n } else {\r\n this._myIconElement.style.fill = this._myParams.myIconPressedColor;\r\n }\r\n\r\n if (this._myParams.myIconType == VirtualGamepadIconType.IMAGE) {\r\n this._myIconElement.style.filter = \"brightness(\" + this._myParams.myImagePressedBrightness + \")\";\r\n }\r\n }\r\n } else {\r\n this._myBackgroundElement.style.fill = this._myParams.myBackgroundColor;\r\n if (this._myIconElement != null) {\r\n if (this._myIconElement.style.strokeWidth.length > 0) {\r\n this._myIconElement.style.stroke = this._myParams.myIconColor;\r\n } else {\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n }\r\n\r\n if (this._myParams.myIconType == VirtualGamepadIconType.IMAGE) {\r\n this._myIconElement.style.filter = \"none\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n onMouseEnter() {\r\n this._myMouseHover = true;\r\n }\r\n\r\n onMouseLeave() {\r\n this._myMouseHover = false;\r\n }\r\n\r\n setMouseHoverEnabled(enabled) {\r\n this._myMouseHoverEnabled = enabled;\r\n }\r\n\r\n _build(iconElementParent, minSizeMultiplier, scale) {\r\n this._myIconContainerElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n this._myIconContainerElement.style.position = \"absolute\";\r\n this._myIconContainerElement.style.width = \"100%\";\r\n this._myIconContainerElement.style.height = \"100%\";\r\n iconElementParent.appendChild(this._myIconContainerElement);\r\n\r\n this._myBackgroundElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myBackgroundElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myBackgroundElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myBackgroundElement.setAttributeNS(null, \"r\", \"50%\");\r\n this._myBackgroundElement.style.fill = this._myParams.myBackgroundColor;\r\n this._myIconContainerElement.appendChild(this._myBackgroundElement);\r\n\r\n switch (this._myParams.myIconType) {\r\n case VirtualGamepadIconType.NONE:\r\n break;\r\n case VirtualGamepadIconType.LABEL:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"50%\");\r\n this._myIconElement.style.textAlign = \"center\";\r\n this._myIconElement.style.textAnchor = \"middle\";\r\n this._myIconElement.style.dominantBaseline = \"central\";\r\n this._myIconElement.style.alignmentBaseline = \"central\";\r\n this._myIconElement.style.fontFamily = this._myParams.myLabelFontFamily;\r\n this._myIconElement.style.fontWeight = this._myParams.myLabelFontWeight;\r\n this._myIconElement.style.fontSize = this._createSizeValue(this._myParams.myLabelFontSize * scale, minSizeMultiplier);\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.textContent = this._myParams.myLabel;\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.IMAGE:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"0%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"0%\");\r\n this._myIconElement.setAttribute(\"href\", this._myParams.myImageURL);\r\n this._myIconElement.style.width = \"100%\";\r\n this._myIconElement.style.height = \"100%\";\r\n this._myIconElement.style.filter = \"none\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.DOT:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myIconElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"r\", \"17.5%\");\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.CIRCLE:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myIconElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"r\", \"24%\");\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.SQUARE:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"28%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"28%\");\r\n this._myIconElement.setAttributeNS(null, \"rx\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"ry\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"width\", \"44%\");\r\n this._myIconElement.setAttributeNS(null, \"height\", \"44%\");\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.transformOrigin = \"center\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.RING:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myIconElement.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myIconElement.setAttributeNS(null, \"r\", \"20%\");\r\n this._myIconElement.style.fill = \"#00000000\";\r\n this._myIconElement.style.stroke = this._myParams.myIconColor;\r\n this._myIconElement.style.strokeWidth = \"10%\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n case VirtualGamepadIconType.FRAME:\r\n this._myIconElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n this._myIconElement.setAttributeNS(null, \"x\", \"31.5%\");\r\n this._myIconElement.setAttributeNS(null, \"y\", \"31.5%\");\r\n this._myIconElement.setAttributeNS(null, \"rx\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"ry\", \"10%\");\r\n this._myIconElement.setAttributeNS(null, \"width\", \"37%\");\r\n this._myIconElement.setAttributeNS(null, \"height\", \"37%\");\r\n this._myIconElement.style.fill = \"#00000000\";\r\n this._myIconElement.style.stroke = this._myParams.myIconColor;\r\n this._myIconElement.style.strokeWidth = \"10%\";\r\n this._myIconElement.style.transformOrigin = \"center\";\r\n this._myIconContainerElement.appendChild(this._myIconElement);\r\n break;\r\n }\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n _invertColors() {\r\n if (this._myIconElement.style.strokeWidth.length > 0) {\r\n this._myBackgroundElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.stroke = this._myParams.myBackgroundColor;\r\n } else {\r\n this._myBackgroundElement.style.fill = this._myParams.myIconColor;\r\n this._myIconElement.style.fill = this._myParams.myBackgroundColor;\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myIconContainerElement.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { VirtualGamepadIconParams, VirtualGamepadIconType } from \"./virtual_gamepad_icon.js\";\r\n\r\nexport class VirtualGamepadButtonParams {\r\n\r\n constructor() {\r\n this.myIconParams = new VirtualGamepadIconParams();\r\n }\r\n}\r\n\r\nexport class VirtualGamepadThumbstickParams {\r\n\r\n constructor() {\r\n this.myBackgroundColor = \"\";\r\n\r\n this.myMaxDistanceFromCenterMultiplier = 1;\r\n\r\n this.myReleaseTransitionSeconds = 0.2;\r\n this.myMoveTransitionSeconds = 0;\r\n\r\n this.myIncludeBackgroundToDetection = false; // You can press the background of the icon to move the thumbstick, makes it harder to miss it\r\n\r\n this.myIconParams = new VirtualGamepadIconParams();\r\n }\r\n}\r\n\r\nexport class VirtualGamepadParams {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this.myShowOnDesktop = false;\r\n this.myShowOnMobile = false;\r\n this.myShowOnHeadset = false; // Not 100% reliable, this is true if the device supports XR and it is Desktop\r\n\r\n this.myAutoUpdateVisibility = false;\r\n\r\n this.myOpacity = 1;\r\n\r\n this.myInterfaceScale = 1;\r\n this.myMarginScale = 1;\r\n\r\n this.myReleaseOnPointerLeave = true; // If mouse leaves the canvas it will be like it was released\r\n this.myStopPropagatingMouseDownEvents = true; // This can be used to make it so the rest of the game will ignore clicks on the virtual gamepad\r\n\r\n // Advanced Params\r\n\r\n this.myButtonParams = [];\r\n this.myButtonParams[Handedness.LEFT] = [];\r\n this.myButtonParams[Handedness.RIGHT] = [];\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SELECT] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SQUEEZE] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.THUMBSTICK] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.TOP_BUTTON] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON] = new VirtualGamepadButtonParams();\r\n\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SELECT] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SQUEEZE] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.THUMBSTICK] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON] = new VirtualGamepadButtonParams();\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON] = new VirtualGamepadButtonParams();\r\n\r\n this.myThumbstickParams = [];\r\n this.myThumbstickParams[Handedness.LEFT] = [];\r\n this.myThumbstickParams[Handedness.RIGHT] = [];\r\n this.myThumbstickParams[Handedness.LEFT][GamepadAxesID.THUMBSTICK] = new VirtualGamepadThumbstickParams();\r\n this.myThumbstickParams[Handedness.RIGHT][GamepadAxesID.THUMBSTICK] = new VirtualGamepadThumbstickParams();\r\n\r\n this.myButtonsOrder = [];\r\n this.myButtonsOrder[Handedness.LEFT] = [null, null, null, null, null];\r\n this.myButtonsOrder[Handedness.RIGHT] = [null, null, null, null, null];\r\n\r\n this.myThumbsticksOrder = [];\r\n this.myThumbsticksOrder[Handedness.LEFT] = [null];\r\n this.myThumbsticksOrder[Handedness.RIGHT] = [null];\r\n\r\n // Even More Advanced Params\r\n\r\n this.myValidPointerButtons = [];\r\n\r\n this.myMarginLeft = 0;\r\n this.myMarginRight = 0;\r\n this.myMarginBottom = 0;\r\n\r\n this.myThumbstickSize = 0;\r\n\r\n this.myButtonSize = 0;\r\n this.myButtonsRingRadius = 0;\r\n this.myButtonsRingStartAngle = 0;\r\n this.myButtonsRingEndAngle = 0;\r\n\r\n this.myFontSize = 0;\r\n\r\n this.myMinSizeMultiplier = 0; // Can be used to specify a min size based on the view width for when the view is in portrait mode\r\n\r\n this.myDisableMouseHoverWhenPressed = false;\r\n\r\n this.myEngine = engine;\r\n }\r\n\r\n defaultConfig() {\r\n this.myShowOnMobile = true;\r\n this.myAutoUpdateVisibility = true;\r\n\r\n this.myOpacity = 0.5;\r\n\r\n // Params\r\n\r\n let backgroundColor = \"#616161\";\r\n let iconColor = \"#e0e0e0\";\r\n\r\n let buttonHoveredBrightness = 0.75;\r\n let thumbstickHoveredBrightness = 0.75;\r\n\r\n let thumbstickIncludeBackgroundToDetection = true;\r\n\r\n for (let handedness in this.myButtonParams) {\r\n for (let gamepadButtonID in this.myButtonParams[handedness]) {\r\n let buttonParams = this.myButtonParams[handedness][gamepadButtonID];\r\n buttonParams.myIconParams.myBackgroundColor = backgroundColor;\r\n buttonParams.myIconParams.myBackgroundPressedColor = iconColor;\r\n buttonParams.myIconParams.myIconColor = iconColor;\r\n buttonParams.myIconParams.myIconPressedColor = backgroundColor;\r\n buttonParams.myIconParams.myOverallHoveredBrightness = buttonHoveredBrightness;\r\n }\r\n }\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SQUEEZE].myIconParams.myIconType = VirtualGamepadIconType.SQUARE;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SQUEEZE].myIconParams.myIconType = VirtualGamepadIconType.SQUARE;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.SELECT].myIconParams.myIconType = VirtualGamepadIconType.FRAME;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.SELECT].myIconParams.myIconType = VirtualGamepadIconType.FRAME;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.TOP_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.CIRCLE;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.CIRCLE;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.RING;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON].myIconParams.myIconType = VirtualGamepadIconType.RING;\r\n\r\n this.myButtonParams[Handedness.LEFT][GamepadButtonID.THUMBSTICK].myIconParams.myIconType = VirtualGamepadIconType.DOT;\r\n this.myButtonParams[Handedness.RIGHT][GamepadButtonID.THUMBSTICK].myIconParams.myIconType = VirtualGamepadIconType.DOT;\r\n\r\n for (let handedness in this.myThumbstickParams) {\r\n for (let gamepadAxesID in this.myThumbstickParams[handedness]) {\r\n let thumbstickParams = this.myThumbstickParams[handedness][gamepadAxesID];\r\n thumbstickParams.myBackgroundColor = backgroundColor;\r\n thumbstickParams.myIconParams.myBackgroundColor = iconColor;\r\n thumbstickParams.myIconParams.myBackgroundPressedColor = iconColor;\r\n thumbstickParams.myIconParams.myIconColor = backgroundColor;\r\n thumbstickParams.myIconParams.myIconPressedColor = backgroundColor;\r\n thumbstickParams.myIconParams.myOverallHoveredBrightness = thumbstickHoveredBrightness;\r\n\r\n thumbstickParams.myIncludeBackgroundToDetection = thumbstickIncludeBackgroundToDetection;\r\n }\r\n }\r\n\r\n // Orders\r\n\r\n this.myButtonsOrder[Handedness.LEFT][0] = [Handedness.LEFT, GamepadButtonID.SQUEEZE];\r\n this.myButtonsOrder[Handedness.LEFT][1] = [Handedness.LEFT, GamepadButtonID.SELECT];\r\n this.myButtonsOrder[Handedness.LEFT][2] = [Handedness.LEFT, GamepadButtonID.TOP_BUTTON];\r\n this.myButtonsOrder[Handedness.LEFT][3] = [Handedness.LEFT, GamepadButtonID.BOTTOM_BUTTON];\r\n this.myButtonsOrder[Handedness.LEFT][4] = [Handedness.LEFT, GamepadButtonID.THUMBSTICK];\r\n\r\n this.myButtonsOrder[Handedness.RIGHT][0] = [Handedness.RIGHT, GamepadButtonID.SQUEEZE];\r\n this.myButtonsOrder[Handedness.RIGHT][1] = [Handedness.RIGHT, GamepadButtonID.SELECT];\r\n this.myButtonsOrder[Handedness.RIGHT][2] = [Handedness.RIGHT, GamepadButtonID.TOP_BUTTON];\r\n this.myButtonsOrder[Handedness.RIGHT][3] = [Handedness.RIGHT, GamepadButtonID.BOTTOM_BUTTON];\r\n this.myButtonsOrder[Handedness.RIGHT][4] = [Handedness.RIGHT, GamepadButtonID.THUMBSTICK];\r\n\r\n this.myThumbsticksOrder[Handedness.LEFT][0] = [Handedness.LEFT, GamepadAxesID.THUMBSTICK];\r\n this.myThumbsticksOrder[Handedness.RIGHT][0] = [Handedness.RIGHT, GamepadAxesID.THUMBSTICK];\r\n\r\n // Sizes\r\n\r\n this.myMarginLeft = 3;\r\n this.myMarginRight = 3;\r\n this.myMarginBottom = 3;\r\n\r\n this.myThumbstickSize = 15;\r\n\r\n this.myButtonSize = 5;\r\n this.myButtonsRingRadius = 12;\r\n this.myButtonsRingStartAngle = 385;\r\n this.myButtonsRingEndAngle = 245;\r\n\r\n this.myMinSizeMultiplier = 5 / 3;\r\n\r\n // Cauldron\r\n\r\n this.myDisableMouseHoverWhenPressed = true;\r\n this.myValidPointerButtons = [0];\r\n }\r\n}", "import { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { VirtualGamepadIcon } from \"./virtual_gamepad_icon.js\";\r\n\r\nexport class VirtualGamepadVirtualButton {\r\n\r\n constructor(buttonElementParent, virtualGamepadParams, virtualButtonHandedness, virtualButtonIndex, gamepadButtonHandedness, gamepadButtonID) {\r\n this._myButtonElement = null;\r\n this._myButtonIcon = null;\r\n this._myButtonDetectionElement = null;\r\n\r\n this._myActive = true;\r\n\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n\r\n this._myPressed = false;\r\n\r\n this._myVirtualGamepadParams = virtualGamepadParams;\r\n this._myParams = this._myVirtualGamepadParams.myButtonParams[gamepadButtonHandedness][gamepadButtonID];\r\n\r\n this._build(buttonElementParent, virtualButtonHandedness, virtualButtonIndex);\r\n\r\n this._myPointerDownEventListener = this._onPointerDown.bind(this, this._myVirtualGamepadParams.myStopPropagatingPointerDownEvents);\r\n this._myPointerUpEventListener = this._onPointerUp.bind(this);\r\n this._myPointerLeaveEventListener = this._onPointerLeave.bind(this);\r\n this._myMouseEnterEventListener = this._onButtonEnter.bind(this);\r\n this._myMouseLeaveEventListener = this._onButtonLeave.bind(this);\r\n\r\n this._myButtonDetectionElement.addEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n document.body.addEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n\r\n if (this._myVirtualGamepadParams.myReleaseOnPointerLeave) {\r\n document.body.addEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n }\r\n\r\n this._myButtonDetectionElement.addEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myButtonDetectionElement.addEventListener(\"mouseleave\", this._myMouseLeaveEventListener);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isPressed() {\r\n return this._myActive && this._myPressed;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this.reset();\r\n this._myButtonIcon.reset();\r\n }\r\n\r\n this._myActive = active;\r\n }\r\n\r\n setMouseHoverEnabled(hoverActive) {\r\n this._myButtonIcon.setMouseHoverEnabled(hoverActive);\r\n }\r\n\r\n reset() {\r\n this._myButtonIcon.setPressed(false);\r\n\r\n this._myPressed = false;\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n }\r\n\r\n update(dt) {\r\n this._myButtonIcon.update(dt);\r\n }\r\n\r\n _onPointerDown(stopPropagatingPointerDownEvents, event) {\r\n if (!this._myActive) return;\r\n if (this._myPressed) return;\r\n if (!this._myVirtualGamepadParams.myValidPointerButtons.pp_hasEqual(event.button)) return;\r\n\r\n if (stopPropagatingPointerDownEvents) {\r\n event.stopPropagation();\r\n }\r\n event.preventDefault();\r\n\r\n this._myButtonIcon.setPressed(true);\r\n\r\n this._myPointerID = event.pointerId;\r\n this._myPointerButton = event.button;\r\n\r\n this._myPressed = true;\r\n }\r\n\r\n _onPointerUp(event) {\r\n if (!this._myActive) return;\r\n if (!this._myPressed) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n if (this._myPointerButton != null && this._myPointerButton != event.button) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onPointerLeave(event) {\r\n if (!this._myActive) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onButtonEnter(event) {\r\n if (!this._myActive) return;\r\n\r\n this._myButtonIcon.onMouseEnter(event);\r\n }\r\n\r\n _onButtonLeave(event) {\r\n if (!this._myActive) return;\r\n\r\n this._myButtonIcon.onMouseLeave(event);\r\n }\r\n\r\n _build(buttonElementParent, virtualButtonHandedness, virtualButtonIndex) {\r\n // Config variables used for the sizes and the like\r\n\r\n let buttonSize = this._myVirtualGamepadParams.myButtonSize * this._myVirtualGamepadParams.myInterfaceScale;\r\n let buttonsRingRadius = this._myVirtualGamepadParams.myButtonsRingRadius * this._myVirtualGamepadParams.myInterfaceScale;\r\n\r\n let thumbstickSize = this._myVirtualGamepadParams.myThumbstickSize * this._myVirtualGamepadParams.myInterfaceScale;\r\n\r\n let marginBottom = this._myVirtualGamepadParams.myMarginBottom * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginLeft = this._myVirtualGamepadParams.myMarginLeft * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginRight = this._myVirtualGamepadParams.myMarginRight * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n\r\n let buttonRingStartAngle = this._myVirtualGamepadParams.myButtonsRingStartAngle;\r\n let buttonRingEndAngle = this._myVirtualGamepadParams.myButtonsRingEndAngle;\r\n\r\n let minSizeMultiplier = Math.max(1, this._myVirtualGamepadParams.myMinSizeMultiplier / this._myVirtualGamepadParams.myInterfaceScale);\r\n\r\n let buttonsAmount = this._myVirtualGamepadParams.myButtonsOrder[Handedness.LEFT].length;\r\n\r\n let angleStep = (buttonRingEndAngle - buttonRingStartAngle) / (buttonsAmount - 1);\r\n\r\n let currentAngle = Math.pp_angleClamp(buttonRingStartAngle + angleStep * virtualButtonIndex);\r\n\r\n if (virtualButtonHandedness == Handedness.RIGHT) {\r\n currentAngle = 270 + (270 - currentAngle);\r\n currentAngle = Math.pp_angleClamp(currentAngle, true);\r\n }\r\n\r\n let counterAngle = 360 - currentAngle;\r\n\r\n // Actual button creation\r\n\r\n this._myButtonContainer = document.createElement(\"div\");\r\n this._myButtonContainer.style.position = \"absolute\";\r\n this._myButtonContainer.style.width = this._createSizeValue(buttonSize, minSizeMultiplier);\r\n this._myButtonContainer.style.height = this._createSizeValue(buttonSize, minSizeMultiplier);\r\n\r\n let centerOnThumbstickBottom = marginBottom + thumbstickSize / 2 - buttonSize / 2;\r\n\r\n this._myButtonContainer.style.bottom = this._createSizeValue(centerOnThumbstickBottom, minSizeMultiplier);\r\n\r\n if (virtualButtonHandedness == Handedness.LEFT) {\r\n let centerOnThumbstickLeft = marginLeft + thumbstickSize / 2 - buttonSize / 2;\r\n this._myButtonContainer.style.left = this._createSizeValue(centerOnThumbstickLeft, minSizeMultiplier);\r\n } else {\r\n let centerOnThumbstickRight = marginRight + thumbstickSize / 2 - buttonSize / 2;\r\n this._myButtonContainer.style.right = this._createSizeValue(centerOnThumbstickRight, minSizeMultiplier);\r\n }\r\n\r\n this._myButtonContainer.style.transform = \"rotate(\" + currentAngle + \"deg) translateX(\" + this._createSizeValue(buttonsRingRadius, minSizeMultiplier) + \")\";\r\n buttonElementParent.appendChild(this._myButtonContainer);\r\n\r\n this._myButtonElement = document.createElement(\"div\");\r\n this._myButtonElement.style.position = \"absolute\";\r\n this._myButtonElement.style.width = \"100%\";\r\n this._myButtonElement.style.height = \"100%\";\r\n this._myButtonElement.style.transform = \"rotate(\" + counterAngle + \"deg)\";\r\n this._myButtonContainer.appendChild(this._myButtonElement);\r\n\r\n this._myButtonIcon = new VirtualGamepadIcon(this._myButtonElement, this._myParams.myIconParams, minSizeMultiplier, this._myVirtualGamepadParams.myInterfaceScale, this._myVirtualGamepadParams.myEngine);\r\n\r\n let buttonElementStill = document.createElement(\"div\");\r\n buttonElementStill.style.position = \"absolute\";\r\n buttonElementStill.style.width = \"100%\";\r\n buttonElementStill.style.height = \"100%\";\r\n buttonElementStill.style.transform = \"rotate(\" + counterAngle + \"deg)\";\r\n this._myButtonContainer.appendChild(buttonElementStill);\r\n\r\n let buttonDetectionElementSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n buttonDetectionElementSVG.style.position = \"absolute\";\r\n buttonDetectionElementSVG.style.width = \"100%\";\r\n buttonDetectionElementSVG.style.height = \"100%\";\r\n buttonElementStill.appendChild(buttonDetectionElementSVG);\r\n\r\n let buttonDetectionElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n buttonDetectionElement.setAttributeNS(null, \"cx\", \"50%\");\r\n buttonDetectionElement.setAttributeNS(null, \"cy\", \"50%\");\r\n buttonDetectionElement.setAttributeNS(null, \"r\", \"50%\");\r\n buttonDetectionElement.style.fill = \"#00000000\";\r\n buttonDetectionElementSVG.appendChild(buttonDetectionElement);\r\n\r\n this._myButtonDetectionElement = buttonDetectionElement;\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myButtonDetectionElement.removeEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n\r\n document.body.removeEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.removeEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n\r\n this._myButtonDetectionElement.removeEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myButtonDetectionElement.removeEventListener(\"mouseleave\", this._myPointerUpEventLis_myMouseLeaveEventListenertener);\r\n\r\n this._myButtonIcon.destroy();\r\n\r\n this._myButtonContainer.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { vec2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { VirtualGamepadIcon } from \"./virtual_gamepad_icon.js\";\r\n\r\nexport class VirtualGamepadVirtualThumbstick {\r\n\r\n constructor(thumbstickElementParent, virtualGamepadParams, virtualThumbstickHandedness, gamepadThumbstickHandedness, gamepadAxesID) {\r\n this._myThumbstickElement = null;\r\n this._myThumbstickIcon = null;\r\n this._myThumbstickBackground = null;\r\n this._myThumbstickDetectionElement = null;\r\n\r\n this._myActive = true;\r\n\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n\r\n this._myThumbstickDragStartPosition = vec2_create();\r\n\r\n this._myAxes = vec2_create();\r\n this._myPressed = false;\r\n\r\n this._myVirtualGamepadParams = virtualGamepadParams;\r\n this._myParams = this._myVirtualGamepadParams.myThumbstickParams[gamepadThumbstickHandedness][gamepadAxesID];\r\n\r\n this._build(thumbstickElementParent, virtualThumbstickHandedness);\r\n\r\n this._myPointerDownEventListener = this._onPointerDown.bind(this, this._myVirtualGamepadParams.myStopPropagatingPointerDownEvents);\r\n this._myPointerUpEventListener = this._onPointerUp.bind(this);\r\n this._myPointerMoveEventListener = this._onPointerMove.bind(this);\r\n this._myPointerLeaveEventListener = this._onPointerLeave.bind(this);\r\n this._myMouseEnterEventListener = this._onThumbstickEnter.bind(this);\r\n this._myMouseLeaveEventListener = this._onThumbstickLeave.bind(this);\r\n\r\n this._myThumbstickDetectionElement.addEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n document.body.addEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.addEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n\r\n if (this._myVirtualGamepadParams.myReleaseOnPointerLeave) {\r\n document.body.addEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n }\r\n\r\n this._myThumbstickDetectionElement.addEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myThumbstickDetectionElement.addEventListener(\"mouseleave\", this._myMouseLeaveEventListener);\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isPressed() {\r\n return this._myActive && this._myPressed;\r\n }\r\n\r\n getAxes() {\r\n return this._myAxes;\r\n }\r\n\r\n setActive(active) {\r\n if (this._myActive != active) {\r\n this.reset();\r\n this._myThumbstickIcon.reset();\r\n }\r\n\r\n this._myActive = active;\r\n }\r\n\r\n setMouseHoverEnabled(hoverActive) {\r\n this._myThumbstickIcon.setMouseHoverEnabled(hoverActive);\r\n }\r\n\r\n reset() {\r\n this._myThumbstickIcon.setPressed(false);\r\n\r\n this._myAxes[0] = 0;\r\n this._myAxes[1] = 0;\r\n this._myPressed = false;\r\n this._myPointerID = null;\r\n this._myPointerButton = null;\r\n\r\n this._myThumbstickElement.style.transition = \"all \" + this._myParams.myReleaseTransitionSeconds + \"s ease 0s\";\r\n this._myThumbstickElement.style.transform = \"translate(0px, 0px)\";\r\n }\r\n\r\n update(dt) {\r\n this._myThumbstickIcon.update(dt);\r\n }\r\n\r\n _onPointerDown(stopPropagatingPointerDownEvents, event) {\r\n if (!this._myActive) return;\r\n if (this._myPressed) return;\r\n if (!this._myVirtualGamepadParams.myValidPointerButtons.pp_hasEqual(event.button)) return;\r\n\r\n if (stopPropagatingPointerDownEvents) {\r\n event.stopPropagation();\r\n }\r\n event.preventDefault();\r\n\r\n this._myThumbstickIcon.setPressed(true);\r\n\r\n this._myPointerID = event.pointerId;\r\n this._myPointerButton = event.button;\r\n\r\n this._myThumbstickDragStartPosition[0] = event.clientX;\r\n this._myThumbstickDragStartPosition[1] = event.clientY;\r\n\r\n this._myPressed = true;\r\n }\r\n\r\n _onPointerUp(event) {\r\n if (!this._myActive) return;\r\n if (!this._myPressed) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n if (this._myPointerButton != null && this._myPointerButton != event.button) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onPointerLeave(event) {\r\n if (!this._myActive) return;\r\n if (this._myPointerID != event.pointerId) return;\r\n\r\n this.reset();\r\n }\r\n\r\n _onThumbstickEnter(event) {\r\n this._myThumbstickIcon.onMouseEnter(event);\r\n }\r\n\r\n _onThumbstickLeave(event) {\r\n this._myThumbstickIcon.onMouseLeave(event);\r\n }\r\n\r\n _onPointerMove(event) {\r\n if (!this._myActive) return;\r\n if (!this._myPressed) return;\r\n\r\n if (event.pointerId != this._myPointerID) return;\r\n\r\n let mouseX = event.clientX;\r\n let mouseY = event.clientY;\r\n\r\n let backgroundRect = this._myThumbstickBackground.getBoundingClientRect();\r\n let maxDistanceFromCenter = (backgroundRect.width / 2) * this._myParams.myMaxDistanceFromCenterMultiplier;\r\n\r\n let xDiff = mouseX - this._myThumbstickDragStartPosition[0];\r\n let yDiff = mouseY - this._myThumbstickDragStartPosition[1];\r\n\r\n let angle = Math.atan2(yDiff, xDiff);\r\n let distanceFromDragStart = Math.min(maxDistanceFromCenter, Math.hypot(xDiff, yDiff));\r\n\r\n let translateThumbstickX = distanceFromDragStart * Math.cos(angle);\r\n let translateThumbstickY = distanceFromDragStart * Math.sin(angle);\r\n\r\n this._myThumbstickElement.style.transition = \"all \" + this._myParams.myMoveTransitionSeconds + \"s ease-out 0s\";\r\n this._myThumbstickElement.style.transform = \"translate(\" + translateThumbstickX + \"px, \" + translateThumbstickY + \"px)\";\r\n\r\n this._myAxes[0] = translateThumbstickX / maxDistanceFromCenter;\r\n this._myAxes[1] = -(translateThumbstickY / maxDistanceFromCenter);\r\n }\r\n\r\n _build(thumbstickElementParent, virtualThumbstickHandedness) {\r\n // Config variables used for the sizes and the like\r\n\r\n let thumbstickSize = this._myVirtualGamepadParams.myThumbstickSize * this._myVirtualGamepadParams.myInterfaceScale;\r\n\r\n let marginBottom = this._myVirtualGamepadParams.myMarginBottom * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginLeft = this._myVirtualGamepadParams.myMarginLeft * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n let marginRight = this._myVirtualGamepadParams.myMarginRight * this._myVirtualGamepadParams.myInterfaceScale * this._myVirtualGamepadParams.myMarginScale;\r\n\r\n let minSizeMultiplier = Math.max(1, this._myVirtualGamepadParams.myMinSizeMultiplier / this._myVirtualGamepadParams.myInterfaceScale);\r\n\r\n // Actual thumbstick creation\r\n\r\n this._myThumbstickContainer = document.createElement(\"div\");\r\n this._myThumbstickContainer.style.position = \"absolute\";\r\n this._myThumbstickContainer.style.width = this._createSizeValue(thumbstickSize, minSizeMultiplier);\r\n this._myThumbstickContainer.style.height = this._createSizeValue(thumbstickSize, minSizeMultiplier);\r\n this._myThumbstickContainer.style.bottom = this._createSizeValue(marginBottom, minSizeMultiplier);\r\n\r\n if (virtualThumbstickHandedness == Handedness.LEFT) {\r\n this._myThumbstickContainer.style.left = this._createSizeValue(marginLeft, minSizeMultiplier);\r\n } else {\r\n this._myThumbstickContainer.style.right = this._createSizeValue(marginRight, minSizeMultiplier);\r\n }\r\n\r\n thumbstickElementParent.appendChild(this._myThumbstickContainer);\r\n\r\n let thumbstickContainerSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n thumbstickContainerSVG.style.position = \"absolute\";\r\n thumbstickContainerSVG.style.width = \"100%\";\r\n thumbstickContainerSVG.style.height = \"100%\";\r\n this._myThumbstickContainer.appendChild(thumbstickContainerSVG);\r\n\r\n this._myThumbstickBackground = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n this._myThumbstickBackground.setAttributeNS(null, \"cx\", \"50%\");\r\n this._myThumbstickBackground.setAttributeNS(null, \"cy\", \"50%\");\r\n this._myThumbstickBackground.setAttributeNS(null, \"r\", \"48%\");\r\n this._myThumbstickBackground.style.fill = this._myParams.myBackgroundColor;\r\n thumbstickContainerSVG.appendChild(this._myThumbstickBackground);\r\n\r\n this._myThumbstickElement = document.createElement(\"div\");\r\n this._myThumbstickElement.style.position = \"absolute\";\r\n this._myThumbstickElement.style.width = \"34%\";\r\n this._myThumbstickElement.style.height = \"34%\";\r\n this._myThumbstickElement.style.top = \"33%\";\r\n this._myThumbstickElement.style.left = \"33%\";\r\n this._myThumbstickContainer.appendChild(this._myThumbstickElement);\r\n\r\n this._myThumbstickIcon = new VirtualGamepadIcon(this._myThumbstickElement, this._myParams.myIconParams, minSizeMultiplier, this._myVirtualGamepadParams.myScale, this._myVirtualGamepadParams.myEngine);\r\n\r\n if (this._myParams.myIncludeBackgroundToDetection) {\r\n let thumbstickBackgroundDetectionElementSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n thumbstickBackgroundDetectionElementSVG.style.position = \"absolute\";\r\n thumbstickBackgroundDetectionElementSVG.style.width = \"100%\";\r\n thumbstickBackgroundDetectionElementSVG.style.height = \"100%\";\r\n this._myThumbstickContainer.appendChild(thumbstickBackgroundDetectionElementSVG);\r\n\r\n let thumbstickBackgroundDetectionElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n thumbstickBackgroundDetectionElement.setAttributeNS(null, \"cx\", \"50%\");\r\n thumbstickBackgroundDetectionElement.setAttributeNS(null, \"cy\", \"50%\");\r\n thumbstickBackgroundDetectionElement.setAttributeNS(null, \"r\", \"48%\");\r\n thumbstickBackgroundDetectionElement.style.fill = \"#00000000\";\r\n thumbstickBackgroundDetectionElementSVG.appendChild(thumbstickBackgroundDetectionElement);\r\n\r\n this._myThumbstickDetectionElement = thumbstickBackgroundDetectionElement;\r\n } else {\r\n let thumbstickElementStill = document.createElement(\"div\");\r\n thumbstickElementStill.style.position = \"absolute\";\r\n thumbstickElementStill.style.width = \"34%\";\r\n thumbstickElementStill.style.height = \"34%\";\r\n thumbstickElementStill.style.top = \"33%\";\r\n thumbstickElementStill.style.left = \"33%\";\r\n this._myThumbstickContainer.appendChild(thumbstickElementStill);\r\n\r\n let thumbstickDetectionElementSVG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n thumbstickDetectionElementSVG.style.position = \"absolute\";\r\n thumbstickDetectionElementSVG.style.width = \"100%\";\r\n thumbstickDetectionElementSVG.style.height = \"100%\";\r\n thumbstickElementStill.appendChild(thumbstickDetectionElementSVG);\r\n\r\n let thumbstickDetectionElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n thumbstickDetectionElement.setAttributeNS(null, \"cx\", \"50%\");\r\n thumbstickDetectionElement.setAttributeNS(null, \"cy\", \"50%\");\r\n thumbstickDetectionElement.setAttributeNS(null, \"r\", \"50%\");\r\n thumbstickDetectionElement.style.fill = \"#00000000\";\r\n thumbstickDetectionElementSVG.appendChild(thumbstickDetectionElement);\r\n\r\n this._myThumbstickDetectionElement = thumbstickDetectionElement;\r\n }\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n this._myThumbstickDetectionElement.removeEventListener(\"pointerdown\", this._myPointerDownEventListener);\r\n\r\n document.body.removeEventListener(\"pointerup\", this._myPointerUpEventListener);\r\n document.body.removeEventListener(\"pointermove\", this._myPointerMoveEventListener);\r\n document.body.removeEventListener(\"pointerleave\", this._myPointerLeaveEventListener);\r\n\r\n this._myThumbstickDetectionElement.removeEventListener(\"mouseenter\", this._myMouseEnterEventListener);\r\n this._myThumbstickDetectionElement.removeEventListener(\"mouseleave\", this._myPointerUpEventLis_myMouseLeaveEventListenertener);\r\n\r\n this._myThumbstickIcon.destroy();\r\n\r\n this._myThumbstickContainer.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { BrowserUtils } from \"../../../cauldron/utils/browser_utils.js\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { vec2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadAxesID, GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { VirtualGamepadParams } from \"./virtual_gamepad_params.js\";\r\nimport { VirtualGamepadVirtualButton } from \"./virtual_gamepad_virtual_button.js\";\r\nimport { VirtualGamepadVirtualThumbstick } from \"./virtual_gamepad_virtual_thumbstick.js\";\r\n\r\nexport class VirtualGamepad {\r\n\r\n constructor(params = new VirtualGamepadParams()) {\r\n this._myParams = params;\r\n\r\n this._myVisible = true;\r\n this._myVirtualGamepadContainer = null;\r\n\r\n this._myVirtualGamepadVirtualButtons = [];\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT] = [];\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT] = [];\r\n\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.SELECT] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.SQUEEZE] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.THUMBSTICK] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.TOP_BUTTON] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON] = null;\r\n\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.SELECT] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.SQUEEZE] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.THUMBSTICK] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON] = null;\r\n this._myVirtualGamepadVirtualButtons[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON] = null;\r\n\r\n this._myButtonsAmount = this._myVirtualGamepadVirtualButtons[Handedness.LEFT].length;\r\n\r\n this._myVirtualGamepadVirtualThumbsticks = [];\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.LEFT] = [];\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.RIGHT] = [];\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.LEFT][GamepadAxesID.THUMBSTICK] = null;\r\n this._myVirtualGamepadVirtualThumbsticks[Handedness.RIGHT][GamepadAxesID.THUMBSTICK] = null;\r\n\r\n this._myGestureStartEventListener = null;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n isVisible() {\r\n return this._myVisible;\r\n }\r\n\r\n setVisible(visible) {\r\n if (this._myVisible != visible) {\r\n this._myVisible = visible;\r\n\r\n if (this._myVirtualGamepadContainer != null) {\r\n if (this._myVisible) {\r\n this._myVirtualGamepadContainer.style.display = \"block\";\r\n } else {\r\n this._myVirtualGamepadContainer.style.display = \"none\";\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.setActive(this._myVisible);\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.setActive(this._myVisible);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n isButtonPressed(handedness, gamepadButtonID) {\r\n if (!this._myVisible) return false;\r\n\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n return button.isPressed();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getAxes(handedness, gamepadAxesID, outAxes = vec2_create(0, 0)) {\r\n if (!this._myVisible) return outAxes;\r\n\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n outAxes.vec2_copy(thumbstick.getAxes());\r\n }\r\n\r\n return outAxes;\r\n }\r\n\r\n start() {\r\n this._buildVirtualGamepad();\r\n\r\n let currentVisible = this._myVisible;\r\n this._myVisible = !this._myVisible;\r\n this.setVisible(currentVisible);\r\n }\r\n\r\n update(dt) {\r\n if (this._myParams.myAutoUpdateVisibility) {\r\n if (XRUtils.isSessionActive(this._myParams.myEngine) && XRUtils.isVRSupported(this._myParams.myEngine)) {\r\n this.setVisible(false);\r\n } else if (this._myParams.myShowOnDesktop && BrowserUtils.isDesktop() && !XRUtils.isVRSupported(this._myParams.myEngine)) {\r\n this.setVisible(true);\r\n } else if (this._myParams.myShowOnHeadset && BrowserUtils.isDesktop() && XRUtils.isVRSupported(this._myParams.myEngine)) {\r\n this.setVisible(true);\r\n } else if (this._myParams.myShowOnMobile && BrowserUtils.isMobile()) {\r\n this.setVisible(true);\r\n } else {\r\n this.setVisible(false);\r\n }\r\n }\r\n\r\n if (this._myVisible) {\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.update(dt);\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.update(dt);\r\n }\r\n }\r\n }\r\n\r\n this._setMouseHoverEnabled(!(this._myParams.myDisableMouseHoverWhenPressed && this._isAnyElementPressed()));\r\n }\r\n }\r\n\r\n _buildVirtualGamepad() {\r\n this._setupDocumentBody();\r\n\r\n this._myVirtualGamepadContainer = document.createElement(\"div\");\r\n this._myVirtualGamepadContainer.style.display = \"block\";\r\n this._myVirtualGamepadContainer.style.opacity = this._myParams.myOpacity.toString();\r\n document.body.appendChild(this._myVirtualGamepadContainer);\r\n\r\n let leftDiv = document.createElement(\"div\");\r\n this._myVirtualGamepadContainer.appendChild(leftDiv);\r\n\r\n let rightDiv = document.createElement(\"div\");\r\n this._myVirtualGamepadContainer.appendChild(rightDiv);\r\n\r\n let buttonsAmount = this._myParams.myButtonsOrder[Handedness.LEFT].length;\r\n for (let i = 0; i < buttonsAmount; i++) {\r\n if (this._myParams.myButtonsOrder[Handedness.LEFT][i] != null) {\r\n let gamepadButtonHandedness = this._myParams.myButtonsOrder[Handedness.LEFT][i][0];\r\n let gamepadButtonID = this._myParams.myButtonsOrder[Handedness.LEFT][i][1];\r\n this._buildButton(leftDiv, Handedness.LEFT, i, gamepadButtonHandedness, gamepadButtonID);\r\n }\r\n\r\n if (this._myParams.myButtonsOrder[Handedness.RIGHT][i] != null) {\r\n let gamepadButtonHandedness = this._myParams.myButtonsOrder[Handedness.RIGHT][i][0];\r\n let gamepadButtonID = this._myParams.myButtonsOrder[Handedness.RIGHT][i][1];\r\n this._buildButton(rightDiv, Handedness.RIGHT, i, gamepadButtonHandedness, gamepadButtonID);\r\n }\r\n }\r\n\r\n let thumbsticksAmount = this._myParams.myThumbsticksOrder[Handedness.LEFT].length;\r\n for (let i = 0; i < thumbsticksAmount; i++) {\r\n if (this._myParams.myThumbsticksOrder[Handedness.LEFT][i] != null) {\r\n let gamepadThumbstickHandedness = this._myParams.myThumbsticksOrder[Handedness.LEFT][i][0];\r\n let gamepadAxesID = this._myParams.myThumbsticksOrder[Handedness.LEFT][i][1];\r\n this._buildThumbstick(leftDiv, Handedness.LEFT, gamepadThumbstickHandedness, gamepadAxesID);\r\n }\r\n\r\n if (this._myParams.myThumbsticksOrder[Handedness.RIGHT][i] != null) {\r\n let gamepadThumbstickHandedness = this._myParams.myThumbsticksOrder[Handedness.RIGHT][i][0];\r\n let gamepadAxesID = this._myParams.myThumbsticksOrder[Handedness.RIGHT][i][1];\r\n this._buildThumbstick(rightDiv, Handedness.RIGHT, gamepadThumbstickHandedness, gamepadAxesID);\r\n }\r\n }\r\n }\r\n\r\n _setupDocumentBody() {\r\n document.body.style.overflow = \"hidden\";\r\n document.body.style.userSelect = \"none\";\r\n document.body.style.webkitUserSelect = \"none\";\r\n document.body.style.webkitTapHighlightColor = \"transparent\";\r\n document.body.style.touchAction = \"none\";\r\n\r\n this._myGestureStartEventListener = function (e) {\r\n e.preventDefault();\r\n };\r\n document.addEventListener(\"gesturestart\", this._myGestureStartEventListener);\r\n }\r\n\r\n _buildButton(buttonElementParent, virtualButtonHandedness, virtualButtonIndex, gamepadButtonHandedness, gamepadButtonID) {\r\n let virtualGamepadVirtualButton = new VirtualGamepadVirtualButton(buttonElementParent, this._myParams, virtualButtonHandedness, virtualButtonIndex, gamepadButtonHandedness, gamepadButtonID);\r\n this._myVirtualGamepadVirtualButtons[gamepadButtonHandedness][gamepadButtonID] = virtualGamepadVirtualButton;\r\n }\r\n\r\n _buildThumbstick(thumbstickElementParent, virtualThumbstickHandedness, gamepadThumbstickHandedness, gamepadAxesID) {\r\n let virtualGamepadVirtualThumbstick = new VirtualGamepadVirtualThumbstick(thumbstickElementParent, this._myParams, virtualThumbstickHandedness, gamepadThumbstickHandedness, gamepadAxesID);\r\n this._myVirtualGamepadVirtualThumbsticks[gamepadThumbstickHandedness][gamepadAxesID] = virtualGamepadVirtualThumbstick;\r\n }\r\n\r\n _createSizeValue(value, minSizeMultiplier) {\r\n return \"min(\" + value.toFixed(3) + \"vmax,\" + (value * minSizeMultiplier).toFixed(3) + \"vw)\";\r\n }\r\n\r\n _isAnyElementPressed() {\r\n let anyElementPressed = false;\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null && button.isPressed()) {\r\n anyElementPressed = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!anyElementPressed) {\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null && thumbstick.isPressed()) {\r\n anyElementPressed = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return anyElementPressed;\r\n }\r\n\r\n _setMouseHoverEnabled(hoverActive) {\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.setMouseHoverEnabled(hoverActive);\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.setMouseHoverEnabled(hoverActive);\r\n }\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n document.removeEventListener(\"gesturestart\", this._myGestureStartEventListener);\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualButtons) {\r\n for (let gamepadButtonID in this._myVirtualGamepadVirtualButtons[handedness]) {\r\n let button = this._myVirtualGamepadVirtualButtons[handedness][gamepadButtonID];\r\n if (button != null) {\r\n button.destroy();\r\n }\r\n }\r\n }\r\n\r\n for (let handedness in this._myVirtualGamepadVirtualThumbsticks) {\r\n for (let gamepadAxesID in this._myVirtualGamepadVirtualThumbsticks[handedness]) {\r\n let thumbstick = this._myVirtualGamepadVirtualThumbsticks[handedness][gamepadAxesID];\r\n if (thumbstick != null) {\r\n thumbstick.destroy();\r\n }\r\n }\r\n }\r\n\r\n this._myVirtualGamepadContainer.remove();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { Handedness } from \"../../cauldron/input_types.js\";\r\nimport { GamepadButtonID } from \"../gamepad_buttons.js\";\r\nimport { VirtualGamepadGamepadCore } from \"../gamepad_cores/virtual_gamepad_gamepad_core.js\";\r\nimport { VirtualGamepad } from \"./virtual_gamepad.js\";\r\nimport { VirtualGamepadParams } from \"./virtual_gamepad_params.js\";\r\n\r\nexport class VirtualGamepadComponent extends Component {\r\n static TypeName = \"pp-virtual-gamepad\";\r\n static Properties = {\r\n _myShowOnDesktop: Property.bool(false), // You may have to enable headset too\r\n _myShowOnMobile: Property.bool(true),\r\n _myShowOnHeadset: Property.bool(false), // Not 100% reliable, this is true if the device supports XR and it is Desktop\r\n _myAddToUniversalGamepad: Property.bool(true),\r\n _myOpacity: Property.float(0.5),\r\n _myIconColor: Property.string(\"#e0e0e0\"),\r\n _myBackgroundColor: Property.string(\"#616161\"),\r\n _myInterfaceScale: Property.float(1),\r\n _myMarginScale: Property.float(1),\r\n\r\n ADVANCED_PARAMS_BELOW: Property.string(\"\"),\r\n\r\n _myLabelFontSize: Property.float(2),\r\n _myLabelFontFamily: Property.string(\"sans-serif\"),\r\n _myLabelFontWeight: Property.string(\"bold\"),\r\n _myImagePressedBrightness: Property.float(0.5),\r\n\r\n _myLeftSelectButtonVisible: Property.bool(true),\r\n _myLeftSelectButtonOrderIndex: Property.int(1),\r\n _myLeftSelectButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Frame\"),\r\n _myLeftSelectButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftSqueezeButtonVisible: Property.bool(true),\r\n _myLeftSqueezeButtonOrderIndex: Property.int(0),\r\n _myLeftSqueezeButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Square\"),\r\n _myLeftSqueezeButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftThumbstickButtonVisible: Property.bool(true),\r\n _myLeftThumbstickButtonOrderIndex: Property.int(4),\r\n _myLeftThumbstickButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Dot\"),\r\n _myLeftThumbstickButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftTopButtonVisible: Property.bool(true),\r\n _myLeftTopButtonOrderIndex: Property.int(2),\r\n _myLeftTopButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Circle\"),\r\n _myLeftTopButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myLeftBottomButtonVisible: Property.bool(true),\r\n _myLeftBottomButtonOrderIndex: Property.int(3),\r\n _myLeftBottomButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Ring\"),\r\n _myLeftBottomButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightSelectButtonVisible: Property.bool(true),\r\n _myRightSelectButtonOrderIndex: Property.int(1),\r\n _myRightSelectButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Frame\"),\r\n _myRightSelectButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightSqueezeButtonVisible: Property.bool(true),\r\n _myRightSqueezeButtonOrderIndex: Property.int(0),\r\n _myRightSqueezeButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Square\"),\r\n _myRightSqueezeButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightThumbstickButtonVisible: Property.bool(true),\r\n _myRightThumbstickButtonOrderIndex: Property.int(4),\r\n _myRightThumbstickButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Dot\"),\r\n _myRightThumbstickButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightTopButtonVisible: Property.bool(true),\r\n _myRightTopButtonOrderIndex: Property.int(2),\r\n _myRightTopButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Circle\"),\r\n _myRightTopButtonIconLabelOrImageUrl: Property.string(\"\"),\r\n\r\n _myRightBottomButtonVisible: Property.bool(true),\r\n _myRightBottomButtonOrderIndex: Property.int(3),\r\n _myRightBottomButtonIconType: Property.enum([\"None\", \"Label\", \"Image\", \"Dot\", \"Circle\", \"Square\", \"Ring\", \"Frame\"], \"Ring\"),\r\n _myRightBottomButtonIconLabelOrImageUrl: Property.string(\"\")\r\n };\r\n\r\n start() {\r\n let params = new VirtualGamepadParams(this.engine);\r\n params.defaultConfig();\r\n\r\n for (let handedness in params.myButtonParams) {\r\n for (let gamepadButtonID in params.myButtonParams[handedness]) {\r\n let buttonParams = params.myButtonParams[handedness][gamepadButtonID];\r\n buttonParams.myIconParams.myBackgroundColor = this._myBackgroundColor;\r\n buttonParams.myIconParams.myBackgroundPressedColor = this._myIconColor;\r\n buttonParams.myIconParams.myIconColor = this._myIconColor;\r\n buttonParams.myIconParams.myIconPressedColor = this._myBackgroundColor;\r\n }\r\n }\r\n\r\n for (let handedness in params.myThumbstickParams) {\r\n for (let gamepadAxesID in params.myThumbstickParams[handedness]) {\r\n let thumbstickParams = params.myThumbstickParams[handedness][gamepadAxesID];\r\n thumbstickParams.myBackgroundColor = this._myBackgroundColor;\r\n thumbstickParams.myIconParams.myBackgroundColor = this._myIconColor;\r\n thumbstickParams.myIconParams.myBackgroundPressedColor = this._myIconColor;\r\n thumbstickParams.myIconParams.myIconColor = this._myBackgroundColor;\r\n thumbstickParams.myIconParams.myIconPressedColor = this._myBackgroundColor;\r\n }\r\n }\r\n\r\n params.myOpacity = this._myOpacity;\r\n\r\n params.myInterfaceScale = this._myInterfaceScale;\r\n params.myMarginScale = this._myMarginScale;\r\n\r\n params.myShowOnDesktop = this._myShowOnDesktop;\r\n params.myShowOnMobile = this._myShowOnMobile;\r\n params.myShowOnHeadset = this._myShowOnHeadset;\r\n\r\n if (params.myShowOnDesktop || params.myShowOnMobile || params.myShowOnHeadset) {\r\n params.myAutoUpdateVisibility = true;\r\n } else {\r\n params.myAutoUpdateVisibility = false;\r\n }\r\n\r\n this._advancedConfig(params);\r\n\r\n this._myVirtualGamepad = new VirtualGamepad(params);\r\n this._myVirtualGamepad.setVisible(false);\r\n\r\n this._myVirtualGamepad.start();\r\n\r\n this._myFirstUpdate = true;\r\n\r\n this._myLeftVirtualGamepadGamepadCore = null;\r\n this._myRightVirtualGamepadGamepadCore = null;\r\n }\r\n\r\n update(dt) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n\r\n if (this._myAddToUniversalGamepad) {\r\n this._myLeftVirtualGamepadGamepadCore = new VirtualGamepadGamepadCore(this._myVirtualGamepad, Globals.getLeftGamepad(this.engine).getGamepadCore(\"pp_left_xr_gamepad\").getHandPose());\r\n this._myRightVirtualGamepadGamepadCore = new VirtualGamepadGamepadCore(this._myVirtualGamepad, Globals.getRightGamepad(this.engine).getGamepadCore(\"pp_right_xr_gamepad\").getHandPose());\r\n\r\n Globals.getLeftGamepad(this.engine).addGamepadCore(\"pp_left_virtual_gamepad\", this._myLeftVirtualGamepadGamepadCore);\r\n Globals.getRightGamepad(this.engine).addGamepadCore(\"pp_right_virtual_gamepad\", this._myRightVirtualGamepadGamepadCore);\r\n }\r\n }\r\n\r\n this._myVirtualGamepad.update(dt);\r\n }\r\n\r\n _advancedConfig(params) {\r\n params.myButtonsOrder[Handedness.LEFT] = [null, null, null, null, null];\r\n params.myButtonsOrder[Handedness.RIGHT] = [null, null, null, null, null];\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.SELECT];\r\n buttonParams.myIconParams.myIconType = this._myLeftSelectButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftSelectButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftSelectButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.SELECT];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.SQUEEZE];\r\n buttonParams.myIconParams.myIconType = this._myLeftSqueezeButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftSqueezeButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftSqueezeButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.SQUEEZE];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.THUMBSTICK];\r\n buttonParams.myIconParams.myIconType = this._myLeftThumbstickButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftThumbstickButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftThumbstickButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.THUMBSTICK];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.TOP_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myLeftTopButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftTopButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftTopButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.TOP_BUTTON];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.LEFT][GamepadButtonID.BOTTOM_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myLeftBottomButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myLeftBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myLeftBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myLeftBottomButtonVisible) {\r\n params.myButtonsOrder[Handedness.LEFT][this._myLeftBottomButtonOrderIndex] = [Handedness.LEFT, GamepadButtonID.BOTTOM_BUTTON];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.SELECT];\r\n buttonParams.myIconParams.myIconType = this._myRightSelectButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightSelectButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightSelectButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightSelectButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.SELECT];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.SQUEEZE];\r\n buttonParams.myIconParams.myIconType = this._myRightSqueezeButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightSqueezeButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightSqueezeButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightSqueezeButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.SQUEEZE];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.THUMBSTICK];\r\n buttonParams.myIconParams.myIconType = this._myRightThumbstickButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightThumbstickButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightThumbstickButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightThumbstickButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.THUMBSTICK];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.TOP_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myRightTopButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightTopButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightTopButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightTopButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.TOP_BUTTON];\r\n }\r\n }\r\n\r\n {\r\n let buttonParams = params.myButtonParams[Handedness.RIGHT][GamepadButtonID.BOTTOM_BUTTON];\r\n buttonParams.myIconParams.myIconType = this._myRightBottomButtonIconType;\r\n buttonParams.myIconParams.myLabel = this._myRightBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myImageURL = this._myRightBottomButtonIconLabelOrImageUrl;\r\n buttonParams.myIconParams.myLabelFontSize = this._myLabelFontSize;\r\n buttonParams.myIconParams.myLabelFontFamily = this._myLabelFontFamily;\r\n buttonParams.myIconParams.myLabelFontWeight = this._myLabelFontWeight;\r\n buttonParams.myIconParams.myImagePressedBrightness = this._myImagePressedBrightness;\r\n\r\n if (this._myRightBottomButtonVisible) {\r\n params.myButtonsOrder[Handedness.RIGHT][this._myRightBottomButtonOrderIndex] = [Handedness.RIGHT, GamepadButtonID.BOTTOM_BUTTON];\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n Globals.getLeftGamepad(this.engine)?.removeGamepadCore(\"pp_left_virtual_gamepad\");\r\n Globals.getRightGamepad(this.engine)?.removeGamepadCore(\"pp_right_virtual_gamepad\");\r\n\r\n this._myLeftVirtualGamepadGamepadCore.destroy();\r\n this._myRightVirtualGamepadGamepadCore.destroy();\r\n\r\n this._myVirtualGamepad.destroy();\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\n\r\nexport class SetPlayerHeightComponent extends Component {\r\n static TypeName = \"pp-set-player-height\";\r\n static Properties = {\r\n _myEyesHeight: Property.float(1.65),\r\n _mySetOnlyOnStart: Property.bool(false)\r\n };\r\n\r\n start() {\r\n let localPosition = this.object.pp_getPositionLocal();\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], this._myEyesHeight, localPosition[2]));\r\n\r\n this._myHeightSetOnce = false;\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this.engine);\r\n }\r\n\r\n _onXRSessionStart() {\r\n if (this.active && (!this._mySetOnlyOnStart || !this._myHeightSetOnce)) {\r\n let localPosition = this.object.pp_getPositionLocal();\r\n if (XRUtils.isReferenceSpaceFloorBased(this.engine)) {\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], 0, localPosition[2]));\r\n } else {\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], this._myEyesHeight, localPosition[2]));\r\n }\r\n\r\n this._myHeightSetOnce = true;\r\n }\r\n }\r\n\r\n _onXRSessionEnd() {\r\n if (this.active && !this._mySetOnlyOnStart) {\r\n let localPosition = this.object.pp_getPositionLocal();\r\n this.object.pp_setPositionLocal(vec3_create(localPosition[0], this._myEyesHeight, localPosition[2]));\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class SetHandLocalTransformComponent extends Component {\r\n static TypeName = \"pp-set-hand-local-transform\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\")\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n Globals.getHandPose(this._myHandednessType, this.engine).registerPoseUpdatedEventListener(this, this.onPoseUpdated.bind(this));\r\n }\r\n\r\n onPoseUpdated(dt, pose) {\r\n // Implemented outside class definition\r\n }\r\n\r\n onDestroy() {\r\n Globals.getHandPose(this._myHandednessType, this.engine)?.unregisterPoseUpdatedEventListener(this);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nSetHandLocalTransformComponent.prototype.onPoseUpdated = function () {\r\n let handPoseTransform = quat2_create();\r\n return function onPoseUpdated(dt, pose) {\r\n if (this.active) {\r\n if (XRUtils.isSessionActive(this.engine)) {\r\n if (pose.isValid()) {\r\n this.object.pp_setTransformLocalQuat(pose.getTransformQuat(handPoseTransform, null));\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Component } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create, quat_create, vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { BasePose } from \"../base_pose.js\";\r\n\r\nexport class SetHeadLocalTransformComponent extends Component {\r\n public static override TypeName = \"pp-set-head-local-transform\";\r\n\r\n public override start(): void {\r\n Globals.getHeadPose(this.engine)!.registerPoseUpdatedEventListener(this, this.onPoseUpdated.bind(this));\r\n }\r\n\r\n private static readonly _onPoseUpdatedSV =\r\n {\r\n cameraNonXRRotation: quat_create(),\r\n cameraNonXRUp: vec3_create(),\r\n cameraNonXRPosition: vec3_create(),\r\n headPoseTransform: quat2_create()\r\n };\r\n public onPoseUpdated(dt: number, pose: Readonly): void {\r\n if (this.active) {\r\n if (!XRUtils.isSessionActive(this.engine)) {\r\n const cameraNonXR = Globals.getPlayerObjects(this.engine)!.myCameraNonXR!;\r\n\r\n const cameraNonXRRotation = SetHeadLocalTransformComponent._onPoseUpdatedSV.cameraNonXRRotation;\r\n cameraNonXR.pp_getRotationLocalQuat(cameraNonXRRotation);\r\n\r\n if (Globals.isPoseForwardFixed(this.engine)) {\r\n const cameraNonXRUp = SetHeadLocalTransformComponent._onPoseUpdatedSV.cameraNonXRUp;\r\n (cameraNonXRRotation as any).quat_rotateAxisRadians(Math.PI, (cameraNonXRRotation as any).quat_getUp(cameraNonXRUp), cameraNonXRRotation);\r\n }\r\n\r\n const cameraNonXRPosition = SetHeadLocalTransformComponent._onPoseUpdatedSV.cameraNonXRPosition;\r\n this.object.pp_setPositionLocal(cameraNonXR.pp_getPositionLocal(cameraNonXRPosition));\r\n this.object.pp_setRotationLocalQuat(cameraNonXRRotation);\r\n } else {\r\n if (pose.isValid()) {\r\n const headPoseTransform = SetHeadLocalTransformComponent._onPoseUpdatedSV.headPoseTransform;\r\n this.object.pp_setTransformLocalQuat(pose.getTransformQuat(headPoseTransform, null));\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override onDestroy(): void {\r\n Globals.getHeadPose(this.engine)?.unregisterPoseUpdatedEventListener(this);\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { quat2_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class SetTrackedHandJointLocalTransformComponent extends Component {\r\n static TypeName = \"pp-set-tracked-hand-joint-local-transform\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _mySetLocalScaleAsJointRadius: Property.bool(false),\r\n _myJointID: Property.enum(\r\n [\r\n \"Wrist\",\r\n \"Thumb Metacarpal\", \"Thumb Phalanx Proximal\", \"Thumb Phalanx Distal\", \"Thumb Tip\",\r\n \"Index Metacarpal\", \"Index Phalanx Proximal\", \"Index Phalanx Intermediate\", \"Index Phalanx Distal\", \"Index Tip\",\r\n \"Middle Metacarpal\", \"Middle Phalanx Proximal\", \"Middle Phalanx Intermediate\", \"Middle Phalanx Distal\", \"Middle Tip\",\r\n \"Ring Metacarpal\", \"Ring Phalanx Proximal\", \"Ring Phalanx Intermediate\", \"Ring Phalanx Distal\", \"Ring Tip\",\r\n \"Pinky Metacarpal\", \"Pinky Phalanx Proximal\", \"Pinky Phalanx Intermediate\", \"Pinky Phalanx Distal\", \"Pinky Tip\"\r\n ],\r\n \"Wrist\")\r\n };\r\n\r\n start() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n this._myJointIDType = InputUtils.getJointIDByIndex(this._myJointID);\r\n\r\n Globals.getTrackedHandPose(this._myHandednessType, this.engine).getJointPose(this._myJointIDType).registerPoseUpdatedEventListener(this, this.onPoseUpdated.bind(this));\r\n }\r\n\r\n onPoseUpdated(dt, pose) {\r\n // Implemented outside class definition\r\n }\r\n\r\n onDestroy() {\r\n Globals.getTrackedHandPose(this._myHandednessType, this.engine)?.getJointPose(this._myJointIDType)?.unregisterPoseUpdatedEventListener(this);\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nSetTrackedHandJointLocalTransformComponent.prototype.onPoseUpdated = function () {\r\n let jointPoseTransform = quat2_create();\r\n return function onPoseUpdated(dt, pose) {\r\n if (this.active) {\r\n if (XRUtils.isSessionActive(this.engine)) {\r\n if (pose.isValid()) {\r\n this.object.pp_setTransformLocalQuat(pose.getTransformQuat(jointPoseTransform, null));\r\n\r\n if (this._mySetLocalScaleAsJointRadius) {\r\n this.object.pp_setScaleLocal(pose.getJointRadius());\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { InputUtils } from \"../../cauldron/input_utils.js\";\r\n\r\nexport class CopyHandTransformComponent extends Component {\r\n static TypeName = \"pp-copy-hand-transform\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\")\r\n };\r\n\r\n init() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n }\r\n\r\n update(dt) {\r\n let hand = Globals.getPlayerObjects(this.engine).myHands[this._myHandednessType];\r\n this.object.pp_setTransformQuat(hand.pp_getTransformQuat());\r\n this.object.pp_setScale(hand.pp_getScale());\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class CopyHeadTransformComponent extends Component {\r\n static TypeName = \"pp-copy-head-transform\";\r\n static Properties = {};\r\n\r\n update(dt) {\r\n let head = Globals.getPlayerObjects(this.engine).myHead;\r\n this.object.pp_setTransformQuat(head.pp_getTransformQuat());\r\n this.object.pp_setScale(head.pp_getScale());\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class CopyPlayerTransformComponent extends Component {\r\n static TypeName = \"pp-copy-player-transform\";\r\n static Properties = {};\r\n\r\n update(dt) {\r\n let player = Globals.getPlayerObjects(this.engine).myPlayer;\r\n this.object.pp_setTransformQuat(player.pp_getTransformQuat());\r\n this.object.pp_setScale(player.pp_getScale());\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class CopyReferenceSpaceTransformComponent extends Component {\r\n static TypeName = \"pp-copy-reference-space-transform\";\r\n static Properties = {};\r\n\r\n update(dt) {\r\n let referenceSpace = Globals.getPlayerObjects(this.engine).myReferenceSpace;\r\n this.object.pp_setTransformQuat(referenceSpace.pp_getTransformQuat());\r\n this.object.pp_setScale(referenceSpace.pp_getScale());\r\n }\r\n}", "export let ToolHandedness = {\r\n NONE: null,\r\n LEFT: \"left\",\r\n RIGHT: \"right\"\r\n};\r\n\r\nexport let ToolInputSourceType = {\r\n NONE: null,\r\n GAMEPAD: 0,\r\n TRACKED_HAND: 1\r\n};", "import { Component, MeshComponent, Property, ViewComponent } from \"@wonderlandengine/api\";\r\nimport { Cursor, CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../cauldron/utils/xr_utils.js\";\r\nimport { FingerCursorComponent } from \"../../../input/cauldron/components/finger_cursor_component.js\";\r\nimport { InputUtils } from \"../../../input/cauldron/input_utils.js\";\r\nimport { quat2_create, vec3_create, vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\n\r\nexport class ToolCursorComponent extends Component {\r\n static TypeName = \"pp-tool-cursor\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"Left\", \"Right\"], \"Left\"),\r\n _myApplyDefaultCursorOffset: Property.bool(true),\r\n _myPulseOnHover: Property.bool(false),\r\n _myShowFingerCursor: Property.bool(false),\r\n _myUpdatePointerCursorStyle: Property.bool(true)\r\n };\r\n\r\n init() {\r\n this._myHandednessType = InputUtils.getHandednessByIndex(this._myHandedness);\r\n\r\n this._myCursorPositionDefaultOffset = vec3_create(0, -0.035, 0.05);\r\n this._myCursorRotationDefaultOffset = vec3_create(30, 0, 0);\r\n\r\n this._myCursorMeshScale = vec3_create(0.0025, 0.0025, 0.0025);\r\n this._myCursorColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this._myCursorTargetCollisionGroup = 7; // Keep this in sync with Widgets \r\n\r\n this._myStarted = false;\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myToolCursorObject = this.object.pp_addObject();\r\n\r\n this._myCursorObjectXR = this._myToolCursorObject.pp_addObject();\r\n\r\n if (this._myApplyDefaultCursorOffset) {\r\n this._myCursorObjectXR.pp_setPositionLocal(this._myCursorPositionDefaultOffset);\r\n this._myCursorObjectXR.pp_rotateObject(this._myCursorRotationDefaultOffset);\r\n }\r\n\r\n {\r\n this._myCursorMeshobject = this._myCursorObjectXR.pp_addObject();\r\n this._myCursorMeshobject.pp_setScale(this._myCursorMeshScale);\r\n\r\n let cursorMeshComponent = this._myCursorMeshobject.pp_addComponent(MeshComponent);\r\n cursorMeshComponent.mesh = Globals.getDefaultMeshes(this.engine).mySphere;\r\n cursorMeshComponent.material = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n cursorMeshComponent.material.color = this._myCursorColor;\r\n\r\n this._myCursorComponentXR = this._myCursorObjectXR.pp_addComponent(Cursor, {\r\n \"collisionGroup\": this._myCursorTargetCollisionGroup,\r\n \"handedness\": this._myHandedness + 1,\r\n \"cursorObject\": this._myCursorMeshobject,\r\n \"styleCursor\": false\r\n });\r\n\r\n this._myCursorComponentXR.rayCastMode = 0; // Collision\r\n if (this._myPulseOnHover) {\r\n this._myCursorComponentXR.globalTarget.onHover.add(this._pulseOnHover.bind(this), { id: this });\r\n }\r\n }\r\n\r\n this._myCursorObjectNonXR = this._myToolCursorObject.pp_addObject();\r\n\r\n {\r\n this._myCursorComponentNonXR = this._myCursorObjectNonXR.pp_addComponent(Cursor, {\r\n \"collisionGroup\": this._myCursorTargetCollisionGroup,\r\n \"handedness\": this._myHandedness + 1,\r\n \"styleCursor\": this._myUpdatePointerCursorStyle\r\n });\r\n\r\n this._myCursorComponentNonXR.rayCastMode = 0; // Collision\r\n if (this._myPulseOnHover) {\r\n this._myCursorComponentNonXR.globalTarget.onHover.add(this._pulseOnHover.bind(this), { id: this });\r\n }\r\n this._myCursorComponentNonXR.pp_setViewComponent(Globals.getPlayerObjects(this.engine).myCameraNonXR.pp_getComponent(ViewComponent));\r\n }\r\n\r\n let fingerCursorMeshObject = null;\r\n let fingerCollisionSize = 0.0125;\r\n\r\n if (this._myShowFingerCursor) {\r\n fingerCursorMeshObject = this._myToolCursorObject.pp_addObject();\r\n\r\n let meshComponent = fingerCursorMeshObject.pp_addComponent(MeshComponent);\r\n meshComponent.mesh = Globals.getDefaultMeshes(this.engine).mySphere;\r\n meshComponent.material = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n meshComponent.material.color = this._myCursorColor;\r\n\r\n fingerCursorMeshObject.pp_setScale(fingerCollisionSize);\r\n }\r\n\r\n this._myFingerCursorObject = this._myToolCursorObject.pp_addObject();\r\n this._myFingerCursorComponent = this._myFingerCursorObject.pp_addComponent(FingerCursorComponent, {\r\n \"_myHandedness\": this._myHandedness,\r\n \"_myMultipleClicksEnabled\": true,\r\n \"_myCollisionGroup\": this._myCursorTargetCollisionGroup,\r\n \"_myCollisionSize\": fingerCollisionSize,\r\n \"_myCursorObject\": fingerCursorMeshObject\r\n });\r\n\r\n this._myCursorComponentXR.active = false;\r\n this._myCursorComponentNonXR.active = false;\r\n this._myFingerCursorComponent.active = false;\r\n\r\n this._myStarted = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n // Implemented outside class definition\r\n }\r\n\r\n _isUsingHand() {\r\n let usingHand = false;\r\n\r\n if (XRUtils.getSession(this.engine) && XRUtils.getSession(this.engine).inputSources != null) {\r\n for (let i = 0; i < XRUtils.getSession(this.engine).inputSources.length; i++) {\r\n let input = XRUtils.getSession(this.engine).inputSources[i];\r\n if (input.hand && input.handedness == this._myHandednessType) {\r\n usingHand = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return usingHand;\r\n }\r\n\r\n _pulseOnHover(object) {\r\n let targetComponent = object.pp_getComponent(CursorTarget);\r\n\r\n if (targetComponent && !targetComponent.isSurface) {\r\n if (this._myHandedness == 0) {\r\n if (Globals.getLeftGamepad(this.engine) != null) {\r\n Globals.getLeftGamepad(this.engine).pulse(0.4, 0);\r\n }\r\n } else {\r\n if (Globals.getRightGamepad(this.engine) != null) {\r\n Globals.getRightGamepad(this.engine).pulse(0.4, 0);\r\n }\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myStarted) {\r\n this._myCursorComponentXR.globalTarget.onHover.remove(this);\r\n this._myCursorComponentNonXR.globalTarget.onHover.remove(this);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n// IMPLEMENTATION\r\n\r\nToolCursorComponent.prototype.update = function () {\r\n let transformQuat = quat2_create();\r\n return function update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n let usingHand = this._isUsingHand();\r\n\r\n this._myFingerCursorComponent.active = usingHand;\r\n\r\n if (usingHand) {\r\n this._myCursorComponentXR.active = false;\r\n this._myCursorComponentNonXR.active = false;\r\n } else {\r\n if (XRUtils.isSessionActive(this.engine)) {\r\n this._myCursorComponentXR.active = !usingHand;\r\n this._myCursorComponentNonXR.active = false;\r\n } else {\r\n this._myCursorComponentNonXR.active = !usingHand;\r\n this._myCursorComponentXR.active = false;\r\n\r\n this._myCursorObjectNonXR.pp_setTransformQuat(Globals.getPlayerObjects(this.engine).myCameraNonXR.pp_getTransformQuat(transformQuat));\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}();", "import { Alignment, Collider, Justification } from \"@wonderlandengine/api\";\r\nimport { vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { ConsoleVRWidgetMessageType } from \"./console_vr_types.js\";\r\n\r\nexport class ConsoleVRWidgetConfig {\r\n\r\n constructor() {\r\n this._setupBuildConfig();\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n _setupBuildConfig() {\r\n // General\r\n this.myBackgroundColor = vec4_create(46 / 255, 46 / 255, 46 / 255, 1);\r\n\r\n this.myCursorTargetCollisionCollider = Collider.Box;\r\n this.myCursorTargetCollisionGroup = 7; // Keep this in sync with Tool Cursor\r\n this.myCursorTargetCollisionThickness = 0.001;\r\n\r\n this.myDefaultTextColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this.myTextAlignment = Alignment.Center;\r\n this.myTextJustification = Justification.Middle;\r\n this.myTextColor = this.myDefaultTextColor;\r\n\r\n this.myMessageTypeColors = [];\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.LOG] = this.myDefaultTextColor;\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.ERROR] = vec4_create(255 / 255, 40 / 255, 40 / 255, 1);\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.WARN] = vec4_create(250 / 255, 220 / 255, 40 / 255, 1);\r\n this.myMessageTypeColors[ConsoleVRWidgetMessageType.DEBUG] = vec4_create(60 / 255, 200 / 255, 255 / 255, 1);\r\n\r\n // Messages\r\n this.myMessagesPanelPosition = vec3_create(0, 0.075, 0);\r\n\r\n this.myMessagesBackgroundScale = vec3_create(0.34, 0.15, 1);\r\n\r\n {\r\n let xPaddingPercentage = 0.03;\r\n let yPaddingPercentage = xPaddingPercentage * this.myMessagesBackgroundScale[0] / this.myMessagesBackgroundScale[1] * 0.8; // A bit less padding\r\n let xPosition = -this.myMessagesBackgroundScale[0] + this.myMessagesBackgroundScale[0] * xPaddingPercentage;\r\n let yPosition = this.myMessagesBackgroundScale[1] - this.myMessagesBackgroundScale[1] * yPaddingPercentage;\r\n this.myMessagesTextsPanelPosition = vec3_create(xPosition, yPosition, 0.007);\r\n }\r\n this.myMessagesTextsPanelScale = vec3_create(0.1, 0.1, 0.1);\r\n\r\n this.myMessagesTextStartString = \".\\n\"; // To avoid issue with text component padding\r\n this.myMessagesTextAlignment = Alignment.Left;\r\n this.myMessagesTextJustification = Justification.Top;\r\n\r\n this.myMessagesTextPositions = [];\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.LOG] = vec3_create(0, 0, 0.0002);\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.ERROR] = vec3_create(0, 0, 0);\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.WARN] = vec3_create(0, 0, 0);\r\n this.myMessagesTextPositions[ConsoleVRWidgetMessageType.DEBUG] = vec3_create(0, 0, 0);\r\n\r\n this.myMessagesTextColors = [];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.LOG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.LOG];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.ERROR] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.ERROR];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.WARN] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.WARN];\r\n this.myMessagesTextColors[ConsoleVRWidgetMessageType.DEBUG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.DEBUG];\r\n\r\n // Buttons \r\n this.myButtonsPanelPosition = vec3_create(0, -0.11, 0.015);\r\n\r\n this.myButtonBackgroundScale = vec3_create(0.04, 0.02, 1);\r\n\r\n this.myButtonTextPosition = vec3_create(0, 0, 0.007);\r\n this.myButtonTextScale = vec3_create(0.18, 0.18, 0.18);\r\n\r\n this.myButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myButtonCursorTargetPosition[2] = this.myButtonTextPosition[2];\r\n\r\n this.myButtonsCollisionCollider = this.myCursorTargetCollisionCollider;\r\n this.myButtonsCollisionGroup = this.myCursorTargetCollisionGroup;\r\n this.myButtonsCollisionExtents = this.myButtonBackgroundScale.pp_clone();\r\n this.myButtonsCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myClearButtonTextLabel = \"clear\";\r\n this.myUpButtonTextLabel = \"up\";\r\n this.myDownButtonTextLabel = \"down\";\r\n\r\n this.myFilterButtonsTextColors = [];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.LOG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.LOG];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.ERROR] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.ERROR];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.WARN] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.WARN];\r\n this.myFilterButtonsTextColors[ConsoleVRWidgetMessageType.DEBUG] = this.myMessageTypeColors[ConsoleVRWidgetMessageType.DEBUG];\r\n\r\n this.myFilterButtonsTextLabel = [];\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.LOG] = \"log\";\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.ERROR] = \"error\";\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.WARN] = \"warn\";\r\n this.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType.DEBUG] = \"debug\";\r\n\r\n // Buttons positioning\r\n {\r\n let numberOfButtons = 7;\r\n let buttonsHorizontalSpace = Math.max(0.68, this.myButtonBackgroundScale[0] * numberOfButtons);\r\n // 2 at start, 3 between filters, 4 spaces between filter and clear and 4 spaces between clear and up/down, 1 space between up and down, 1 at end\r\n let numberOfSpacesBetweenButtons = 2 + 3 + 4 + 4 + 1 + 2;\r\n let spaceWidth = Math.max((buttonsHorizontalSpace - numberOfButtons * this.myButtonBackgroundScale[0] * 2) / numberOfSpacesBetweenButtons, 0);\r\n let halfButtonWidth = this.myButtonBackgroundScale[0];\r\n let initialPosition = - buttonsHorizontalSpace / 2;\r\n\r\n this.myFilterButtonsPositions = [];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.LOG] = [initialPosition + spaceWidth * 2 + halfButtonWidth, 0, 0];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.ERROR] = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.LOG][0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.WARN] = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.ERROR][0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.DEBUG] = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.WARN][0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n\r\n this.myClearButtonPosition = [this.myFilterButtonsPositions[ConsoleVRWidgetMessageType.DEBUG][0] + halfButtonWidth + spaceWidth * 4 + halfButtonWidth, 0, 0];\r\n this.myUpButtonPosition = [this.myClearButtonPosition[0] + halfButtonWidth + spaceWidth * 4 + halfButtonWidth, 0, 0];\r\n this.myDownButtonPosition = [this.myUpButtonPosition[0] + halfButtonWidth + spaceWidth + halfButtonWidth, 0, 0];\r\n }\r\n\r\n // Notify Icon\r\n this.myNotifyIconBackgroundScale = vec3_create(0.01, 0.01, 1);\r\n\r\n this.myNotifyIconPanelPositions = [];\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE] = vec3_create(0, 0, 0);\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE][0] = -this.myMessagesBackgroundScale[0] + this.myNotifyIconBackgroundScale[0] + 0.01;\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE][1] = -this.myMessagesBackgroundScale[1] + this.myNotifyIconBackgroundScale[1] + 0.01;\r\n this.myNotifyIconPanelPositions[ToolHandedness.NONE][2] = this.myMessagesTextsPanelPosition[2] - 0.00001; // Prevent glitches with text\r\n\r\n this.myNotifyIconPanelPositions[ToolHandedness.LEFT] = this.myNotifyIconPanelPositions[ToolHandedness.NONE];\r\n\r\n this.myNotifyIconPanelPositions[ToolHandedness.RIGHT] = this.myNotifyIconPanelPositions[ToolHandedness.NONE];\r\n\r\n this.myNotifyIconCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myNotifyIconCursorTargetPosition[2] = this.myButtonsPanelPosition[2] + this.myButtonTextPosition[2] - this.myMessagesTextsPanelPosition[2]; // A little behind the button target to avoid hiding it\r\n\r\n this.myNotifyIconCollisionExtents = this.myNotifyIconBackgroundScale.pp_clone();\r\n this.myNotifyIconCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myNotifyIconColor = vec4_create(210 / 255, 210 / 255, 210 / 255, 1);\r\n\r\n // Pointer\r\n this.myPointerCollisionCollider = this.myCursorTargetCollisionCollider;\r\n this.myPointerCollisionGroup = this.myCursorTargetCollisionGroup;\r\n\r\n {\r\n let spaceBetweenMessagesAndButtons = Math.abs((this.myMessagesPanelPosition[1] - this.myMessagesBackgroundScale[1]) - (this.myButtonsPanelPosition[1] + this.myButtonBackgroundScale[1]));\r\n let pointerCollisionHalfHeight = this.myMessagesBackgroundScale[1] + this.myButtonBackgroundScale[1] + spaceBetweenMessagesAndButtons / 2;\r\n this.myPointerCollisionExtents = vec3_create(this.myMessagesBackgroundScale[0], pointerCollisionHalfHeight, this.myCursorTargetCollisionThickness);\r\n }\r\n\r\n this.myPointerCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myPointerCursorTargetPosition[1] = (this.myMessagesPanelPosition[1] + this.myMessagesBackgroundScale[1]) - this.myPointerCollisionExtents[1];\r\n this.myPointerCursorTargetPosition[2] = this.myButtonsPanelPosition[2] + this.myButtonTextPosition[2] - 0.0001; // A little behind the button target to avoid hiding it\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this.myTabString = \" \";\r\n this.myAssertStartString = \"Assertion failed:\";\r\n\r\n this.myMaxCharactersPerLine = 100;\r\n this.myMaxLineSplits = 500; // Prevent infinite splitting\r\n this.myMaxLines = 22;\r\n this.myMaxMessages = 2000;\r\n this.myMaxMessagesDeletePad = 2000; // To prevent deleting at every message, delay the delete after the limit is exceed by this value\r\n\r\n this.myLinesBetweenMessages = 1;\r\n\r\n this.myButtonHoverColor = vec4_create(150 / 255, 150 / 255, 150 / 255, 1);\r\n this.myButtonDisabledTextColor = this.myBackgroundColor;\r\n this.myButtonDisabledBackgroundColor = vec4_create(110 / 255, 110 / 255, 110 / 255, 1);\r\n\r\n this.myFilterButtonDisabledTextColor = this.myButtonDisabledTextColor;\r\n this.myFilterButtonDisabledBackgroundColor = this.myButtonDisabledBackgroundColor;\r\n\r\n this.myScrollDelay = 0.1;\r\n this.myScrollAmount = 1;\r\n this.myScrollThumbstickHandedness = ToolHandedness.RIGHT;\r\n this.myScrollThumbstickDelay = 0.1;\r\n this.myScrollThumbstickMinThreshold = 0.2;\r\n this.myScrollThumbstickAmount = 3;\r\n\r\n this.myPulseDelay = 5;\r\n this.myPulseIntensity = 0.3;\r\n this.myPulseDuration = 0.085;\r\n\r\n this.myClearBrowserConsoleWhenClearPressed = false;\r\n\r\n this.myGamepadScrollOnlyOnHover = true;\r\n }\r\n}", "export let ConsoleVRWidgetConsoleFunction = {\r\n DEBUG: 0,\r\n WARN: 1,\r\n ERROR: 2,\r\n LOG: 3,\r\n INFO: 4,\r\n ASSERT: 5\r\n};\r\n\r\nexport let ConsoleVRWidgetSender = {\r\n BROWSER_CONSOLE: 0,\r\n CONSOLE_VR: 1,\r\n WINDOW: 2\r\n};\r\n\r\nexport let ConsoleVRWidgetPulseOnNewMessage = {\r\n NEVER: 0,\r\n ALWAYS: 1,\r\n WHEN_HIDDEN: 2\r\n};\r\n\r\nexport let ConsoleVRWidgetMessageType = {\r\n DEBUG: 0,\r\n WARN: 1,\r\n ERROR: 2,\r\n LOG: 3\r\n};\r\n\r\nexport let OverrideBrowserConsoleFunctions = {\r\n NONE: 0,\r\n ALL: 1,\r\n ERRORS_AND_WARNS: 2\r\n};", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { ConsoleVRWidgetMessageType } from \"./console_vr_types.js\";\r\n\r\nexport class ConsoleVRWidgetUI {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n build(parentObject, config, params) {\r\n this._myParentObject = parentObject;\r\n this._myConfig = config;\r\n this._myParams = params;\r\n\r\n this._myPlaneMesh = Globals.getDefaultMeshes(this._myEngine).myDoubleSidedPlane;\r\n\r\n this._createSkeleton();\r\n this._setTransforms();\r\n this._addComponents();\r\n\r\n this._setTransformForNonXR();\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n }\r\n\r\n setVisible(visible) {\r\n this.myPivotObject.pp_setActive(visible);\r\n }\r\n\r\n // Skeleton\r\n _createSkeleton() {\r\n this.myPivotObject = this._myParentObject.pp_addObject();\r\n\r\n this._createMessagesSkeleton();\r\n this._createButtonsSkeleton();\r\n this._createPointerSkeleton();\r\n }\r\n\r\n _createMessagesSkeleton() {\r\n this.myMessagesPanel = this.myPivotObject.pp_addObject();\r\n this.myMessagesBackground = this.myMessagesPanel.pp_addObject();\r\n this.myMessagesTextsPanel = this.myMessagesPanel.pp_addObject();\r\n\r\n this.myMessagesTexts = [];\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myMessagesTexts[ConsoleVRWidgetMessageType[key]] = this.myMessagesTextsPanel.pp_addObject();\r\n }\r\n\r\n this.myNotifyIconPanel = this.myMessagesPanel.pp_addObject();\r\n this.myNotifyIconBackground = this.myNotifyIconPanel.pp_addObject();\r\n this.myNotifyIconCursorTarget = this.myNotifyIconPanel.pp_addObject();\r\n }\r\n\r\n _createButtonsSkeleton() {\r\n this.myButtonsPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myFilterButtonsPanels = [];\r\n this.myFilterButtonsBackgrounds = [];\r\n this.myFilterButtonsTexts = [];\r\n this.myFilterButtonsCursorTargets = [];\r\n\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]] = this.myButtonsPanel.pp_addObject();\r\n this.myFilterButtonsBackgrounds[ConsoleVRWidgetMessageType[key]] = this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_addObject();\r\n this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]] = this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_addObject();\r\n this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]] = this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_addObject();\r\n }\r\n\r\n this.myClearButtonPanel = this.myButtonsPanel.pp_addObject();\r\n this.myClearButtonBackground = this.myClearButtonPanel.pp_addObject();\r\n this.myClearButtonText = this.myClearButtonPanel.pp_addObject();\r\n this.myClearButtonCursorTarget = this.myClearButtonPanel.pp_addObject();\r\n\r\n this.myUpButtonPanel = this.myButtonsPanel.pp_addObject();\r\n this.myUpButtonBackground = this.myUpButtonPanel.pp_addObject();\r\n this.myUpButtonText = this.myUpButtonPanel.pp_addObject();\r\n this.myUpButtonCursorTarget = this.myUpButtonPanel.pp_addObject();\r\n\r\n this.myDownButtonPanel = this.myButtonsPanel.pp_addObject();\r\n this.myDownButtonBackground = this.myDownButtonPanel.pp_addObject();\r\n this.myDownButtonText = this.myDownButtonPanel.pp_addObject();\r\n this.myDownButtonCursorTarget = this.myDownButtonPanel.pp_addObject();\r\n }\r\n\r\n _createPointerSkeleton() {\r\n this.myPointerCursorTarget = this.myPivotObject.pp_addObject();\r\n }\r\n\r\n // Transforms\r\n _setTransforms() {\r\n this.myPivotObject.pp_markDirty();\r\n\r\n this._setMessagesTransforms();\r\n this._setButtonsTransforms();\r\n this._setPointerTransform();\r\n }\r\n\r\n _setMessagesTransforms() {\r\n this.myMessagesPanel.pp_setPositionLocal(this._myConfig.myMessagesPanelPosition);\r\n this.myMessagesBackground.pp_scaleObject(this._myConfig.myMessagesBackgroundScale);\r\n\r\n this.myMessagesTextsPanel.pp_setPositionLocal(this._myConfig.myMessagesTextsPanelPosition);\r\n this.myMessagesTextsPanel.pp_scaleObject(this._myConfig.myMessagesTextsPanelScale);\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myMessagesTexts[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myMessagesTextPositions[ConsoleVRWidgetMessageType[key]]);\r\n }\r\n\r\n this.myNotifyIconPanel.pp_setPositionLocal(this._myConfig.myNotifyIconPanelPositions[this._myParams.myHandedness]);\r\n this.myNotifyIconBackground.pp_scaleObject(this._myConfig.myNotifyIconBackgroundScale);\r\n this.myNotifyIconCursorTarget.pp_setPositionLocal(this._myConfig.myNotifyIconCursorTargetPosition);\r\n }\r\n\r\n _setButtonsTransforms() {\r\n this.myButtonsPanel.pp_setPositionLocal(this._myConfig.myButtonsPanelPosition);\r\n\r\n // Filter Buttons\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this.myFilterButtonsPanels[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myFilterButtonsPositions[ConsoleVRWidgetMessageType[key]]);\r\n\r\n this.myFilterButtonsBackgrounds[ConsoleVRWidgetMessageType[key]].pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]].pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]].pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n\r\n // Clear\r\n {\r\n this.myClearButtonPanel.pp_setPositionLocal(this._myConfig.myClearButtonPosition);\r\n\r\n this.myClearButtonBackground.pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myClearButtonText.pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myClearButtonText.pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myClearButtonCursorTarget.pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n\r\n // Up\r\n {\r\n this.myUpButtonPanel.pp_setPositionLocal(this._myConfig.myUpButtonPosition);\r\n\r\n this.myUpButtonBackground.pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myUpButtonText.pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myUpButtonText.pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myUpButtonCursorTarget.pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n\r\n // Down\r\n {\r\n this.myDownButtonPanel.pp_setPositionLocal(this._myConfig.myDownButtonPosition);\r\n\r\n this.myDownButtonBackground.pp_scaleObject(this._myConfig.myButtonBackgroundScale);\r\n\r\n this.myDownButtonText.pp_setPositionLocal(this._myConfig.myButtonTextPosition);\r\n this.myDownButtonText.pp_scaleObject(this._myConfig.myButtonTextScale);\r\n\r\n this.myDownButtonCursorTarget.pp_setPositionLocal(this._myConfig.myButtonCursorTargetPosition);\r\n }\r\n }\r\n\r\n _setPointerTransform() {\r\n this.myPointerCursorTarget.pp_setPositionLocal(this._myConfig.myPointerCursorTargetPosition);\r\n }\r\n\r\n // Components\r\n _addComponents() {\r\n this._addMessagesComponents();\r\n this._addButtonsComponents();\r\n this._addPointerComponents();\r\n }\r\n\r\n _addMessagesComponents() {\r\n let messagesBackgroundMeshComp = this.myMessagesBackground.pp_addComponent(MeshComponent);\r\n messagesBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n messagesBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n messagesBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myMessagesTextComponents = [];\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let textComp = this.myMessagesTexts[ConsoleVRWidgetMessageType[key]].pp_addComponent(TextComponent);\r\n\r\n textComp.alignment = this._myConfig.myMessagesTextAlignment;\r\n textComp.justification = this._myConfig.myMessagesTextJustification;\r\n textComp.material = this._myParams.myTextMaterial.clone();\r\n textComp.material.color = this._myConfig.myMessagesTextColors[ConsoleVRWidgetMessageType[key]];\r\n textComp.lineSpacing = 1.2;\r\n textComp.text = this._myConfig.myMessagesTextStartString;\r\n\r\n this.myMessagesTextComponents[ConsoleVRWidgetMessageType[key]] = textComp;\r\n }\r\n\r\n this.myNotifyIconBackgroundComponent = this.myNotifyIconBackground.pp_addComponent(MeshComponent);\r\n this.myNotifyIconBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myNotifyIconBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myNotifyIconBackgroundComponent.material.color = this._myConfig.myNotifyIconColor;\r\n\r\n this.myNotifyIconCursorTargetComponent = this.myNotifyIconCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n this.myNotifyIconCollisionComponent = this.myNotifyIconCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myNotifyIconCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myNotifyIconCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myNotifyIconCollisionComponent.extents = this._myConfig.myNotifyIconCollisionExtents;\r\n }\r\n\r\n _addButtonsComponents() {\r\n // Worship the code copy pasteness\r\n\r\n this.myFilterButtonsBackgroundComponents = [];\r\n this.myFilterButtonsTextComponents = [];\r\n this.myFilterButtonsCursorTargetComponents = [];\r\n this.myFilterButtonsCollisionComponents = [];\r\n\r\n // Filter Buttons\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let buttonBackgroundMeshComp = this.myFilterButtonsBackgrounds[ConsoleVRWidgetMessageType[key]].pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myFilterButtonsTexts[ConsoleVRWidgetMessageType[key]].pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.material.color = this._myConfig.myFilterButtonsTextColors[ConsoleVRWidgetMessageType[key]];\r\n buttonTextComp.text = this._myConfig.myFilterButtonsTextLabel[ConsoleVRWidgetMessageType[key]];\r\n\r\n let buttonCursorTargetComp = this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]].pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myFilterButtonsCursorTargets[ConsoleVRWidgetMessageType[key]].pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]] = buttonBackgroundMeshComp;\r\n this.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]] = buttonTextComp;\r\n this.myFilterButtonsCursorTargetComponents[ConsoleVRWidgetMessageType[key]] = buttonCursorTargetComp;\r\n this.myFilterButtonsCollisionComponents[ConsoleVRWidgetMessageType[key]] = buttonCollisionComp;\r\n }\r\n\r\n // Clear \r\n {\r\n let buttonBackgroundMeshComp = this.myClearButtonBackground.pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myClearButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.text = this._myConfig.myClearButtonTextLabel;\r\n\r\n let buttonCursorTargetComp = this.myClearButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myClearButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myClearButtonBackgroundComponent = buttonBackgroundMeshComp;\r\n this.myClearButtonTextComponent = buttonTextComp;\r\n this.myClearButtonCursorTargetComponent = buttonCursorTargetComp;\r\n this.myClearButtonCollisionComponent = buttonCollisionComp;\r\n }\r\n\r\n // Up \r\n {\r\n let buttonBackgroundMeshComp = this.myUpButtonBackground.pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myUpButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.text = this._myConfig.myUpButtonTextLabel;\r\n\r\n let buttonCursorTargetComp = this.myUpButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myUpButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myUpButtonBackgroundComponent = buttonBackgroundMeshComp;\r\n this.myUpButtonTextComponent = buttonTextComp;\r\n this.myUpButtonCursorTargetComponent = buttonCursorTargetComp;\r\n this.myUpButtonCollisionComponent = buttonCollisionComp;\r\n }\r\n\r\n // Down \r\n {\r\n let buttonBackgroundMeshComp = this.myDownButtonBackground.pp_addComponent(MeshComponent);\r\n buttonBackgroundMeshComp.mesh = this._myPlaneMesh;\r\n buttonBackgroundMeshComp.material = this._myParams.myPlaneMaterial.clone();\r\n buttonBackgroundMeshComp.material.color = this._myConfig.myBackgroundColor;\r\n\r\n let buttonTextComp = this.myDownButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(buttonTextComp);\r\n buttonTextComp.text = this._myConfig.myDownButtonTextLabel;\r\n\r\n let buttonCursorTargetComp = this.myDownButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n let buttonCollisionComp = this.myDownButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n buttonCollisionComp.collider = this._myConfig.myButtonsCollisionCollider;\r\n buttonCollisionComp.group = 1 << this._myConfig.myButtonsCollisionGroup;\r\n buttonCollisionComp.extents = this._myConfig.myButtonsCollisionExtents;\r\n\r\n this.myDownButtonBackgroundComponent = buttonBackgroundMeshComp;\r\n this.myDownButtonTextComponent = buttonTextComp;\r\n this.myDownButtonCursorTargetComponent = buttonCursorTargetComp;\r\n this.myDownButtonCollisionComponent = buttonCollisionComp;\r\n }\r\n }\r\n\r\n _addPointerComponents() {\r\n this.myPointerCursorTargetComponent = this.myPointerCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPointerCursorTargetComponent.isSurface = true;\r\n\r\n let collisionComp = this.myPointerCursorTarget.pp_addComponent(CollisionComponent);\r\n collisionComp.collider = this._myConfig.myPointerCollisionCollider;\r\n collisionComp.group = 1 << this._myConfig.myPointerCollisionGroup;\r\n collisionComp.extents = this._myConfig.myPointerCollisionExtents;\r\n\r\n this.myPointerCollisionComponent = collisionComp;\r\n }\r\n\r\n _setupButtonTextComponent(textComponent) {\r\n textComponent.alignment = this._myConfig.myTextAlignment;\r\n textComponent.justification = this._myConfig.myTextJustification;\r\n textComponent.material = this._myParams.myTextMaterial.clone();\r\n textComponent.material.color = this._myConfig.myTextColor;\r\n textComponent.text = \"\";\r\n }\r\n\r\n _onXRSessionStart() {\r\n this._setTransformForXR();\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n _setTransformForXR() {\r\n this.myNotifyIconPanel.pp_setPositionLocal(this._myConfig.myNotifyIconPanelPositions[this._myParams.myHandedness]);\r\n }\r\n\r\n _setTransformForNonXR() {\r\n this.myNotifyIconPanel.pp_setPositionLocal(this._myConfig.myNotifyIconPanelPositions[ToolHandedness.NONE]);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { WidgetFrameConfig } from \"./widget_frame_config.js\";\r\nimport { WidgetFrameUI } from \"./widget_frame_ui.js\";\r\n\r\nexport class WidgetParams {\r\n\r\n constructor() {\r\n this.myHandedness = ToolHandedness.NONE;\r\n\r\n this.myPlaneMaterial = null;\r\n this.myTextMaterial = null;\r\n }\r\n}\r\n\r\nexport class WidgetFrame {\r\n\r\n constructor(widgetLetterID, buttonsColumnIndex, engine = Globals.getMainEngine()) {\r\n this._myWidgetVisible = true;\r\n this._myPinned = false;\r\n\r\n this._myConfig = new WidgetFrameConfig(widgetLetterID, buttonsColumnIndex);\r\n this._myParams = null;\r\n\r\n this._myUI = new WidgetFrameUI(engine);\r\n this._myShowVisibilityButton = false;\r\n\r\n this._myWidgetVisibleChangedEmitter = new Emitter(); // Signature: listener(widgetVisible)\r\n this._myPinChangedEmitter = new Emitter(); // Signature: listener(pinned)\r\n\r\n this._myDestroyed = true;\r\n }\r\n\r\n getWidgetObject() {\r\n return this._myUI.myWidgetObject;\r\n }\r\n\r\n setVisible(visible) {\r\n this._myWidgetVisible = !visible;\r\n this._toggleVisibility(false, true);\r\n }\r\n\r\n isVisible() {\r\n return this._myWidgetVisible;\r\n }\r\n\r\n toggleVisibility() {\r\n this._toggleVisibility(false, true);\r\n }\r\n\r\n togglePin() {\r\n this._togglePin(false);\r\n }\r\n\r\n registerWidgetVisibleChangedEventListener(id, listener) {\r\n this._myWidgetVisibleChangedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterWidgetVisibleChangedEventListener(id) {\r\n this._myWidgetVisibleChangedEmitter.remove(id);\r\n }\r\n\r\n registerPinChangedEventListener(id, listener) {\r\n this._myPinChangedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterPinChangedEventListener(id) {\r\n this._myPinChangedEmitter.remove(id);\r\n }\r\n\r\n start(parentObject, params) {\r\n this._myParams = params;\r\n\r\n this._myUI.build(parentObject, this._myConfig, params);\r\n this._myUI.setVisibilityButtonVisible(params.myShowVisibilityButton);\r\n this._myShowVisibilityButton = params.myShowVisibilityButton;\r\n if (!params.myShowOnStart) {\r\n this._toggleVisibility(false, false);\r\n }\r\n\r\n this._addListeners();\r\n }\r\n\r\n update(dt) {\r\n this._myUI.update(dt);\r\n }\r\n\r\n _addListeners() {\r\n let ui = this._myUI;\r\n\r\n ui.myPinButtonCursorTargetComponent.onClick.add(this._togglePin.bind(this, true));\r\n ui.myPinButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPinButtonBackgroundComponent.material));\r\n ui.myPinButtonCursorTargetComponent.onUnhover.add(this._pinUnhover.bind(this, ui.myPinButtonBackgroundComponent.material));\r\n\r\n ui.myVisibilityButtonCursorTargetComponent.onClick.add(this._toggleVisibility.bind(this, true, true));\r\n ui.myVisibilityButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myVisibilityButtonBackgroundComponent.material));\r\n ui.myVisibilityButtonCursorTargetComponent.onUnhover.add(this._visibilityUnhover.bind(this, ui.myVisibilityButtonBackgroundComponent.material));\r\n }\r\n\r\n _toggleVisibility(isButton, notify) {\r\n this._myWidgetVisible = !this._myWidgetVisible;\r\n\r\n this._myUI.setWidgetVisible(this._myWidgetVisible);\r\n\r\n let textMaterial = this._myUI.myVisibilityButtonTextComponent.material;\r\n let backgroundMaterial = this._myUI.myVisibilityButtonBackgroundComponent.material;\r\n if (this._myWidgetVisible) {\r\n textMaterial.color = this._myConfig.myDefaultTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myBackgroundColor;\r\n }\r\n } else {\r\n textMaterial.color = this._myConfig.myButtonDisabledTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n if (notify) {\r\n this._myWidgetVisibleChangedEmitter.notify(this._myWidgetVisible);\r\n }\r\n\r\n this._myUI.setVisibilityButtonVisible(this._myShowVisibilityButton);\r\n }\r\n\r\n _togglePin(isButton) {\r\n if (this._myWidgetVisible) {\r\n this._myPinned = !this._myPinned;\r\n\r\n this._myUI.setPinned(this._myPinned);\r\n\r\n let textMaterial = this._myUI.myPinButtonTextComponent.material;\r\n let backgroundMaterial = this._myUI.myPinButtonBackgroundComponent.material;\r\n if (this._myPinned) {\r\n textMaterial.color = this._myConfig.myDefaultTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myBackgroundColor;\r\n }\r\n } else {\r\n textMaterial.color = this._myConfig.myButtonDisabledTextColor;\r\n if (!isButton) {\r\n backgroundMaterial.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n this._myPinChangedEmitter.notify(this._myPinned);\r\n }\r\n }\r\n\r\n _genericHover(material) {\r\n material.color = this._myConfig.myButtonHoverColor;\r\n }\r\n\r\n _visibilityUnhover(material) {\r\n if (this._myWidgetVisible) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n } else {\r\n material.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n _pinUnhover(material) {\r\n if (this._myPinned) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n } else {\r\n material.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n if (this._myUI != null) {\r\n this._myUI.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Alignment, Collider, Justification } from \"@wonderlandengine/api\";\r\nimport { quat_create, vec3_create, vec4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { ToolHandedness, ToolInputSourceType } from \"../cauldron/tool_types.js\";\r\n\r\nexport class WidgetFrameConfig {\r\n\r\n constructor(widgetLetterID, buttonsColumnIndex) {\r\n\r\n this._setupBuildConfig(widgetLetterID, buttonsColumnIndex);\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n _setupBuildConfig(widgetLetterID, buttonsColumnIndex) {\r\n // General\r\n this.myBackgroundColor = vec4_create(46 / 255, 46 / 255, 46 / 255, 1);\r\n\r\n this.myCursorTargetCollisionCollider = Collider.Box;\r\n this.myCursorTargetCollisionGroup = 7; // Keep this in sync with Tool Cursor\r\n this.myCursorTargetCollisionThickness = 0.001;\r\n\r\n this.myDefaultTextColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this.myTextAlignment = Alignment.Center;\r\n this.myTextJustification = Justification.Middle;\r\n this.myTextColor = this.myDefaultTextColor;\r\n\r\n this.myButtonTextScale = vec3_create(0.18, 0.18, 0.18);\r\n\r\n this.myVisibilityButtonBackgroundScale = vec3_create(0.015, 0.015, 1);\r\n this.myVisibilityButtonTextPosition = vec3_create(0, 0, 0.007);\r\n this.myVisibilityButtonTextScale = this.myButtonTextScale;\r\n\r\n let distanceBetweenToolsVisibilityButtons = 0.01;\r\n let buttonXOffset = this.myVisibilityButtonBackgroundScale[0] * (2 * buttonsColumnIndex) + distanceBetweenToolsVisibilityButtons * buttonsColumnIndex;\r\n\r\n this.myVisibilityButtonPosition = [];\r\n this.myVisibilityButtonPosition[ToolHandedness.NONE] = {};\r\n this.myVisibilityButtonPosition[ToolHandedness.NONE].myPosition = vec3_create(-0.3 + buttonXOffset, -0.205, 0.035);\r\n\r\n this.myVisibilityButtonPosition[ToolHandedness.LEFT] = {};\r\n this.myVisibilityButtonPosition[ToolHandedness.LEFT].myPosition = vec3_create(-0.2 + buttonXOffset, 0.025, 0.015);\r\n\r\n this.myVisibilityButtonPosition[ToolHandedness.RIGHT] = {};\r\n this.myVisibilityButtonPosition[ToolHandedness.RIGHT].myPosition = vec3_create(0.2 - buttonXOffset, 0.025, 0.015);\r\n\r\n this.myVisibilityButtonText = widgetLetterID;\r\n\r\n this.myVisibilityButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myVisibilityButtonCursorTargetPosition[2] = this.myVisibilityButtonTextPosition[2];\r\n this.myVisibilityButtonCollisionExtents = this.myVisibilityButtonBackgroundScale.pp_clone();\r\n this.myVisibilityButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myFlagButtonBackgroundScale = vec3_create(0.0125, 0.0125, 1);\r\n this.myFlagButtonTextPosition = vec3_create(0, 0, 0.007);\r\n this.myFlagButtonTextScale = vec3_create(0.15, 0.15, 0.15);\r\n\r\n let distanceBetweenFlagButtons = 0.0075;\r\n let pinFlagIndex = 0;\r\n let pinButtonYOffset = this.myVisibilityButtonBackgroundScale[1] + this.myFlagButtonBackgroundScale[1] + distanceBetweenFlagButtons +\r\n this.myFlagButtonBackgroundScale[1] * (2 * pinFlagIndex) + distanceBetweenFlagButtons * pinFlagIndex;\r\n\r\n this.myPinButtonPosition = [];\r\n this.myPinButtonPosition[ToolHandedness.NONE] = {};\r\n this.myPinButtonPosition[ToolHandedness.NONE].myPosition = this.myVisibilityButtonPosition[ToolHandedness.NONE].myPosition.pp_clone();\r\n this.myPinButtonPosition[ToolHandedness.NONE].myPosition[1] += pinButtonYOffset;\r\n\r\n this.myPinButtonPosition[ToolHandedness.LEFT] = {};\r\n this.myPinButtonPosition[ToolHandedness.LEFT].myPosition = this.myVisibilityButtonPosition[ToolHandedness.LEFT].myPosition.pp_clone();\r\n this.myPinButtonPosition[ToolHandedness.LEFT].myPosition[1] += pinButtonYOffset;\r\n\r\n this.myPinButtonPosition[ToolHandedness.RIGHT] = {};\r\n this.myPinButtonPosition[ToolHandedness.RIGHT].myPosition = this.myVisibilityButtonPosition[ToolHandedness.RIGHT].myPosition.pp_clone();\r\n this.myPinButtonPosition[ToolHandedness.RIGHT].myPosition[1] += pinButtonYOffset;\r\n\r\n this.myPinButtonText = \"P\";\r\n\r\n this.myPinButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myPinButtonCursorTargetPosition[2] = this.myFlagButtonTextPosition[2];\r\n this.myPinButtonCollisionExtents = this.myFlagButtonBackgroundScale.pp_clone();\r\n this.myPinButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this._initializeObjectsTransforms();\r\n\r\n this.myButtonHoverColor = vec4_create(150 / 255, 150 / 255, 150 / 255, 1);\r\n this.myButtonDisabledTextColor = this.myBackgroundColor;\r\n this.myButtonDisabledBackgroundColor = vec4_create(110 / 255, 110 / 255, 110 / 255, 1);\r\n }\r\n\r\n _initializeObjectsTransforms() {\r\n this.myPivotObjectTransforms = this._createDefaultObjectTransforms();\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation = quat_create(-0.645, 0.425, 0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation = quat_create(-0.645, -0.425, -0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation = quat_create(-0.645, 0.425, 0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation = quat_create(-0.645, -0.425, -0.25, 0.584);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myRotation);\r\n\r\n /*\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myPosition = vec3_create(-0.04, 0.045, -0.055);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation = quat_create(0, 0.536, -0.43, 0.727);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myRotation);\r\n\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myPosition = vec3_create(0.04, 0.045, -0.055);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation = quat_create(0, -0.536, 0.43, 0.727);\r\n this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation.quat_normalize(this.myPivotObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myRotation);\r\n */\r\n\r\n this.myWidgetObjectTransforms = this._createDefaultObjectTransforms();\r\n\r\n this.myWidgetObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.LEFT].myPosition = vec3_create(0.1, 0.23, -0.02);\r\n this.myWidgetObjectTransforms[ToolInputSourceType.GAMEPAD][ToolHandedness.RIGHT].myPosition = vec3_create(0.07, 0.23, -0.02);\r\n\r\n this.myWidgetObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.LEFT].myPosition = vec3_create(0.1, 0.23, -0.02);\r\n this.myWidgetObjectTransforms[ToolInputSourceType.TRACKED_HAND][ToolHandedness.RIGHT].myPosition = vec3_create(0.07, 0.23, -0.02);\r\n\r\n this._myPivotObjectDistanceFromHeadNonXR = 0.6;\r\n }\r\n\r\n _createDefaultObjectTransforms() {\r\n let defaultObjectTransforms = [];\r\n\r\n for (let inputSourceTypeKey in ToolInputSourceType) {\r\n let inputSourceType = ToolInputSourceType[inputSourceTypeKey];\r\n defaultObjectTransforms[inputSourceType] = [];\r\n for (let handednessKey in ToolHandedness) {\r\n let handedness = ToolHandedness[handednessKey];\r\n defaultObjectTransforms[inputSourceType][handedness] = {};\r\n defaultObjectTransforms[inputSourceType][handedness].myPosition = vec3_create(0, 0, 0);\r\n defaultObjectTransforms[inputSourceType][handedness].myRotation = quat_create(0, 0, 0, 1);\r\n }\r\n }\r\n\r\n return defaultObjectTransforms;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../cauldron/utils/xr_utils.js\";\r\nimport { InputUtils } from \"../../input/cauldron/input_utils.js\";\r\nimport { vec3_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness, ToolInputSourceType } from \"../cauldron/tool_types.js\";\r\n\r\nexport class WidgetFrameUI {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myInputSourceType = null;\r\n\r\n this._myParentObject = null;\r\n this._myPinned = false;\r\n\r\n this._myWidgetVisible = true;\r\n this._myVisibilityButtonVisible = true;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n build(parentObject, config, params) {\r\n this._myParentObject = parentObject;\r\n this._myConfig = config;\r\n this._myParams = params;\r\n this._myPlaneMesh = Globals.getDefaultMeshes(this._myEngine).myDoubleSidedPlane;\r\n\r\n this._createSkeleton();\r\n this._setTransforms();\r\n this._addComponents();\r\n\r\n this._setTransformForNonXR();\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n }\r\n\r\n setWidgetVisible(visible) {\r\n this._myWidgetVisible = visible;\r\n this.myFlagsButtonPanel.pp_setActive(visible);\r\n if (visible) {\r\n this._updateObjectsTransforms(true);\r\n }\r\n }\r\n\r\n setVisibilityButtonVisible(visible) {\r\n this._myVisibilityButtonVisible = visible;\r\n this.myVisibilityButtonPanel.pp_setActive(visible);\r\n }\r\n\r\n setPinned(pinned) {\r\n if (pinned != this._myPinned) {\r\n this._myPinned = pinned;\r\n if (this._myPinned) {\r\n this.myPivotObject.pp_setParent(Globals.getSceneObjects(this._myEngine).myTools);\r\n } else {\r\n this.myPivotObject.pp_setParent(this.myFixForwardObject);\r\n\r\n if (!XRUtils.isSessionActive(this._myEngine)) {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n this._updateObjectsTransforms(true);\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n this._updateObjectsTransforms(false);\r\n }\r\n\r\n _updateObjectsTransforms(forceRefreshObjectsTransforms) {\r\n if (XRUtils.isSessionActive(this._myEngine)) {\r\n let inputSourceType = InputUtils.getInputSourceTypeByHandedness(this._myParams.myHandedness, this._myEngine);\r\n\r\n if (inputSourceType != this._myInputSourceType || forceRefreshObjectsTransforms) {\r\n this._myInputSourceType = inputSourceType;\r\n\r\n if (!this._myPinned) {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myPosition);\r\n this.myPivotObject.pp_resetRotationLocal();\r\n this.myPivotObject.pp_rotateObjectQuat(this._myConfig.myPivotObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myRotation);\r\n\r\n this.myWidgetObject.pp_setPositionLocal(this._myConfig.myWidgetObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myPosition);\r\n this.myWidgetObject.pp_resetRotationLocal();\r\n this.myWidgetObject.pp_rotateObjectQuat(this._myConfig.myWidgetObjectTransforms[this._myInputSourceType][this._myParams.myHandedness].myRotation);\r\n\r\n this.myVisibilityButtonPanel.pp_setPositionLocal(this._myConfig.myVisibilityButtonPosition[this._myParams.myHandedness].myPosition);\r\n this.myPinButtonPanel.pp_setPositionLocal(this._myConfig.myPinButtonPosition[this._myParams.myHandedness].myPosition);\r\n }\r\n }\r\n } else {\r\n this.myVisibilityButtonPanel.pp_setActive(this._myWidgetVisible || this._myVisibilityButtonVisible);\r\n }\r\n }\r\n\r\n // Skeleton\r\n _createSkeleton() {\r\n this.myFixForwardObject = this._myParentObject.pp_addObject();\r\n\r\n if (Globals.isPoseForwardFixed(this._myEngine)) {\r\n this.myFixForwardObject.pp_rotateObject(vec3_create(0, 180, 0));\r\n }\r\n\r\n this.myPivotObject = this.myFixForwardObject.pp_addObject();\r\n this.myWidgetObject = this.myPivotObject.pp_addObject();\r\n\r\n this.myVisibilityButtonPanel = this.myPivotObject.pp_addObject();\r\n this.myVisibilityButtonBackground = this.myVisibilityButtonPanel.pp_addObject();\r\n this.myVisibilityButtonText = this.myVisibilityButtonPanel.pp_addObject();\r\n this.myVisibilityButtonCursorTarget = this.myVisibilityButtonPanel.pp_addObject();\r\n\r\n this.myFlagsButtonPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myPinButtonPanel = this.myFlagsButtonPanel.pp_addObject();\r\n this.myPinButtonBackground = this.myPinButtonPanel.pp_addObject();\r\n this.myPinButtonText = this.myPinButtonPanel.pp_addObject();\r\n this.myPinButtonCursorTarget = this.myPinButtonPanel.pp_addObject();\r\n\r\n this.myNonXRParentObject = Globals.getPlayerObjects(this._myEngine).myCameraNonXR.pp_addObject();\r\n this.myNonXRParentObject.pp_translateLocal(vec3_create(0, 0, -this._myConfig._myPivotObjectDistanceFromHeadNonXR));\r\n this.myNonXRParentObject.pp_lookToLocal(vec3_create(0, 0, 1), vec3_create(0, 1, 0));\r\n\r\n }\r\n\r\n // Transforms\r\n _setTransforms() {\r\n this.myPivotObject.pp_markDirty();\r\n\r\n this.myVisibilityButtonPanel.pp_setPositionLocal(this._myConfig.myVisibilityButtonPosition[this._myParams.myHandedness].myPosition);\r\n this.myVisibilityButtonBackground.pp_scaleObject(this._myConfig.myVisibilityButtonBackgroundScale);\r\n this.myVisibilityButtonText.pp_setPositionLocal(this._myConfig.myVisibilityButtonTextPosition);\r\n this.myVisibilityButtonText.pp_scaleObject(this._myConfig.myVisibilityButtonTextScale);\r\n this.myVisibilityButtonCursorTarget.pp_setPositionLocal(this._myConfig.myVisibilityButtonCursorTargetPosition);\r\n\r\n this.myPinButtonPanel.pp_setPositionLocal(this._myConfig.myPinButtonPosition[this._myParams.myHandedness].myPosition);\r\n\r\n this.myPinButtonBackground.pp_scaleObject(this._myConfig.myFlagButtonBackgroundScale);\r\n this.myPinButtonText.pp_setPositionLocal(this._myConfig.myFlagButtonTextPosition);\r\n this.myPinButtonText.pp_scaleObject(this._myConfig.myFlagButtonTextScale);\r\n this.myPinButtonCursorTarget.pp_setPositionLocal(this._myConfig.myPinButtonCursorTargetPosition);\r\n }\r\n\r\n // Components\r\n _addComponents() {\r\n this.myVisibilityButtonBackgroundComponent = this.myVisibilityButtonBackground.pp_addComponent(MeshComponent);\r\n this.myVisibilityButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myVisibilityButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myVisibilityButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myVisibilityButtonTextComponent = this.myVisibilityButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(this.myVisibilityButtonTextComponent);\r\n this.myVisibilityButtonTextComponent.text = this._myConfig.myVisibilityButtonText;\r\n\r\n this.myVisibilityButtonCursorTargetComponent = this.myVisibilityButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myVisibilityButtonCollisionComponent = this.myVisibilityButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myVisibilityButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myVisibilityButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myVisibilityButtonCollisionComponent.extents = this._myConfig.myVisibilityButtonCollisionExtents;\r\n\r\n this.myPinButtonBackgroundComponent = this.myPinButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPinButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPinButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPinButtonBackgroundComponent.material.color = this._myConfig.myButtonDisabledBackgroundColor;\r\n\r\n this.myPinButtonTextComponent = this.myPinButtonText.pp_addComponent(TextComponent);\r\n this._setupButtonTextComponent(this.myPinButtonTextComponent);\r\n this.myPinButtonTextComponent.material.color = this._myConfig.myButtonDisabledTextColor;\r\n this.myPinButtonTextComponent.text = this._myConfig.myPinButtonText;\r\n\r\n this.myPinButtonCursorTargetComponent = this.myPinButtonCursorTarget.pp_addComponent(CursorTarget);\r\n\r\n this.myPinButtonCollisionComponent = this.myPinButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPinButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPinButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPinButtonCollisionComponent.extents = this._myConfig.myPinButtonCollisionExtents;\r\n }\r\n\r\n _setupButtonTextComponent(textComponent) {\r\n textComponent.alignment = this._myConfig.myTextAlignment;\r\n textComponent.justification = this._myConfig.myTextJustification;\r\n textComponent.material = this._myParams.myTextMaterial.clone();\r\n textComponent.material.color = this._myConfig.myTextColor;\r\n textComponent.text = \"\";\r\n }\r\n\r\n _onXRSessionStart() {\r\n this.myVisibilityButtonPanel.pp_setActive(this._myVisibilityButtonVisible);\r\n\r\n this._setTransformForXR();\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n _setTransformForXR() {\r\n this.myFixForwardObject.pp_setParent(this._myParentObject);\r\n\r\n this.myFixForwardObject.pp_resetTransformLocal();\r\n\r\n if (Globals.isPoseForwardFixed(this._myEngine)) {\r\n this.myFixForwardObject.pp_rotateObject(vec3_create(0, 180, 0));\r\n }\r\n\r\n this._updateObjectsTransforms(true);\r\n }\r\n\r\n _setTransformForNonXR() {\r\n if (!this._myPinned) {\r\n this.myFixForwardObject.pp_setParent(this.myNonXRParentObject);\r\n this.myFixForwardObject.pp_resetTransformLocal();\r\n\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myPosition);\r\n this.myPivotObject.pp_resetRotationLocal();\r\n this.myPivotObject.pp_rotateObjectQuat(this._myConfig.myPivotObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myRotation);\r\n\r\n this.myWidgetObject.pp_setPositionLocal(this._myConfig.myWidgetObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myPosition);\r\n this.myWidgetObject.pp_resetRotationLocal();\r\n this.myWidgetObject.pp_rotateObjectQuat(this._myConfig.myWidgetObjectTransforms[ToolInputSourceType.NONE][ToolHandedness.NONE].myRotation);\r\n\r\n this.myVisibilityButtonPanel.pp_setPositionLocal(this._myConfig.myVisibilityButtonPosition[ToolHandedness.NONE].myPosition);\r\n this.myPinButtonPanel.pp_setPositionLocal(this._myConfig.myPinButtonPosition[ToolHandedness.NONE].myPosition);\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { GamepadAxesID, GamepadButtonID } from \"../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec2_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../cauldron/tool_types.js\";\r\nimport { WidgetFrame, WidgetParams } from \"../widget_frame/widget_frame.js\";\r\nimport { ConsoleOriginalFunctions } from \"./console_original_functions.js\";\r\nimport { ConsoleVRWidgetConsoleFunction, ConsoleVRWidgetMessageType, ConsoleVRWidgetPulseOnNewMessage, ConsoleVRWidgetSender, OverrideBrowserConsoleFunctions } from \"./console_vr_types.js\";\r\nimport { ConsoleVRWidgetConfig } from \"./console_vr_widget_config.js\";\r\nimport { ConsoleVRWidgetUI } from \"./console_vr_widget_ui.js\";\r\n\r\nexport class ConsoleVRWidgetParams extends WidgetParams {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.myOverrideBrowserConsoleFunctions = false;\r\n this.myShowOnStart = false;\r\n this.myShowVisibilityButton = false;\r\n this.myPulseOnNewMessage = ConsoleVRWidgetPulseOnNewMessage.NEVER;\r\n\r\n this.myResetBrowserConsoleOriginalFunctionsOnDestroy = true;\r\n }\r\n}\r\n\r\nexport class ConsoleVRWidgetMessage {\r\n\r\n constructor(messageType, messageLines) {\r\n this.myType = messageType;\r\n this.myLines = messageLines;\r\n\r\n this._myOriginalText = messageLines.join(\"\\n\");\r\n\r\n this._myMessagesCount = 1;\r\n }\r\n\r\n hasSameInfo(message) {\r\n return this._myOriginalText == message._myOriginalText && this.myType == message.myType;\r\n }\r\n\r\n increaseCount() {\r\n this._myMessagesCount += 1;\r\n\r\n let countString = ((\"(x\").concat(this._myMessagesCount)).concat(\") \");\r\n\r\n let text = this._myOriginalText;\r\n text = countString.concat(text);\r\n this.myLines = text.split(\"\\n\");\r\n }\r\n}\r\n\r\n// Does Not Support:\r\n// - Placeholder like %d and other similar kind of way to build strings\r\n//\r\n// Known Issues:\r\n// - Since the actual call to the browser console is done by the widget, u will not be able to click\r\n// on the browser console source code link (usually on the right of the logged message) to go to the line where \r\n// the console function has been called, since it will always go to the line where \r\n// the console VR widget forwards the call to the browser console\r\nexport class ConsoleVRWidget {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myWidgetFrame = new WidgetFrame(\"C\", 0, engine);\r\n this._myWidgetFrame.registerWidgetVisibleChangedEventListener(this, this._widgetVisibleChanged.bind(this));\r\n\r\n this._myConfig = new ConsoleVRWidgetConfig();\r\n this._myParams = null;\r\n\r\n this._myUI = new ConsoleVRWidgetUI(engine);\r\n\r\n this._myMessages = [];\r\n\r\n this._myOldBrowserConsole = [];\r\n this._myOldConsoleVR = [];\r\n\r\n this._myTypeFilters = [];\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = false;\r\n }\r\n\r\n this._myScrollUp = false;\r\n this._myScrollDown = false;\r\n this._myScrollOffset = 0;\r\n this._myScrollTimer = 0;\r\n this._myScrollThumbstickTimer = 0;\r\n\r\n this._myPulseTimer = 0;\r\n\r\n this._myGamepadScrollEnabled = true;\r\n if (this._myConfig.myGamepadScrollOnlyOnHover) {\r\n this._myGamepadScrollEnabled = false;\r\n }\r\n\r\n this._myErrorEventListener = null;\r\n this._myUnhandledRejectionEventListener = null;\r\n\r\n this._myConsolePrintAddMessageEnabled = true;\r\n this._myConsolePrintAddMessageEnabledReset = false;\r\n this._myTextDirty = false;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setVisible(visible) {\r\n this._myWidgetFrame.setVisible(visible);\r\n }\r\n\r\n isVisible() {\r\n return this._myWidgetFrame.isVisible();\r\n }\r\n\r\n start(parentObject, params) {\r\n this._myLeftGamepad = Globals.getLeftGamepad(this._myEngine);\r\n this._myRightGamepad = Globals.getRightGamepad(this._myEngine);\r\n\r\n this._myParams = params;\r\n\r\n this._myWidgetFrame.start(parentObject, params);\r\n\r\n this._myUI.build(this._myWidgetFrame.getWidgetObject(), this._myConfig, params);\r\n this._myUI.setVisible(this._myWidgetFrame.isVisible());\r\n this._setNotifyIconActive(false);\r\n\r\n this._addListeners();\r\n\r\n this._overrideConsolesFunctions();\r\n }\r\n\r\n update(dt) {\r\n if (this._myConsolePrintAddMessageEnabledReset) {\r\n this._myConsolePrintAddMessageEnabledReset = false;\r\n this._myConsolePrintAddMessageEnabled = true;\r\n }\r\n\r\n this._myWidgetFrame.update(dt);\r\n\r\n if (this._myWidgetFrame.isVisible()) {\r\n if (this._myTextDirty) {\r\n this._updateAllTexts();\r\n }\r\n\r\n this._updateScroll(dt);\r\n }\r\n\r\n this._updateGamepadsExtraActions(dt);\r\n }\r\n\r\n // This must be done only when all the setup is complete, to avoid issues with other part of the code calling the console and then triggering the console vr while not ready yet\r\n _overrideConsolesFunctions() {\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.LOG] = console.log;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ERROR] = console.error;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.WARN] = console.warn;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.INFO] = console.info;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.DEBUG] = console.debug;\r\n this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ASSERT] = console.assert;\r\n this._myOldBrowserConsoleClear = console.clear;\r\n\r\n if (this._myParams.myOverrideBrowserConsoleFunctions != OverrideBrowserConsoleFunctions.NONE) {\r\n\r\n if (this._myParams.myOverrideBrowserConsoleFunctions == OverrideBrowserConsoleFunctions.ALL) {\r\n console.log = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.LOG, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n }\r\n\r\n console.error = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n console.warn = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.WARN, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n\r\n if (this._myParams.myOverrideBrowserConsoleFunctions == OverrideBrowserConsoleFunctions.ALL) {\r\n console.info = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.INFO, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n console.debug = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.DEBUG, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n }\r\n\r\n console.assert = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ASSERT, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n\r\n console.clear = this._clearConsole.bind(this, true, ConsoleVRWidgetSender.BROWSER_CONSOLE);\r\n\r\n this._myErrorEventListener = function (errorEvent) {\r\n if (errorEvent.error != null) {\r\n this._consolePrint(ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.WINDOW, \"Uncaught\", errorEvent.error.stack);\r\n } else {\r\n this._consolePrint(ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.WINDOW, \"Uncaught\", errorEvent.message);\r\n }\r\n }.bind(this);\r\n\r\n this._myUnhandledRejectionEventListener = function (errorEvent) {\r\n this._consolePrint(ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.WINDOW, \"Uncaught (in promise)\", errorEvent.reason);\r\n }.bind(this);\r\n\r\n window.addEventListener(\"error\", this._myErrorEventListener);\r\n window.addEventListener(\"unhandledrejection\", this._myUnhandledRejectionEventListener);\r\n }\r\n\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.LOG] = Globals.getConsoleVR(this._myEngine).log;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.ERROR] = Globals.getConsoleVR(this._myEngine).error;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.WARN] = Globals.getConsoleVR(this._myEngine).warn;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.INFO] = Globals.getConsoleVR(this._myEngine).info;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.DEBUG] = Globals.getConsoleVR(this._myEngine).debug;\r\n this._myOldConsoleVR[ConsoleVRWidgetConsoleFunction.ASSERT] = Globals.getConsoleVR(this._myEngine).assert;\r\n this._myOldConsoleVRClear = Globals.getConsoleVR(this._myEngine).clear;\r\n\r\n Globals.getConsoleVR(this._myEngine).log = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.LOG, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).error = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ERROR, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).warn = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.WARN, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).info = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.INFO, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).debug = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.DEBUG, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).assert = this._consolePrint.bind(this, ConsoleVRWidgetConsoleFunction.ASSERT, ConsoleVRWidgetSender.CONSOLE_VR);\r\n Globals.getConsoleVR(this._myEngine).clear = this._clearConsole.bind(this, true, ConsoleVRWidgetSender.CONSOLE_VR);\r\n }\r\n\r\n // Text section\r\n\r\n _updateText(messageType) {\r\n let consoleText = \"\";\r\n\r\n if (!this._myTypeFilters[messageType]) {\r\n let linesCount = 0;\r\n let i = this._myMessages.length - 1;\r\n\r\n let scrollLinesToSkip = Math.round(this._myScrollOffset);\r\n\r\n while (i >= 0 && linesCount < this._myConfig.myMaxLines) {\r\n let message = this._myMessages[i];\r\n\r\n // Skip filtered messages\r\n if (this._myTypeFilters[message.myType]) {\r\n i -= 1;\r\n continue;\r\n }\r\n\r\n let messageLines = message.myLines.length;\r\n\r\n // Compute line to skip due to scroll offset\r\n let linesToSkip = 0;\r\n if (scrollLinesToSkip > 0) {\r\n let additionalEmptyLines = 0;\r\n if (i != this._myMessages.length - 1) {\r\n additionalEmptyLines = this._myConfig.myLinesBetweenMessages;\r\n }\r\n\r\n if (scrollLinesToSkip >= messageLines + additionalEmptyLines) { // + empty lines between messages\r\n scrollLinesToSkip -= messageLines + additionalEmptyLines;\r\n linesToSkip = messageLines + additionalEmptyLines;\r\n } else {\r\n linesToSkip = scrollLinesToSkip;\r\n scrollLinesToSkip = 0;\r\n }\r\n }\r\n\r\n // Add empty lines between messages\r\n if (i != this._myMessages.length - 1) {\r\n let emptyLinesToSkip = this._myConfig.myLinesBetweenMessages - Math.max(this._myConfig.myLinesBetweenMessages - linesToSkip, 0);\r\n let emptyLinesToShow = this._myConfig.myLinesBetweenMessages - emptyLinesToSkip;\r\n if (linesCount + emptyLinesToShow > this._myConfig.myMaxLines) {\r\n emptyLinesToShow = this._myMaxLines - linesCount;\r\n }\r\n\r\n for (let j = 0; j < emptyLinesToShow; j++) {\r\n consoleText = (\"\\n\").concat(consoleText);\r\n }\r\n\r\n linesCount += emptyLinesToShow;\r\n linesToSkip -= emptyLinesToSkip;\r\n }\r\n\r\n // Computing the number of message lines to show\r\n let linesToShow = messageLines - linesToSkip;\r\n if (linesCount + linesToShow > this._myConfig.myMaxLines) {\r\n linesToShow = this._myConfig.myMaxLines - linesCount;\r\n }\r\n\r\n if (linesToShow > 0) {\r\n if (message.myType == messageType) {\r\n // If the message is the same type of this message text component, add the message lines\r\n\r\n let linesToPrint = message.myLines.slice(messageLines - linesToShow - linesToSkip, messageLines - linesToSkip);\r\n let text = linesToPrint.join(\"\\n\");\r\n consoleText = (text.concat(\"\\n\")).concat(consoleText);\r\n\r\n linesCount += linesToShow;\r\n } else {\r\n // Otherwise add empty lines, so that the text component with the correct type will have space to show this message\r\n\r\n for (let j = 0; j < linesToShow; j++) {\r\n consoleText = (\"\\n\").concat(consoleText);\r\n }\r\n\r\n linesCount += linesToShow;\r\n }\r\n }\r\n\r\n i -= 1;\r\n }\r\n }\r\n\r\n consoleText = this._myConfig.myMessagesTextStartString.concat(consoleText);\r\n\r\n this._myUI.myMessagesTextComponents[messageType].text = consoleText;\r\n }\r\n\r\n _consolePrint(consoleFunction, sender, ...args) {\r\n switch (sender) {\r\n case ConsoleVRWidgetSender.BROWSER_CONSOLE:\r\n this._myOldBrowserConsole[consoleFunction].apply(console, args);\r\n break;\r\n case ConsoleVRWidgetSender.CONSOLE_VR:\r\n this._myOldConsoleVR[consoleFunction].apply(Globals.getConsoleVR(this._myEngine), args);\r\n break;\r\n default:\r\n this._myOldBrowserConsole[consoleFunction].apply(console, args);\r\n break;\r\n }\r\n\r\n if (this._myConsolePrintAddMessageEnabled && (consoleFunction != ConsoleVRWidgetConsoleFunction.ASSERT || (args.length > 0 && !args[0]))) {\r\n this._myTextDirty = true;\r\n this._pulseGamepad();\r\n\r\n try {\r\n let message = this._argsToMessage(consoleFunction, ...args);\r\n this._addMessage(message);\r\n\r\n if (this._myMessages.length >= this._myConfig.myMaxMessages + this._myConfig.myMaxMessagesDeletePad) {\r\n this._myMessages = this._myMessages.slice(this._myMessages.length - this._myConfig.myMaxMessages);\r\n this._clampScrollOffset();\r\n }\r\n } catch (error) {\r\n this._myConsolePrintAddMessageEnabled = false;\r\n this._myConsolePrintAddMessageEnabledReset = true;\r\n\r\n try {\r\n let errorMessage = \"An error occurred while trying to add a new message to the Console VR Widget\";\r\n let message = new ConsoleVRWidgetMessage(ConsoleVRWidgetMessageType.ERROR, [errorMessage]);\r\n this._myMessages.push(message);\r\n ConsoleOriginalFunctions.error(this._myEngine, errorMessage);\r\n } catch (anotherError) {\r\n // Do nothing\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n _argsToMessage(consoleFunction, ...args) {\r\n if (consoleFunction == ConsoleVRWidgetConsoleFunction.ASSERT) {\r\n args = args.slice(1);\r\n args.splice(0, 0, this._myConfig.myAssertStartString);\r\n }\r\n\r\n let messageType = this._consoleFunctionToMessageType(consoleFunction);\r\n\r\n let formattedText = this._formatArgs(...args);\r\n\r\n let lines = this._splitLongLines(formattedText);\r\n\r\n if (messageType == ConsoleVRWidgetMessageType.INFO) {\r\n messageType = ConsoleVRWidgetMessageType.LOG;\r\n } else if (messageType == ConsoleVRWidgetMessageType.EXCEPTION || messageType == ConsoleVRWidgetMessageType.ASSERT) {\r\n messageType = ConsoleVRWidgetMessageType.ERROR;\r\n }\r\n\r\n\r\n let message = new ConsoleVRWidgetMessage(messageType, lines);\r\n\r\n return message;\r\n }\r\n\r\n _consoleFunctionToMessageType(consoleFunction) {\r\n let messageType = ConsoleVRWidgetMessageType.LOG;\r\n\r\n if (consoleFunction < ConsoleVRWidgetConsoleFunction.INFO) {\r\n messageType = consoleFunction;\r\n } else if (consoleFunction == ConsoleVRWidgetConsoleFunction.INFO) {\r\n messageType = ConsoleVRWidgetMessageType.LOG;\r\n } else {\r\n messageType = ConsoleVRWidgetMessageType.ERROR;\r\n }\r\n\r\n return messageType;\r\n }\r\n\r\n // Here the formatting using placeholder like %d could be implemented in the future\r\n _formatArgs(...args) {\r\n let stringifiedArgs = [];\r\n for (let i = 0; i < args.length; i++) {\r\n if (args[i] === undefined) {\r\n stringifiedArgs.push(\"undefined\");\r\n } else {\r\n stringifiedArgs.push(this._stringifyItem(args[i]));\r\n }\r\n }\r\n\r\n let formattedString = stringifiedArgs.join(\" \");\r\n\r\n return formattedString;\r\n }\r\n\r\n _stringifyItem(item) {\r\n let stringifiedItem = null;\r\n\r\n if (item instanceof Error) {\r\n stringifiedItem = item.stack;\r\n } else if (typeof item == \"object\") {\r\n let linesBetweenItems = 2;\r\n\r\n try {\r\n stringifiedItem = JSON.stringify(item, this._jsonReplacer.bind(this), linesBetweenItems);\r\n } catch (error) {\r\n let cache = new WeakSet();\r\n\r\n stringifiedItem = JSON.stringify(item, function (key, value) {\r\n if (value != null && typeof value == \"object\") {\r\n if (cache.has(value)) {\r\n return \"\"; // Try to avoid circular reference, a repeated object will be caught in this check too sadly\r\n }\r\n cache.add(value);\r\n }\r\n\r\n return this._jsonReplacer(key, value);\r\n }.bind(this), linesBetweenItems);\r\n }\r\n\r\n stringifiedItem = stringifiedItem.replaceAll(\"\\\"[\", \"[\");\r\n stringifiedItem = stringifiedItem.replaceAll(\"'[\", \"[\");\r\n stringifiedItem = stringifiedItem.replaceAll(\"]\\\"\", \"]\");\r\n stringifiedItem = stringifiedItem.replaceAll(\"]'\", \"]\");\r\n } else {\r\n stringifiedItem = item;\r\n }\r\n\r\n return stringifiedItem;\r\n }\r\n\r\n _splitLongLines(messageText) {\r\n let linesToSplit = messageText.split(\"\\n\");\r\n let lines = [];\r\n for (let i = 0; i < linesToSplit.length; i++) {\r\n let lineToSplit = linesToSplit[i];\r\n\r\n if (lineToSplit.length > this._myConfig.myMaxCharactersPerLine) {\r\n let spacesAtStart = this._getSpacesAtStart(lineToSplit);\r\n let spaceToAdd = this._myConfig.myTabString.concat(spacesAtStart);\r\n let lineSplits = 0;\r\n\r\n while (lineToSplit.length > this._myConfig.myMaxCharactersPerLine && lineSplits < this._myConfig.myMaxLineSplits) {\r\n let firstSub = lineToSplit.substr(0, this._myConfig.myMaxCharactersPerLine - 1);\r\n let secondSub = lineToSplit.substr(this._myConfig.myMaxCharactersPerLine - 1);\r\n secondSub = spaceToAdd.concat(secondSub);\r\n\r\n lines.push(firstSub);\r\n\r\n lineToSplit = secondSub;\r\n lineSplits++;\r\n }\r\n lines.push(lineToSplit);\r\n } else {\r\n lines.push(lineToSplit);\r\n }\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n _getSpacesAtStart(text) {\r\n let spaces = \"\";\r\n let i = 0;\r\n\r\n while (i < text.length && text[i] == \" \") {\r\n spaces = spaces.concat(\" \");\r\n i++;\r\n }\r\n\r\n return spaces;\r\n }\r\n\r\n _addMessage(message) {\r\n let hasSameInfoAsPrev = false;\r\n if (this._myMessages.length > 0) {\r\n let lastMessage = this._myMessages[this._myMessages.length - 1];\r\n if (lastMessage.hasSameInfo(message)) {\r\n lastMessage.increaseCount();\r\n hasSameInfoAsPrev = true;\r\n }\r\n }\r\n\r\n if (!hasSameInfoAsPrev) {\r\n this._myMessages.push(message);\r\n }\r\n\r\n this._adjustScrollOffsetAfterMessageAdded(message, hasSameInfoAsPrev);\r\n this._updateNotifyIcon(message);\r\n }\r\n\r\n // If you have scrolled, new messages does not move the scroll position\r\n _adjustScrollOffsetAfterMessageAdded(message, hasSameInfoAsPrev) {\r\n if (!hasSameInfoAsPrev && !(this._myTypeFilters[message.myType]) && this._myScrollOffset > 0) {\r\n this._myScrollOffset += message.myLines.length + this._myConfig.myLinesBetweenMessages;\r\n }\r\n }\r\n\r\n _updateAllTexts() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n this._updateText(ConsoleVRWidgetMessageType[key]);\r\n }\r\n\r\n this._myTextDirty = false;\r\n }\r\n }\r\n\r\n _updateNotifyIcon(message) {\r\n if (!(this._myTypeFilters[message.myType]) && this._myScrollOffset > 0) {\r\n this._setNotifyIconActive(true);\r\n }\r\n }\r\n\r\n _updateScroll(dt) {\r\n if (this._myScrollUp) {\r\n this._myScrollTimer += dt;\r\n while (this._myScrollTimer > this._myConfig.myScrollDelay) {\r\n this._myScrollTimer -= this._myConfig.myScrollDelay;\r\n this._myScrollOffset += this._myConfig.myScrollAmount;\r\n }\r\n } else if (this._myScrollDown) {\r\n this._myScrollTimer += dt;\r\n while (this._myScrollTimer > this._myConfig.myScrollDelay) {\r\n this._myScrollTimer -= this._myConfig.myScrollDelay;\r\n this._myScrollOffset -= this._myConfig.myScrollAmount;\r\n }\r\n }\r\n\r\n this._clampScrollOffset();\r\n\r\n if (this._myScrollUp || this._myScrollDown) {\r\n this._updateAllTexts();\r\n }\r\n\r\n if (this._myScrollOffset == 0) {\r\n this._setNotifyIconActive(false);\r\n }\r\n }\r\n\r\n _clampScrollOffset() {\r\n let maxScroll = this._getMaxScrollOffset();\r\n this._myScrollOffset = Math.pp_clamp(this._myScrollOffset, 0, maxScroll);\r\n }\r\n\r\n _getMaxScrollOffset() {\r\n return Math.max(this._getLinesCount() - this._myConfig.myMaxLines, 0);\r\n }\r\n\r\n _getLinesCount() {\r\n let linesCount = 0;\r\n for (let message of this._myMessages) {\r\n if (!this._myTypeFilters[message.myType]) {\r\n linesCount += message.myLines.length + this._myConfig.myLinesBetweenMessages;\r\n }\r\n }\r\n linesCount -= this._myConfig.myLinesBetweenMessages; // Empty line is added only between messages\r\n linesCount = Math.max(linesCount, 0);\r\n\r\n return linesCount;\r\n }\r\n\r\n // Listener section\r\n\r\n _addListeners() {\r\n let ui = this._myUI;\r\n\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let cursorTarget = ui.myFilterButtonsCursorTargetComponents[ConsoleVRWidgetMessageType[key]];\r\n let backgroundMaterial = ui.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]].material;\r\n let textMaterial = ui.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]].material;\r\n\r\n cursorTarget.onSingleClick.add(this._toggleFilter.bind(this, ConsoleVRWidgetMessageType[key], textMaterial));\r\n cursorTarget.onDoubleClick.add(this._filterAllButOne.bind(this, ConsoleVRWidgetMessageType[key], textMaterial));\r\n cursorTarget.onTripleClick.add(this._resetFilters.bind(this, ConsoleVRWidgetMessageType[key]));\r\n cursorTarget.onHover.add(this._filterHover.bind(this, ConsoleVRWidgetMessageType[key], backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._filterUnhover.bind(this, ConsoleVRWidgetMessageType[key], backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myClearButtonCursorTargetComponent;\r\n let backgroundMaterial = ui.myClearButtonBackgroundComponent.material;\r\n\r\n cursorTarget.onClick.add(this._clearConsole.bind(this, false, null));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._genericUnhover.bind(this, backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myUpButtonCursorTargetComponent;\r\n let backgroundMaterial = ui.myUpButtonBackgroundComponent.material;\r\n\r\n cursorTarget.onDoubleClick.add(this._instantScrollUp.bind(this, true));\r\n cursorTarget.onDown.add(this._setScrollUp.bind(this, true));\r\n cursorTarget.onDownOnHover.add(this._setScrollUp.bind(this, true));\r\n cursorTarget.onUp.add(this._setScrollUp.bind(this, false));\r\n cursorTarget.onUnhover.add(this._setScrollUp.bind(this, false));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._genericUnhover.bind(this, backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myDownButtonCursorTargetComponent;\r\n let backgroundMaterial = ui.myDownButtonBackgroundComponent.material;\r\n\r\n cursorTarget.onDoubleClick.add(this._instantScrollDown.bind(this));\r\n cursorTarget.onDown.add(this._setScrollDown.bind(this, true));\r\n cursorTarget.onDownOnHover.add(this._setScrollDown.bind(this, true));\r\n cursorTarget.onUp.add(this._setScrollDown.bind(this, false));\r\n cursorTarget.onUnhover.add(this._setScrollDown.bind(this, false));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._genericUnhover.bind(this, backgroundMaterial));\r\n }\r\n\r\n {\r\n let cursorTarget = ui.myNotifyIconCursorTargetComponent;\r\n let backgroundMaterial = ui.myNotifyIconBackgroundComponent.material;\r\n\r\n cursorTarget.onClick.add(this._instantScrollDown.bind(this));\r\n cursorTarget.onHover.add(this._genericHover.bind(this, backgroundMaterial));\r\n cursorTarget.onUnhover.add(this._notifyIconUnhover.bind(this));\r\n }\r\n\r\n ui.myPointerCursorTargetComponent.onHover.add(this._setGamepadScrollEnabled.bind(this, true));\r\n ui.myPointerCursorTargetComponent.onUnhover.add(this._setGamepadScrollEnabled.bind(this, false));\r\n }\r\n\r\n _resetFilters(messageType) {\r\n if (this._myWidgetFrame.isVisible()) {\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let backgroundMaterial = this._myUI.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]].material;\r\n let filterTextMaterial = this._myUI.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]].material;\r\n\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = false;\r\n filterTextMaterial.color = this._myConfig.myMessageTypeColors[ConsoleVRWidgetMessageType[key]];\r\n if (ConsoleVRWidgetMessageType[key] != messageType) {\r\n backgroundMaterial.color = this._myConfig.myBackgroundColor;\r\n }\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _filterAllButOne(messageType) {\r\n if (this._myWidgetFrame.isVisible()) {\r\n for (let key in ConsoleVRWidgetMessageType) {\r\n let backgroundMaterial = this._myUI.myFilterButtonsBackgroundComponents[ConsoleVRWidgetMessageType[key]].material;\r\n let filterTextMaterial = this._myUI.myFilterButtonsTextComponents[ConsoleVRWidgetMessageType[key]].material;\r\n if (ConsoleVRWidgetMessageType[key] != messageType) {\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = true;\r\n backgroundMaterial.color = this._myConfig.myFilterButtonDisabledBackgroundColor;\r\n filterTextMaterial.color = this._myConfig.myFilterButtonDisabledTextColor;\r\n } else {\r\n this._myTypeFilters[ConsoleVRWidgetMessageType[key]] = false;\r\n filterTextMaterial.color = this._myConfig.myMessageTypeColors[messageType];\r\n }\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _toggleFilter(messageType, textMaterial) {\r\n if (this._myWidgetFrame.isVisible()) {\r\n\r\n this._myTypeFilters[messageType] = !this._myTypeFilters[messageType];\r\n if (this._myTypeFilters[messageType]) {\r\n textMaterial.color = this._myConfig.myFilterButtonDisabledTextColor;\r\n } else {\r\n textMaterial.color = this._myConfig.myMessageTypeColors[messageType];\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _clearConsole(codeDrivenClear = false, sender = null) {\r\n if (this._myWidgetFrame.isVisible() || codeDrivenClear) {\r\n this._myMessages = [];\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n\r\n if (codeDrivenClear) {\r\n switch (sender) {\r\n case ConsoleVRWidgetSender.BROWSER_CONSOLE:\r\n this._myOldBrowserConsoleClear.apply(console);\r\n break;\r\n case ConsoleVRWidgetSender.CONSOLE_VR:\r\n this._myOldConsoleVRClear.apply(Globals.getConsoleVR(this._myEngine));\r\n break;\r\n default:\r\n break;\r\n }\r\n } else if (this._myConfig.myClearBrowserConsoleWhenClearPressed) {\r\n ConsoleOriginalFunctions.clear(this._myEngine);\r\n }\r\n }\r\n }\r\n\r\n _setScrollUp(value) {\r\n if (this._myWidgetFrame.isVisible() || !value) {\r\n if (value) {\r\n this._myScrollTimer = 0;\r\n }\r\n\r\n this._myScrollUp = value;\r\n }\r\n }\r\n\r\n _setScrollDown(value) {\r\n if (this._myWidgetFrame.isVisible() || !value) {\r\n if (value) {\r\n this._myScrollTimer = 0;\r\n }\r\n\r\n this._myScrollDown = value;\r\n }\r\n }\r\n\r\n _instantScrollUp() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n this._myScrollOffset = this._getMaxScrollOffset();\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _instantScrollDown() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n this._myScrollOffset = 0;\r\n this._setNotifyIconActive(false);\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _setNotifyIconActive(active) {\r\n this._myUI.myNotifyIconPanel.pp_setActive(active && this._myWidgetFrame.isVisible());\r\n }\r\n\r\n _notifyIconUnhover() {\r\n let material = this._myUI.myNotifyIconBackgroundComponent.material;\r\n material.color = this._myConfig.myNotifyIconColor;\r\n }\r\n\r\n _filterHover(messageType, material) {\r\n this._genericHover(material);\r\n }\r\n\r\n _filterUnhover(messageType, material) {\r\n if (this._myTypeFilters[messageType]) {\r\n material.color = this._myConfig.myFilterButtonDisabledBackgroundColor;\r\n } else {\r\n material.color = this._myConfig.myBackgroundColor;\r\n }\r\n }\r\n\r\n _genericHover(material) {\r\n material.color = this._myConfig.myButtonHoverColor;\r\n }\r\n\r\n _genericUnhover(material) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n }\r\n\r\n // Gamepad section\r\n\r\n _updateGamepadsExtraActions(dt) {\r\n if (this._myLeftGamepad && this._myRightGamepad) {\r\n if ((this._myLeftGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressStart() && this._myRightGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed()) ||\r\n (this._myRightGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressStart() && this._myLeftGamepad.getButtonInfo(GamepadButtonID.THUMBSTICK).isPressed())) {\r\n this._toggleVisibility();\r\n }\r\n\r\n this._myPulseTimer = Math.max(this._myPulseTimer - dt, 0);\r\n\r\n this._updateScrollWithThumbstick(dt);\r\n }\r\n }\r\n\r\n _toggleVisibility() {\r\n this._myWidgetFrame.toggleVisibility();\r\n }\r\n\r\n _widgetVisibleChanged(visible) {\r\n this._myUI.setVisible(visible);\r\n if (visible) {\r\n this._updateAllTexts();\r\n }\r\n }\r\n\r\n _updateScrollWithThumbstick(dt) {\r\n if (this._myWidgetFrame.isVisible() && this._myGamepadScrollEnabled) {\r\n let axes = vec2_create(0, 0);\r\n if (this._myConfig.myScrollThumbstickHandedness == ToolHandedness.LEFT) {\r\n axes = this._myLeftGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes;\r\n } else if (this._myConfig.myScrollThumbstickHandedness == ToolHandedness.RIGHT) {\r\n axes = this._myRightGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes;\r\n }\r\n\r\n if (Math.abs(axes[1]) > this._myConfig.myScrollThumbstickMinThreshold) {\r\n this._myScrollThumbstickTimer += dt;\r\n\r\n while (this._myScrollThumbstickTimer > this._myConfig.myScrollThumbstickDelay) {\r\n this._myScrollThumbstickTimer -= this._myConfig.myScrollThumbstickDelay;\r\n\r\n let normalizedScrollAmount = (Math.abs(axes[1]) - this._myConfig.myScrollThumbstickMinThreshold) / (1 - this._myConfig.myScrollThumbstickMinThreshold);\r\n this._myScrollOffset += Math.sign(axes[1]) * normalizedScrollAmount * this._myConfig.myScrollThumbstickAmount;\r\n }\r\n\r\n this._clampScrollOffset();\r\n this._updateAllTexts();\r\n } else {\r\n this._myScrollThumbstickTimer = 0;\r\n }\r\n }\r\n }\r\n\r\n _pulseGamepad() {\r\n if (this._myLeftGamepad && this._myRightGamepad) {\r\n let pulseType = this._myParams.myPulseOnNewMessage;\r\n let pulseEnabled = pulseType == ConsoleVRWidgetPulseOnNewMessage.ALWAYS || (!this._myWidgetFrame.isVisible() && pulseType == ConsoleVRWidgetPulseOnNewMessage.WHEN_HIDDEN);\r\n if (pulseEnabled && this._myPulseTimer == 0) {\r\n if (this._myParams.myHandedness == ToolHandedness.RIGHT) {\r\n this._myRightGamepad.pulse(this._myConfig.myPulseIntensity, this._myConfig.myPulseDuration);\r\n } else {\r\n this._myLeftGamepad.pulse(this._myConfig.myPulseIntensity, this._myConfig.myPulseDuration);\r\n }\r\n this._myPulseTimer = this._myConfig.myPulseDelay;\r\n }\r\n }\r\n }\r\n\r\n _isSimpleArray(array) {\r\n if (this._isSpecialSimpleArray(array)) {\r\n return true;\r\n } else if (Array.isArray(array)) {\r\n let builtInArray = true;\r\n for (let element of array) {\r\n if (element instanceof Object) {\r\n builtInArray = false;\r\n break;\r\n }\r\n }\r\n\r\n return builtInArray;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _isSpecialSimpleArray(item) {\r\n return item && item.constructor &&\r\n (\r\n item.constructor.name == \"Uint8ClampedArray\" ||\r\n item.constructor.name == \"Uint8Array\" ||\r\n item.constructor.name == \"Uint16Array\" ||\r\n item.constructor.name == \"Uint32Array\" ||\r\n item.constructor.name == \"Int8Array\" ||\r\n item.constructor.name == \"Int16Array\" ||\r\n item.constructor.name == \"Int32Array\" ||\r\n item.constructor.name == \"Float32Array\" ||\r\n item.constructor.name == \"Float64Array\"\r\n );\r\n }\r\n\r\n _setGamepadScrollEnabled(enabled) {\r\n this._myGamepadScrollEnabled = enabled;\r\n\r\n if (!this._myConfig.myGamepadScrollOnlyOnHover) {\r\n this._myGamepadScrollEnabled = true;\r\n }\r\n }\r\n\r\n _jsonReplacer(key, value) {\r\n if (value instanceof Map) {\r\n return Array.from(value.entries());\r\n } else if (this._isSimpleArray(value)) {\r\n let array = value;\r\n if (this._isSpecialSimpleArray(array)) {\r\n let arrayCopy = []; // Special arrays like Float32Array do not print like Array\r\n for (let i = 0; i < array.length; i++) {\r\n arrayCopy[i] = array[i];\r\n }\r\n\r\n array = arrayCopy;\r\n }\r\n\r\n let stringifiedArray = JSON.stringify(array);\r\n stringifiedArray = stringifiedArray.split(\",\").join(\", \");\r\n return stringifiedArray;\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n window.removeEventListener(\"error\", this._myErrorEventListener);\r\n window.removeEventListener(\"unhandledrejection\", this._myUnhandledRejectionEventListener);\r\n\r\n this._myUI.destroy();\r\n this._myWidgetFrame.destroy();\r\n\r\n if (this._myParams.myResetBrowserConsoleOriginalFunctionsOnDestroy) {\r\n console.log = ConsoleOriginalFunctions.getLog(this._myEngine);\r\n console.error = ConsoleOriginalFunctions.getError(this._myEngine);\r\n console.warn = ConsoleOriginalFunctions.getWarn(this._myEngine);\r\n console.info = ConsoleOriginalFunctions.getInfo(this._myEngine);\r\n console.debug = ConsoleOriginalFunctions.getDebug(this._myEngine);\r\n console.assert = ConsoleOriginalFunctions.getAssert(this._myEngine);\r\n console.clear = ConsoleOriginalFunctions.getClear(this._myEngine);\r\n } else {\r\n console.log = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.LOG];\r\n console.error = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ERROR];\r\n console.warn = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.WARN];\r\n console.info = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.INFO];\r\n console.debug = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.DEBUG];\r\n console.assert = this._myOldBrowserConsole[ConsoleVRWidgetConsoleFunction.ASSERT];\r\n console.clear = this._myOldBrowserConsoleClear;\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ConsoleVRWidget, ConsoleVRWidgetParams } from \"../console_vr_widget.js\";\r\nimport { InitConsoleVRComponent } from \"./init_console_vr_component.js\";\r\n\r\nexport class ConsoleVRToolComponent extends Component {\r\n static TypeName = \"pp-console-vr-tool\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"None\", \"Left\", \"Right\"], \"None\"),\r\n _myOverrideBrowserConsoleFunctions: Property.enum([\"None\", \"All\", \"Errors & Warns\"], \"All\"),\r\n _myShowOnStart: Property.bool(false),\r\n _myShowVisibilityButton: Property.bool(false),\r\n _myPulseOnNewMessage: Property.enum([\"Never\", \"Always\", \"When Hidden\"], \"Never\")\r\n };\r\n\r\n start() {\r\n this._myStarted = false;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this.object.pp_addComponent(InitConsoleVRComponent);\r\n\r\n this._myWidget = new ConsoleVRWidget(this.engine);\r\n\r\n let params = new ConsoleVRWidgetParams(this.engine);\r\n params.myHandedness = [null, \"left\", \"right\"][this._myHandedness];\r\n params.myOverrideBrowserConsoleFunctions = this._myOverrideBrowserConsoleFunctions;\r\n params.myShowOnStart = this._myShowOnStart;\r\n params.myShowVisibilityButton = this._myShowVisibilityButton;\r\n params.myPulseOnNewMessage = this._myPulseOnNewMessage;\r\n params.myPlaneMaterial = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n params.myTextMaterial = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n\r\n this._myWidget.start(this.object, params);\r\n\r\n this._myWidgetVisibleBackup = null;\r\n\r\n this._myStarted = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup != null) {\r\n this._myWidget.setVisible(false);\r\n this._myWidget.setVisible(this._myWidgetVisibleBackup);\r\n\r\n this._myWidgetVisibleBackup = null;\r\n }\r\n\r\n this._myWidget.update(dt);\r\n }\r\n } else if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n if (this._myStarted) {\r\n this._myWidget.destroy();\r\n }\r\n }\r\n}", "/*\r\nEasy Tune Variables Examples\r\n\r\nNumber: Globals.getEasyTuneVariables().add(new EasyTuneNumber(\"Float\", 1.00, (newValue) => this.myFloat = newValue, true, 2, 0.1));\r\nNumber Array: Globals.getEasyTuneVariables().add(new EasyTuneNumberArray(\"Float Array\", [1.00, 2.00, 3.00], (newValue) => this.myFloatArray.pp_copy(newValue), true, 2, 0.1));\r\nInt: Globals.getEasyTuneVariables().add(new EasyTuneInt(\"Int\", this.myInt, (newValue) => this.myInt = newValue, true, 1));\r\nInt Array: Globals.getEasyTuneVariables().add(new EasyTuneIntArray(\"Int Array\", [1, 2, 3], (newValue) => this.myIntArray.pp_copy(newValue), true, 1));\r\nBool: Globals.getEasyTuneVariables().add(new EasyTuneBool(\"Bool\", this.myBool, (newValue) => this.myBool = newValue, true));\r\nBool Array: Globals.getEasyTuneVariables().add(new EasyTuneBoolArray(\"Bool Array\", [false, true, false], (newValue) => this.myBoolArray.pp_copy(newValue), true));\r\nTransform: Globals.getEasyTuneVariables().add(new EasyTuneTransform(\"Transform\", mat4_create(), (newValue) => this.myTransform.mat4_copy(newValue), true, true, 3));\r\n*/\r\n\r\nimport { Emitter } from \"@wonderlandengine/api\";\r\nimport { mat4_create } from \"../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"./easy_tune_utils.js\";\r\n\r\nexport let EasyTuneVariableType = {\r\n NONE: 0,\r\n NUMBER: 1,\r\n BOOL: 2,\r\n TRANSFORM: 3\r\n};\r\n\r\nexport class EasyTuneVariableExtraParams {\r\n constructor(autoimportEnabled = null, manualImportEnabled = null, exportEnabled = null) {\r\n this.myAutoImportEnabled = autoimportEnabled;\r\n this.myManualImportEnabled = manualImportEnabled;\r\n this.myExportEnabled = exportEnabled;\r\n }\r\n}\r\n\r\nexport class EasyTuneVariable {\r\n\r\n constructor(name, type, onValueChangedEventListener = null, showOnWidget = true, extraParams = new EasyTuneVariableExtraParams(), engine = Globals.getMainEngine()) {\r\n this._myName = name;\r\n this._myType = type;\r\n\r\n this._myValue = null;\r\n this._myDefaultValue = null;\r\n\r\n this._myShowOnWidget = showOnWidget;\r\n this._myAutoImportEnabled = extraParams.myAutoImportEnabled != null ? extraParams.myAutoImportEnabled : EasyTuneUtils.getAutoImportEnabledDefaultValue(engine);\r\n this._myManualImportEnabled = extraParams.myManualImportEnabled != null ? extraParams.myManualImportEnabled : EasyTuneUtils.getManualImportEnabledDefaultValue(engine);\r\n this._myExportEnabled = extraParams.myExportEnabled != null ? extraParams.myExportEnabled : EasyTuneUtils.getExportEnabledDefaultValue(engine);\r\n\r\n this._myWidgetCurrentVariable = false;\r\n\r\n this._myValueChangedEmitter = new Emitter(); // Signature: listener(value, easyTuneVariables)\r\n\r\n this._myEngine = engine;\r\n\r\n if (onValueChangedEventListener != null) {\r\n this.registerValueChangedEventListener(this, onValueChangedEventListener);\r\n }\r\n }\r\n\r\n getName() {\r\n return this._myName;\r\n }\r\n\r\n getType() {\r\n return this._myType;\r\n }\r\n\r\n isWidgetCurrentVariable() {\r\n return this._myWidgetCurrentVariable;\r\n }\r\n\r\n setWidgetCurrentVariable(widgetCurrentVariable) {\r\n this._myWidgetCurrentVariable = widgetCurrentVariable;\r\n return this;\r\n }\r\n\r\n getValue() {\r\n return this._myValue;\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n let valueChanged = this._myValue != value;\r\n\r\n this._myValue = value;\r\n\r\n if (resetDefaultValue) {\r\n EasyTuneVariable.prototype.setDefaultValue.call(this, value);\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(this._myEngine);\r\n\r\n if (valueChanged) {\r\n this._myValueChangedEmitter.notify(this.getValue(), this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n getDefaultValue() {\r\n return this._myDefaultValue;\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myDefaultValue = value;\r\n return this;\r\n }\r\n\r\n isShownOnWidget() {\r\n return this._myShowOnWidget;\r\n }\r\n\r\n setShowOnWidget(showOnWidget) {\r\n this._myShowOnWidget = showOnWidget;\r\n return this;\r\n }\r\n\r\n isManualImportEnabled() {\r\n return this._myManualImportEnabled;\r\n }\r\n\r\n isAutoImportEnabled() {\r\n return this._myAutoImportEnabled;\r\n }\r\n\r\n isExportEnabled() {\r\n return this._myExportEnabled;\r\n }\r\n\r\n setManualImportEnabled(enabled) {\r\n this._myManualImportEnabled = enabled;\r\n return this;\r\n }\r\n\r\n setAutoImportEnabled(enabled) {\r\n this._myAutoImportEnabled = enabled;\r\n return this;\r\n }\r\n\r\n setExportEnabled(enabled) {\r\n this._myExportEnabled = enabled;\r\n return this;\r\n }\r\n\r\n fromJSON(valueJSON, resetDefaultValue = false) {\r\n this.setValue(JSON.parse(valueJSON), resetDefaultValue);\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.getValue());\r\n }\r\n\r\n registerValueChangedEventListener(id, listener) {\r\n this._myValueChangedEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterValueChangedEventListener(id) {\r\n this._myValueChangedEmitter.remove(id);\r\n }\r\n}\r\n\r\nexport class EasyTuneVariableArray extends EasyTuneVariable {\r\n\r\n constructor(name, type, value, onValueChangedEventListener, showOnWidget, extraParams, engine) {\r\n super(name, type, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n EasyTuneVariableArray.prototype.setValue.call(this, value, true);\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n let valueChanged = this._myValue != null && !this._myValue.pp_equals(value);\r\n\r\n if (this._myValue == null) {\r\n this._myValue = value.pp_clone();\r\n } else {\r\n this._myValue.pp_copy(value);\r\n }\r\n\r\n if (resetDefaultValue) {\r\n EasyTuneVariableArray.prototype.setDefaultValue.call(this, value);\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(this._myEngine);\r\n\r\n if (valueChanged) {\r\n this._myValueChangedEmitter.notify(this.getValue(), this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n setDefaultValue(value) {\r\n if (this._myDefaultValue == null) {\r\n this._myDefaultValue = value.pp_clone();\r\n } else {\r\n this._myDefaultValue.pp_copy(value);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\n// NUMBER\r\n\r\nexport class EasyTuneNumberArray extends EasyTuneVariableArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, decimalPlaces = 3, stepPerSecond = 1, min = null, max = null, editAllValuesTogether = false, extraParams, engine) {\r\n super(name, EasyTuneVariableType.NUMBER, value, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n this._myDecimalPlaces = decimalPlaces;\r\n this._myStepPerSecond = stepPerSecond;\r\n\r\n this._myDefaultStepPerSecond = this._myStepPerSecond;\r\n\r\n this._myMin = min;\r\n this._myMax = max;\r\n\r\n this._myEditAllValuesTogether = editAllValuesTogether;\r\n\r\n this._clampValue(true);\r\n }\r\n\r\n setMax(max) {\r\n this._myMax = max;\r\n this._clampValue(false);\r\n }\r\n\r\n setMin(min) {\r\n this._myMin = min;\r\n this._clampValue(false);\r\n }\r\n\r\n _clampValue(resetDefaultValue) {\r\n let clampedValue = this._myValue.vec_clamp(this._myMin, this._myMax);\r\n\r\n if (!resetDefaultValue) {\r\n let clampedDefaultValue = this.getDefaultValue().vec_clamp(this._myMin, this._myMax);\r\n let defaultValueChanged = !clampedDefaultValue.vec_equals(this.getDefaultValue(), 0.00001);\r\n if (defaultValueChanged) {\r\n EasyTuneVariableArray.prototype.setDefaultValue.call(this, clampedDefaultValue);\r\n }\r\n }\r\n\r\n EasyTuneVariableArray.prototype.setValue.call(this, clampedValue, resetDefaultValue);\r\n }\r\n}\r\n\r\nexport class EasyTuneNumber extends EasyTuneNumberArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, decimalPlaces, stepPerSecond, min, max, extraParams, engine) {\r\n super(name, [value], onValueChangedEventListener, showOnWidget, decimalPlaces, stepPerSecond, min, max, undefined, extraParams, engine);\r\n\r\n this._myTempValue = [0];\r\n this._myTempDefaultValue = [0];\r\n }\r\n\r\n getValue() {\r\n return super.getValue()[0];\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n this._myTempValue[0] = value;\r\n return super.setValue(this._myTempValue, resetDefaultValue);\r\n }\r\n\r\n getDefaultValue() {\r\n return super.getDefaultValue()[0];\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myTempDefaultValue[0] = value;\r\n return super.setDefaultValue(this._myTempValue);\r\n }\r\n}\r\n\r\nexport class EasyTuneInt extends EasyTuneNumber {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, stepPerSecond, min, max, extraParams, engine) {\r\n super(name, value, onValueChangedEventListener, showOnWidget, 0, stepPerSecond, min, max, extraParams, engine);\r\n }\r\n}\r\n\r\nexport class EasyTuneIntArray extends EasyTuneNumberArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, stepPerSecond, min, max, editAllValuesTogether, extraParams, engine) {\r\n let roundedValue = value.pp_clone();\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n roundedValue[i] = Math.round(roundedValue[i]);\r\n }\r\n\r\n super(name, roundedValue, onValueChangedEventListener, showOnWidget, 0, stepPerSecond, min != null ? Math.round(min) : null, max != null ? Math.round(max) : max, editAllValuesTogether, extraParams, engine);\r\n }\r\n}\r\n\r\n// BOOL\r\n\r\nexport class EasyTuneBoolArray extends EasyTuneVariableArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, extraParams, engine) {\r\n super(name, EasyTuneVariableType.BOOL, value, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n }\r\n}\r\n\r\nexport class EasyTuneBool extends EasyTuneBoolArray {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, extraParams, engine) {\r\n super(name, [value], onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n this._myTempValue = [0];\r\n this._myTempDefaultValue = [0];\r\n }\r\n\r\n getValue() {\r\n return super.getValue()[0];\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n this._myTempValue[0] = value;\r\n return super.setValue(this._myTempValue, resetDefaultValue);\r\n }\r\n\r\n getDefaultValue() {\r\n return super.getDefaultValue()[0];\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myTempDefaultValue[0] = value;\r\n return super.setDefaultValue(this._myTempValue);\r\n }\r\n}\r\n\r\n// EASY TUNE EASY TRANSFORM\r\n\r\nexport class EasyTuneTransform extends EasyTuneVariable {\r\n\r\n constructor(name, value, onValueChangedEventListener, showOnWidget, scaleAsOne = true, decimalPlaces = 3, positionStepPerSecond = 1, rotationStepPerSecond = 50, scaleStepPerSecond = 1, extraParams, engine) {\r\n super(name, EasyTuneVariableType.TRANSFORM, onValueChangedEventListener, showOnWidget, extraParams, engine);\r\n\r\n this._myDecimalPlaces = decimalPlaces;\r\n\r\n this._myPosition = value.mat4_getPosition();\r\n this._myRotation = value.mat4_getRotationDegrees();\r\n this._myScale = value.mat4_getScale();\r\n\r\n let decimalPlacesMultiplier = Math.pow(10, this._myDecimalPlaces);\r\n for (let i = 0; i < 3; i++) {\r\n this._myScale[i] = Math.max(this._myScale[i], 1 / decimalPlacesMultiplier);\r\n }\r\n\r\n this._myScaleAsOne = scaleAsOne;\r\n\r\n this._myPositionStepPerSecond = positionStepPerSecond;\r\n this._myRotationStepPerSecond = rotationStepPerSecond;\r\n this._myScaleStepPerSecond = scaleStepPerSecond;\r\n\r\n this._myDefaultPosition = this._myPosition.vec3_clone();\r\n this._myDefaultRotation = this._myRotation.vec3_clone();\r\n this._myDefaultScale = this._myScale.vec3_clone();\r\n\r\n this._myDefaultPositionStepPerSecond = this._myPositionStepPerSecond;\r\n this._myDefaultRotationStepPerSecond = this._myRotationStepPerSecond;\r\n this._myDefaultScaleStepPerSecond = this._myScaleStepPerSecond;\r\n\r\n this._myTransform = mat4_create();\r\n this._myTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n\r\n this._myTempTransform = mat4_create();\r\n }\r\n\r\n getValue() {\r\n this._myTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n return this._myTransform;\r\n }\r\n\r\n setValue(value, resetDefaultValue = false) {\r\n this._myTempTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n\r\n value.mat4_getPosition(this._myPosition);\r\n value.mat4_getRotationDegrees(this._myRotation);\r\n value.mat4_getScale(this._myScale);\r\n\r\n this._myTransform.mat4_setPositionRotationDegreesScale(this._myPosition, this._myRotation, this._myScale);\r\n\r\n let valueChanged = !this._myTempTransform.pp_equals(this._myTransform);\r\n\r\n if (resetDefaultValue) {\r\n EasyTuneTransform.prototype.setDefaultValue.call(this, value);\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(this._myEngine);\r\n\r\n if (valueChanged) {\r\n this._myValueChangedEmitter.notify(this.getValue(), this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n setDefaultValue(value) {\r\n this._myDefaultPosition = value.mat4_getPosition();\r\n this._myDefaultRotation = value.mat4_getRotationDegrees();\r\n this._myDefaultScale = value.mat4_getScale();\r\n\r\n return this;\r\n }\r\n\r\n fromJSON(valueJSON, resetDefaultValue = false) {\r\n this.setValue(JSON.parse(valueJSON), resetDefaultValue);\r\n }\r\n\r\n toJSON() {\r\n return this.getValue().vec_toString();\r\n }\r\n}", "import { Globals } from \"../../pp/globals.js\";\r\n\r\nlet _mySetWidgetCurrentVariableCallbacks = new WeakMap(); // Signature: callback(variableName)\r\nlet _myRefreshWidgetCallbacks = new WeakMap(); // Signature: callback()\r\n\r\nlet _myAutoImportEnabledDefaultValues = new WeakMap();\r\nlet _myManualImportEnabledDefaultValues = new WeakMap();\r\nlet _myExportEnabledDefaultValues = new WeakMap();\r\n\r\nexport function setWidgetCurrentVariable(variableName, engine = Globals.getMainEngine()) {\r\n if (_mySetWidgetCurrentVariableCallbacks.has(engine)) {\r\n for (let callback of _mySetWidgetCurrentVariableCallbacks.get(engine).values()) {\r\n callback(variableName);\r\n }\r\n }\r\n}\r\n\r\nexport function refreshWidget(engine = Globals.getMainEngine()) {\r\n if (_myRefreshWidgetCallbacks.has(engine)) {\r\n for (let callback of _myRefreshWidgetCallbacks.get(engine).values()) {\r\n callback();\r\n }\r\n }\r\n}\r\n\r\n// fileURL can contain parameters inside brackets, like {param}\r\n// Those parameters will be replaced with the same one on the current page url, like www.currentpage.com/?param=2\r\nexport function importVariables(fileURL = null, resetVariablesDefaultValueOnImport = false, manualImport = false, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n if (fileURL == null || fileURL.length == 0) {\r\n if (navigator.clipboard) {\r\n navigator.clipboard.readText().then(\r\n function (clipboard) {\r\n Globals.getEasyTuneVariables(engine).fromJSON(clipboard, resetVariablesDefaultValueOnImport, manualImport);\r\n\r\n EasyTuneUtils.refreshWidget(engine);\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Imported from: clipboard\");\r\n console.log(clipboard);\r\n }, function () {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from: clipboard\");\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from: clipboard\");\r\n console.error(reason);\r\n });\r\n }\r\n } else {\r\n let replacedFileURL = _importExportVariablesReplaceFileURLParams(fileURL, engine);\r\n\r\n fetch(replacedFileURL).then(\r\n function (response) {\r\n if (response.ok) {\r\n response.text().then(\r\n function (text) {\r\n Globals.getEasyTuneVariables(engine).fromJSON(text, resetVariablesDefaultValueOnImport, manualImport);\r\n\r\n EasyTuneUtils.refreshWidget(engine);\r\n\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Imported from:\", replacedFileURL);\r\n console.log(text);\r\n },\r\n function (response) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n );\r\n } else {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n },\r\n function (response) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while importing the easy tune variables from:\", replacedFileURL);\r\n console.error(reason);\r\n });\r\n }\r\n\r\n EasyTuneUtils.refreshWidget(engine);\r\n}\r\n\r\n// fileURL can contain parameters inside brackets, like {param}\r\n// Those parameters will be replaced with the same one on the current page url, like www.currentpage.com/?param=2\r\nexport function exportVariables(fileURL = null, onSuccessCallback = null, onFailureCallback = null, engine = Globals.getMainEngine()) {\r\n let jsonVariables = Globals.getEasyTuneVariables(engine).toJSON();\r\n\r\n if (fileURL == null || fileURL.length == 0) {\r\n if (navigator.clipboard) {\r\n navigator.clipboard.writeText(jsonVariables).then(\r\n function () {\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Exported to: clipboard\");\r\n console.log(jsonVariables);\r\n },\r\n function () {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to: clipboard\");\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to: clipboard\");\r\n console.error(reason);\r\n });\r\n }\r\n } else {\r\n let replacedFileURL = _importExportVariablesReplaceFileURLParams(fileURL, engine);\r\n\r\n fetch(replacedFileURL, {\r\n headers: {\r\n \"Accept\": \"application/json\",\r\n \"Content-Type\": \"application/json\"\r\n },\r\n method: \"POST\",\r\n body: jsonVariables\r\n }).then(\r\n function (response) {\r\n if (response.ok) {\r\n if (onSuccessCallback != null) {\r\n onSuccessCallback();\r\n }\r\n\r\n console.log(\"Easy Tune Variables Exported to:\", replacedFileURL);\r\n console.log(jsonVariables);\r\n } else {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n },\r\n function (response) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to:\", replacedFileURL);\r\n console.error(response);\r\n }\r\n ).catch(function (reason) {\r\n if (onFailureCallback != null) {\r\n onFailureCallback();\r\n }\r\n\r\n console.error(\"An error occurred while exporting the easy tune variables to:\", replacedFileURL);\r\n console.error(reason);\r\n });\r\n }\r\n}\r\n\r\nexport function setAutoImportEnabledDefaultValue(defaultValue, engine = Globals.getMainEngine()) {\r\n _myAutoImportEnabledDefaultValues.set(engine, defaultValue);\r\n}\r\n\r\nexport function setManualImportEnabledDefaultValue(defaultValue, engine = Globals.getMainEngine()) {\r\n _myManualImportEnabledDefaultValues.set(engine, defaultValue);\r\n}\r\n\r\nexport function setExportEnabledDefaultValue(defaultValue, engine = Globals.getMainEngine()) {\r\n _myExportEnabledDefaultValues.set(engine, defaultValue);\r\n}\r\n\r\nexport function getAutoImportEnabledDefaultValue(engine = Globals.getMainEngine()) {\r\n let defaultValue = true;\r\n\r\n if (_myAutoImportEnabledDefaultValues.has(engine)) {\r\n defaultValue = _myAutoImportEnabledDefaultValues.get(engine);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function getManualImportEnabledDefaultValue(engine = Globals.getMainEngine()) {\r\n let defaultValue = true;\r\n\r\n if (_myManualImportEnabledDefaultValues.has(engine)) {\r\n defaultValue = _myManualImportEnabledDefaultValues.get(engine);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function getExportEnabledDefaultValue(engine = Globals.getMainEngine()) {\r\n let defaultValue = true;\r\n\r\n if (_myExportEnabledDefaultValues.has(engine)) {\r\n defaultValue = _myExportEnabledDefaultValues.get(engine);\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\nexport function addSetWidgetCurrentVariableCallback(id, callback, engine = Globals.getMainEngine()) {\r\n if (!_mySetWidgetCurrentVariableCallbacks.has(engine)) {\r\n _mySetWidgetCurrentVariableCallbacks.set(engine, new Map());\r\n }\r\n\r\n _mySetWidgetCurrentVariableCallbacks.get(engine).set(id, callback);\r\n}\r\n\r\nexport function removeSetWidgetCurrentVariableCallback(id, engine = Globals.getMainEngine()) {\r\n if (_mySetWidgetCurrentVariableCallbacks.has(engine)) {\r\n _mySetWidgetCurrentVariableCallbacks.get(engine).delete(id);\r\n }\r\n}\r\n\r\nexport function addRefreshWidgetCallback(id, callback, engine = Globals.getMainEngine()) {\r\n if (!_myRefreshWidgetCallbacks.has(engine)) {\r\n _myRefreshWidgetCallbacks.set(engine, new Map());\r\n }\r\n\r\n _myRefreshWidgetCallbacks.get(engine).set(id, callback);\r\n}\r\n\r\nexport function removeRefreshWidgetCallback(id, engine = Globals.getMainEngine()) {\r\n if (_myRefreshWidgetCallbacks.has(engine)) {\r\n _myRefreshWidgetCallbacks.get(engine).delete(id);\r\n }\r\n}\r\n\r\nexport let EasyTuneUtils = {\r\n setWidgetCurrentVariable,\r\n refreshWidget,\r\n importVariables,\r\n exportVariables,\r\n setAutoImportEnabledDefaultValue,\r\n setManualImportEnabledDefaultValue,\r\n setExportEnabledDefaultValue,\r\n getAutoImportEnabledDefaultValue,\r\n getManualImportEnabledDefaultValue,\r\n getExportEnabledDefaultValue,\r\n addSetWidgetCurrentVariableCallback,\r\n removeSetWidgetCurrentVariableCallback,\r\n addRefreshWidgetCallback,\r\n removeRefreshWidgetCallback\r\n};\r\n\r\n\r\n\r\nlet _importExportVariablesReplaceFileURLParams = function () {\r\n let matchEasyTuneURLParamsRegex = new RegExp(\"\\\\{.+?\\\\}\", \"g\");\r\n return function _importExportVariablesReplaceFileURLParams(fileURL, engine = Globals.getMainEngine()) {\r\n let params = fileURL.match(matchEasyTuneURLParamsRegex);\r\n\r\n if (params == null || params.length == 0) {\r\n return fileURL;\r\n }\r\n\r\n for (let i = 0; i < params.length; i++) {\r\n params[i] = params[i].replace(\"{\", \"\");\r\n params[i] = params[i].replace(\"}\", \"\");\r\n }\r\n\r\n let urlSearchParams = new URL(document.location).searchParams;\r\n\r\n let replacedFileURL = fileURL;\r\n\r\n for (let param of params) {\r\n let searchParamValue = urlSearchParams.get(param);\r\n if (searchParamValue != null) {\r\n replacedFileURL = replacedFileURL.replace(\"{\" + param + \"}\", searchParamValue);\r\n }\r\n }\r\n\r\n return replacedFileURL;\r\n };\r\n}();", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"../easy_tune_utils.js\";\r\nimport { EasyTuneWidget, EasyTuneWidgetParams } from \"../easy_tune_widgets/easy_tune_widget.js\";\r\nimport { InitEasyTuneVariablesComponent } from \"./init_easy_tune_variables_component.js\";\r\n\r\nexport class EasyTuneToolComponent extends Component {\r\n static TypeName = \"pp-easy-tune-tool\";\r\n static Properties = {\r\n _myHandedness: Property.enum([\"None\", \"Left\", \"Right\"], \"None\"),\r\n _myShowOnStart: Property.bool(false),\r\n _myShowVisibilityButton: Property.bool(false),\r\n _myGamepadScrollVariableEnabled: Property.bool(true),\r\n\r\n _myShowVariablesImportExportButtons: Property.bool(false),\r\n _myVariablesImportURL: Property.string(\"\"), // The URL can contain parameters inside brackets, like {param}\r\n _myVariablesExportURL: Property.string(\"\"), // Those parameters will be replaced with the same one on the current page url, like www.currentpage.com/?param=2\r\n _myImportVariablesOnStart: Property.bool(false),\r\n _myResetVariablesDefaultValueOnImport: Property.bool(false)\r\n };\r\n\r\n init() {\r\n // #TODO this should check for tool enabled but it might not have been initialized yet, not way to specify component order\r\n // It can't be moved to start either, because other components might call setWidgetCurrentVariable or refreshWidget during start, \r\n // so it needs to be initialized before that\r\n\r\n this.object.pp_addComponent(InitEasyTuneVariablesComponent);\r\n\r\n this._myWidget = new EasyTuneWidget(this.engine);\r\n\r\n EasyTuneUtils.addSetWidgetCurrentVariableCallback(this, function (variableName) {\r\n this._myWidget.setCurrentVariable(variableName);\r\n }.bind(this), this.engine);\r\n\r\n EasyTuneUtils.addRefreshWidgetCallback(this, function () {\r\n this._myWidget.refresh();\r\n }.bind(this), this.engine);\r\n\r\n this._myStarted = false;\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n let params = new EasyTuneWidgetParams();\r\n params.myHandedness = [null, \"left\", \"right\"][this._myHandedness];\r\n params.myShowOnStart = this._myShowOnStart;\r\n params.myShowVisibilityButton = this._myShowVisibilityButton;\r\n params.myShowAdditionalButtons = true;\r\n params.myGamepadScrollVariableEnabled = this._myGamepadScrollVariableEnabled;\r\n params.myPlaneMaterial = Globals.getDefaultMaterials(this.engine).myFlatOpaque.clone();\r\n params.myTextMaterial = Globals.getDefaultMaterials(this.engine).myText.clone();\r\n\r\n params.myShowVariablesImportExportButtons = this._myShowVariablesImportExportButtons;\r\n params.myVariablesImportCallback = function (onSuccessCallback, onFailureCallback) {\r\n EasyTuneUtils.importVariables(this._myVariablesImportURL, this._myResetVariablesDefaultValueOnImport, true, onSuccessCallback, onFailureCallback, this.engine);\r\n }.bind(this);\r\n params.myVariablesExportCallback = function (onSuccessCallback, onFailureCallback) {\r\n EasyTuneUtils.exportVariables(this._myVariablesExportURL, onSuccessCallback, onFailureCallback, this.engine);\r\n }.bind(this);\r\n\r\n this._myWidget.start(this.object, params, Globals.getEasyTuneVariables(this.engine));\r\n\r\n this._myWidgetVisibleBackup = null;\r\n\r\n this._myStarted = true;\r\n this._myFirstUpdate = true;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myStarted) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n if (this._myImportVariablesOnStart) {\r\n EasyTuneUtils.importVariables(this._myVariablesImportURL, this._myResetVariablesDefaultValueOnImport, false, undefined, undefined, this.engine);\r\n }\r\n }\r\n\r\n if (this._myWidgetVisibleBackup != null) {\r\n this._myWidget.setVisible(false);\r\n this._myWidget.setVisible(this._myWidgetVisibleBackup);\r\n\r\n this._myWidgetVisibleBackup = null;\r\n }\r\n\r\n this._myWidget.update(dt);\r\n }\r\n } else if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myStarted) {\r\n if (this._myWidgetVisibleBackup == null) {\r\n this._myWidgetVisibleBackup = this._myWidget.isVisible();\r\n }\r\n\r\n if (this._myWidget.isVisible()) {\r\n this._myWidget.setVisible(false);\r\n }\r\n }\r\n }\r\n\r\n onDestroy() {\r\n this._myWidget.destroy();\r\n\r\n EasyTuneUtils.removeSetWidgetCurrentVariableCallback(this, this.engine);\r\n EasyTuneUtils.removeRefreshWidgetCallback(this, this.engine);\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Timer } from \"../../../../cauldron/cauldron/timer.js\";\r\n\r\nexport class EasyTuneBaseWidgetParams {\r\n\r\n constructor() {\r\n this.myVariablesImportCallback = null; // Signature: callback()\r\n this.myVariablesExportCallback = null; // Signature: callback()\r\n }\r\n}\r\n\r\nexport class EasyTuneBaseWidget {\r\n\r\n constructor(params) {\r\n this._myConfig = null;\r\n this._myUI = null;\r\n\r\n this._myParams = params;\r\n\r\n this._myVariable = null;\r\n\r\n this._myVisible = true;\r\n\r\n this._myScrollVariableRequestEmitter = new Emitter(); // Signature: listener(scrollAmount)\r\n\r\n this._myAppendToVariableName = \"\";\r\n\r\n this._myScrollVariableActive = false;\r\n this._myScrollDirection = 0;\r\n this._myScrollVariableTimer = 0;\r\n this._myHasScrolled = false;\r\n\r\n this._myResetImportLabelTimer = new Timer(0, false);\r\n this._myResetExportLabelTimer = new Timer(0, false);\r\n\r\n this._myDestroyed = false;\r\n\r\n }\r\n\r\n setVisible(visible) {\r\n if (visible) {\r\n this._refreshUI();\r\n }\r\n\r\n this._myUI.setVisible(visible);\r\n\r\n this._myVisible = visible;\r\n }\r\n\r\n setEasyTuneVariable(variable, appendToVariableName) {\r\n this._myVariable = variable;\r\n\r\n if (appendToVariableName != null) {\r\n this._myAppendToVariableName = appendToVariableName;\r\n } else {\r\n this._myAppendToVariableName = \"\";\r\n }\r\n\r\n this._setEasyTuneVariableHook();\r\n\r\n this._refreshUI();\r\n }\r\n\r\n isScrollVariableActive() {\r\n return this._myScrollVariableActive;\r\n }\r\n\r\n getScrollVariableDirection() {\r\n return this._myScrollDirection;\r\n }\r\n\r\n setScrollVariableActive(active, scrollDirection) {\r\n this._myScrollVariableActive = active;\r\n this._myScrollDirection = scrollDirection;\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n this._myHasScrolled = false;\r\n }\r\n\r\n getWidget() {\r\n return this;\r\n }\r\n\r\n syncWidget(otherEasyTuneWidget) {\r\n if (otherEasyTuneWidget != null) {\r\n if (otherEasyTuneWidget._myResetImportLabelTimer.isRunning()) {\r\n this._myResetImportLabelTimer.start(otherEasyTuneWidget._myResetImportLabelTimer.getTimeLeft());\r\n } else {\r\n this._myResetImportLabelTimer.reset();\r\n }\r\n\r\n if (otherEasyTuneWidget._myResetExportLabelTimer.isRunning()) {\r\n this._myResetExportLabelTimer.start(otherEasyTuneWidget._myResetExportLabelTimer.getTimeLeft());\r\n } else {\r\n this._myResetExportLabelTimer.reset();\r\n }\r\n\r\n this._myUI.myImportButtonTextComponent.text = otherEasyTuneWidget._myUI.myImportButtonTextComponent.text;\r\n this._myUI.myExportButtonTextComponent.text = otherEasyTuneWidget._myUI.myExportButtonTextComponent.text;\r\n\r\n this.setScrollVariableActive(otherEasyTuneWidget.isScrollVariableActive(), otherEasyTuneWidget.getScrollVariableDirection());\r\n } else {\r\n this._myResetImportLabelTimer.reset();\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportButtonText;\r\n\r\n this._myResetExportLabelTimer.reset();\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportButtonText;\r\n }\r\n }\r\n\r\n onImportSuccess() {\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportSuccessButtonText;\r\n this._myResetImportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n onImportFailure() {\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportFailureButtonText;\r\n this._myResetImportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n onExportSuccess() {\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportSuccessButtonText;\r\n this._myResetExportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n onExportFailure() {\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportFailureButtonText;\r\n this._myResetExportLabelTimer.start(this._myConfig.myImportExportResetLabelSeconds);\r\n }\r\n\r\n registerScrollVariableRequestEventListener(id, listener) {\r\n this._myScrollVariableRequestEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterScrollVariableRequestEventListener(id) {\r\n this._myScrollVariableRequestEmitter.remove(id);\r\n }\r\n\r\n start(parentObject, easyTuneParams) {\r\n this._myConfig.build();\r\n\r\n this._myResetImportLabelTimer.reset(this._myConfig.myImportExportResetLabelSeconds);\r\n this._myResetExportLabelTimer.reset(this._myConfig.myImportExportResetLabelSeconds);\r\n\r\n this._myUI.build(parentObject, this._myConfig, easyTuneParams);\r\n this._myUI.setImportExportButtonsVisible(easyTuneParams.myShowVariablesImportExportButtons);\r\n\r\n this._startHook(parentObject, easyTuneParams);\r\n\r\n this._addListeners();\r\n }\r\n\r\n update(dt) {\r\n if (this._isActive()) {\r\n this._updateHook(dt);\r\n\r\n this._updateScrollVariable(dt);\r\n\r\n this._updateImportExportLabel(dt);\r\n }\r\n }\r\n\r\n // Hooks\r\n\r\n _setEasyTuneVariableHook() {\r\n }\r\n\r\n _refreshUIHook() {\r\n }\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n }\r\n\r\n _addListenersHook() {\r\n }\r\n\r\n _updateHook(dt) {\r\n }\r\n\r\n // Hooks end\r\n\r\n _refreshUI() {\r\n if (this._myVariable) {\r\n if (this._myVariable.getName() != null) {\r\n this._myUI.myVariableLabelTextComponent.text = this._myVariable.getName().concat(this._myAppendToVariableName);\r\n } else {\r\n let name = \"Unknown\";\r\n this._myUI.myVariableLabelTextComponent.text = name.concat(this._myAppendToVariableName);\r\n }\r\n\r\n this._refreshUIHook();\r\n }\r\n }\r\n\r\n _updateScrollVariable(dt) {\r\n if (this._myScrollVariableActive) {\r\n if (this._myScrollVariableTimer <= 0) {\r\n this._scrollVariableRequest(this._myScrollDirection);\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n this._myHasScrolled = true;\r\n } else {\r\n this._myScrollVariableTimer -= dt;\r\n }\r\n }\r\n }\r\n\r\n _updateImportExportLabel(dt) {\r\n if (this._myResetImportLabelTimer.isRunning(dt)) {\r\n this._myResetImportLabelTimer.update(dt);\r\n if (this._myResetImportLabelTimer.isDone()) {\r\n this._myResetImportLabelTimer.reset();\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportButtonText;\r\n }\r\n }\r\n\r\n if (this._myResetExportLabelTimer.isRunning(dt)) {\r\n this._myResetExportLabelTimer.update(dt);\r\n if (this._myResetExportLabelTimer.isDone()) {\r\n this._myResetExportLabelTimer.reset();\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportButtonText;\r\n }\r\n }\r\n }\r\n\r\n _isActive() {\r\n return this._myVisible && this._myVariable;\r\n }\r\n\r\n _addListeners() {\r\n let ui = this._myUI;\r\n\r\n ui.myNextButtonCursorTargetComponent.onDown.add(this._setScrollVariableActive.bind(this, true, 1, false));\r\n ui.myNextButtonCursorTargetComponent.onDownOnHover.add(this._setScrollVariableActive.bind(this, true, 1, false));\r\n ui.myNextButtonCursorTargetComponent.onUpWithDown.add(this._setScrollVariableActive.bind(this, false, 0, false));\r\n ui.myNextButtonCursorTargetComponent.onUpWithNoDown.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myNextButtonCursorTargetComponent.onUnhover.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myNextButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myNextButtonBackgroundComponent.material));\r\n ui.myNextButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myNextButtonBackgroundComponent.material));\r\n\r\n ui.myPreviousButtonCursorTargetComponent.onDown.add(this._setScrollVariableActive.bind(this, true, -1, false));\r\n ui.myPreviousButtonCursorTargetComponent.onDownOnHover.add(this._setScrollVariableActive.bind(this, true, -1, false));\r\n ui.myPreviousButtonCursorTargetComponent.onUpWithDown.add(this._setScrollVariableActive.bind(this, false, 0, false));\r\n ui.myPreviousButtonCursorTargetComponent.onUpWithNoDown.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myPreviousButtonCursorTargetComponent.onUnhover.add(this._setScrollVariableActive.bind(this, false, 0, true));\r\n ui.myPreviousButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPreviousButtonBackgroundComponent.material));\r\n ui.myPreviousButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myPreviousButtonBackgroundComponent.material));\r\n\r\n ui.myImportButtonCursorTargetComponent.onUpWithDown.add(this._importVariables.bind(this));\r\n ui.myImportButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myImportButtonBackgroundComponent.material));\r\n ui.myImportButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myImportButtonBackgroundComponent.material));\r\n\r\n ui.myExportButtonCursorTargetComponent.onUpWithDown.add(this._exportVariables.bind(this));\r\n ui.myExportButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myExportButtonBackgroundComponent.material));\r\n ui.myExportButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myExportButtonBackgroundComponent.material));\r\n\r\n this._addListenersHook();\r\n }\r\n\r\n _setScrollVariableActive(active, scrollDirection, skipForceScroll) {\r\n if (this._isActive() || !active) {\r\n let forceScroll = !active && !this._myHasScrolled && !skipForceScroll;\r\n let oldScrollDirection = this._myScrollDirection;\r\n\r\n this.setScrollVariableActive(active, scrollDirection);\r\n\r\n if (forceScroll) {\r\n this._scrollVariableRequest(oldScrollDirection);\r\n }\r\n }\r\n }\r\n\r\n _scrollVariableRequest(amount) {\r\n if (this._isActive() && amount != 0) {\r\n this._myScrollVariableRequestEmitter.notify(amount);\r\n }\r\n }\r\n\r\n _genericHover(material) {\r\n material.color = this._myConfig.myButtonHoverColor;\r\n }\r\n\r\n _genericUnhover(material) {\r\n material.color = this._myConfig.myBackgroundColor;\r\n }\r\n\r\n _importVariables() {\r\n if (this._myUI.myImportButtonTextComponent.text == this._myConfig.myImportButtonText) {\r\n this._myUI.myImportButtonTextComponent.text = this._myConfig.myImportingButtonText;\r\n this._myResetImportLabelTimer.reset();\r\n\r\n this._myParams.myVariablesImportCallback();\r\n }\r\n }\r\n\r\n _exportVariables() {\r\n if (this._myUI.myExportButtonTextComponent.text == this._myConfig.myExportButtonText) {\r\n this._myUI.myExportButtonTextComponent.text = this._myConfig.myExportingButtonText;\r\n this._myResetExportLabelTimer.reset();\r\n\r\n this._myParams.myVariablesExportCallback();\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n if (this._myUI != null) {\r\n this._myUI.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Emitter } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\n\r\nexport class EasyTuneBaseArrayWidgetSelector {\r\n\r\n constructor(params, gamepad, engine = Globals.getMainEngine()) {\r\n this._myGamepad = gamepad;\r\n\r\n this._myParentObject = null;\r\n\r\n this._myParams = params;\r\n this._myEasyTuneParams = null;\r\n\r\n this._myWidgets = new Map();\r\n\r\n this._myVariable = null;\r\n this._myVisible = true;\r\n\r\n this._myAppendToVariableName = null;\r\n\r\n this._myScrollVariableRequestEmitter = new Emitter(); // Signature: listener(scrollAmount)\r\n\r\n this._myCurrentArraySize = null;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setEasyTuneVariable(variable, appendToVariableName) {\r\n this._myVariable = variable;\r\n\r\n this._myCurrentArraySize = this._myVariable.getValue().length; // null for non array variable\r\n\r\n this._myAppendToVariableName = appendToVariableName;\r\n\r\n if (!this._myWidgets.has(this._myCurrentArraySize)) {\r\n this._createWidget(this._myCurrentArraySize);\r\n }\r\n\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.setEasyTuneVariable(variable, appendToVariableName);\r\n }\r\n\r\n this.setVisible(this._myVisible);\r\n }\r\n\r\n setVisible(visible) {\r\n for (let widget of this._myWidgets.values()) {\r\n widget.setVisible(false);\r\n }\r\n\r\n if (this._myVariable) {\r\n this._sizeChangedCheck();\r\n\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.setVisible(visible);\r\n }\r\n }\r\n\r\n this._myVisible = visible;\r\n }\r\n\r\n isScrollVariableActive() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n return widget.isScrollVariableActive();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getScrollVariableDirection() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n return widget.getScrollVariableDirection();\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n setScrollVariableActive(active, scrollDirection) {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.setScrollVariableActive(active, scrollDirection);\r\n }\r\n }\r\n\r\n getWidget() {\r\n return this._myWidgets.get(this._myCurrentArraySize);\r\n }\r\n\r\n registerScrollVariableRequestEventListener(id, listener) {\r\n this._myScrollVariableRequestEmitter.add(listener, { id: id });\r\n }\r\n\r\n unregisterScrollVariableRequestEventListener(id) {\r\n this._myScrollVariableRequestEmitter.remove(id);\r\n }\r\n\r\n start(parentObject, easyTuneParams) {\r\n this._myParentObject = parentObject;\r\n this._myEasyTuneParams = easyTuneParams;\r\n\r\n this._createWidget(1);\r\n\r\n if (this._myVariable) {\r\n this.setEasyTuneVariable(this._myVariable, this._myAppendToVariableName);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (this._isActive()) {\r\n this._sizeChangedCheck();\r\n\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.update(dt);\r\n }\r\n }\r\n }\r\n\r\n onImportSuccess() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onImportSuccess();\r\n }\r\n }\r\n\r\n onImportFailure() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onImportFailure();\r\n }\r\n }\r\n\r\n onExportSuccess() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onExportSuccess();\r\n }\r\n }\r\n\r\n onExportFailure() {\r\n let widget = this._myWidgets.get(this._myCurrentArraySize);\r\n if (widget) {\r\n widget.onExportFailure();\r\n }\r\n }\r\n\r\n _isActive() {\r\n return this._myVisible && this._myVariable;\r\n }\r\n\r\n _scrollVariableRequest(amount) {\r\n this._myScrollVariableRequestEmitter.notify(amount);\r\n }\r\n\r\n _createWidget(arraySize) {\r\n this._myWidgets.set(arraySize, this._getEasyTuneArrayWidget(arraySize));\r\n this._myWidgets.get(arraySize).start(this._myParentObject, this._myEasyTuneParams);\r\n this._myWidgets.get(arraySize).setVisible(false);\r\n this._myWidgets.get(arraySize).registerScrollVariableRequestEventListener(this, this._scrollVariableRequest.bind(this));\r\n }\r\n\r\n _sizeChangedCheck() {\r\n if (this._myVariable.getValue().length != this._myCurrentArraySize) {\r\n this.setEasyTuneVariable(this._myVariable, this._myAppendToVariableName);\r\n }\r\n }\r\n\r\n /**\r\n * TS type inference helper\r\n * \r\n * @returns {any}\r\n */\r\n _getEasyTuneArrayWidget(arraySize) {\r\n return null;\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let widget of this._myWidgets.values()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { Alignment, Collider, Justification } from \"@wonderlandengine/api\";\r\nimport { vec3_create, vec4_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { ToolHandedness } from \"../../../cauldron/tool_types.js\";\r\n\r\nexport class EasyTuneBaseWidgetConfig {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n build() {\r\n this._setupBuildConfig();\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n // Hooks\r\n\r\n _getBackPanelMaxY() {\r\n return this.myDisplayPanelPosition[1] + this.myVariableLabelPanelPosition[1] + this.mySideButtonBackgroundScale[1] + this._mySideButtonDistanceFromBorder * 1.25;\r\n }\r\n\r\n _getBackPanelMinY() {\r\n return this.myDisplayPanelPosition[1] - this._mySideButtonDistanceFromBorder * 1.25 - this.mySideButtonBackgroundScale[1];\r\n }\r\n\r\n _getBackPanelMaxX() {\r\n return this._mySideButtonPanelHalfWidth;\r\n }\r\n\r\n _getBackPanelMinX() {\r\n return -this._mySideButtonPanelHalfWidth;\r\n }\r\n\r\n // Small Z offset to avoid glitching with other widgets\r\n _getPivotZOffset() {\r\n return 0;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n }\r\n\r\n // Hooks end\r\n\r\n _setupBuildConfig() {\r\n // General\r\n\r\n this.myBackgroundColor = vec4_create(46 / 255, 46 / 255, 46 / 255, 1);\r\n\r\n this.myCursorTargetCollisionCollider = Collider.Box;\r\n this.myCursorTargetCollisionGroup = 7; // Keep this in sync with Tool Cursor\r\n this.myCursorTargetCollisionThickness = 0.001;\r\n\r\n this.myDefaultTextColor = vec4_create(255 / 255, 255 / 255, 255 / 255, 1);\r\n\r\n this.myTextAlignment = Alignment.Center;\r\n this.myTextJustification = Justification.Middle;\r\n this.myTextColor = this.myDefaultTextColor;\r\n\r\n this.myLabelTextScale = vec3_create(0.18, 0.18, 0.18);\r\n this.myButtonTextScale = vec3_create(0.18, 0.18, 0.18);\r\n\r\n this._myPanelZOffset = 0.01;\r\n this._myColliderZOffset = 0.017;\r\n this._mySideButtonDistanceFromBorder = 0.0125;\r\n this._mySideButtonPanelHalfWidth = 0.2;\r\n\r\n // Pivot\r\n\r\n this.myPivotObjectPositions = [];\r\n this.myPivotObjectPositions[ToolHandedness.NONE] = vec3_create(0, 0, this._getPivotZOffset());\r\n this.myPivotObjectPositions[ToolHandedness.LEFT] = vec3_create(-0.04, 0.02, this._getPivotZOffset());\r\n this.myPivotObjectPositions[ToolHandedness.RIGHT] = vec3_create(-0.08, 0.02, this._getPivotZOffset());\r\n\r\n this.mySideButtonBackgroundScale = vec3_create(0.015, 0.015, 1);\r\n this.mySideButtonTextScale = this.myButtonTextScale;\r\n this.mySideButtonTextPosition = vec3_create(0, 0, 0.007);\r\n\r\n this.mySideButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.mySideButtonCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.mySideButtonCollisionExtents = this.mySideButtonBackgroundScale.pp_clone();\r\n this.mySideButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myLeftSideButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myLeftSideButtonPosition[0] = -this._mySideButtonPanelHalfWidth + this.mySideButtonBackgroundScale[0] + this._mySideButtonDistanceFromBorder;\r\n\r\n this.myRightSideButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myRightSideButtonPosition[0] = -this.myLeftSideButtonPosition[0];\r\n\r\n // Display\r\n\r\n this.myDisplayPanelPosition = vec3_create(0, 0.1, 0);\r\n\r\n this.myVariableLabelPanelPosition = vec3_create(0, 0.025, this._myPanelZOffset);\r\n this.myVariableLabelTextScale = this.myLabelTextScale;\r\n\r\n this.myVariableLabelCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myVariableLabelCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myVariableLabelCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myVariableLabelCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myNextButtonText = \">\";\r\n this.myPreviousButtonText = \"<\";\r\n\r\n this._setupBuildConfigHook();\r\n\r\n // Background\r\n\r\n {\r\n let maxX = this._getBackPanelMaxX();\r\n let minX = this._getBackPanelMinX();\r\n let maxY = this._getBackPanelMaxY();\r\n let minY = this._getBackPanelMinY();\r\n\r\n this.myBackPanelPosition = [(maxX + minX) / 2, (maxY + minY) / 2, 0];\r\n this.myBackBackgroundScale = [(maxX - minX) / 2, (maxY - minY) / 2, 1];\r\n\r\n this.myBackBackgroundColor = vec4_create(70 / 255, 70 / 255, 70 / 255, 1);\r\n }\r\n\r\n // Import Export\r\n\r\n this.myImportExportButtonBackgroundScale = vec3_create(0.04, 0.02, 1);\r\n this.myImportExportButtonTextScale = this.myButtonTextScale;\r\n this.myImportExportButtonTextPosition = vec3_create(0, 0, 0.007);\r\n\r\n this.myImportExportPanelPosition = [0, this._getBackPanelMaxY() + this._mySideButtonDistanceFromBorder + this.myImportExportButtonBackgroundScale[1], this._myPanelZOffset];\r\n\r\n this.myImportExportButtonCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myImportExportButtonCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myImportExportButtonCollisionExtents = this.myImportExportButtonBackgroundScale.pp_clone();\r\n this.myImportExportButtonCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myImportButtonText = \"Import\";\r\n this.myExportButtonText = \"Export\";\r\n\r\n this.myImportExportResetLabelSeconds = 2;\r\n\r\n this.myImportingButtonText = \"...\";\r\n this.myImportSuccessButtonText = \"Done\";\r\n this.myImportFailureButtonText = \"Error\";\r\n\r\n this.myExportingButtonText = \"...\";\r\n this.myExportSuccessButtonText = \"Done\";\r\n this.myExportFailureButtonText = \"Error\";\r\n\r\n this.myImportButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myImportButtonPosition[0] = -this.myImportExportButtonBackgroundScale[0] - this._mySideButtonDistanceFromBorder / 2;\r\n\r\n this.myExportButtonPosition = vec3_create(0, 0, -0.00001);\r\n this.myExportButtonPosition[0] = -this.myImportButtonPosition[0];\r\n\r\n\r\n // Pointer\r\n\r\n this.myPointerCollisionExtents = this.myBackBackgroundScale.pp_clone();\r\n this.myPointerCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n this.myPointerCursorTargetPosition = this.myBackPanelPosition.pp_clone();\r\n this.myPointerCursorTargetPosition[2] = this._myColliderZOffset - 0.0001; // A little behind the button target to avoid hiding it\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this.myButtonHoverColor = vec4_create(150 / 255, 150 / 255, 150 / 255, 1);\r\n\r\n this.myScrollVariableDelay = 0.5;\r\n\r\n this._setupRuntimeConfigHook();\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneBoolArrayWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n constructor(arraySize) {\r\n super();\r\n\r\n this.myArraySize = arraySize;\r\n }\r\n\r\n _getBackPanelMinY() {\r\n let valuePanelLastPosition = (this.myValuePanelsPositions[this.myArraySize - 1]) ? this.myValuePanelsPositions[this.myArraySize - 1][1] : 0;\r\n return super._getBackPanelMinY() + this.myValuesPanelPosition[1] + valuePanelLastPosition;\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00802713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myIncreaseButtonText = \"+\";\r\n this.myDecreaseButtonText = \"-\";\r\n\r\n this._myValuePanelDistanceFromVariableLabelPanel = 0.055;\r\n this._myDistanceBetweenValues = this.mySideButtonBackgroundScale[1] * 2 + 0.015;\r\n\r\n this.myValuesPanelPosition = [0, this.myVariableLabelPanelPosition[1] - this._myValuePanelDistanceFromVariableLabelPanel, this._myPanelZOffset];\r\n\r\n this.myValueTextScale = vec3_create(0.4, 0.4, 0.4);\r\n\r\n this.myValueCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myValueCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myValueCollisionExtents = vec3_create(0.065, 0.02, 1);\r\n this.myValueCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myValuePanelsPositions = [];\r\n this.myValuePanelsPositions[0] = vec3_create(0, 0, 0);\r\n for (let i = 1; i < this.myArraySize; i++) {\r\n this.myValuePanelsPositions[i] = this.myValuePanelsPositions[i - 1].pp_clone();\r\n this.myValuePanelsPositions[i][1] -= this._myDistanceBetweenValues;\r\n }\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n this.myTextHoverScaleMultiplier = vec3_create(1.1, 1.1, 1.1);\r\n\r\n this.myThumbstickToggleThreshold = 0.6;\r\n this.myButtonEditDelay = 0;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneBoolArrayWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n setAdditionalButtonsVisible(visible) {\r\n this._myAdditionalButtonsVisible = visible;\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myValueDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n }\r\n\r\n _buildHook() {\r\n this._myAdditionalButtonsVisible = true;\r\n }\r\n\r\n _createSkeletonHook() {\r\n this.myValuesPanel = this.myDisplayPanel.pp_addObject();\r\n\r\n this.myValuePanels = [];\r\n this.myValueTexts = [];\r\n this.myValueCursorTargets = [];\r\n\r\n this.myValueIncreaseButtonPanels = [];\r\n this.myValueIncreaseButtonBackgrounds = [];\r\n this.myValueIncreaseButtonTexts = [];\r\n this.myValueIncreaseButtonCursorTargets = [];\r\n\r\n this.myValueDecreaseButtonPanels = [];\r\n this.myValueDecreaseButtonBackgrounds = [];\r\n this.myValueDecreaseButtonTexts = [];\r\n this.myValueDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i] = this.myValuesPanel.pp_addObject();\r\n this.myValueTexts[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueCursorTargets[i] = this.myValuePanels[i].pp_addObject();\r\n\r\n this.myValueIncreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueIncreaseButtonBackgrounds[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonTexts[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonCursorTargets[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myValueDecreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueDecreaseButtonBackgrounds[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonTexts[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonCursorTargets[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n }\r\n\r\n _setTransformHook() {\r\n this.myValuesPanel.pp_setPositionLocal(this._myConfig.myValuesPanelPosition);\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myValueTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myValueCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myValueIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myValueIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myValueDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myValueDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n }\r\n\r\n _addComponentsHook() {\r\n this.myValueTextComponents = [];\r\n this.myValueCursorTargetComponents = [];\r\n this.myValueCollisionComponents = [];\r\n\r\n this.myValueIncreaseButtonBackgroundComponents = [];\r\n this.myValueIncreaseButtonTextComponents = [];\r\n this.myValueIncreaseButtonCursorTargetComponents = [];\r\n this.myValueIncreaseButtonCollisionComponents = [];\r\n\r\n this.myValueDecreaseButtonBackgroundComponents = [];\r\n this.myValueDecreaseButtonTextComponents = [];\r\n this.myValueDecreaseButtonCursorTargetComponents = [];\r\n this.myValueDecreaseButtonCollisionComponents = [];\r\n\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueTextComponents[i] = this.myValueTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueTextComponents[i]);\r\n this.myValueTextComponents[i].text = \" \";\r\n\r\n this.myValueCursorTargetComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueCollisionComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myValueIncreaseButtonBackgroundComponents[i] = this.myValueIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueIncreaseButtonTextComponents[i] = this.myValueIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueIncreaseButtonTextComponents[i]);\r\n this.myValueIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myValueIncreaseButtonCursorTargetComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueIncreaseButtonCollisionComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myValueDecreaseButtonBackgroundComponents[i] = this.myValueDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueDecreaseButtonTextComponents[i] = this.myValueDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueDecreaseButtonTextComponents[i]);\r\n this.myValueDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myValueDecreaseButtonCursorTargetComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueDecreaseButtonCollisionComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n }\r\n\r\n _setVisibleHook(visible) {\r\n if (visible) {\r\n this.setAdditionalButtonsVisible(this._myAdditionalButtonsVisible);\r\n }\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { XRUtils } from \"../../../../cauldron/utils/xr_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../../../cauldron/tool_types.js\";\r\n\r\nexport class EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n build(parentObject, config, params) {\r\n this._myParentObject = parentObject;\r\n this._myConfig = config;\r\n this._myParams = params;\r\n\r\n this._myImportExportButtonsVisible = true;\r\n\r\n this._myPlaneMesh = Globals.getDefaultMeshes(this._myEngine).myDoubleSidedPlane;\r\n\r\n this._buildHook();\r\n\r\n this._createSkeleton();\r\n this._setTransforms();\r\n this._addComponents();\r\n\r\n this._setTransformForNonXR();\r\n\r\n XRUtils.registerSessionStartEndEventListeners(this, this._onXRSessionStart.bind(this), this._onXRSessionEnd.bind(this), true, false, this._myEngine);\r\n }\r\n\r\n setVisible(visible) {\r\n this.myPivotObject.pp_setActive(visible);\r\n\r\n if (visible) {\r\n this.setImportExportButtonsVisible(this._myImportExportButtonsVisible);\r\n }\r\n\r\n this._setVisibleHook(visible);\r\n }\r\n\r\n setImportExportButtonsVisible(visible) {\r\n this._myImportExportButtonsVisible = visible;\r\n\r\n this.myImportExportPanel.pp_setActive(this._myImportExportButtonsVisible);\r\n }\r\n\r\n // Hooks\r\n\r\n _buildHook() {\r\n }\r\n\r\n _setVisibleHook(visible) {\r\n }\r\n\r\n _createSkeletonHook() {\r\n }\r\n\r\n _setTransformHook() {\r\n }\r\n\r\n _addComponentsHook() {\r\n }\r\n\r\n // Hooks end\r\n\r\n // Skeleton\r\n\r\n _createSkeleton() {\r\n this.myPivotObject = this._myParentObject.pp_addObject();\r\n\r\n this.myBackPanel = this.myPivotObject.pp_addObject();\r\n this.myBackBackground = this.myBackPanel.pp_addObject();\r\n\r\n // Display\r\n\r\n this.myDisplayPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myVariableLabelPanel = this.myDisplayPanel.pp_addObject();\r\n this.myVariableLabelText = this.myVariableLabelPanel.pp_addObject();\r\n this.myVariableLabelCursorTarget = this.myVariableLabelPanel.pp_addObject();\r\n\r\n // Next/Previous\r\n\r\n this.myNextButtonPanel = this.myVariableLabelPanel.pp_addObject();\r\n this.myNextButtonBackground = this.myNextButtonPanel.pp_addObject();\r\n this.myNextButtonText = this.myNextButtonPanel.pp_addObject();\r\n this.myNextButtonCursorTarget = this.myNextButtonPanel.pp_addObject();\r\n\r\n this.myPreviousButtonPanel = this.myVariableLabelPanel.pp_addObject();\r\n this.myPreviousButtonBackground = this.myPreviousButtonPanel.pp_addObject();\r\n this.myPreviousButtonText = this.myPreviousButtonPanel.pp_addObject();\r\n this.myPreviousButtonCursorTarget = this.myPreviousButtonPanel.pp_addObject();\r\n\r\n // Import/Export\r\n\r\n this.myImportExportPanel = this.myPivotObject.pp_addObject();\r\n\r\n this.myImportButtonPanel = this.myImportExportPanel.pp_addObject();\r\n this.myImportButtonBackground = this.myImportButtonPanel.pp_addObject();\r\n this.myImportButtonText = this.myImportButtonPanel.pp_addObject();\r\n this.myImportButtonCursorTarget = this.myImportButtonPanel.pp_addObject();\r\n\r\n this.myExportButtonPanel = this.myImportExportPanel.pp_addObject();\r\n this.myExportButtonBackground = this.myExportButtonPanel.pp_addObject();\r\n this.myExportButtonText = this.myExportButtonPanel.pp_addObject();\r\n this.myExportButtonCursorTarget = this.myExportButtonPanel.pp_addObject();\r\n\r\n // Pointer\r\n\r\n this.myPointerCursorTarget = this.myPivotObject.pp_addObject();\r\n\r\n this._createSkeletonHook();\r\n }\r\n\r\n // Transforms\r\n\r\n _setTransforms() {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectPositions[this._myParams.myHandedness]);\r\n\r\n this.myBackPanel.pp_setPositionLocal(this._myConfig.myBackPanelPosition);\r\n this.myBackBackground.pp_scaleObject(this._myConfig.myBackBackgroundScale);\r\n\r\n // Display\r\n this.myDisplayPanel.pp_setPositionLocal(this._myConfig.myDisplayPanelPosition);\r\n\r\n this.myVariableLabelPanel.pp_setPositionLocal(this._myConfig.myVariableLabelPanelPosition);\r\n this.myVariableLabelText.pp_scaleObject(this._myConfig.myVariableLabelTextScale);\r\n this.myVariableLabelCursorTarget.pp_setPositionLocal(this._myConfig.myVariableLabelCursorTargetPosition);\r\n\r\n // Next/Previous\r\n\r\n this.myNextButtonPanel.pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myNextButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myNextButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myNextButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myNextButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myPreviousButtonPanel.pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myPreviousButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPreviousButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPreviousButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPreviousButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n // Import/Export\r\n\r\n this.myImportExportPanel.pp_setPositionLocal(this._myConfig.myImportExportPanelPosition);\r\n\r\n this.myImportButtonPanel.pp_setPositionLocal(this._myConfig.myImportButtonPosition);\r\n this.myImportButtonBackground.pp_scaleObject(this._myConfig.myImportExportButtonBackgroundScale);\r\n this.myImportButtonText.pp_setPositionLocal(this._myConfig.myImportExportButtonTextPosition);\r\n this.myImportButtonText.pp_scaleObject(this._myConfig.myImportExportButtonTextScale);\r\n this.myImportButtonCursorTarget.pp_setPositionLocal(this._myConfig.myImportExportButtonCursorTargetPosition);\r\n\r\n this.myExportButtonPanel.pp_setPositionLocal(this._myConfig.myExportButtonPosition);\r\n this.myExportButtonBackground.pp_scaleObject(this._myConfig.myImportExportButtonBackgroundScale);\r\n this.myExportButtonText.pp_setPositionLocal(this._myConfig.myImportExportButtonTextPosition);\r\n this.myExportButtonText.pp_scaleObject(this._myConfig.myImportExportButtonTextScale);\r\n this.myExportButtonCursorTarget.pp_setPositionLocal(this._myConfig.myImportExportButtonCursorTargetPosition);\r\n\r\n // Pointer\r\n\r\n this.myPointerCursorTarget.pp_setPositionLocal(this._myConfig.myPointerCursorTargetPosition);\r\n\r\n this._setTransformHook();\r\n }\r\n\r\n // Components\r\n\r\n _addComponents() {\r\n this.myBackBackgroundComponent = this.myBackBackground.pp_addComponent(MeshComponent);\r\n this.myBackBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myBackBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myBackBackgroundComponent.material.color = this._myConfig.myBackBackgroundColor;\r\n\r\n // Display\r\n\r\n this.myVariableLabelTextComponent = this.myVariableLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myVariableLabelTextComponent);\r\n this.myVariableLabelTextComponent.text = \" \";\r\n\r\n this.myVariableLabelCursorTargetComponent = this.myVariableLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myVariableLabelCollisionComponent = this.myVariableLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myVariableLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myVariableLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myVariableLabelCollisionComponent.extents = this._myConfig.myVariableLabelCollisionExtents;\r\n\r\n // Next/Previous\r\n\r\n this.myNextButtonBackgroundComponent = this.myNextButtonBackground.pp_addComponent(MeshComponent);\r\n this.myNextButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myNextButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myNextButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myNextButtonTextComponent = this.myNextButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myNextButtonTextComponent);\r\n this.myNextButtonTextComponent.text = this._myConfig.myNextButtonText;\r\n\r\n this.myNextButtonCursorTargetComponent = this.myNextButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myNextButtonCollisionComponent = this.myNextButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myNextButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myNextButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myNextButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPreviousButtonBackgroundComponent = this.myPreviousButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPreviousButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPreviousButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPreviousButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPreviousButtonTextComponent = this.myPreviousButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPreviousButtonTextComponent);\r\n this.myPreviousButtonTextComponent.text = this._myConfig.myPreviousButtonText;\r\n\r\n this.myPreviousButtonCursorTargetComponent = this.myPreviousButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPreviousButtonCollisionComponent = this.myPreviousButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPreviousButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPreviousButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPreviousButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Import/Export\r\n\r\n this.myImportButtonBackgroundComponent = this.myImportButtonBackground.pp_addComponent(MeshComponent);\r\n this.myImportButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myImportButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myImportButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myImportButtonTextComponent = this.myImportButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myImportButtonTextComponent);\r\n this.myImportButtonTextComponent.text = this._myConfig.myImportButtonText;\r\n\r\n this.myImportButtonCursorTargetComponent = this.myImportButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myImportButtonCollisionComponent = this.myImportButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myImportButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myImportButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myImportButtonCollisionComponent.extents = this._myConfig.myImportExportButtonCollisionExtents;\r\n\r\n this.myExportButtonBackgroundComponent = this.myExportButtonBackground.pp_addComponent(MeshComponent);\r\n this.myExportButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myExportButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myExportButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myExportButtonTextComponent = this.myExportButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myExportButtonTextComponent);\r\n this.myExportButtonTextComponent.text = this._myConfig.myExportButtonText;\r\n\r\n this.myExportButtonCursorTargetComponent = this.myExportButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myExportButtonCollisionComponent = this.myExportButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myExportButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myExportButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myExportButtonCollisionComponent.extents = this._myConfig.myImportExportButtonCollisionExtents;\r\n\r\n // Pointer\r\n\r\n this.myPointerCollisionComponent = this.myPointerCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPointerCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPointerCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPointerCollisionComponent.extents = this._myConfig.myPointerCollisionExtents;\r\n\r\n this._addComponentsHook();\r\n }\r\n\r\n _setupTextComponent(textComponent) {\r\n textComponent.alignment = this._myConfig.myTextAlignment;\r\n textComponent.justification = this._myConfig.myTextJustification;\r\n textComponent.material = this._myParams.myTextMaterial.clone();\r\n textComponent.material.color = this._myConfig.myTextColor;\r\n textComponent.text = \"\";\r\n }\r\n\r\n _onXRSessionStart() {\r\n this._setTransformForXR();\r\n }\r\n\r\n _onXRSessionEnd() {\r\n this._setTransformForNonXR();\r\n }\r\n\r\n _setTransformForXR() {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectPositions[this._myParams.myHandedness]);\r\n }\r\n\r\n _setTransformForNonXR() {\r\n this.myPivotObject.pp_setPositionLocal(this._myConfig.myPivotObjectPositions[ToolHandedness.NONE]);\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n XRUtils.unregisterSessionStartEndEventListeners(this, this._myEngine);\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n}", "import { GamepadAxesID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneBoolArrayWidgetConfig } from \"./easy_tune_bool_array_widget_config.js\";\r\nimport { EasyTuneBoolArrayWidgetUI } from \"./easy_tune_bool_array_widget_ui.js\";\r\n\r\nexport class EasyTuneBoolArrayWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, arraySize, gamepad, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myNonArray = arraySize == null;\r\n this._myArraySize = this._myNonArray ? 1 : arraySize;\r\n\r\n this._myConfig = new EasyTuneBoolArrayWidgetConfig(this._myArraySize);\r\n this._myUI = new EasyTuneBoolArrayWidgetUI(engine);\r\n\r\n this._myGamepad = gamepad;\r\n\r\n this._myValueEditIndex = 0;\r\n this._myValueButtonEditIntensity = 0;\r\n this._myValueButtonEditIntensityTimer = 0;\r\n this._myValueEditEnabled = false;\r\n\r\n this._myTempValue = [];\r\n\r\n this._myTempNonArrayValue = [0];\r\n this._myTempNonArrayDefaultValue = [0];\r\n }\r\n\r\n _refreshUIHook() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._myUI.myValueTextComponents[i].text = (this._getVariableValue()[i]) ? \"true\" : \"false\";\r\n }\r\n }\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n this._myUI.setAdditionalButtonsVisible(easyTuneParams.myShowAdditionalButtons);\r\n }\r\n\r\n _setEasyTuneVariableHook() {\r\n if (this._myVariable != null) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n }\r\n }\r\n\r\n _updateHook(dt) {\r\n this._updateValue(dt);\r\n }\r\n\r\n _updateValue(dt) {\r\n let stickVariableIntensity = 0;\r\n\r\n if (this._myGamepad) {\r\n stickVariableIntensity = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n }\r\n\r\n let valueIntensity = 0;\r\n if (this._myValueEditEnabled) {\r\n valueIntensity = stickVariableIntensity;\r\n } else if (this._myValueButtonEditIntensity != 0) {\r\n if (this._myValueButtonEditIntensityTimer <= 0) {\r\n valueIntensity = this._myValueButtonEditIntensity;\r\n } else {\r\n this._myValueButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (this._myValueEditIndex >= 0 && this._myValueEditIndex < this._getVariableValue().length) {\r\n if (Math.abs(valueIntensity) > this._myConfig.myThumbstickToggleThreshold) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n this._myTempValue[this._myValueEditIndex] = valueIntensity > 0;\r\n this._setVariableValue(this._myTempValue);\r\n this._refreshUI();\r\n }\r\n }\r\n }\r\n\r\n _addListenersHook() {\r\n let ui = this._myUI;\r\n\r\n ui.myVariableLabelCursorTargetComponent.onClick.add(this._resetAllValues.bind(this));\r\n ui.myVariableLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myVariableLabelText));\r\n ui.myVariableLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myVariableLabelText, this._myConfig.myVariableLabelTextScale));\r\n\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myValueCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, i));\r\n ui.myValueCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], true));\r\n ui.myValueCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], false));\r\n }\r\n }\r\n\r\n _setValueEditIntensity(index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myValueButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n this._myValueEditIndex = index;\r\n }\r\n\r\n this._myValueButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setValueEditEnabled(index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n this._myValueEditIndex = index;\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myValueTextScale);\r\n }\r\n\r\n this._myValueEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _resetValue(index) {\r\n if (this._isActive()) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n this._myTempValue[index] = this._getVariableDefaultValue()[index];\r\n this._setVariableValue(this._myTempValue);\r\n\r\n this._myUI.myValueTextComponents[index].text = (this._getVariableValue()[index]) ? \"true\" : \"false\";\r\n }\r\n }\r\n\r\n _resetAllValues() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._resetValue(i);\r\n }\r\n }\r\n\r\n _genericTextHover(text) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n }\r\n\r\n _genericTextUnhover(text, originalScale) {\r\n text.pp_setScaleLocal(originalScale);\r\n }\r\n\r\n _getVariableValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayValue[0] = this._myVariable.getValue();\r\n return this._myTempNonArrayValue;\r\n }\r\n\r\n return this._myVariable.getValue();\r\n }\r\n\r\n _getVariableDefaultValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayDefaultValue[0] = this._myVariable.getDefaultValue();\r\n return this._myTempNonArrayDefaultValue;\r\n }\r\n\r\n return this._myVariable.getDefaultValue();\r\n }\r\n\r\n _setVariableValue(value) {\r\n if (this._myNonArray) {\r\n this._myVariable.setValue(value[0]);\r\n } else {\r\n this._myVariable.setValue(this._myTempValue);\r\n }\r\n }\r\n}", "import { EasyTuneBaseArrayWidgetSelector } from \"../base/easy_tune_base_array_widget_selector.js\";\r\nimport { EasyTuneBoolArrayWidget } from \"./easy_tune_bool_array_widget.js\";\r\n\r\nexport class EasyTuneBoolArrayWidgetSelector extends EasyTuneBaseArrayWidgetSelector {\r\n\r\n _getEasyTuneArrayWidget(arraySize) {\r\n return new EasyTuneBoolArrayWidget(this._myParams, arraySize, this._myGamepad, this._myEngine);\r\n }\r\n}", "import { ToolHandedness } from \"../../cauldron/tool_types.js\";\r\n\r\nexport class EasyTuneWidgetConfig {\r\n\r\n constructor() {\r\n this._setupRuntimeConfig();\r\n }\r\n\r\n _setupRuntimeConfig() {\r\n this.myGamepadHandedness = ToolHandedness.RIGHT;\r\n\r\n this.myScrollVariableDelay = 0.5;\r\n this.myScrollVariableMinXThreshold = 0.6;\r\n this.myScrollVariableMaxYThreshold = 0.25;\r\n this.myScrollVariableButtonID = null;\r\n\r\n this.myRefreshVariablesDelay = null;\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneNoneWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n _getBackPanelMinY() {\r\n return super._getBackPanelMinY() + this.myTypeNotSupportedPanelPosition[1];\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00804713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myTypeNotSupportedPanelPosition = vec3_create(0, -0.03, this._myPanelZOffset);\r\n this.myTypeNotSupportedTextScale = vec3_create(0.275, 0.275, 0.275);\r\n this.myTypeNotSupportedText = \"Type Not Supported\";\r\n }\r\n}", "import { TextComponent } from \"@wonderlandengine/api\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneNoneWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n _createSkeletonHook() {\r\n this.myTypeNotSupportedPanel = this.myDisplayPanel.pp_addObject();\r\n this.myTypeNotSupportedText = this.myTypeNotSupportedPanel.pp_addObject();\r\n this.myTypeNotSupportedCursorTarget = this.myTypeNotSupportedPanel.pp_addObject();\r\n }\r\n\r\n _setTransformHook() {\r\n this.myTypeNotSupportedPanel.pp_setPositionLocal(this._myConfig.myTypeNotSupportedPanelPosition);\r\n this.myTypeNotSupportedText.pp_scaleObject(this._myConfig.myTypeNotSupportedTextScale);\r\n }\r\n\r\n _addComponentsHook() {\r\n this.myTypeNotSupportedTextComponent = this.myTypeNotSupportedText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myTypeNotSupportedTextComponent);\r\n this.myTypeNotSupportedTextComponent.text = this._myConfig.myTypeNotSupportedText;\r\n }\r\n}", "import { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneNoneWidgetConfig } from \"./easy_tune_none_widget_config.js\";\r\nimport { EasyTuneNoneWidgetUI } from \"./easy_tune_none_widget_ui.js\";\r\n\r\nexport class EasyTuneNoneWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myConfig = new EasyTuneNoneWidgetConfig();\r\n this._myUI = new EasyTuneNoneWidgetUI(engine);\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneNumberArrayWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n constructor(arraySize) {\r\n super();\r\n\r\n this.myArraySize = arraySize;\r\n }\r\n\r\n _getBackPanelMinY() {\r\n return this.myStepPanelPosition[1] - this._mySideButtonDistanceFromBorder * 1.25 - this.mySideButtonBackgroundScale[1];\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00803713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myIncreaseButtonText = \"+\";\r\n this.myDecreaseButtonText = \"-\";\r\n\r\n this._myValuePanelDistanceFromVariableLabelPanel = 0.055;\r\n this._myDistanceBetweenValues = this.mySideButtonBackgroundScale[1] * 2 + 0.015;\r\n\r\n this.myValuesPanelPosition = [0, this.myVariableLabelPanelPosition[1] - this._myValuePanelDistanceFromVariableLabelPanel, this._myPanelZOffset];\r\n\r\n this.myValueTextScale = vec3_create(0.4, 0.4, 0.4);\r\n\r\n this.myValueCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myValueCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myValueCollisionExtents = vec3_create(0.065, 0.02, 1);\r\n this.myValueCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myValuePanelsPositions = [];\r\n this.myValuePanelsPositions[0] = vec3_create(0, 0, 0);\r\n for (let i = 1; i < this.myArraySize; i++) {\r\n this.myValuePanelsPositions[i] = this.myValuePanelsPositions[i - 1].pp_clone();\r\n this.myValuePanelsPositions[i][1] -= this._myDistanceBetweenValues;\r\n }\r\n\r\n let valuePanelLastPosition = (this.myValuePanelsPositions[this.myArraySize - 1]) ? this.myValuePanelsPositions[this.myArraySize - 1][1] : 0;\r\n this.myStepPanelPosition = [0, this.myDisplayPanelPosition[1] + this.myValuesPanelPosition[1] + valuePanelLastPosition - this._myValuePanelDistanceFromVariableLabelPanel, this._myPanelZOffset];\r\n this.myStepTextScale = this.myLabelTextScale;\r\n this.myStepStartString = \"Step: \";\r\n\r\n this.myStepCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myStepCursorTargetPosition[2] = this._myColliderZOffset - this.myStepPanelPosition[2];\r\n this.myStepCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myStepCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n this.myTextHoverScaleMultiplier = vec3_create(1.1, 1.1, 1.1);\r\n\r\n this.myEditThumbstickMinThreshold = 0.35;\r\n this.myStepMultiplierStepPerSecond = 2.25;\r\n this.myButtonEditDelay = 0;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneNumberArrayWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n setAdditionalButtonsVisible(visible) {\r\n this._myAdditionalButtonsVisible = visible;\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myValueDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n\r\n this.myStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n\r\n _buildHook() {\r\n this._myAdditionalButtonsVisible = true;\r\n }\r\n\r\n _createSkeletonHook() {\r\n this.myValuesPanel = this.myDisplayPanel.pp_addObject();\r\n\r\n this.myValuePanels = [];\r\n this.myValueTexts = [];\r\n this.myValueCursorTargets = [];\r\n\r\n this.myValueIncreaseButtonPanels = [];\r\n this.myValueIncreaseButtonBackgrounds = [];\r\n this.myValueIncreaseButtonTexts = [];\r\n this.myValueIncreaseButtonCursorTargets = [];\r\n\r\n this.myValueDecreaseButtonPanels = [];\r\n this.myValueDecreaseButtonBackgrounds = [];\r\n this.myValueDecreaseButtonTexts = [];\r\n this.myValueDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i] = this.myValuesPanel.pp_addObject();\r\n this.myValueTexts[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueCursorTargets[i] = this.myValuePanels[i].pp_addObject();\r\n\r\n this.myValueIncreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueIncreaseButtonBackgrounds[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonTexts[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n this.myValueIncreaseButtonCursorTargets[i] = this.myValueIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myValueDecreaseButtonPanels[i] = this.myValuePanels[i].pp_addObject();\r\n this.myValueDecreaseButtonBackgrounds[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonTexts[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n this.myValueDecreaseButtonCursorTargets[i] = this.myValueDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n this.myStepPanel = this.myPivotObject.pp_addObject();\r\n this.myStepText = this.myStepPanel.pp_addObject();\r\n this.myStepCursorTarget = this.myStepPanel.pp_addObject();\r\n\r\n this.myStepIncreaseButtonPanel = this.myStepPanel.pp_addObject();\r\n this.myStepIncreaseButtonBackground = this.myStepIncreaseButtonPanel.pp_addObject();\r\n this.myStepIncreaseButtonText = this.myStepIncreaseButtonPanel.pp_addObject();\r\n this.myStepIncreaseButtonCursorTarget = this.myStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myStepDecreaseButtonPanel = this.myStepPanel.pp_addObject();\r\n this.myStepDecreaseButtonBackground = this.myStepDecreaseButtonPanel.pp_addObject();\r\n this.myStepDecreaseButtonText = this.myStepDecreaseButtonPanel.pp_addObject();\r\n this.myStepDecreaseButtonCursorTarget = this.myStepDecreaseButtonPanel.pp_addObject();\r\n }\r\n\r\n _setTransformHook() {\r\n this.myValuesPanel.pp_setPositionLocal(this._myConfig.myValuesPanelPosition);\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValuePanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myValueTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myValueCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myValueIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myValueIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myValueDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myValueDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myValueDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myValueDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myValueDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n this.myStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myRightSideButtonPosition);\r\n this.myStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myLeftSideButtonPosition);\r\n this.myStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n _addComponentsHook() {\r\n this.myValueTextComponents = [];\r\n this.myValueCursorTargetComponents = [];\r\n this.myValueCollisionComponents = [];\r\n\r\n this.myValueIncreaseButtonBackgroundComponents = [];\r\n this.myValueIncreaseButtonTextComponents = [];\r\n this.myValueIncreaseButtonCursorTargetComponents = [];\r\n this.myValueIncreaseButtonCollisionComponents = [];\r\n\r\n this.myValueDecreaseButtonBackgroundComponents = [];\r\n this.myValueDecreaseButtonTextComponents = [];\r\n this.myValueDecreaseButtonCursorTargetComponents = [];\r\n this.myValueDecreaseButtonCollisionComponents = [];\r\n\r\n\r\n for (let i = 0; i < this._myConfig.myArraySize; i++) {\r\n this.myValueTextComponents[i] = this.myValueTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueTextComponents[i]);\r\n this.myValueTextComponents[i].text = \" \";\r\n\r\n this.myValueCursorTargetComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueCollisionComponents[i] = this.myValueCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myValueIncreaseButtonBackgroundComponents[i] = this.myValueIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueIncreaseButtonTextComponents[i] = this.myValueIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueIncreaseButtonTextComponents[i]);\r\n this.myValueIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myValueIncreaseButtonCursorTargetComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueIncreaseButtonCollisionComponents[i] = this.myValueIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myValueDecreaseButtonBackgroundComponents[i] = this.myValueDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myValueDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myValueDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myValueDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myValueDecreaseButtonTextComponents[i] = this.myValueDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myValueDecreaseButtonTextComponents[i]);\r\n this.myValueDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myValueDecreaseButtonCursorTargetComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myValueDecreaseButtonCollisionComponents[i] = this.myValueDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myValueDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myValueDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myValueDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n this.myStepTextComponent = this.myStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myStepTextComponent);\r\n this.myStepTextComponent.text = \" \";\r\n\r\n this.myStepCursorTargetComponent = this.myStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myStepCollisionComponent = this.myStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myStepIncreaseButtonBackgroundComponent = this.myStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myStepIncreaseButtonTextComponent = this.myStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myStepIncreaseButtonTextComponent);\r\n this.myStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myStepIncreaseButtonCursorTargetComponent = this.myStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myStepIncreaseButtonCollisionComponent = this.myStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myStepDecreaseButtonBackgroundComponent = this.myStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myStepDecreaseButtonTextComponent = this.myStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myStepDecreaseButtonTextComponent);\r\n this.myStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myStepDecreaseButtonCursorTargetComponent = this.myStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myStepDecreaseButtonCollisionComponent = this.myStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n _setVisibleHook(visible) {\r\n if (visible) {\r\n this.setAdditionalButtonsVisible(this._myAdditionalButtonsVisible);\r\n }\r\n }\r\n}", "import { GamepadAxesID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneNumberArrayWidgetConfig } from \"./easy_tune_number_array_widget_config.js\";\r\nimport { EasyTuneNumberArrayWidgetUI } from \"./easy_tune_number_array_widget_ui.js\";\r\n\r\nexport class EasyTuneNumberArrayWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, arraySize, gamepad, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myGamepad = gamepad;\r\n\r\n this._myNonArray = arraySize == null;\r\n this._myArraySize = this._myNonArray ? 1 : arraySize;\r\n\r\n this._myConfig = new EasyTuneNumberArrayWidgetConfig(this._myArraySize);\r\n this._myUI = new EasyTuneNumberArrayWidgetUI(engine);\r\n\r\n this._myValueEditIndex = -1;\r\n\r\n this._myValueButtonEditIntensity = 0;\r\n this._myValueButtonEditIntensityTimer = 0;\r\n this._myStepButtonEditIntensity = 0;\r\n this._myStepButtonEditIntensityTimer = 0;\r\n\r\n this._myValueEditEnabled = false;\r\n this._myStepEditEnabled = false;\r\n\r\n this._myValueRealValue = 0;\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = false;\r\n\r\n this._myTempValue = [];\r\n\r\n this._myTempNonArrayValue = [0];\r\n this._myTempNonArrayDefaultValue = [0];\r\n }\r\n\r\n _refreshUIHook() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._myUI.myValueTextComponents[i].text = this._getVariableValue()[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n\r\n this._myUI.myStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myStepPerSecond);\r\n }\r\n\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n this._myUI.setAdditionalButtonsVisible(easyTuneParams.myShowAdditionalButtons);\r\n }\r\n\r\n _setEasyTuneVariableHook() {\r\n if (this._myVariable != null) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n }\r\n }\r\n\r\n _updateHook(dt) {\r\n this._updateValue(dt);\r\n }\r\n\r\n _updateValue(dt) {\r\n let stickVariableIntensity = 0;\r\n\r\n if (this._myGamepad) {\r\n let y = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n\r\n if (Math.abs(y) > this._myConfig.myEditThumbstickMinThreshold) {\r\n let normalizedEditAmount = (Math.abs(y) - this._myConfig.myEditThumbstickMinThreshold) / (1 - this._myConfig.myEditThumbstickMinThreshold);\r\n stickVariableIntensity = Math.sign(y) * normalizedEditAmount;\r\n }\r\n }\r\n\r\n let valueIntensity = 0;\r\n if (this._myValueEditEnabled) {\r\n valueIntensity = stickVariableIntensity;\r\n } else if (this._myValueButtonEditIntensity != 0) {\r\n if (this._myValueButtonEditIntensityTimer <= 0) {\r\n valueIntensity = this._myValueButtonEditIntensity;\r\n } else {\r\n this._myValueButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (this._myValueEditIndex >= 0 && this._myValueEditIndex < this._getVariableValue().length) {\r\n if (valueIntensity != 0) {\r\n let amountToAdd = valueIntensity * this._myVariable._myStepPerSecond * dt;\r\n\r\n this._myValueRealValue += amountToAdd;\r\n\r\n if (this._myVariable._myMin != null && this._myVariable._myMax != null) {\r\n this._myValueRealValue = Math.pp_clamp(this._myValueRealValue, this._myVariable._myMin, this._myVariable._myMax);\r\n } else if (this._myVariable._myMin != null) {\r\n this._myValueRealValue = Math.max(this._myValueRealValue, this._myVariable._myMin);\r\n } else if (this._myVariable._myMax != null) {\r\n this._myValueRealValue = Math.min(this._myValueRealValue, this._myVariable._myMax);\r\n }\r\n\r\n let decimalPlacesMultiplier = Math.pow(10, this._myVariable._myDecimalPlaces);\r\n\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n\r\n if (this._myVariable._myEditAllValuesTogether) {\r\n let newValue = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n let difference = newValue - this._myTempValue[this._myValueEditIndex];\r\n\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._myTempValue[i] = Math.round((this._myTempValue[i] + difference) * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n\r\n if (this._myVariable._myMin != null && this._myVariable._myMax != null) {\r\n this._myTempValue[i] = Math.pp_clamp(this._myTempValue[i], this._myVariable._myMin, this._myVariable._myMax);\r\n } else if (this._myVariable._myMin != null) {\r\n this._myTempValue[i] = Math.max(this._myTempValue[i], this._myVariable._myMin);\r\n } else if (this._myVariable._myMax != null) {\r\n this._myTempValue[i] = Math.min(this._myTempValue[i], this._myVariable._myMax);\r\n }\r\n\r\n this._myUI.myValueTextComponents[i].text = this._myTempValue[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n\r\n } else {\r\n this._myTempValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n\r\n if (this._myVariable._myMin != null && this._myVariable._myMax != null) {\r\n this._myTempValue[this._myValueEditIndex] = Math.pp_clamp(this._myTempValue[this._myValueEditIndex], this._myVariable._myMin, this._myVariable._myMax);\r\n } else if (this._myVariable._myMin != null) {\r\n this._myTempValue[this._myValueEditIndex] = Math.max(this._myTempValue[this._myValueEditIndex], this._myVariable._myMin);\r\n } else if (this._myVariable._myMax != null) {\r\n this._myTempValue[this._myValueEditIndex] = Math.min(this._myTempValue[this._myValueEditIndex], this._myVariable._myMax);\r\n }\r\n\r\n this._myUI.myValueTextComponents[this._myValueEditIndex].text = this._myTempValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n\r\n this._setVariableValue(this._myTempValue);\r\n } else {\r\n this._myValueRealValue = this._getVariableValue()[this._myValueEditIndex];\r\n }\r\n }\r\n\r\n let stepIntensity = 0;\r\n if (this._myStepEditEnabled) {\r\n stepIntensity = stickVariableIntensity;\r\n } else if (this._myStepButtonEditIntensity != 0) {\r\n if (this._myStepButtonEditIntensityTimer <= 0) {\r\n stepIntensity = this._myStepButtonEditIntensity;\r\n } else {\r\n this._myStepButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (stepIntensity != 0) {\r\n let amountToAdd = 0;\r\n if (this._myStepFastEdit) {\r\n amountToAdd = Math.sign(stepIntensity) * 1;\r\n this._myStepFastEdit = false;\r\n } else {\r\n amountToAdd = stepIntensity * this._myConfig.myStepMultiplierStepPerSecond * dt;\r\n }\r\n\r\n this._myStepMultiplierValue += amountToAdd;\r\n if (Math.abs(this._myStepMultiplierValue) >= 1) {\r\n if (Math.sign(this._myStepMultiplierValue) > 0) {\r\n this._myStepMultiplierValue -= 1;\r\n this._changeStep(this._myVariable._myStepPerSecond * 10);\r\n } else {\r\n this._myStepMultiplierValue += 1;\r\n this._changeStep(this._myVariable._myStepPerSecond * 0.1);\r\n }\r\n }\r\n } else {\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = true;\r\n }\r\n }\r\n\r\n _addListenersHook() {\r\n let ui = this._myUI;\r\n\r\n ui.myVariableLabelCursorTargetComponent.onClick.add(this._resetAllValues.bind(this));\r\n ui.myVariableLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myVariableLabelText));\r\n ui.myVariableLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myVariableLabelText, this._myConfig.myVariableLabelTextScale));\r\n\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, 1));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, i, -1));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, i, 0));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, i, 0));\r\n\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueIncreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n ui.myValueDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myValueDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myValueCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, i));\r\n ui.myValueCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], true));\r\n ui.myValueCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, i, ui.myValueTexts[i], false));\r\n }\r\n\r\n ui.myStepCursorTargetComponent.onClick.add(this._resetStep.bind(this));\r\n ui.myStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, ui.myStepText, true));\r\n ui.myStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, ui.myStepText, false));\r\n\r\n ui.myStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 1));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 1));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, -1));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, -1));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0));\r\n\r\n ui.myStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myStepIncreaseButtonBackgroundComponent.material));\r\n ui.myStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myStepIncreaseButtonBackgroundComponent.material));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myStepDecreaseButtonBackgroundComponent.material));\r\n ui.myStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myStepDecreaseButtonBackgroundComponent.material));\r\n }\r\n\r\n _setValueEditIntensity(index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myValueButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n this._myValueRealValue = this._getVariableValue()[index];\r\n this._myValueEditIndex = index;\r\n }\r\n\r\n this._myValueButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setStepEditIntensity(value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myStepButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n }\r\n\r\n this._myStepButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setValueEditEnabled(index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n this._myValueRealValue = this._getVariableValue()[index];\r\n this._myValueEditIndex = index;\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myValueTextScale);\r\n }\r\n\r\n this._myValueEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _setStepEditEnabled(text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myStepTextScale);\r\n }\r\n\r\n this._myStepEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _resetValue(index) {\r\n if (this._isActive()) {\r\n this._myTempValue.pp_copy(this._getVariableValue());\r\n this._myTempValue[index] = this._getVariableDefaultValue()[index];\r\n this._setVariableValue(this._myTempValue);\r\n\r\n this._myUI.myValueTextComponents[index].text = this._getVariableValue()[index].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n }\r\n\r\n _resetAllValues() {\r\n for (let i = 0; i < this._myArraySize; i++) {\r\n this._resetValue(i);\r\n }\r\n }\r\n\r\n _resetStep() {\r\n if (this._isActive()) {\r\n this._changeStep(this._myVariable._myDefaultStepPerSecond);\r\n }\r\n }\r\n\r\n _changeStep(step) {\r\n step = Math.pp_roundDecimal(step, 10);\r\n this._myVariable._myStepPerSecond = step;\r\n this._myUI.myStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myStepPerSecond);\r\n }\r\n\r\n _genericTextHover(text) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n }\r\n\r\n _genericTextUnhover(text, originalScale) {\r\n text.pp_setScaleLocal(originalScale);\r\n }\r\n\r\n _getVariableValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayValue[0] = this._myVariable.getValue();\r\n return this._myTempNonArrayValue;\r\n }\r\n\r\n return this._myVariable.getValue();\r\n }\r\n\r\n _getVariableDefaultValue() {\r\n if (this._myNonArray) {\r\n this._myTempNonArrayDefaultValue[0] = this._myVariable.getDefaultValue();\r\n return this._myTempNonArrayDefaultValue;\r\n }\r\n\r\n return this._myVariable.getDefaultValue();\r\n }\r\n\r\n _setVariableValue(value) {\r\n if (this._myNonArray) {\r\n this._myVariable.setValue(value[0]);\r\n } else {\r\n this._myVariable.setValue(this._myTempValue);\r\n }\r\n }\r\n}", "import { EasyTuneBaseArrayWidgetSelector } from \"../base/easy_tune_base_array_widget_selector.js\";\r\nimport { EasyTuneNumberArrayWidget } from \"./easy_tune_number_array_widget.js\";\r\n\r\nexport class EasyTuneNumberArrayWidgetSelector extends EasyTuneBaseArrayWidgetSelector {\r\n\r\n _getEasyTuneArrayWidget(arraySize) {\r\n return new EasyTuneNumberArrayWidget(this._myParams, arraySize, this._myGamepad, this._myEngine);\r\n }\r\n}", "import { vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneBaseWidgetConfig } from \"../base/easy_tune_base_widget_config.js\";\r\n\r\nexport class EasyTuneTransformWidgetConfig extends EasyTuneBaseWidgetConfig {\r\n\r\n _getBackPanelMinY() {\r\n return super._getBackPanelMinY() + this.myPositionPanelPosition[1] + this.myStepPanelPosition[1];\r\n }\r\n\r\n _getBackPanelMaxX() {\r\n return this.myDisplayPanelPosition[0] + this.myRotationPanelPosition[0] + this.myIncreaseButtonPosition[0] + this.mySideButtonBackgroundScale[0] + this._mySideButtonDistanceFromBorder;\r\n }\r\n\r\n _getBackPanelMinX() {\r\n return this.myDisplayPanelPosition[0] + this.myScalePanelPosition[0] + this.myDecreaseButtonPosition[0] - this.mySideButtonBackgroundScale[0] - this._mySideButtonDistanceFromBorder;\r\n }\r\n\r\n _getPivotZOffset() {\r\n return 0.00805713;\r\n }\r\n\r\n _setupBuildConfigHook() {\r\n this.myIncreaseButtonText = \"+\";\r\n this.myDecreaseButtonText = \"-\";\r\n\r\n this.myDecreaseButtonPosition = vec3_create(-0.13, 0, -0.00001);\r\n this.myIncreaseButtonPosition = vec3_create(-this.myDecreaseButtonPosition[0], 0, -0.00001);\r\n\r\n let distanceBetweenComponents = Math.abs(this.myIncreaseButtonPosition[0]) + Math.abs(this.myRightSideButtonPosition[0]);\r\n let distanceFromVariableLabel = 0.045;\r\n this.myPositionPanelPosition = [0, this.myVariableLabelPanelPosition[1] - distanceFromVariableLabel, this._myPanelZOffset];\r\n this.myRotationPanelPosition = [this.myPositionPanelPosition[0] + distanceBetweenComponents, this.myVariableLabelPanelPosition[1] - distanceFromVariableLabel, this._myPanelZOffset];\r\n this.myScalePanelPosition = [this.myPositionPanelPosition[0] - distanceBetweenComponents, this.myVariableLabelPanelPosition[1] - distanceFromVariableLabel, this._myPanelZOffset];\r\n\r\n this.myPositionText = \"Position\";\r\n this.myRotationText = \"Rotation\";\r\n this.myScaleText = \"Scale\";\r\n\r\n this.myComponentLabelTextScale = this.myLabelTextScale;\r\n this.myComponentLabelCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myComponentLabelCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myComponentLabelCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myComponentLabelCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this._myValuePanelDistanceFromVariableLabelPanel = 0.055;\r\n this._myDistanceBetweenValues = this.mySideButtonBackgroundScale[1] * 2 + 0.015;\r\n\r\n this.myValueTextScale = vec3_create(0.4, 0.4, 0.4);\r\n\r\n this.myValueCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myValueCursorTargetPosition[2] = this._myColliderZOffset - this._myPanelZOffset;\r\n this.myValueCollisionExtents = vec3_create(0.065, 0.02, 1);\r\n this.myValueCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n\r\n this.myValuePanelsPositions = [];\r\n this.myValuePanelsPositions[0] = vec3_create(0, -this._myValuePanelDistanceFromVariableLabelPanel, 0);\r\n for (let i = 1; i < 3; i++) {\r\n this.myValuePanelsPositions[i] = this.myValuePanelsPositions[i - 1].pp_clone();\r\n this.myValuePanelsPositions[i][1] -= this._myDistanceBetweenValues;\r\n }\r\n\r\n let valuePanelLastPosition = this.myValuePanelsPositions[2][1];\r\n this.myStepPanelPosition = [0, valuePanelLastPosition - this._myValuePanelDistanceFromVariableLabelPanel, 0];\r\n this.myStepTextScale = this.myLabelTextScale;\r\n this.myStepStartString = \"Step: \";\r\n\r\n this.myStepCursorTargetPosition = vec3_create(0, 0, 0);\r\n this.myStepCursorTargetPosition[2] = this._myColliderZOffset - this.myStepPanelPosition[2];\r\n this.myStepCollisionExtents = vec3_create(0.065, 0.0175, 1);\r\n this.myStepCollisionExtents[2] = this.myCursorTargetCollisionThickness;\r\n }\r\n\r\n _setupRuntimeConfigHook() {\r\n this.myTextHoverScaleMultiplier = vec3_create(1.1, 1.1, 1.1);\r\n\r\n this.myEditThumbstickMinThreshold = 0.35;\r\n this.myStepMultiplierStepPerSecond = 2.25;\r\n this.myButtonEditDelay = 0;\r\n }\r\n}", "import { CollisionComponent, MeshComponent, TextComponent } from \"@wonderlandengine/api\";\r\nimport { CursorTarget } from \"@wonderlandengine/components\";\r\nimport { EasyTuneBaseWidgetUI } from \"../base/easy_tune_base_widget_ui.js\";\r\n\r\nexport class EasyTuneTransformWidgetUI extends EasyTuneBaseWidgetUI {\r\n\r\n constructor(engine) {\r\n super(engine);\r\n }\r\n\r\n setAdditionalButtonsVisible(visible) {\r\n this._myAdditionalButtonsVisible = visible;\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myPositionDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n this.myPositionStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myPositionStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myRotationDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n this.myRotationStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myRotationStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScaleIncreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myScaleDecreaseButtonPanels[i].pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n this.myScaleStepIncreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n this.myScaleStepDecreaseButtonPanel.pp_setActive(this._myAdditionalButtonsVisible);\r\n }\r\n\r\n _buildHook() {\r\n this._myAdditionalButtonsVisible = true;\r\n }\r\n\r\n _createSkeletonHook() {\r\n // Position\r\n\r\n this.myPositionPanel = this.myDisplayPanel.pp_addObject();\r\n this.myPositionLabelText = this.myPositionPanel.pp_addObject();\r\n this.myPositionLabelCursorTarget = this.myPositionPanel.pp_addObject();\r\n\r\n this.myPositionPanels = [];\r\n this.myPositionTexts = [];\r\n this.myPositionCursorTargets = [];\r\n\r\n this.myPositionIncreaseButtonPanels = [];\r\n this.myPositionIncreaseButtonBackgrounds = [];\r\n this.myPositionIncreaseButtonTexts = [];\r\n this.myPositionIncreaseButtonCursorTargets = [];\r\n\r\n this.myPositionDecreaseButtonPanels = [];\r\n this.myPositionDecreaseButtonBackgrounds = [];\r\n this.myPositionDecreaseButtonTexts = [];\r\n this.myPositionDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionPanels[i] = this.myPositionPanel.pp_addObject();\r\n this.myPositionTexts[i] = this.myPositionPanels[i].pp_addObject();\r\n this.myPositionCursorTargets[i] = this.myPositionPanels[i].pp_addObject();\r\n\r\n this.myPositionIncreaseButtonPanels[i] = this.myPositionPanels[i].pp_addObject();\r\n this.myPositionIncreaseButtonBackgrounds[i] = this.myPositionIncreaseButtonPanels[i].pp_addObject();\r\n this.myPositionIncreaseButtonTexts[i] = this.myPositionIncreaseButtonPanels[i].pp_addObject();\r\n this.myPositionIncreaseButtonCursorTargets[i] = this.myPositionIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myPositionDecreaseButtonPanels[i] = this.myPositionPanels[i].pp_addObject();\r\n this.myPositionDecreaseButtonBackgrounds[i] = this.myPositionDecreaseButtonPanels[i].pp_addObject();\r\n this.myPositionDecreaseButtonTexts[i] = this.myPositionDecreaseButtonPanels[i].pp_addObject();\r\n this.myPositionDecreaseButtonCursorTargets[i] = this.myPositionDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n // Rotation\r\n\r\n this.myRotationPanel = this.myDisplayPanel.pp_addObject();\r\n this.myRotationLabelText = this.myRotationPanel.pp_addObject();\r\n this.myRotationLabelCursorTarget = this.myRotationPanel.pp_addObject();\r\n\r\n this.myRotationPanels = [];\r\n this.myRotationTexts = [];\r\n this.myRotationCursorTargets = [];\r\n\r\n this.myRotationIncreaseButtonPanels = [];\r\n this.myRotationIncreaseButtonBackgrounds = [];\r\n this.myRotationIncreaseButtonTexts = [];\r\n this.myRotationIncreaseButtonCursorTargets = [];\r\n\r\n this.myRotationDecreaseButtonPanels = [];\r\n this.myRotationDecreaseButtonBackgrounds = [];\r\n this.myRotationDecreaseButtonTexts = [];\r\n this.myRotationDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationPanels[i] = this.myRotationPanel.pp_addObject();\r\n this.myRotationTexts[i] = this.myRotationPanels[i].pp_addObject();\r\n this.myRotationCursorTargets[i] = this.myRotationPanels[i].pp_addObject();\r\n\r\n this.myRotationIncreaseButtonPanels[i] = this.myRotationPanels[i].pp_addObject();\r\n this.myRotationIncreaseButtonBackgrounds[i] = this.myRotationIncreaseButtonPanels[i].pp_addObject();\r\n this.myRotationIncreaseButtonTexts[i] = this.myRotationIncreaseButtonPanels[i].pp_addObject();\r\n this.myRotationIncreaseButtonCursorTargets[i] = this.myRotationIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myRotationDecreaseButtonPanels[i] = this.myRotationPanels[i].pp_addObject();\r\n this.myRotationDecreaseButtonBackgrounds[i] = this.myRotationDecreaseButtonPanels[i].pp_addObject();\r\n this.myRotationDecreaseButtonTexts[i] = this.myRotationDecreaseButtonPanels[i].pp_addObject();\r\n this.myRotationDecreaseButtonCursorTargets[i] = this.myRotationDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n // Scale\r\n\r\n this.myScalePanel = this.myDisplayPanel.pp_addObject();\r\n this.myScaleLabelText = this.myScalePanel.pp_addObject();\r\n this.myScaleLabelCursorTarget = this.myScalePanel.pp_addObject();\r\n\r\n this.myScalePanels = [];\r\n this.myScaleTexts = [];\r\n this.myScaleCursorTargets = [];\r\n\r\n this.myScaleIncreaseButtonPanels = [];\r\n this.myScaleIncreaseButtonBackgrounds = [];\r\n this.myScaleIncreaseButtonTexts = [];\r\n this.myScaleIncreaseButtonCursorTargets = [];\r\n\r\n this.myScaleDecreaseButtonPanels = [];\r\n this.myScaleDecreaseButtonBackgrounds = [];\r\n this.myScaleDecreaseButtonTexts = [];\r\n this.myScaleDecreaseButtonCursorTargets = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScalePanels[i] = this.myScalePanel.pp_addObject();\r\n this.myScaleTexts[i] = this.myScalePanels[i].pp_addObject();\r\n this.myScaleCursorTargets[i] = this.myScalePanels[i].pp_addObject();\r\n\r\n this.myScaleIncreaseButtonPanels[i] = this.myScalePanels[i].pp_addObject();\r\n this.myScaleIncreaseButtonBackgrounds[i] = this.myScaleIncreaseButtonPanels[i].pp_addObject();\r\n this.myScaleIncreaseButtonTexts[i] = this.myScaleIncreaseButtonPanels[i].pp_addObject();\r\n this.myScaleIncreaseButtonCursorTargets[i] = this.myScaleIncreaseButtonPanels[i].pp_addObject();\r\n\r\n this.myScaleDecreaseButtonPanels[i] = this.myScalePanels[i].pp_addObject();\r\n this.myScaleDecreaseButtonBackgrounds[i] = this.myScaleDecreaseButtonPanels[i].pp_addObject();\r\n this.myScaleDecreaseButtonTexts[i] = this.myScaleDecreaseButtonPanels[i].pp_addObject();\r\n this.myScaleDecreaseButtonCursorTargets[i] = this.myScaleDecreaseButtonPanels[i].pp_addObject();\r\n }\r\n\r\n // Steps\r\n\r\n // Position\r\n\r\n this.myPositionStepPanel = this.myPositionPanel.pp_addObject();\r\n this.myPositionStepText = this.myPositionStepPanel.pp_addObject();\r\n this.myPositionStepCursorTarget = this.myPositionStepPanel.pp_addObject();\r\n\r\n this.myPositionStepIncreaseButtonPanel = this.myPositionStepPanel.pp_addObject();\r\n this.myPositionStepIncreaseButtonBackground = this.myPositionStepIncreaseButtonPanel.pp_addObject();\r\n this.myPositionStepIncreaseButtonText = this.myPositionStepIncreaseButtonPanel.pp_addObject();\r\n this.myPositionStepIncreaseButtonCursorTarget = this.myPositionStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myPositionStepDecreaseButtonPanel = this.myPositionStepPanel.pp_addObject();\r\n this.myPositionStepDecreaseButtonBackground = this.myPositionStepDecreaseButtonPanel.pp_addObject();\r\n this.myPositionStepDecreaseButtonText = this.myPositionStepDecreaseButtonPanel.pp_addObject();\r\n this.myPositionStepDecreaseButtonCursorTarget = this.myPositionStepDecreaseButtonPanel.pp_addObject();\r\n\r\n // Rotation\r\n\r\n this.myRotationStepPanel = this.myRotationPanel.pp_addObject();\r\n this.myRotationStepText = this.myRotationStepPanel.pp_addObject();\r\n this.myRotationStepCursorTarget = this.myRotationStepPanel.pp_addObject();\r\n\r\n this.myRotationStepIncreaseButtonPanel = this.myRotationStepPanel.pp_addObject();\r\n this.myRotationStepIncreaseButtonBackground = this.myRotationStepIncreaseButtonPanel.pp_addObject();\r\n this.myRotationStepIncreaseButtonText = this.myRotationStepIncreaseButtonPanel.pp_addObject();\r\n this.myRotationStepIncreaseButtonCursorTarget = this.myRotationStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myRotationStepDecreaseButtonPanel = this.myRotationStepPanel.pp_addObject();\r\n this.myRotationStepDecreaseButtonBackground = this.myRotationStepDecreaseButtonPanel.pp_addObject();\r\n this.myRotationStepDecreaseButtonText = this.myRotationStepDecreaseButtonPanel.pp_addObject();\r\n this.myRotationStepDecreaseButtonCursorTarget = this.myRotationStepDecreaseButtonPanel.pp_addObject();\r\n\r\n // Scale\r\n\r\n this.myScaleStepPanel = this.myScalePanel.pp_addObject();\r\n this.myScaleStepText = this.myScaleStepPanel.pp_addObject();\r\n this.myScaleStepCursorTarget = this.myScaleStepPanel.pp_addObject();\r\n\r\n this.myScaleStepIncreaseButtonPanel = this.myScaleStepPanel.pp_addObject();\r\n this.myScaleStepIncreaseButtonBackground = this.myScaleStepIncreaseButtonPanel.pp_addObject();\r\n this.myScaleStepIncreaseButtonText = this.myScaleStepIncreaseButtonPanel.pp_addObject();\r\n this.myScaleStepIncreaseButtonCursorTarget = this.myScaleStepIncreaseButtonPanel.pp_addObject();\r\n\r\n this.myScaleStepDecreaseButtonPanel = this.myScaleStepPanel.pp_addObject();\r\n this.myScaleStepDecreaseButtonBackground = this.myScaleStepDecreaseButtonPanel.pp_addObject();\r\n this.myScaleStepDecreaseButtonText = this.myScaleStepDecreaseButtonPanel.pp_addObject();\r\n this.myScaleStepDecreaseButtonCursorTarget = this.myScaleStepDecreaseButtonPanel.pp_addObject();\r\n }\r\n\r\n _setTransformHook() {\r\n // Position\r\n\r\n this.myPositionPanel.pp_setPositionLocal(this._myConfig.myPositionPanelPosition);\r\n this.myPositionLabelText.pp_scaleObject(this._myConfig.myComponentLabelTextScale);\r\n this.myPositionLabelCursorTarget.pp_setPositionLocal(this._myConfig.myComponentLabelCursorTargetPosition);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionPanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myPositionTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myPositionCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myPositionIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myPositionIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myPositionDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myPositionDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n // Rotation\r\n\r\n this.myRotationPanel.pp_setPositionLocal(this._myConfig.myRotationPanelPosition);\r\n this.myRotationLabelText.pp_scaleObject(this._myConfig.myComponentLabelTextScale);\r\n this.myRotationLabelCursorTarget.pp_setPositionLocal(this._myConfig.myComponentLabelCursorTargetPosition);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationPanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myRotationTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myRotationCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myRotationIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myRotationIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myRotationDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myRotationDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n // Scale\r\n\r\n this.myScalePanel.pp_setPositionLocal(this._myConfig.myScalePanelPosition);\r\n this.myScaleLabelText.pp_scaleObject(this._myConfig.myComponentLabelTextScale);\r\n this.myScaleLabelCursorTarget.pp_setPositionLocal(this._myConfig.myComponentLabelCursorTargetPosition);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScalePanels[i].pp_setPositionLocal(this._myConfig.myValuePanelsPositions[i]);\r\n this.myScaleTexts[i].pp_scaleObject(this._myConfig.myValueTextScale);\r\n this.myScaleCursorTargets[i].pp_setPositionLocal(this._myConfig.myValueCursorTargetPosition);\r\n\r\n this.myScaleIncreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myScaleIncreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleIncreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleIncreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleIncreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myScaleDecreaseButtonPanels[i].pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myScaleDecreaseButtonBackgrounds[i].pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleDecreaseButtonTexts[i].pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleDecreaseButtonTexts[i].pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleDecreaseButtonCursorTargets[i].pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n // Steps\r\n\r\n // Position\r\n\r\n this.myPositionStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myPositionStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myPositionStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myPositionStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myPositionStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myPositionStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myPositionStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myPositionStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myPositionStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myPositionStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n // Rotation\r\n\r\n this.myRotationStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myRotationStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myRotationStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myRotationStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myRotationStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myRotationStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myRotationStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myRotationStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myRotationStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myRotationStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n // Scale\r\n\r\n this.myScaleStepPanel.pp_setPositionLocal(this._myConfig.myStepPanelPosition);\r\n this.myScaleStepText.pp_scaleObject(this._myConfig.myStepTextScale);\r\n this.myScaleStepCursorTarget.pp_setPositionLocal(this._myConfig.myStepCursorTargetPosition);\r\n\r\n this.myScaleStepIncreaseButtonPanel.pp_setPositionLocal(this._myConfig.myIncreaseButtonPosition);\r\n this.myScaleStepIncreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleStepIncreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleStepIncreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleStepIncreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n\r\n this.myScaleStepDecreaseButtonPanel.pp_setPositionLocal(this._myConfig.myDecreaseButtonPosition);\r\n this.myScaleStepDecreaseButtonBackground.pp_scaleObject(this._myConfig.mySideButtonBackgroundScale);\r\n this.myScaleStepDecreaseButtonText.pp_setPositionLocal(this._myConfig.mySideButtonTextPosition);\r\n this.myScaleStepDecreaseButtonText.pp_scaleObject(this._myConfig.mySideButtonTextScale);\r\n this.myScaleStepDecreaseButtonCursorTarget.pp_setPositionLocal(this._myConfig.mySideButtonCursorTargetPosition);\r\n }\r\n\r\n _addComponentsHook() {\r\n // Position\r\n\r\n this.myPositionLabelTextComponent = this.myPositionLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionLabelTextComponent);\r\n this.myPositionLabelTextComponent.text = this._myConfig.myPositionText;\r\n\r\n this.myPositionLabelCursorTargetComponent = this.myPositionLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionLabelCollisionComponent = this.myPositionLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionLabelCollisionComponent.extents = this._myConfig.myComponentLabelCollisionExtents;\r\n\r\n this.myPositionTextComponents = [];\r\n this.myPositionCursorTargetComponents = [];\r\n this.myPositionCollisionComponents = [];\r\n\r\n this.myPositionIncreaseButtonBackgroundComponents = [];\r\n this.myPositionIncreaseButtonTextComponents = [];\r\n this.myPositionIncreaseButtonCursorTargetComponents = [];\r\n this.myPositionIncreaseButtonCollisionComponents = [];\r\n\r\n this.myPositionDecreaseButtonBackgroundComponents = [];\r\n this.myPositionDecreaseButtonTextComponents = [];\r\n this.myPositionDecreaseButtonCursorTargetComponents = [];\r\n this.myPositionDecreaseButtonCollisionComponents = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myPositionTextComponents[i] = this.myPositionTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionTextComponents[i]);\r\n this.myPositionTextComponents[i].text = \" \";\r\n\r\n this.myPositionCursorTargetComponents[i] = this.myPositionCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myPositionCollisionComponents[i] = this.myPositionCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myPositionCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myPositionIncreaseButtonBackgroundComponents[i] = this.myPositionIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myPositionIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myPositionIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionIncreaseButtonTextComponents[i] = this.myPositionIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionIncreaseButtonTextComponents[i]);\r\n this.myPositionIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myPositionIncreaseButtonCursorTargetComponents[i] = this.myPositionIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myPositionIncreaseButtonCollisionComponents[i] = this.myPositionIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myPositionIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPositionDecreaseButtonBackgroundComponents[i] = this.myPositionDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myPositionDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myPositionDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionDecreaseButtonTextComponents[i] = this.myPositionDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionDecreaseButtonTextComponents[i]);\r\n this.myPositionDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myPositionDecreaseButtonCursorTargetComponents[i] = this.myPositionDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myPositionDecreaseButtonCollisionComponents[i] = this.myPositionDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myPositionDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n // Rotation\r\n\r\n this.myRotationLabelTextComponent = this.myRotationLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationLabelTextComponent);\r\n this.myRotationLabelTextComponent.text = this._myConfig.myRotationText;\r\n\r\n this.myRotationLabelCursorTargetComponent = this.myRotationLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationLabelCollisionComponent = this.myRotationLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationLabelCollisionComponent.extents = this._myConfig.myComponentLabelCollisionExtents;\r\n\r\n this.myRotationTextComponents = [];\r\n this.myRotationCursorTargetComponents = [];\r\n this.myRotationCollisionComponents = [];\r\n\r\n this.myRotationIncreaseButtonBackgroundComponents = [];\r\n this.myRotationIncreaseButtonTextComponents = [];\r\n this.myRotationIncreaseButtonCursorTargetComponents = [];\r\n this.myRotationIncreaseButtonCollisionComponents = [];\r\n\r\n this.myRotationDecreaseButtonBackgroundComponents = [];\r\n this.myRotationDecreaseButtonTextComponents = [];\r\n this.myRotationDecreaseButtonCursorTargetComponents = [];\r\n this.myRotationDecreaseButtonCollisionComponents = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myRotationTextComponents[i] = this.myRotationTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationTextComponents[i]);\r\n this.myRotationTextComponents[i].text = \" \";\r\n\r\n this.myRotationCursorTargetComponents[i] = this.myRotationCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myRotationCollisionComponents[i] = this.myRotationCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myRotationCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myRotationIncreaseButtonBackgroundComponents[i] = this.myRotationIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myRotationIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myRotationIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationIncreaseButtonTextComponents[i] = this.myRotationIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationIncreaseButtonTextComponents[i]);\r\n this.myRotationIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myRotationIncreaseButtonCursorTargetComponents[i] = this.myRotationIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myRotationIncreaseButtonCollisionComponents[i] = this.myRotationIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myRotationIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myRotationDecreaseButtonBackgroundComponents[i] = this.myRotationDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myRotationDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myRotationDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationDecreaseButtonTextComponents[i] = this.myRotationDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationDecreaseButtonTextComponents[i]);\r\n this.myRotationDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myRotationDecreaseButtonCursorTargetComponents[i] = this.myRotationDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myRotationDecreaseButtonCollisionComponents[i] = this.myRotationDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myRotationDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n // Scale\r\n\r\n this.myScaleLabelTextComponent = this.myScaleLabelText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleLabelTextComponent);\r\n this.myScaleLabelTextComponent.text = this._myConfig.myScaleText;\r\n\r\n this.myScaleLabelCursorTargetComponent = this.myScaleLabelCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleLabelCollisionComponent = this.myScaleLabelCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleLabelCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleLabelCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleLabelCollisionComponent.extents = this._myConfig.myComponentLabelCollisionExtents;\r\n\r\n this.myScaleTextComponents = [];\r\n this.myScaleCursorTargetComponents = [];\r\n this.myScaleCollisionComponents = [];\r\n\r\n this.myScaleIncreaseButtonBackgroundComponents = [];\r\n this.myScaleIncreaseButtonTextComponents = [];\r\n this.myScaleIncreaseButtonCursorTargetComponents = [];\r\n this.myScaleIncreaseButtonCollisionComponents = [];\r\n\r\n this.myScaleDecreaseButtonBackgroundComponents = [];\r\n this.myScaleDecreaseButtonTextComponents = [];\r\n this.myScaleDecreaseButtonCursorTargetComponents = [];\r\n this.myScaleDecreaseButtonCollisionComponents = [];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this.myScaleTextComponents[i] = this.myScaleTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleTextComponents[i]);\r\n this.myScaleTextComponents[i].text = \" \";\r\n\r\n this.myScaleCursorTargetComponents[i] = this.myScaleCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myScaleCollisionComponents[i] = this.myScaleCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myScaleCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleCollisionComponents[i].extents = this._myConfig.myValueCollisionExtents;\r\n\r\n this.myScaleIncreaseButtonBackgroundComponents[i] = this.myScaleIncreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myScaleIncreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myScaleIncreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleIncreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleIncreaseButtonTextComponents[i] = this.myScaleIncreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleIncreaseButtonTextComponents[i]);\r\n this.myScaleIncreaseButtonTextComponents[i].text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myScaleIncreaseButtonCursorTargetComponents[i] = this.myScaleIncreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myScaleIncreaseButtonCollisionComponents[i] = this.myScaleIncreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myScaleIncreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleIncreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleIncreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myScaleDecreaseButtonBackgroundComponents[i] = this.myScaleDecreaseButtonBackgrounds[i].pp_addComponent(MeshComponent);\r\n this.myScaleDecreaseButtonBackgroundComponents[i].mesh = this._myPlaneMesh;\r\n this.myScaleDecreaseButtonBackgroundComponents[i].material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleDecreaseButtonBackgroundComponents[i].material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleDecreaseButtonTextComponents[i] = this.myScaleDecreaseButtonTexts[i].pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleDecreaseButtonTextComponents[i]);\r\n this.myScaleDecreaseButtonTextComponents[i].text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myScaleDecreaseButtonCursorTargetComponents[i] = this.myScaleDecreaseButtonCursorTargets[i].pp_addComponent(CursorTarget);\r\n this.myScaleDecreaseButtonCollisionComponents[i] = this.myScaleDecreaseButtonCursorTargets[i].pp_addComponent(CollisionComponent);\r\n this.myScaleDecreaseButtonCollisionComponents[i].collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleDecreaseButtonCollisionComponents[i].group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleDecreaseButtonCollisionComponents[i].extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n // Steps\r\n\r\n // Position \r\n this.myPositionStepTextComponent = this.myPositionStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepTextComponent);\r\n this.myPositionStepTextComponent.text = \" \";\r\n\r\n this.myPositionStepCursorTargetComponent = this.myPositionStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepCollisionComponent = this.myPositionStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n this.myPositionStepIncreaseButtonBackgroundComponent = this.myPositionStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepIncreaseButtonTextComponent = this.myPositionStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepIncreaseButtonTextComponent);\r\n this.myPositionStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myPositionStepIncreaseButtonCursorTargetComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepIncreaseButtonCollisionComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPositionStepDecreaseButtonBackgroundComponent = this.myPositionStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepDecreaseButtonTextComponent = this.myPositionStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepDecreaseButtonTextComponent);\r\n this.myPositionStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myPositionStepDecreaseButtonCursorTargetComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepDecreaseButtonCollisionComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Rotation\r\n\r\n this.myRotationStepTextComponent = this.myRotationStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepTextComponent);\r\n this.myRotationStepTextComponent.text = \" \";\r\n\r\n this.myRotationStepCursorTargetComponent = this.myRotationStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepCollisionComponent = this.myRotationStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n this.myRotationStepIncreaseButtonBackgroundComponent = this.myRotationStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepIncreaseButtonTextComponent = this.myRotationStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepIncreaseButtonTextComponent);\r\n this.myRotationStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myRotationStepIncreaseButtonCursorTargetComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepIncreaseButtonCollisionComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myRotationStepDecreaseButtonBackgroundComponent = this.myRotationStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepDecreaseButtonTextComponent = this.myRotationStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepDecreaseButtonTextComponent);\r\n this.myRotationStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myRotationStepDecreaseButtonCursorTargetComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepDecreaseButtonCollisionComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Scale\r\n\r\n this.myScaleStepTextComponent = this.myScaleStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepTextComponent);\r\n this.myScaleStepTextComponent.text = \" \";\r\n\r\n this.myScaleStepCursorTargetComponent = this.myScaleStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepCollisionComponent = this.myScaleStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n this.myScaleStepIncreaseButtonBackgroundComponent = this.myScaleStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepIncreaseButtonTextComponent = this.myScaleStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepIncreaseButtonTextComponent);\r\n this.myScaleStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myScaleStepIncreaseButtonCursorTargetComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepIncreaseButtonCollisionComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myScaleStepDecreaseButtonBackgroundComponent = this.myScaleStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepDecreaseButtonTextComponent = this.myScaleStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepDecreaseButtonTextComponent);\r\n this.myScaleStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myScaleStepDecreaseButtonCursorTargetComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepDecreaseButtonCollisionComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n\r\n _addStepComponents() {\r\n // Position\r\n this.myPositionStepTextComponent = this.myPositionStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepTextComponent);\r\n this.myPositionStepTextComponent.text = \" \";\r\n\r\n this.myPositionStepCursorTargetComponent = this.myPositionStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepCollisionComponent = this.myPositionStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myPositionStepIncreaseButtonBackgroundComponent = this.myPositionStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepIncreaseButtonTextComponent = this.myPositionStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepIncreaseButtonTextComponent);\r\n this.myPositionStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myPositionStepIncreaseButtonCursorTargetComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepIncreaseButtonCollisionComponent = this.myPositionStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myPositionStepDecreaseButtonBackgroundComponent = this.myPositionStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myPositionStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myPositionStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myPositionStepDecreaseButtonTextComponent = this.myPositionStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myPositionStepDecreaseButtonTextComponent);\r\n this.myPositionStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myPositionStepDecreaseButtonCursorTargetComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myPositionStepDecreaseButtonCollisionComponent = this.myPositionStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myPositionStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myPositionStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myPositionStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Rotation\r\n this.myRotationStepTextComponent = this.myRotationStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepTextComponent);\r\n this.myRotationStepTextComponent.text = \" \";\r\n\r\n this.myRotationStepCursorTargetComponent = this.myRotationStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepCollisionComponent = this.myRotationStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myRotationStepIncreaseButtonBackgroundComponent = this.myRotationStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepIncreaseButtonTextComponent = this.myRotationStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepIncreaseButtonTextComponent);\r\n this.myRotationStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myRotationStepIncreaseButtonCursorTargetComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepIncreaseButtonCollisionComponent = this.myRotationStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myRotationStepDecreaseButtonBackgroundComponent = this.myRotationStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myRotationStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myRotationStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myRotationStepDecreaseButtonTextComponent = this.myRotationStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myRotationStepDecreaseButtonTextComponent);\r\n this.myRotationStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myRotationStepDecreaseButtonCursorTargetComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myRotationStepDecreaseButtonCollisionComponent = this.myRotationStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myRotationStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myRotationStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myRotationStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n // Scale\r\n this.myScaleStepTextComponent = this.myScaleStepText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepTextComponent);\r\n this.myScaleStepTextComponent.text = \" \";\r\n\r\n this.myScaleStepCursorTargetComponent = this.myScaleStepCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepCollisionComponent = this.myScaleStepCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepCollisionComponent.extents = this._myConfig.myStepCollisionExtents;\r\n\r\n // Increase/Decrease\r\n this.myScaleStepIncreaseButtonBackgroundComponent = this.myScaleStepIncreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepIncreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepIncreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepIncreaseButtonTextComponent = this.myScaleStepIncreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepIncreaseButtonTextComponent);\r\n this.myScaleStepIncreaseButtonTextComponent.text = this._myConfig.myIncreaseButtonText;\r\n\r\n this.myScaleStepIncreaseButtonCursorTargetComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepIncreaseButtonCollisionComponent = this.myScaleStepIncreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepIncreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepIncreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepIncreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n\r\n this.myScaleStepDecreaseButtonBackgroundComponent = this.myScaleStepDecreaseButtonBackground.pp_addComponent(MeshComponent);\r\n this.myScaleStepDecreaseButtonBackgroundComponent.mesh = this._myPlaneMesh;\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material = this._myParams.myPlaneMaterial.clone();\r\n this.myScaleStepDecreaseButtonBackgroundComponent.material.color = this._myConfig.myBackgroundColor;\r\n\r\n this.myScaleStepDecreaseButtonTextComponent = this.myScaleStepDecreaseButtonText.pp_addComponent(TextComponent);\r\n this._setupTextComponent(this.myScaleStepDecreaseButtonTextComponent);\r\n this.myScaleStepDecreaseButtonTextComponent.text = this._myConfig.myDecreaseButtonText;\r\n\r\n this.myScaleStepDecreaseButtonCursorTargetComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CursorTarget);\r\n this.myScaleStepDecreaseButtonCollisionComponent = this.myScaleStepDecreaseButtonCursorTarget.pp_addComponent(CollisionComponent);\r\n this.myScaleStepDecreaseButtonCollisionComponent.collider = this._myConfig.myCursorTargetCollisionCollider;\r\n this.myScaleStepDecreaseButtonCollisionComponent.group = 1 << this._myConfig.myCursorTargetCollisionGroup;\r\n this.myScaleStepDecreaseButtonCollisionComponent.extents = this._myConfig.mySideButtonCollisionExtents;\r\n }\r\n}", "import { GamepadAxesID } from \"../../../../input/gamepad/gamepad_buttons.js\";\r\nimport { mat4_create, vec3_create } from \"../../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneBaseWidget } from \"../base/easy_tune_base_widget.js\";\r\nimport { EasyTuneTransformWidgetConfig } from \"./easy_tune_transform_widget_config.js\";\r\nimport { EasyTuneTransformWidgetUI } from \"./easy_tune_transform_widget_ui.js\";\r\n\r\nexport class EasyTuneTransformWidget extends EasyTuneBaseWidget {\r\n\r\n constructor(params, gamepad, engine = Globals.getMainEngine()) {\r\n super(params);\r\n\r\n this._myGamepad = gamepad;\r\n\r\n this._myConfig = new EasyTuneTransformWidgetConfig();\r\n this._myUI = new EasyTuneTransformWidgetUI(engine);\r\n\r\n this._myValueButtonEditIntensity = 0;\r\n this._myValueButtonEditIntensityTimer = 0;\r\n this._myStepButtonEditIntensity = 0;\r\n this._myStepButtonEditIntensityTimer = 0;\r\n\r\n this._myValueEditEnabled = false;\r\n this._myStepEditEnabled = false;\r\n\r\n this._myValueRealValue = 0;\r\n this._myComponentStepValue = 0;\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = false;\r\n\r\n this._myValueEditIndex = -1;\r\n this._myComponentIndex = 0;\r\n this._myStepIndex = 0;\r\n\r\n this._myTempTransformValue = mat4_create();\r\n this._myTempPositionValue = vec3_create();\r\n this._myTempRotationValue = vec3_create();\r\n this._myTempScaleValue = vec3_create();\r\n }\r\n\r\n _refreshUIHook() {\r\n for (let i = 0; i < 3; i++) {\r\n this._myUI.myPositionTextComponents[i].text = this._myVariable._myPosition[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n this._myUI.myPositionStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myPositionStepPerSecond);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this._myUI.myRotationTextComponents[i].text = this._myVariable._myRotation[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n this._myUI.myRotationStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myRotationStepPerSecond);\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this._myUI.myScaleTextComponents[i].text = this._myVariable._myScale[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n this._myUI.myScaleStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myScaleStepPerSecond);\r\n }\r\n\r\n _startHook(parentObject, easyTuneParams) {\r\n this._myUI.setAdditionalButtonsVisible(easyTuneParams.myShowAdditionalButtons);\r\n }\r\n\r\n _setEasyTuneVariableHook() {\r\n if (this._myVariable != null) {\r\n this._myTempPositionValue.pp_copy(this._myVariable._myPosition);\r\n this._myTempRotationValue.pp_copy(this._myVariable._myRotation);\r\n this._myTempScaleValue.pp_copy(this._myVariable._myScale);\r\n }\r\n }\r\n\r\n _updateHook(dt) {\r\n this._updateValue(dt);\r\n }\r\n\r\n _updateValue(dt) {\r\n let stickVariableIntensity = 0;\r\n\r\n if (this._myGamepad) {\r\n let y = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n\r\n if (Math.abs(y) > this._myConfig.myEditThumbstickMinThreshold) {\r\n let normalizedEditAmount = (Math.abs(y) - this._myConfig.myEditThumbstickMinThreshold) / (1 - this._myConfig.myEditThumbstickMinThreshold);\r\n stickVariableIntensity = Math.sign(y) * normalizedEditAmount;\r\n }\r\n }\r\n\r\n let valueIntensity = 0;\r\n if (this._myValueEditEnabled) {\r\n valueIntensity = stickVariableIntensity;\r\n } else if (this._myValueButtonEditIntensity != 0) {\r\n if (this._myValueButtonEditIntensityTimer <= 0) {\r\n valueIntensity = this._myValueButtonEditIntensity;\r\n } else {\r\n this._myValueButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (this._myValueEditIndex >= 0 && this._myValueEditIndex < 3) {\r\n if (valueIntensity != 0) {\r\n this._myTempPositionValue.pp_copy(this._myVariable._myPosition);\r\n this._myTempRotationValue.pp_copy(this._myVariable._myRotation);\r\n this._myTempScaleValue.pp_copy(this._myVariable._myScale);\r\n\r\n let amountToAdd = valueIntensity * this._myComponentStepValue * dt;\r\n\r\n this._myValueRealValue += amountToAdd;\r\n\r\n let decimalPlacesMultiplier = Math.pow(10, this._myVariable._myDecimalPlaces);\r\n\r\n switch (this._myComponentIndex) {\r\n case 0:\r\n this._myTempPositionValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myUI.myPositionTextComponents[this._myValueEditIndex].text = this._myTempPositionValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 1:\r\n if (this._myValueRealValue > 180) {\r\n while (this._myValueRealValue > 180) {\r\n this._myValueRealValue -= 180;\r\n }\r\n this._myValueRealValue = -180 + this._myValueRealValue;\r\n }\r\n\r\n if (this._myValueRealValue < -180) {\r\n while (this._myValueRealValue < - 180) {\r\n this._myValueRealValue += 180;\r\n }\r\n this._myValueRealValue = 180 - this._myValueRealValue;\r\n }\r\n\r\n this._myTempRotationValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myUI.myRotationTextComponents[this._myValueEditIndex].text = this._myTempRotationValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 2:\r\n if (this._myValueRealValue <= 0) {\r\n this._myValueRealValue = 1 / decimalPlacesMultiplier;\r\n }\r\n\r\n if (this._myVariable._myScaleAsOne) {\r\n let newValue = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n let difference = newValue - this._myTempScaleValue[this._myValueEditIndex];\r\n\r\n for (let i = 0; i < 3; i++) {\r\n this._myTempScaleValue[i] = Math.round((this._myTempScaleValue[i] + difference) * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myTempScaleValue[i] = Math.max(this._myTempScaleValue[i], 1 / decimalPlacesMultiplier);\r\n this._myUI.myScaleTextComponents[i].text = this._myTempScaleValue[i].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n } else {\r\n this._myTempScaleValue[this._myValueEditIndex] = Math.round(this._myValueRealValue * decimalPlacesMultiplier + Number.EPSILON) / decimalPlacesMultiplier;\r\n this._myTempScaleValue[this._myValueEditIndex] = Math.max(this._myTempScaleValue[this._myValueEditIndex], 1 / decimalPlacesMultiplier);\r\n this._myUI.myScaleTextComponents[this._myValueEditIndex].text = this._myTempScaleValue[this._myValueEditIndex].toFixed(this._myVariable._myDecimalPlaces);\r\n }\r\n break;\r\n }\r\n\r\n this._myTempTransformValue.mat4_setPositionRotationDegreesScale(this._myTempPositionValue, this._myTempRotationValue, this._myTempScaleValue);\r\n this._myVariable.setValue(this._myTempTransformValue);\r\n } else {\r\n switch (this._myComponentIndex) {\r\n case 0:\r\n this._myValueRealValue = this._myVariable._myPosition[this._myValueEditIndex];\r\n break;\r\n case 1:\r\n this._myValueRealValue = this._myVariable._myRotation[this._myValueEditIndex];\r\n break;\r\n case 2:\r\n this._myValueRealValue = this._myVariable._myScale[this._myValueEditIndex];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let stepIntensity = 0;\r\n if (this._myStepEditEnabled) {\r\n stepIntensity = stickVariableIntensity;\r\n } else if (this._myStepButtonEditIntensity != 0) {\r\n if (this._myStepButtonEditIntensityTimer <= 0) {\r\n stepIntensity = this._myStepButtonEditIntensity;\r\n } else {\r\n this._myStepButtonEditIntensityTimer -= dt;\r\n }\r\n }\r\n\r\n if (stepIntensity != 0) {\r\n let amountToAdd = 0;\r\n if (this._myStepFastEdit) {\r\n amountToAdd = Math.sign(stepIntensity) * 1;\r\n this._myStepFastEdit = false;\r\n } else {\r\n amountToAdd = stepIntensity * this._myConfig.myStepMultiplierStepPerSecond * dt;\r\n }\r\n\r\n this._myStepMultiplierValue += amountToAdd;\r\n if (Math.abs(this._myStepMultiplierValue) >= 1) {\r\n let stepValue = 0;\r\n switch (this._myStepIndex) {\r\n case 0:\r\n stepValue = this._myVariable._myPositionStepPerSecond;\r\n break;\r\n case 1:\r\n stepValue = this._myVariable._myRotationStepPerSecond;\r\n break;\r\n case 2:\r\n stepValue = this._myVariable._myScaleStepPerSecond;\r\n break;\r\n default:\r\n stepValue = 0;\r\n }\r\n if (Math.sign(this._myStepMultiplierValue) > 0) {\r\n this._myStepMultiplierValue -= 1;\r\n this._changeStep(this._myStepIndex, stepValue * 10);\r\n } else {\r\n this._myStepMultiplierValue += 1;\r\n this._changeStep(this._myStepIndex, stepValue * 0.1);\r\n }\r\n }\r\n } else {\r\n this._myStepMultiplierValue = 0;\r\n this._myStepFastEdit = true;\r\n }\r\n }\r\n\r\n _addListenersHook() {\r\n let ui = this._myUI;\r\n\r\n ui.myVariableLabelCursorTargetComponent.onClick.add(this._resetAllValues.bind(this));\r\n ui.myVariableLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myVariableLabelText));\r\n ui.myVariableLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myVariableLabelText, this._myConfig.myVariableLabelTextScale));\r\n\r\n ui.myPositionLabelCursorTargetComponent.onClick.add(this._resetComponentValues.bind(this, 0));\r\n ui.myPositionLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myPositionLabelText));\r\n ui.myPositionLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myPositionLabelText, this._myConfig.myComponentLabelTextScale));\r\n for (let i = 0; i < 3; i++) {\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 0, i, 1));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 0, i, 1));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 0, i, -1));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 0, i, -1));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 0, i, 0));\r\n\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myPositionIncreaseButtonBackgroundComponents[i].material));\r\n ui.myPositionIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myPositionIncreaseButtonBackgroundComponents[i].material));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myPositionDecreaseButtonBackgroundComponents[i].material));\r\n ui.myPositionDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myPositionDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myPositionCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, 0, i));\r\n ui.myPositionCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, 0, i, ui.myPositionTexts[i], true));\r\n ui.myPositionCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, 0, i, ui.myPositionTexts[i], false));\r\n }\r\n\r\n ui.myRotationLabelCursorTargetComponent.onClick.add(this._resetComponentValues.bind(this, 1));\r\n ui.myRotationLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myRotationLabelText));\r\n ui.myRotationLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myRotationLabelText, this._myConfig.myComponentLabelTextScale));\r\n for (let i = 0; i < 3; i++) {\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 1, i, 1));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 1, i, 1));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 1, i, -1));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 1, i, -1));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 1, i, 0));\r\n\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myRotationIncreaseButtonBackgroundComponents[i].material));\r\n ui.myRotationIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myRotationIncreaseButtonBackgroundComponents[i].material));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myRotationDecreaseButtonBackgroundComponents[i].material));\r\n ui.myRotationDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myRotationDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myRotationCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, 1, i));\r\n ui.myRotationCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, 1, i, ui.myRotationTexts[i], true));\r\n ui.myRotationCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, 1, i, ui.myRotationTexts[i], false));\r\n }\r\n\r\n ui.myScaleLabelCursorTargetComponent.onClick.add(this._resetComponentValues.bind(this, 2));\r\n ui.myScaleLabelCursorTargetComponent.onHover.add(this._genericTextHover.bind(this, ui.myScaleLabelText));\r\n ui.myScaleLabelCursorTargetComponent.onUnhover.add(this._genericTextUnhover.bind(this, ui.myScaleLabelText, this._myConfig.myComponentLabelTextScale));\r\n for (let i = 0; i < 3; i++) {\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 2, i, 1));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 2, i, 1));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onDown.add(this._setValueEditIntensity.bind(this, 2, i, -1));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onDownOnHover.add(this._setValueEditIntensity.bind(this, 2, i, -1));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onUp.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._setValueEditIntensity.bind(this, 2, i, 0));\r\n\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myScaleIncreaseButtonBackgroundComponents[i].material));\r\n ui.myScaleIncreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myScaleIncreaseButtonBackgroundComponents[i].material));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onHover.add(this._genericHover.bind(this, ui.myScaleDecreaseButtonBackgroundComponents[i].material));\r\n ui.myScaleDecreaseButtonCursorTargetComponents[i].onUnhover.add(this._genericUnhover.bind(this, ui.myScaleDecreaseButtonBackgroundComponents[i].material));\r\n\r\n ui.myScaleCursorTargetComponents[i].onClick.add(this._resetValue.bind(this, 2, i));\r\n ui.myScaleCursorTargetComponents[i].onHover.add(this._setValueEditEnabled.bind(this, 2, i, ui.myScaleTexts[i], true));\r\n ui.myScaleCursorTargetComponents[i].onUnhover.add(this._setValueEditEnabled.bind(this, 2, i, ui.myScaleTexts[i], false));\r\n }\r\n\r\n ui.myPositionStepCursorTargetComponent.onClick.add(this._resetStep.bind(this, 0));\r\n ui.myPositionStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, 0, ui.myPositionStepText, true));\r\n ui.myPositionStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, 0, ui.myPositionStepText, false));\r\n\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 0, 1));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 0, 1));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 0, -1));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 0, -1));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 0, 0));\r\n\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPositionStepIncreaseButtonBackgroundComponent.material));\r\n ui.myPositionStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myPositionStepIncreaseButtonBackgroundComponent.material));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myPositionStepDecreaseButtonBackgroundComponent.material));\r\n ui.myPositionStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myPositionStepDecreaseButtonBackgroundComponent.material));\r\n\r\n ui.myRotationStepCursorTargetComponent.onClick.add(this._resetStep.bind(this, 1));\r\n ui.myRotationStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, 1, ui.myRotationStepText, true));\r\n ui.myRotationStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, 1, ui.myRotationStepText, false));\r\n\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 1, 1));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 1, 1));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 1, -1));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 1, -1));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 1, 0));\r\n\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myRotationStepIncreaseButtonBackgroundComponent.material));\r\n ui.myRotationStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myRotationStepIncreaseButtonBackgroundComponent.material));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myRotationStepDecreaseButtonBackgroundComponent.material));\r\n ui.myRotationStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myRotationStepDecreaseButtonBackgroundComponent.material));\r\n\r\n ui.myScaleStepCursorTargetComponent.onClick.add(this._resetStep.bind(this, 2));\r\n ui.myScaleStepCursorTargetComponent.onHover.add(this._setStepEditEnabled.bind(this, 2, ui.myScaleStepText, true));\r\n ui.myScaleStepCursorTargetComponent.onUnhover.add(this._setStepEditEnabled.bind(this, 2, ui.myScaleStepText, false));\r\n\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 2, 1));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 2, 1));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onDown.add(this._setStepEditIntensity.bind(this, 2, -1));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onDownOnHover.add(this._setStepEditIntensity.bind(this, 2, -1));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onUp.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._setStepEditIntensity.bind(this, 2, 0));\r\n\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myScaleStepIncreaseButtonBackgroundComponent.material));\r\n ui.myScaleStepIncreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myScaleStepIncreaseButtonBackgroundComponent.material));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onHover.add(this._genericHover.bind(this, ui.myScaleStepDecreaseButtonBackgroundComponent.material));\r\n ui.myScaleStepDecreaseButtonCursorTargetComponent.onUnhover.add(this._genericUnhover.bind(this, ui.myScaleStepDecreaseButtonBackgroundComponent.material));\r\n\r\n }\r\n\r\n _setValueEditIntensity(componentIndex, index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n switch (componentIndex) {\r\n case 0:\r\n this._myValueRealValue = this._myVariable._myPosition[index];\r\n this._myComponentStepValue = this._myVariable._myPositionStepPerSecond;\r\n break;\r\n case 1:\r\n this._myValueRealValue = this._myVariable._myRotation[index];\r\n this._myComponentStepValue = this._myVariable._myRotationStepPerSecond;\r\n break;\r\n case 2:\r\n this._myValueRealValue = this._myVariable._myScale[index];\r\n this._myComponentStepValue = this._myVariable._myScaleStepPerSecond;\r\n break;\r\n }\r\n\r\n this._myValueButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n this._myValueEditIndex = index;\r\n this._myComponentIndex = componentIndex;\r\n }\r\n\r\n this._myValueButtonEditIntensity = value;\r\n }\r\n }\r\n\r\n _setStepEditIntensity(index, value) {\r\n if (this._isActive() || value == 0) {\r\n if (value != 0) {\r\n this._myStepButtonEditIntensityTimer = this._myConfig.myButtonEditDelay;\r\n }\r\n\r\n this._myStepButtonEditIntensity = value;\r\n\r\n this._myStepIndex = index;\r\n }\r\n }\r\n\r\n _setValueEditEnabled(componentIndex, index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n switch (componentIndex) {\r\n case 0:\r\n this._myValueRealValue = this._myVariable._myPosition[index];\r\n this._myComponentStepValue = this._myVariable._myPositionStepPerSecond;\r\n break;\r\n case 1:\r\n this._myValueRealValue = this._myVariable._myRotation[index];\r\n this._myComponentStepValue = this._myVariable._myRotationStepPerSecond;\r\n break;\r\n case 2:\r\n this._myValueRealValue = this._myVariable._myScale[index];\r\n this._myComponentStepValue = this._myVariable._myScaleStepPerSecond;\r\n break;\r\n }\r\n\r\n this._myValueEditIndex = index;\r\n this._myComponentIndex = componentIndex;\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myValueTextScale);\r\n }\r\n\r\n this._myValueEditEnabled = enabled;\r\n }\r\n }\r\n\r\n _setStepEditEnabled(index, text, enabled) {\r\n if (this._isActive() || !enabled) {\r\n if (enabled) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n } else {\r\n text.pp_setScaleLocal(this._myConfig.myStepTextScale);\r\n }\r\n\r\n this._myStepEditEnabled = enabled;\r\n this._myStepIndex = index;\r\n }\r\n }\r\n\r\n _resetValue(componentIndex, index) {\r\n if (this._isActive()) {\r\n this._myTempPositionValue.pp_copy(this._myVariable._myPosition);\r\n this._myTempRotationValue.pp_copy(this._myVariable._myRotation);\r\n this._myTempScaleValue.pp_copy(this._myVariable._myScale);\r\n\r\n switch (componentIndex) {\r\n case 0:\r\n this._myTempPositionValue[index] = this._myVariable._myDefaultPosition[index];\r\n this._myUI.myPositionTextComponents[index].text = this._myTempPositionValue[index].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 1:\r\n this._myTempRotationValue[index] = this._myVariable._myDefaultRotation[index];\r\n this._myUI.myRotationTextComponents[index].text = this._myTempRotationValue[index].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n case 2:\r\n this._myTempScaleValue[index] = this._myVariable._myDefaultScale[index];\r\n this._myUI.myScaleTextComponents[index].text = this._myTempScaleValue[index].toFixed(this._myVariable._myDecimalPlaces);\r\n break;\r\n\r\n }\r\n\r\n this._myTempTransformValue.mat4_setPositionRotationDegreesScale(this._myTempPositionValue, this._myTempRotationValue, this._myTempScaleValue);\r\n this._myVariable.setValue(this._myTempTransformValue);\r\n }\r\n }\r\n\r\n _resetAllValues() {\r\n for (let i = 0; i < 3; i++) {\r\n this._resetComponentValues(i);\r\n }\r\n }\r\n\r\n _resetComponentValues(index) {\r\n for (let i = 0; i < 3; i++) {\r\n this._resetValue(index, i);\r\n }\r\n }\r\n\r\n _resetStep(index) {\r\n if (this._isActive()) {\r\n let defaultValue = 0;\r\n switch (index) {\r\n case 0:\r\n defaultValue = this._myVariable._myDefaultPositionStepPerSecond;\r\n break;\r\n case 1:\r\n defaultValue = this._myVariable._myDefaultRotationStepPerSecond;\r\n break;\r\n case 2:\r\n defaultValue = this._myVariable._myDefaultScaleStepPerSecond;\r\n break;\r\n default:\r\n defaultValue = 0;\r\n }\r\n\r\n this._changeStep(index, defaultValue);\r\n }\r\n }\r\n\r\n _changeStep(index, step) {\r\n step = Math.pp_roundDecimal(step, 10);\r\n\r\n switch (index) {\r\n case 0:\r\n this._myVariable._myPositionStepPerSecond = step;\r\n this._myUI.myPositionStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myPositionStepPerSecond);\r\n break;\r\n case 1:\r\n this._myVariable._myRotationStepPerSecond = step;\r\n this._myUI.myRotationStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myRotationStepPerSecond);\r\n break;\r\n case 2:\r\n this._myVariable._myScaleStepPerSecond = step;\r\n this._myUI.myScaleStepTextComponent.text = this._myConfig.myStepStartString.concat(this._myVariable._myScaleStepPerSecond);\r\n break;\r\n }\r\n }\r\n\r\n _genericTextHover(text) {\r\n text.pp_scaleObject(this._myConfig.myTextHoverScaleMultiplier);\r\n }\r\n\r\n _genericTextUnhover(text, originalScale) {\r\n text.pp_setScaleLocal(originalScale);\r\n }\r\n}", "import { GamepadAxesID, GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { ToolHandedness } from \"../../cauldron/tool_types.js\";\r\nimport { WidgetFrame, WidgetParams } from \"../../widget_frame/widget_frame.js\";\r\nimport { EasyTuneVariableType } from \"../easy_tune_variable_types.js\";\r\nimport { EasyTuneBaseWidgetParams } from \"./base/easy_tune_base_widget.js\";\r\nimport { EasyTuneBoolArrayWidgetSelector } from \"./bool/easy_tune_bool_array_widget_selector.js\";\r\nimport { EasyTuneWidgetConfig } from \"./easy_tune_widget_config.js\";\r\nimport { EasyTuneNoneWidget } from \"./none/easy_tune_none_widget.js\";\r\nimport { EasyTuneNumberArrayWidgetSelector } from \"./number/easy_tune_number_widget_selector.js\";\r\nimport { EasyTuneTransformWidget } from \"./transform/easy_tune_transform_widget.js\";\r\n\r\nexport class EasyTuneWidgetParams extends WidgetParams {\r\n\r\n constructor() {\r\n super();\r\n\r\n this.myShowOnStart = false;\r\n this.myShowVisibilityButton = false;\r\n this.myShowAdditionalButtons = false;\r\n this.myGamepadScrollVariableEnabled = false;\r\n\r\n this.myShowVariablesImportExportButtons = false;\r\n this.myVariablesImportCallback = null; // Signature: callback()\r\n this.myVariablesExportCallback = null; // Signature: callback()\r\n }\r\n}\r\n\r\nexport class EasyTuneWidget {\r\n\r\n constructor(engine = Globals.getMainEngine()) {\r\n this._myStarted = false;\r\n this._myStartVariable = null;\r\n\r\n this._myWidgetFrame = new WidgetFrame(\"E\", 1, engine);\r\n this._myWidgetFrame.registerWidgetVisibleChangedEventListener(this, this._widgetVisibleChanged.bind(this));\r\n\r\n this._myConfig = new EasyTuneWidgetConfig();\r\n this._myParams = null;\r\n\r\n this._myWidgets = [];\r\n\r\n this._myEasyTuneVariables = null;\r\n this._myEasyTuneLastSize = 0;\r\n this._myVariableNames = null;\r\n\r\n this._myCurrentWidget = null;\r\n this._myCurrentVariable = null;\r\n\r\n this._myScrollVariableTimer = 0;\r\n\r\n this._myGamepad = null;\r\n\r\n this._myRefreshVariablesTimer = 0;\r\n\r\n this._myDirty = false;\r\n\r\n this._myEngine = engine;\r\n\r\n this._myDestroyed = false;\r\n }\r\n\r\n setCurrentVariable(variableName) {\r\n if (!this._myStarted) {\r\n this._myStartVariable = variableName;\r\n } else if (this._myEasyTuneVariables.has(variableName)) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(variableName);\r\n this._selectCurrentWidget();\r\n } else {\r\n console.warn(\"Can't change easy tune current variable to inexistent variable:\", variableName);\r\n }\r\n }\r\n\r\n refresh() {\r\n if (this._myWidgetFrame.isVisible()) {\r\n this._myDirty = true;\r\n }\r\n }\r\n\r\n setVisible(visible) {\r\n this._myWidgetFrame.setVisible(visible);\r\n }\r\n\r\n isVisible() {\r\n return this._myWidgetFrame.isVisible();\r\n }\r\n\r\n start(parentObject, params, easyTuneVariables) {\r\n this._myRightGamepad = Globals.getRightGamepad(this._myEngine);\r\n this._myLeftGamepad = Globals.getLeftGamepad(this._myEngine);\r\n if (this._myConfig.myGamepadHandedness == ToolHandedness.RIGHT) {\r\n this._myGamepad = this._myRightGamepad;\r\n } else if (this._myConfig.myGamepadHandedness == ToolHandedness.LEFT) {\r\n this._myGamepad = this._myLeftGamepad;\r\n }\r\n\r\n this._myStarted = true;\r\n\r\n this._myParams = params;\r\n\r\n this._myWidgetFrame.start(parentObject, params);\r\n\r\n this._myEasyTuneVariables = easyTuneVariables;\r\n this._myEasyTuneLastSize = this.getValidEasyTuneVariablesLength();\r\n this._myVariableNames = this.getValidEasyTuneVariablesNames();\r\n\r\n if (this.getValidEasyTuneVariablesLength() > 0) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[0]);\r\n }\r\n\r\n if (this._myStartVariable != null) {\r\n if (this._myEasyTuneVariables.has(this._myStartVariable)) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myStartVariable);\r\n } else {\r\n console.warn(\"Can't change easy tune current variable to inexistent variable:\", this._myStartVariable);\r\n }\r\n }\r\n\r\n this._initializeWidgets();\r\n }\r\n\r\n update(dt) {\r\n this._myWidgetFrame.update(dt);\r\n\r\n if (this.getValidEasyTuneVariablesLength() != this._myEasyTuneLastSize || this._myDirty) {\r\n this._refreshEasyTuneVariables();\r\n }\r\n\r\n if (this._myWidgetFrame.isVisible() && this.getValidEasyTuneVariablesLength() > 0) {\r\n if (this._myConfig.myRefreshVariablesDelay != null) {\r\n this._myRefreshVariablesTimer += dt;\r\n if (this._myRefreshVariablesTimer > this._myConfig.myRefreshVariablesDelay) {\r\n this._myRefreshVariablesTimer = 0;\r\n this._refreshEasyTuneVariables();\r\n }\r\n }\r\n\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.update(dt);\r\n }\r\n\r\n if (this._myParams.myGamepadScrollVariableEnabled) {\r\n this._updateGamepadScrollVariable(dt);\r\n }\r\n }\r\n\r\n this._updateGamepadWidgetVisibility();\r\n\r\n this._updateWidgetCurrentVariable();\r\n }\r\n\r\n _initializeWidgets() {\r\n let widgetParams = new EasyTuneBaseWidgetParams();\r\n widgetParams.myVariablesImportCallback = this._importVariables.bind(this);\r\n widgetParams.myVariablesExportCallback = this._exportVariables.bind(this);\r\n\r\n this._myWidgets[EasyTuneVariableType.NONE] = new EasyTuneNoneWidget(widgetParams, this._myEngine);\r\n this._myWidgets[EasyTuneVariableType.NUMBER] = new EasyTuneNumberArrayWidgetSelector(widgetParams, this._myGamepad, this._myEngine);\r\n this._myWidgets[EasyTuneVariableType.BOOL] = new EasyTuneBoolArrayWidgetSelector(widgetParams, this._myGamepad, this._myEngine);\r\n this._myWidgets[EasyTuneVariableType.TRANSFORM] = new EasyTuneTransformWidget(widgetParams, this._myGamepad, this._myEngine);\r\n\r\n for (let widget of this._myWidgets) {\r\n if (widget != null) {\r\n widget.start(this._myWidgetFrame.getWidgetObject(), this._myParams);\r\n widget.setVisible(false);\r\n widget.registerScrollVariableRequestEventListener(this, this._scrollVariable.bind(this));\r\n }\r\n }\r\n\r\n this._selectCurrentWidget();\r\n }\r\n\r\n _selectCurrentWidget() {\r\n if (this.getValidEasyTuneVariablesLength() <= 0) {\r\n return;\r\n } else if (this._myCurrentVariable == null) {\r\n this._myVariableNames = this.getValidEasyTuneVariablesNames();\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[0]);\r\n }\r\n\r\n let prevWidget = null;\r\n if (this._myCurrentWidget != null) {\r\n prevWidget = this._myCurrentWidget.getWidget();\r\n }\r\n\r\n if (this._myCurrentVariable.getType() in this._myWidgets) {\r\n this._myCurrentWidget = this._myWidgets[this._myCurrentVariable.getType()];\r\n } else {\r\n this._myCurrentWidget = this._myWidgets[EasyTuneVariableType.NONE];\r\n }\r\n\r\n this._myCurrentWidget.setEasyTuneVariable(this._myCurrentVariable, this._createIndexString());\r\n this._myCurrentWidget.getWidget().syncWidget(prevWidget);\r\n\r\n if (prevWidget != null) {\r\n prevWidget.setVisible(false);\r\n }\r\n\r\n this._myCurrentWidget.setVisible(this._myWidgetFrame.isVisible());\r\n }\r\n\r\n _refreshEasyTuneVariables() {\r\n this._myVariableNames = this.getValidEasyTuneVariablesNames();\r\n this._myEasyTuneLastSize = this.getValidEasyTuneVariablesLength();\r\n\r\n if (this.getValidEasyTuneVariablesLength() > 0) {\r\n if (this._myCurrentVariable && this._myVariableNames.pp_hasEqual(this._myCurrentVariable.getName())) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myCurrentVariable.getName());\r\n } else {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[0]);\r\n }\r\n\r\n this._selectCurrentWidget();\r\n } else {\r\n this._myCurrentVariable = null;\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.setVisible(false);\r\n this._myCurrentWidget = null;\r\n }\r\n }\r\n\r\n this._myDirty = false;\r\n }\r\n\r\n _updateGamepadWidgetVisibility() {\r\n if (this._myGamepad) {\r\n if ((this._myGamepad.getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressStart() && this._myGamepad.getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (this._myGamepad.getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && this._myGamepad.getButtonInfo(GamepadButtonID.BOTTOM_BUTTON).isPressed())) {\r\n this._toggleVisibility();\r\n }\r\n }\r\n }\r\n\r\n _toggleVisibility() {\r\n this._myWidgetFrame.toggleVisibility();\r\n }\r\n\r\n _widgetVisibleChanged(visible) {\r\n for (let widget of this._myWidgets) {\r\n if (widget != null) {\r\n widget.setVisible(false);\r\n }\r\n }\r\n\r\n if (this._myCurrentWidget) {\r\n if (this.getValidEasyTuneVariablesLength() > 0) {\r\n this._myCurrentWidget.setVisible(visible);\r\n } else {\r\n this._myCurrentWidget.setVisible(false);\r\n }\r\n }\r\n\r\n if (visible) {\r\n this._refreshEasyTuneVariables();\r\n }\r\n }\r\n\r\n _updateGamepadScrollVariable(dt) {\r\n if (this._myGamepad && (!this._myConfig.myScrollVariableButtonID || this._myGamepad.getButtonInfo(this._myConfig.myScrollVariableButtonID).isPressed())) {\r\n let x = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[0];\r\n let y = this._myGamepad.getAxesInfo(GamepadAxesID.THUMBSTICK).myAxes[1];\r\n if (Math.abs(x) > this._myConfig.myScrollVariableMinXThreshold && Math.abs(y) < this._myConfig.myScrollVariableMaxYThreshold) {\r\n this._myScrollVariableTimer += dt;\r\n while (this._myScrollVariableTimer > this._myConfig.myScrollVariableDelay) {\r\n this._myScrollVariableTimer -= this._myConfig.myScrollVariableDelay;\r\n this._scrollVariable(Math.sign(x));\r\n }\r\n } else {\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n }\r\n } else {\r\n this._myScrollVariableTimer = this._myConfig.myScrollVariableDelay;\r\n }\r\n }\r\n\r\n _scrollVariable(amount) {\r\n if (this.getValidEasyTuneVariablesLength() <= 0) {\r\n return;\r\n }\r\n\r\n let variableIndex = this._getVariableIndex(this._myCurrentVariable);\r\n if (variableIndex >= 0) {\r\n // Manage negative numbers\r\n let newIndex = (((variableIndex + amount) % this._myVariableNames.length) + this._myVariableNames.length) % this._myVariableNames.length;\r\n if (this._myEasyTuneVariables.has(this._myVariableNames[newIndex])) {\r\n this._myCurrentVariable = this._myEasyTuneVariables.getEasyTuneVariable(this._myVariableNames[newIndex]);\r\n this._selectCurrentWidget();\r\n } else {\r\n this._refreshEasyTuneVariables();\r\n }\r\n } else {\r\n this._refreshEasyTuneVariables();\r\n }\r\n }\r\n\r\n _createIndexString() {\r\n let indexString = \" (\";\r\n let index = (this._getVariableIndex(this._myCurrentVariable) + 1).toString();\r\n let length = (this.getValidEasyTuneVariablesLength()).toString();\r\n while (index.length < length.length) {\r\n index = \"0\".concat(index);\r\n }\r\n\r\n indexString = indexString.concat(index).concat(\" - \").concat(length).concat(\")\");\r\n\r\n return indexString;\r\n }\r\n\r\n _getVariableIndex(variable) {\r\n let variableIndex = this._myVariableNames.indexOf(variable.getName());\r\n return variableIndex;\r\n }\r\n\r\n _updateWidgetCurrentVariable() {\r\n for (let variable of this._myEasyTuneVariables.getEasyTuneVariablesList()) {\r\n variable.setWidgetCurrentVariable(false);\r\n }\r\n\r\n if (this._myWidgetFrame.isVisible() && this._myCurrentVariable) {\r\n this._myCurrentVariable.setWidgetCurrentVariable(true);\r\n }\r\n }\r\n\r\n _importVariables() {\r\n this._myParams.myVariablesImportCallback(this._onImportSuccess.bind(this), this._onImportFailure.bind(this));\r\n }\r\n\r\n _exportVariables() {\r\n this._myParams.myVariablesExportCallback(this._onExportSuccess.bind(this), this._onExportFailure.bind(this));\r\n }\r\n\r\n _onImportSuccess() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onImportSuccess();\r\n }\r\n }\r\n\r\n _onImportFailure() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onImportFailure();\r\n }\r\n }\r\n\r\n _onExportSuccess() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onExportSuccess();\r\n }\r\n }\r\n\r\n _onExportFailure() {\r\n if (this._myCurrentWidget) {\r\n this._myCurrentWidget.onExportFailure();\r\n }\r\n }\r\n\r\n destroy() {\r\n this._myDestroyed = true;\r\n\r\n for (let widget of this._myWidgets) {\r\n widget.destroy();\r\n }\r\n\r\n this._myWidgetFrame.destroy();\r\n }\r\n\r\n isDestroyed() {\r\n return this._myDestroyed;\r\n }\r\n\r\n\r\n getValidEasyTuneVariablesLength() {\r\n return this.getValidEasyTuneVariablesNames().length;\r\n }\r\n\r\n getValidEasyTuneVariablesNames() {\r\n let names = this._myEasyTuneVariables.getEasyTuneVariablesNames();\r\n\r\n let validNames = [];\r\n for (let name of names) {\r\n let variable = this._myEasyTuneVariables.getEasyTuneVariable(name);\r\n if (variable.isShownOnWidget()) {\r\n validNames.push(name);\r\n }\r\n }\r\n\r\n return validNames;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { EasyTuneUtils } from \"../easy_tune_utils.js\";\r\n\r\nexport class EasyTuneImportVariablesComponent extends Component {\r\n static TypeName = \"pp-easy-tune-import-variables\";\r\n static Properties = {\r\n _myVariablesImportURL: Property.string(\"\"),\r\n _myResetVariablesDefaultValueOnImport: Property.bool(true)\r\n };\r\n\r\n start() {\r\n this._myFirstUpdate = true;\r\n }\r\n\r\n update(dt) {\r\n if (this._myFirstUpdate) {\r\n this._myFirstUpdate = false;\r\n EasyTuneUtils.importVariables(this._myVariablesImportURL, this._myResetVariablesDefaultValueOnImport, false, undefined, undefined, this.engine);\r\n }\r\n }\r\n}", "import { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"../easy_tune_utils.js\";\r\n\r\nexport class EasyObjectTuner {\r\n\r\n constructor(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine = Globals.getMainEngine()) {\r\n this._myObject = object;\r\n this._myUseTuneTarget = useTuneTarget;\r\n this._mySetAsWidgetCurrentVariable = setAsWidgetCurrentVariable;\r\n\r\n this._myEasyObject = this._myObject;\r\n if (this._myUseTuneTarget) {\r\n this._myEasyObject = Globals.getEasyTuneTarget(engine);\r\n }\r\n this._myPrevEasyObject = null;\r\n\r\n let variableNamePrefix = this._getVariableNamePrefix();\r\n\r\n if (variableName == \"\") {\r\n let objectName = this._myObject.pp_getName();\r\n if (objectName != \"\") {\r\n this._myEasyTuneVariableName = variableNamePrefix.concat(objectName);\r\n } else {\r\n this._myEasyTuneVariableName = variableNamePrefix.concat(this._myObject.pp_getID());\r\n }\r\n } else {\r\n this._myEasyTuneVariableName = variableNamePrefix.concat(variableName);\r\n }\r\n\r\n this._myEngine = engine;\r\n }\r\n\r\n start() {\r\n let easyTuneVariable = this._createEasyTuneVariable(this._myEasyTuneVariableName);\r\n\r\n Globals.getEasyTuneVariables(this._myEngine).add(easyTuneVariable);\r\n if (this._mySetAsWidgetCurrentVariable) {\r\n EasyTuneUtils.setWidgetCurrentVariable(this._myEasyTuneVariableName, this._myEngine);\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.getEasyTuneVariables(this._myEngine).isWidgetCurrentVariable(this._myEasyTuneVariableName)) {\r\n if (this._myUseTuneTarget) {\r\n this._myEasyObject = Globals.getEasyTuneTarget(this._myEngine);\r\n }\r\n\r\n if (this._myPrevEasyObject != this._myEasyObject) {\r\n this._myPrevEasyObject = this._myEasyObject;\r\n if (this._myEasyObject) {\r\n let value = this._getObjectValue(this._myEasyObject);\r\n Globals.getEasyTuneVariables(this._myEngine).set(this._myEasyTuneVariableName, value, true);\r\n } else {\r\n let value = this._getDefaultValue();\r\n Globals.getEasyTuneVariables(this._myEngine).set(this._myEasyTuneVariableName, value, true);\r\n }\r\n }\r\n\r\n if (this._myEasyObject) {\r\n this._updateObjectValue(this._myEasyObject, Globals.getEasyTuneVariables(this._myEngine).get(this._myEasyTuneVariableName));\r\n }\r\n }\r\n }\r\n}", "import { LightComponent } from \"@wonderlandengine/api\";\r\nimport { EasyTuneNumber } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyLightAttenuation extends EasyObjectTuner {\r\n\r\n constructor(object, variableName, setAsWidgetCurrentVariable, useTuneTarget) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget);\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = \"Light Attenuation \";\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneNumber(variableName, this._getDefaultValue(), null, true, 3, 0.01, 0, 1, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let attenuation = this._getLightAttenuation(object);\r\n return attenuation;\r\n }\r\n\r\n _getDefaultValue() {\r\n return 0;\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let attenuation = value;\r\n\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light) {\r\n light.color[3] = attenuation;\r\n }\r\n }\r\n\r\n _getLightAttenuation(object) {\r\n let attenuation = this._getDefaultValue();\r\n\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light) {\r\n attenuation = light.color[3];\r\n }\r\n\r\n return attenuation;\r\n }\r\n}", "import { LightComponent } from \"@wonderlandengine/api\";\r\nimport { ColorUtils } from \"../../../cauldron/utils/color_utils.js\";\r\nimport { GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneIntArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyLightColor extends EasyObjectTuner {\r\n\r\n constructor(colorModel, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myColorModel = colorModel;\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Light RGB \";\r\n } else {\r\n nameFirstPart = \"Light HSV \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneIntArray(variableName, this._getDefaultValue(), null, true, 100, 0, 255, false, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let color = null;\r\n\r\n let lightColor = this._getLightColor(object);\r\n if (lightColor) {\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbCodeToHuman(lightColor);\r\n } else {\r\n color = ColorUtils.hsvCodeToHuman(ColorUtils.rgbToHSV(lightColor));\r\n }\r\n } else {\r\n color = this._getDefaultValue();\r\n }\r\n\r\n return color;\r\n }\r\n\r\n _getDefaultValue() {\r\n return vec3_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let color = value;\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbHumanToCode(color);\r\n } else {\r\n color = ColorUtils.hsvToRGB(ColorUtils.hsvHumanToCode(color));\r\n }\r\n\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light != null) {\r\n light.color[0] = color[0];\r\n light.color[1] = color[1];\r\n light.color[2] = color[2];\r\n }\r\n\r\n if ((Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed())) {\r\n\r\n let hsvColor = ColorUtils.color1To255(ColorUtils.rgbToHSV(color));\r\n let rgbColor = ColorUtils.color1To255(color);\r\n\r\n console.log(\"RGB:\", rgbColor.vec_toString(0), \"- HSV:\", hsvColor.vec_toString(0));\r\n }\r\n }\r\n\r\n _getLightColor(object) {\r\n let color = null;\r\n let light = object.pp_getComponent(LightComponent);\r\n if (light) {\r\n color = light.color.slice(0, 3);\r\n }\r\n\r\n return color;\r\n }\r\n}", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { ColorUtils } from \"../../../cauldron/utils/color_utils.js\";\r\nimport { GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneIntArray, EasyTuneNumberArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyMeshColor extends EasyObjectTuner {\r\n\r\n constructor(colorModel, colorType, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myColorModel = colorModel;\r\n this._myColorType = colorType;\r\n this._myColorVariableNames = [\"color\", \"diffuseColor\", \"ambientColor\", \"specularColor\", \"emissiveColor\", \"fogColor\", \"ambientFactor\",];\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Mesh RGB \";\r\n } else {\r\n nameFirstPart = \"Mesh HSV \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n if (this._myColorType == 6) {\r\n return new EasyTuneNumberArray(variableName, this._getDefaultValue(), null, true, 3, 0.1, 0, 1, false, undefined, this._myEngine);\r\n }\r\n return new EasyTuneIntArray(variableName, this._getDefaultValue(), null, true, 100, 0, 255, false, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let color = null;\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n if (this._myColorType != 6) {\r\n color = meshMaterial[this._myColorVariableNames[this._myColorType]].pp_clone();\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbCodeToHuman(color);\r\n } else {\r\n color = ColorUtils.hsvCodeToHuman(ColorUtils.rgbToHSV(color));\r\n }\r\n } else {\r\n color = [meshMaterial[this._myColorVariableNames[this._myColorType]]];\r\n }\r\n } else {\r\n color = this._getDefaultValue();\r\n }\r\n\r\n return color;\r\n }\r\n\r\n _getDefaultValue() {\r\n if (this._myColorType == 6) {\r\n return [0];\r\n }\r\n\r\n return vec4_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let color = value;\r\n\r\n if (this._myColorType != 6) {\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbHumanToCode(color);\r\n } else {\r\n color = ColorUtils.hsvToRGB(ColorUtils.hsvHumanToCode(color));\r\n }\r\n }\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n meshMaterial[this._myColorVariableNames[this._myColorType]] = color;\r\n }\r\n\r\n if (this._myColorType != 6) {\r\n if ((Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed())) {\r\n\r\n let hsvColor = ColorUtils.color1To255(ColorUtils.rgbToHSV(color));\r\n let rgbColor = ColorUtils.color1To255(color);\r\n\r\n console.log(\"RGB:\", rgbColor.vec_toString(0), \"- HSV:\", hsvColor.vec_toString(0));\r\n }\r\n }\r\n }\r\n\r\n _getMeshMaterial(object) {\r\n let material = null;\r\n let mesh = object.pp_getComponent(MeshComponent);\r\n if (mesh) {\r\n material = mesh.material;\r\n }\r\n\r\n return material;\r\n }\r\n}", "import { vec3_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneNumberArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyScale extends EasyObjectTuner {\r\n\r\n constructor(local, scaleAsOne, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myLocal = local;\r\n this._myScaleAsOne = scaleAsOne;\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n return \"Scale \";\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneNumberArray(variableName, this._getDefaultValue(), null, true, 3, 1, 0.001, null, this._myScaleAsOne, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n return this._myLocal ? object.pp_getScaleLocal() : object.pp_getScale();\r\n }\r\n\r\n _getDefaultValue() {\r\n return vec3_create(1, 1, 1);\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n if (this._myLocal) {\r\n object.pp_setScaleLocal(value);\r\n } else {\r\n object.pp_setScale(value);\r\n }\r\n }\r\n}", "import { mat4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { EasyTuneTransform } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyTransform extends EasyObjectTuner {\r\n\r\n constructor(local, scaleAsOne, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myLocal = local;\r\n this._myScaleAsOne = scaleAsOne;\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n return \"Transform \";\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneTransform(variableName, this._getDefaultValue(), null, true, this._myScaleAsOne, 3, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n return this._myLocal ? object.pp_getTransformLocal() : object.pp_getTransform();\r\n }\r\n\r\n _getDefaultValue() {\r\n return mat4_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n if (this._myLocal) {\r\n object.pp_setTransformLocal(value);\r\n } else {\r\n object.pp_setTransform(value);\r\n }\r\n }\r\n}", "import { MeshComponent } from \"@wonderlandengine/api\";\r\nimport { EasyTuneNumber } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyMeshAmbientFactor extends EasyObjectTuner {\r\n\r\n constructor(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Mesh AF \";\r\n } else {\r\n nameFirstPart = \"Mesh AF \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneNumber(variableName, this._getDefaultValue(), null, true, 3, 0.1, 0, 1, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let ambientFactor = null;\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n ambientFactor = meshMaterial.ambientFactor;\r\n } else {\r\n ambientFactor = this._getDefaultValue();\r\n }\r\n\r\n return ambientFactor;\r\n }\r\n\r\n _getDefaultValue() {\r\n return 0;\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let ambientFactor = value;\r\n\r\n let meshMaterial = this._getMeshMaterial(object);\r\n if (meshMaterial) {\r\n meshMaterial.ambientFactor = ambientFactor;\r\n }\r\n }\r\n\r\n _getMeshMaterial(object) {\r\n let material = null;\r\n let mesh = object.pp_getComponent(MeshComponent);\r\n if (mesh) {\r\n material = mesh.material;\r\n }\r\n\r\n return material;\r\n }\r\n}", "import { TextComponent } from \"@wonderlandengine/api\";\r\nimport { ColorUtils } from \"../../../cauldron/utils/color_utils.js\";\r\nimport { GamepadButtonID } from \"../../../input/gamepad/gamepad_buttons.js\";\r\nimport { vec4_create } from \"../../../plugin/js/extensions/array/vec_create_extension.js\";\r\nimport { Globals } from \"../../../pp/globals.js\";\r\nimport { EasyTuneIntArray } from \"../easy_tune_variable_types.js\";\r\nimport { EasyObjectTuner } from \"./easy_object_tuner.js\";\r\n\r\nexport class EasyTextColor extends EasyObjectTuner {\r\n\r\n constructor(colorModel, colorType, object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine) {\r\n super(object, variableName, setAsWidgetCurrentVariable, useTuneTarget, engine);\r\n this._myColorModel = colorModel;\r\n this._myColorType = colorType;\r\n this._myColorVariableNames = [\"color\", \"effectColor\"];\r\n }\r\n\r\n _getVariableNamePrefix() {\r\n let nameFirstPart = null;\r\n\r\n if (this._myColorModel == 0) {\r\n nameFirstPart = \"Text RGB \";\r\n } else {\r\n nameFirstPart = \"Text HSV \";\r\n }\r\n\r\n return nameFirstPart;\r\n }\r\n\r\n _createEasyTuneVariable(variableName) {\r\n return new EasyTuneIntArray(variableName, this._getDefaultValue(), null, true, 100, 0, 255, false, undefined, this._myEngine);\r\n }\r\n\r\n _getObjectValue(object) {\r\n let color = null;\r\n\r\n let textMaterial = this._getTextMaterial(object);\r\n if (textMaterial) {\r\n color = textMaterial[this._myColorVariableNames[this._myColorType]].pp_clone();\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbCodeToHuman(color);\r\n } else {\r\n color = ColorUtils.hsvCodeToHuman(ColorUtils.rgbToHSV(color));\r\n }\r\n } else {\r\n color = this._getDefaultValue();\r\n }\r\n\r\n return color;\r\n }\r\n\r\n _getDefaultValue() {\r\n return vec4_create();\r\n }\r\n\r\n _updateObjectValue(object, value) {\r\n let color = value;\r\n\r\n if (this._myColorModel == 0) {\r\n color = ColorUtils.rgbHumanToCode(color);\r\n } else {\r\n color = ColorUtils.hsvToRGB(ColorUtils.hsvHumanToCode(color));\r\n }\r\n\r\n let textMaterial = this._getTextMaterial(object);\r\n if (textMaterial) {\r\n textMaterial[this._myColorVariableNames[this._myColorType]] = color;\r\n }\r\n\r\n if ((Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed()) ||\r\n (Globals.getLeftGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressStart() && Globals.getRightGamepad(this._myEngine).getButtonInfo(GamepadButtonID.TOP_BUTTON).isPressed())) {\r\n\r\n let hsvColor = ColorUtils.color1To255(ColorUtils.rgbToHSV(color));\r\n let rgbColor = ColorUtils.color1To255(color);\r\n\r\n console.log(\"RGB:\", rgbColor.vec_toString(0), \"- HSV:\", hsvColor.vec_toString(0));\r\n }\r\n }\r\n\r\n _getTextMaterial(object) {\r\n let material = null;\r\n let text = object.pp_getComponent(TextComponent);\r\n if (text) {\r\n material = text.material;\r\n }\r\n\r\n return material;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyLightAttenuation } from \"../easy_light_attenuation.js\";\r\n\r\nexport class EasyLightAttenuationComponent extends Component {\r\n static TypeName = \"pp-easy-light-attenuation\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyLightAttenuation(this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyLightColor } from \"../easy_light_color.js\";\r\n\r\nexport class EasyLightColorComponent extends Component {\r\n static TypeName = \"pp-easy-light-color\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myColorModel: Property.enum([\"RGB\", \"HSV\"], \"HSV\")\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyLightColor(this._myColorModel, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyMeshAmbientFactor } from \"../easy_mesh_ambient_factor.js\";\r\n\r\nexport class EasyMeshAmbientFactorComponent extends Component {\r\n static TypeName = \"pp-easy-mesh-ambient-factor\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _myUseTuneTarget: Property.bool(false),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false)\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyMeshAmbientFactor(this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyMeshColor } from \"../easy_mesh_color.js\";\r\n\r\nexport class EasyMeshColorComponent extends Component {\r\n static TypeName = \"pp-easy-mesh-color\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _myUseTuneTarget: Property.bool(false),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myColorModel: Property.enum([\"RGB\", \"HSV\"], \"HSV\"),\r\n _myColorType: Property.enum([\"Color\", \"Diffuse Color\", \"Ambient Color\", \"Specular Color\", \"Emissive Color\", \"Fog Color\", \"Ambient Factor\"], \"Color\"),\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyMeshColor(this._myColorModel, this._myColorType, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyScale } from \"../easy_scale.js\";\r\n\r\nexport class EasyScaleComponent extends Component {\r\n static TypeName = \"pp-easy-scale\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myLocal: Property.bool(false),\r\n _myScaleAsOne: Property.bool(true) // Edit all scale values together\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyScale(this._myLocal, this._myScaleAsOne, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTuneUtils } from \"../../easy_tune_utils.js\";\r\nimport { EasyTuneInt } from \"../../easy_tune_variable_types.js\";\r\n\r\nexport class EasySetTuneTargetChildNumberComponent extends Component {\r\n static TypeName = \"pp-easy-set-tune-target-child-number\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n };\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyTuneVariableName = \"Target Child \";\r\n\r\n if (this._myVariableName == \"\") {\r\n this._myEasyTuneVariableName = this._myEasyTuneVariableName.concat(this.object.pp_getID());\r\n } else {\r\n this._myEasyTuneVariableName = this._myEasyTuneVariableName.concat(this._myVariableName);\r\n }\r\n\r\n let childrenCount = this.object.pp_getChildren().length;\r\n let min = 1;\r\n let max = childrenCount;\r\n if (childrenCount == 0) {\r\n min = 0;\r\n max = 0;\r\n }\r\n\r\n Globals.getEasyTuneVariables(this.engine).add(new EasyTuneInt(this._myEasyTuneVariableName, 0, null, true, 10, min, max, undefined, this.engine));\r\n if (this._mySetAsWidgetCurrentVariable) {\r\n EasyTuneUtils.setWidgetCurrentVariable(this._myEasyTuneVariableName, this.engine);\r\n }\r\n\r\n this._myCurrentChildIndex = -1;\r\n this._myCurrentChildrenCount = childrenCount;\r\n\r\n this._myEasyTuneTarget = null;\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (Globals.getEasyTuneVariables(this.engine).isWidgetCurrentVariable(this._myEasyTuneVariableName)) {\r\n let childrenCount = this.object.pp_getChildren().length;\r\n if (childrenCount != this._myCurrentChildrenCount) {\r\n this._myCurrentChildrenCount = childrenCount;\r\n\r\n let min = 1;\r\n let max = childrenCount;\r\n if (childrenCount == 0) {\r\n min = 0;\r\n max = 0;\r\n }\r\n\r\n let easyTuneVariable = Globals.getEasyTuneVariables(this.engine).getEasyTuneVariable(this._myEasyTuneVariableName);\r\n easyTuneVariable.setMin(min);\r\n easyTuneVariable.setMax(max);\r\n }\r\n\r\n let childIndex = Globals.getEasyTuneVariables(this.engine).get(this._myEasyTuneVariableName);\r\n if (childIndex != this._myCurrentChildIndex) {\r\n if (childIndex == 0 && this._myCurrentChildIndex != -1) {\r\n if (Globals.getEasyTuneTarget(this.engine) == this._myEasyTuneTarget) {\r\n Globals.removeEasyTuneTarget(this.engine);\r\n }\r\n this._myEasyTuneTarget = null;\r\n } else if (childIndex > 0) {\r\n this._myEasyTuneTarget = this.object.pp_getChildren()[childIndex - 1];\r\n Globals.setEasyTuneTarget(this._myEasyTuneTarget, this.engine);\r\n }\r\n\r\n this._myCurrentChildIndex = childIndex;\r\n }\r\n }\r\n }\r\n }\r\n}", "import { Component } from \"@wonderlandengine/api\";\r\nimport { GrabberHandComponent } from \"../../../../gameplay/grab_throw/grabber_hand_component.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\n\r\nexport class EasySetTuneTargeetGrabComponent extends Component {\r\n static TypeName = \"pp-easy-set-tune-target-grab\";\r\n static Properties = {};\r\n\r\n start() {\r\n this._myGrabber = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myGrabber = this.object.pp_getComponent(GrabberHandComponent);\r\n this._myEasyTuneTarget = null;\r\n }\r\n }\r\n\r\n _onRelease(grabber, grabbable) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyTuneTarget = grabbable.object;\r\n Globals.setEasyTuneTarget(this._myEasyTuneTarget, this.engine);\r\n }\r\n }\r\n\r\n _onGrab(grabber, grabbable) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (Globals.getEasyTuneTarget(this.engine) == this._myEasyTuneTarget) {\r\n Globals.removeEasyTuneTarget(this.engine);\r\n }\r\n this._myEasyTuneTarget = null;\r\n }\r\n }\r\n\r\n onActivate() {\r\n if (this._myGrabber != null) {\r\n //this._myGrabber.registerGrabEventListener(this, this._onGrab.bind(this));\r\n this._myGrabber.registerThrowEventListener(this, this._onRelease.bind(this));\r\n }\r\n }\r\n\r\n onDeactivate() {\r\n if (this._myGrabber != null) {\r\n //this._myGrabber.unregisterGrabEventListener(this);\r\n this._myGrabber.unregisterThrowEventListener(this);\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTextColor } from \"../easy_text_color.js\";\r\n\r\nexport class EasyTextColorComponent extends Component {\r\n static TypeName = \"pp-easy-text-color\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myColorModel: Property.enum([\"RGB\", \"HSV\"], \"HSV\"),\r\n _myColorType: Property.enum([\"Color\", \"Effect Color\"], \"Color\")\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyTextColor(this._myColorModel, this._myColorType, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n}", "import { Component, Property } from \"@wonderlandengine/api\";\r\nimport { ComponentUtils } from \"../../../../cauldron/wl/utils/component_utils.js\";\r\nimport { Globals } from \"../../../../pp/globals.js\";\r\nimport { EasyTransform } from \"../easy_transform.js\";\r\n\r\nexport class EasyTransformComponent extends Component {\r\n static TypeName = \"pp-easy-transform\";\r\n static Properties = {\r\n _myVariableName: Property.string(\"\"),\r\n _mySetAsWidgetCurrentVariable: Property.bool(false),\r\n _myUseTuneTarget: Property.bool(false),\r\n _myLocal: Property.bool(true),\r\n _myScaleAsOne: Property.bool(true) // Edit all scale values together\r\n };\r\n\r\n init() {\r\n this._myEasyObjectTuner = null;\r\n\r\n if (Globals.isToolEnabled(this.engine)) {\r\n this._myEasyObjectTuner = new EasyTransform(this._myLocal, this._myScaleAsOne, this.object, this._myVariableName, this._mySetAsWidgetCurrentVariable, this._myUseTuneTarget);\r\n }\r\n }\r\n\r\n start() {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.start();\r\n }\r\n }\r\n }\r\n\r\n update(dt) {\r\n if (Globals.isToolEnabled(this.engine)) {\r\n if (this._myEasyObjectTuner != null) {\r\n this._myEasyObjectTuner.update(dt);\r\n }\r\n }\r\n }\r\n\r\n pp_clone(targetObject) {\r\n let clonedComponent = ComponentUtils.cloneDefault(this, targetObject);\r\n\r\n return clonedComponent;\r\n }\r\n}"], + "mappings": "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,GAAG;AACnB,kBAAU,CAAC,IAAI,CAAC,UAAU,CAAC;MAC/B,WAAW,UAAU,CAAC,KAAK,GAAG;AAC1B,kBAAU,CAAC,IAAI,CAAC,UAAU,CAAC;MAC/B,WAAW,UAAU,CAAC,KAAK,GAAG;AAC1B,kBAAU,CAAC,IAAI,CAAC,UAAU,CAAC;MAC/B;IACJ;AAEA,cAAU,MAAM,WAAW,QAAQ,GAAG;AAEtC,WAAO;EACX;AACJ,EAAC;AAEM,IAAI,YAAY;EACnB,QAAA5D;EACA,KAAAC;EACA,WAAAC;EACA,MAAAC;EACA,OAAAC;EACA;EACA;EACA;EACA;EACA,QAAAK;EACA,QAAAD;EACA,eAAAF;EACA;EACA;EACA;EACA;EACA,KAAAI;EACA;EACA,OAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAAI;EACA,WAAAC;EACA,QAAAC;EACA;EACA;EACA,cAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAAY;EACA,mBAAAC;EACA,mBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAAiB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAAS;EACA,aAAAC;EACA;;;;AHx6BE,SAAUE,QAAO,GAAG,GAAG,GAAG,GAAC;AAC7B,MAAI,MAAM,QAAQ,OAAM;AAExB,MAAI,KAAK,MAAM;AACX,cAAU,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC;EACjC;AAEA,SAAO;AACX;AAEM,SAAUC,KAAI,MAAM,GAAG,GAAG,GAAG,GAAC;AAChC,MAAI,KAAK,MAAM;AACX,YAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;EAChC,OAAO;AACH,YA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,cAAc;EACvB,aAAAjJ;EACA;EACA;EACA,aAAAC;EACA,oBAAAC;EACA,oBAAAC;EACA;EACA,iBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAAK;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAAK;EACA;EACA;EACA,YAAAC;EACA;EACA;EACA,aAAAG;EACA;EACA;EACA,OAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,UAAAG;EACA;EACA;EACA,aAAAG;EACA;EACA;EACA,aAAAC;EACA,oBAAAC;EACA,oBAAAC;EACA;EACA,iBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAAO;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,YAAAC;EACA;EACA;EACA,aAAAG;EACA;EACA;EACA,OAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,SAAAG;EACA;EACA;EACA,UAAAG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAAgB;EACA,eAAAC;EACA,eAAAC;EACA;EACA,YAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAAY;EACA,mBAAAE;EACA,mBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAAI;EACA,qBAAAC;EACA,qBAAAC;EACA;EACA,kBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAAAa;EACA,yBAAAC;EACA,yBAAAC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,iBAAAkB;EACA;EACA;EACA,OAAAG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAAG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKJ,SAAS,gBAAgB,OAAe,qBAAoD,OAAY;AACpG,MAAI,oBAAoB,IAAI,QAAQ,GAAG;AACnC,UAAM,mBAAmB,oBAAoB,IAAI,QAAQ,IAAK;AAE9D,UAAM,sBAA8C,CAAA;AACpD,eAAW,CAAC,eAAe,cAAc,KAAK,oBAAoB,QAAO,GAAI;AACzE,UAAI,iBAAiB,UAAU;AAC3B,4BAAoB,aAAa,IAAI,iBAAiB;MAC1D;IACJ;AAEA,UAAM,eAAe,kBAAkB,mBAAmB;EAC9D;AACJ;;;AFlgGA,IAAI,oBAAoB,oBAAI,QAAO;AACnC,IAAI,+BAA+B,oBAAI,QAAO;AAExC,IAAO,kBAAP,MAAsB;EAExB,cAAA;AACI,SAAK,yBAAyB;AAC9B,SAAK,oCAAoC,oBAAI,IAAG;AAChD,SAAK,6CAA6C,oBAAI,IAAG;EAC7D;;EAGA,uBAAuB,WAAS;AAC5B,SAAK,yBAAyB;EAClC;;;EAIA,sBAAsB,eAAe,WAAS;AAC1C,SAAK,kCAAkC,IAAI,eAAe,SAAS;EACvE;;;EAIA,8BAA8B,eAAe,cAAc,WAAS;AAChE,QAAI,yBAAyB;AAE7B,QAAI,CAAC,KAAK,2CAA2C,IAAI,aAAa,GAAG;AACrE,WAAK,2CAA2C,IAAI,eAAe,oBAAI,IAAG,CAAE;IAChF;AAEA,6BAAyB,KAAK,2CAA2C,IAAI,aAAa;AAE1F,2BAAuB,IAAI,cAAc,SAAS;EACtD;EAEA,qBAAqB,eAAa;AAC9B,QAAI,oBAAoB,KAAK,kCAAkC,IAAI,aAAa;AAEhF,QAAI,qBAAqB,MAAM;AAC3B,aAAO;IACX;AAEA,WAAO,KAAK;EAChB;EAEA,6BAA6B,eAAe,cAAY;AACpD,QAAI,yBAAyB,KAAK,2CAA2C,IAAI,aAAa;AAC9F,QAAI,0BAA0B,MAAM;AAChC,UAAI,oBAAoB,uBAAuB,IAAI,YAAY;AAC/D,UAAI,qBAAqB,MAAM;AAC3B,eAAO;MACX;IACJ;AAEA,WAAO,KAAK,qBAAqB,aAAa;EAClD;;AAGE,IAAO,oBAAP,MAAwB;EAE1B,cAAA;AACI,SAAK,YAAY,oBAAI,IAAG;EAC5B;EAEA,SAAS,MAAM,OAAK;AAChB,SAAK,UAAU,IAAI,MAAM,KAAK;EAClC;EAEA,YAAY,MAAI;AACZ,SAAK,UAAU,OAAO,IAAI;EAC9B;EAEA,SAAS,MAAI;AACT,SAAK,UAAU,IAAI,IAAI;EAC3B;EAEA,SAAS,MAAI;AACT,SAAK,UAAU,IAAI,IAAI;EAC3B;;AAGE,SAAU,cAAc,aAAW;AACrC,SAAO,eAAe,oBAAoB,WAAW,KAAK,eAAe,wBAAwB,WAAW;AAChH;AAEM,SAAU,oBAAoB,aAAW;AAC3C,MAAI,WAAW;AAEf,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAE5D,MAAI,eAAe,0BAAyB,EAAG,SAAS,IAAI,GAAG;AAC3D,eAAW;EACf;AAEA,SAAO;AACX;AAEM,SAAU,wBAAwB,aAAW;AAC/C,MAAI,eAAe;AAEnB,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAE5D,MAAI,eAAe,8BAA6B,EAAG,SAAS,IAAI,GAAG;AAC/D,mBAAe;EACnB;AAEA,SAAO;AACX;AAEM,SAAU,4BAAyB;AACrC,SAAO;AACX;AAEM,SAAU,gCAA6B;AACzC,SAAO;AACX;AAEM,SAAU,uBAAuB,aAAW;AAC9C,MAAI,eAAe;AAAM;AAEzB,MAAI,OAAO;AACX,MAAI,YAAY,YAAY,MAAM;AAC9B,WAAO,YAAY;EACvB;AAEA,SAAO;AACX;AAEM,SAAU,iBAAiB,MAAM,SAAS,QAAQ,cAAa,GAAE;AACnE,MAAI,gBAAgB;AAEpB,MAAI,eAAe,oBAAoB,IAAI,GAAG;AAC1C,QAAI,eAAe,8BAA8B,MAAM,MAAM,GAAG;AAC5D,cAAQ,MAAM;QACV,KAAK,mBAAmB;AACpB,0BAAgB;AAChB;QACJ,KAAK,mBAAmB;AACpB,0BAAgB;AAChB;QACJ,KAAK,eAAe;AAChB,0BAAgB;AAChB;QACJ,KAAK,eAAe;AAChB,0BAAgB;AAChB;QACJ,KAAKG,eAAc;AACf,0BAAgBA;AAChB;QACJ,KAAK,eAAe;AAChB,0BAAgB;AAChB;QACJ,KAAKC,eAAc;AACf,0BAAgBA;AAChB;QACJ,KAAKC,eAAc;AACf,0BAAgBA;AAChB;QACJ;AACI,0BAAgB;MACxB;IACJ;EACJ,OAAO;AACH,oBAAgB,eAAe,4BAA4B,MAAM,MAAM;EAC3E;AAEA,SAAO;AACX;AAEM,SAAU,aAAa,aAAa,SAAS,QAAQ,cAAa,GAAE;AACtE,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,SAAO,eAAe,iBAAiB,MAAM,MAAM,KAAK;AAC5D;AAEM,SAAU,gCAAgC,SAAS,QAAQ,cAAa,GAAE;AAC5E,SAAO,QAAQ,QAAQ,MAAM,EAAE;AACnC;AAEM,SAAU,4BAA4B,MAAM,SAAS,QAAQ,cAAa,GAAE;AAC9E,SAAO,eAAe,qCAAqC,MAAM,EAAE,eAAe,gCAAgC,MAAM,MAAM,CAAC;AACnI;AAEM,SAAU,qCAAqC,SAAS,QAAQ,cAAa,GAAE;AACjF,SAAO,QAAQ,QAAQ,MAAM,EAAE;AACnC;AAEM,SAAU,gCAAgC,aAAa,SAAS,QAAQ,cAAa,GAAE;AACzF,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,SAAO,eAAe,kCAAkC,MAAM,EAAE,IAAI;AACxE;AAEM,SAAU,kCAAkC,SAAS,QAAQ,cAAa,GAAE;AAC9E,SAAO,QAAQ,QAAQ,MAAM,EAAE;AACnC;AAEM,SAAU,oCAAoC,WAAW,SAAS,QAAQ,cAAa,GAAE;AAC3F,MAAI,OAAO;AAEX,MAAI,iBAAiB,eAAe,qCAAqC,MAAM,EAAE,SAAS;AAC1F,MAAI,kBAAkB,MAAM;AACxB,WAAO,eAAe;EAC1B;AAEA,SAAO;AACX;AAEM,SAAU,8BAA8B,aAAa,SAAS,QAAQ,cAAa,GAAE;AACvF,MAAI,OAAO,QAAQ,QAAQ,MAAM;AACjC,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,SAAO,KAAK,gCAAgC,KAAK,SAAS,IAAI,CAAC,KAAK;AACxE;AAEM,SAAUC,aAAY,aAAa,oBAAoB,OAAO,SAAS,QAAQ,cAAa,GAAE;AAChG,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,SAAO,qBAAqB,eAAe,iBAAiB,MAAM,MAAM,KAAK,eAAe,iBAAiB,MAAM,MAAM,GAAG,UAAU,YAAY;AACtJ;AAEM,SAAU,oBAAoB,aAAa,SAAS,QAAQ,cAAa,GAAE;AAC7E,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,SAAO,eAAe,4BAA4B,MAAM,MAAM,KAAK,eAAe,iBAAiB,MAAM,MAAM,GAAG,UAAU,uBAAuB;AACvJ;AAEM,SAAUC,QAAM,kBAAkB,cAAc,gBAAgB,mBAAmB,4BAA4B,OAAO,mCAAmC,MAAI;AAC/J,MAAI,kBAAkB;AAEtB,MAAI,gBAAgB,eAAe,iBAAiB,iBAAiB,MAAM,YAAY,UAAU,iBAAiB,MAAM,CAAC;AAEzH,MAAI,iBAAiB,MAAM;AACvB,sBAAkB,cAAc,kBAAkB,cAAc,gBAAgB,iBAAiB;EACrG,WAAW,iBAAiB,YAAY,MAAM;AAC1C,sBAAkB,iBAAiB,SAAS,cAAc,gBAAgB,iBAAiB;EAC/F,WAAW,2BAA2B;AAClC,sBAAkB,eAAe,aAAa,kBAAkB,cAAc,gCAAgC;EAClH;AAEA,SAAO;AACX;AAEM,SAAU,iBAAiB,kBAAkB,iBAAiB,gBAAgB,mBAAiB;AACjG,MAAI,2BAA2B,eAAe,4BAA4B,iBAAiB,MAAM,YAAY,UAAU,iBAAiB,MAAM,CAAC;AAE/I,MAAI,4BAA4B,MAAM;AAClC,6BAAyB,kBAAkB,iBAAiB,gBAAgB,iBAAiB;EACjG,WAAW,iBAAiB,uBAAuB,MAAM;AACrD,qBAAiB,oBAAoB,iBAAiB,gBAAgB,iBAAiB;EAC3F;AAEA,SAAO;AACX;AAEM,SAAU,aAAa,kBAAkB,cAAc,uBAAuB,MAAI;AACpF,MAAI,kBAAkB,YAAY,aAAa,cAAc,iBAAiB,MAAM,gBAAgB;AAGpG,MAAI,wBAAwB,CAAC,gBAAgB,QAAQ;AACjD,oBAAgB,SAAS;AACzB,oBAAgB,SAAS;EAC7B;AAEA,SAAO;AACX;AAEM,SAAU,iBAAiB,aAAa,UAAU,SAAS,QAAQ,cAAa,GAAE;AACpF,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAE5D,MAAI,CAAC,kBAAkB,IAAI,MAAM,GAAG;AAChC,sBAAkB,IAAI,QAAQ,oBAAI,IAAG,CAAE;EAC3C;AAEA,oBAAkB,IAAI,MAAM,EAAE,IAAI,MAAM,QAAQ;AACpD;AAEM,SAAU,oBAAoB,aAAa,SAAS,QAAQ,cAAa,GAAE;AAC7E,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAE5D,MAAI,kBAAkB,IAAI,MAAM,GAAG;AAC/B,sBAAkB,IAAI,MAAM,EAAE,OAAO,IAAI;EAC7C;AACJ;AAEM,SAAU,iBAAiB,aAAa,SAAS,QAAQ,cAAa,GAAE;AAC1E,MAAI,WAAW;AAEf,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,MAAI,kBAAkB,IAAI,MAAM,GAAG;AAC/B,eAAW,kBAAkB,IAAI,MAAM,EAAE,IAAI,IAAI;EACrD;AAEA,SAAO;AACX;AAEM,SAAU,iBAAiB,aAAa,SAAS,QAAQ,cAAa,GAAE;AAC1E,MAAI,cAAc;AAElB,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,MAAI,kBAAkB,IAAI,MAAM,GAAG;AAC/B,kBAAc,kBAAkB,IAAI,MAAM,EAAE,IAAI,IAAI;EACxD;AAEA,SAAO;AACX;AAEM,SAAU,4BAA4B,aAAa,UAAU,SAAS,QAAQ,cAAa,GAAE;AAC/F,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAE5D,MAAI,CAAC,6BAA6B,IAAI,MAAM,GAAG;AAC3C,iCAA6B,IAAI,QAAQ,oBAAI,IAAG,CAAE;EACtD;AAEA,+BAA6B,IAAI,MAAM,EAAE,IAAI,MAAM,QAAQ;AAC/D;AAEM,SAAU,+BAA+B,aAAa,SAAS,QAAQ,cAAa,GAAE;AACxF,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAE5D,MAAI,6BAA6B,IAAI,MAAM,GAAG;AAC1C,iCAA6B,IAAI,MAAM,EAAE,OAAO,IAAI;EACxD;AACJ;AAEM,SAAU,4BAA4B,aAAa,SAAS,QAAQ,cAAa,GAAE;AACrF,MAAI,WAAW;AAEf,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,MAAI,6BAA6B,IAAI,MAAM,GAAG;AAC1C,eAAW,6BAA6B,IAAI,MAAM,EAAE,IAAI,IAAI;EAChE;AAEA,SAAO;AACX;AAEM,SAAU,4BAA4B,aAAa,SAAS,QAAQ,cAAa,GAAE;AACrF,MAAI,cAAc;AAElB,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAC5D,MAAI,6BAA6B,IAAI,MAAM,GAAG;AAC1C,kBAAc,6BAA6B,IAAI,MAAM,EAAE,IAAI,IAAI;EACnE;AAEA,SAAO;AACX;AAGM,SAAU,mCAAmC,aAAW;AAC1D,MAAI,WAAW;AAEf,MAAI,OAAO,eAAe,uBAAuB,WAAW;AAE5D,UAAQ,MAAM;IACV,KAAKJ,eAAc;AACf,iBAAW,iCAAiC;AAC5C;IACJ,KAAK,mBAAmB;AACpB,iBAAW,iCAAiC;AAC5C;IACJ,KAAKC,eAAc;AACf,iBAAW,iCAAiC;AAC5C;IACJ,KAAK,eAAe;AAChB,iBAAW,iCAAiC;AAC5C;IACJ;AACI,iBAAW;EACnB;AAEA,SAAO;AACX;AAGM,SAAU,mCAAmC,aAAW;AAC1D,SAAO,eAAe,mCAAmC,WAAW,KAAK;AAC7E;AAGM,SAAU,oCAAoC,SAAS,QAAQ,cAAa,GAAE;AAChF,WAAS,cAAc,eAAe,0BAAyB,GAAI;AAC/D,QAAI,gBAAgB,eAAe,mCAAmC,UAAU;AAChF,QAAI,iBAAiB,MAAM;AACvB,qBAAe,iBAAiB,YAAY,eAAe,MAAM;IACrE;EACJ;AAEA,WAAS,kBAAkB,eAAe,8BAA6B,GAAI;AACvE,QAAI,gBAAgB,eAAe,mCAAmC,cAAc;AACpF,QAAI,iBAAiB,MAAM;AACvB,qBAAe,iBAAiB,gBAAgB,eAAe,MAAM;IACzE;EACJ;AACJ;AAEM,SAAU,uCAAuC,SAAS,QAAQ,cAAa,GAAE;AACnF,WAAS,cAAc,eAAe,0BAAyB,GAAI;AAC/D,QAAI,gBAAgB,eAAe,mCAAmC,UAAU;AAChF,QAAI,iBAAiB,MAAM;AACvB,UAAI,eAAe,iBAAiB,YAAY,MAAM,KAAK,eAAe;AACtE,uBAAe,oBAAoB,YAAY,MAAM;MACzD;IACJ;EACJ;AAEA,WAAS,kBAAkB,eAAe,0BAAyB,GAAI;AACnE,QAAI,gBAAgB,eAAe,mCAAmC,cAAc;AACpF,QAAI,iBAAiB,MAAM;AACvB,UAAI,eAAe,iBAAiB,gBAAgB,MAAM,KAAK,eAAe;AAC1E,uBAAe,oBAAoB,gBAAgB,MAAM;MAC7D;IACJ;EACJ;AACJ;AAEO,IAAI,iBAAiB;EACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,aAAAE;EACA;EACA,OAAAC;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAKJ,IAAI,4BAA4B;EAC5B,mBAAmB;EACnB,mBAAmB;EACnB,eAAe;EACf,eAAe;EACfJ,eAAc;EACd,eAAe;EACfC,eAAc;EACdC,eAAc;;AAGlB,IAAI,gCAAgC;EAChCG,iBAAgB;EAChB,OAAO;EACPC,QAAO;EACPC,cAAa;EACbC,aAAY;EACZC,uBAAsB;EACtBC,cAAa;EACbC,gBAAe;EACfC,cAAa;EACbC,iBAAgB;EAChBC,qBAAoB;EACpBC,mBAAkB;EAClBC,cAAa;EACbC,oBAAmB;EACnB,eAAe;EACfC,cAAa;EACbC,iBAAgB;EAChBC,mBAAkB;EAClBC,OAAM;EACNC,kBAAiB;EACjBC,cAAa;EACbC,oBAAmB;EACnBC,KAAI;EACJC,uBAAsB;;;;AG3epB,SAAU,oBAAoB,QAAM;AACtC,MAAI,aAAa,CAAA;AAEjB,aAAW,KAAK,MAAM;AAEtB,MAAI,cAAc,OAAO,eAAe,MAAM;AAC9C,SAAO,eAAe,MAAM;AACxB,eAAW,WAAW,YAAY,WAAW;AAC7C,kBAAc,OAAO,eAAe,WAAW;EACnD;AAEA,MAAI,oBAAoB,CAAC,MAAM;AAC/B,SAAO,kBAAkB,SAAS,GAAG;AACjC,QAAI,mBAAmB,kBAAkB,MAAK;AAC9C,QAAI,oBAAoB,MAAM;AAC1B,iBAAW,WAAW,YAAY,gBAAgB;AAElD,iBAAW,WAAW,mBAAmB,OAAO,eAAe,gBAAgB,CAAC;AAEhF,UAAI;AACA,mBAAW,WAAW,mBAAmB,iBAAiB,SAAS;MACvE,SAASC,QAAO;MAEhB;IACJ;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,uBAAuB,QAAM;AACzC,MAAI,gBAAgB,CAAA;AAEpB,MAAI,aAAa,QAAQ,oBAAoB,MAAM;AAEnD,WAAS,aAAa,YAAY;AAC9B,QAAI,aAAa,MAAM;AACnB,UAAI,mBAAmB,OAAO,oBAAoB,SAAS;AAC3D,eAAS,mBAAmB,kBAAkB;AAC1C,mBAAW,WAAW,eAAe,eAAe;MACxD;IACJ;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,4BAA4B,QAAQ,cAAY;AAC5D,MAAI,qBAAqB;AAEzB,MAAI,iBAAiB,QAAQ,2BAA2B,QAAQ,YAAY;AAE5E,MAAI,kBAAkB,MAAM;AACxB,yBAAqB,OAAO,yBAAyB,gBAAgB,YAAY;EACrF;AAEA,SAAO;AACX;AAEM,SAAU,kBAAkB,QAAQ,cAAY;AAClD,MAAIC,YAAW;AAEf,MAAI,qBAAqB,QAAQ,4BAA4B,QAAQ,YAAY;AACjF,MAAI,sBAAsB,MAAM;AAC5B,QAAI,mBAAmB,OAAO,MAAM;AAChC,MAAAA,YAAW,mBAAmB,IAAI,KAAK,MAAM,EAAC;IAClD,OAAO;AACH,MAAAA,YAAW,mBAAmB;IAClC;EACJ;AAEA,SAAOA;AACX;AAEM,SAAU,kBAAkB,YAAY,QAAQ,cAAY;AAC9D,MAAI,qBAAqB,QAAQ,4BAA4B,QAAQ,YAAY;AAEjF,MAAI,UAAU;AACd,MAAI,sBAAsB,MAAM;AAC5B,QAAI,mBAAmB,OAAO,MAAM;AAChC,gBAAU;AAEV,yBAAmB,IAAI,KAAK,MAAM,EAAE,UAAU;IAClD;EACJ;AAEA,MAAI,CAAC,SAAS;AACV,QAAI,iBAAiB,QAAQ,2BAA2B,QAAQ,YAAY;AAC5E,QAAI,kBAAkB,MAAM;AACxB,uBAAiB;IACrB;AAEA,WAAO,eAAe,gBAAgB,cAAc;MAChD,OAAO;KACV;EACL;AACJ;AAEM,SAAU,2BAA2B,QAAQ,cAAY;AAC3D,MAAI,SAAS;AAEb,MAAI,UAAU,QAAQ,4BAA4B,QAAQ,YAAY;AACtE,MAAI,QAAQ,SAAS,GAAG;AACpB,aAAS,QAAQ,CAAC;EACtB;AAEA,SAAO;AACX;AAEM,SAAU,4BAA4B,QAAQ,cAAY;AAC5D,MAAI,UAAU,CAAA;AAEd,MAAI,kBAAkB,QAAQ,oBAAoB,MAAM;AAExD,WAAS,kBAAkB,iBAAiB;AACxC,QAAI,gBAAgB,OAAO,oBAAoB,cAAc;AAC7D,QAAI,WAAW,SAAS,eAAe,YAAY,GAAG;AAClD,cAAQ,KAAK,cAAc;IAC/B;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,kBAAkB,MAAM,kBAAkB,QAAM;AAC5D,MAAI,SAAS;AAEb,MAAI,aAAa,QAAQ,sBAAsB,IAAI;AACnD,MAAI,cAAc,MAAM;AACpB,aAAS,QAAQ,kBAAkB,QAAQ,wBAAwB,MAAM,eAAe,GAAG,UAAU;EACzG;AAEA,SAAO;AACX;AAEM,SAAU,sBAAsB,MAAI;AACtC,MAAI,aAAa;AAEjB,MAAI,QAAQ,MAAM;AACd,QAAI,YAAY,KAAK,MAAM,GAAG;AAC9B,QAAI,UAAU,SAAS,GAAG;AACtB,mBAAa,UAAU,UAAU,SAAS,CAAC;IAC/C;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,wBAAwB,MAAM,kBAAkB,QAAM;AAClE,MAAI,YAAY,KAAK,MAAM,GAAG;AAC9B,MAAI,gBAAgB;AACpB,WAAS,IAAI,GAAG,IAAI,UAAU,SAAS,GAAG,KAAK;AAC3C,oBAAgB,QAAQ,kBAAkB,eAAe,UAAU,CAAC,CAAC;EACzE;AAEA,SAAO;AACX;AAEM,SAAU,wBAAwB,aAAa,QAAQ,cAAc,uBAAuB,MAAM,oCAAoC,OAAO,aAAa,OAAK;AACjK,MAAI,UAAU;AAEd,MAAI;AACA,QAAI,oBAAoB,QAAQ,2BAA2B,QAAQ,YAAY;AAC/E,QAAI,qBAAqB,MAAM;AAC3B,UAAI,6BAA6B,OAAO,yBAAyB,mBAAmB,YAAY;AAEhG,UAAI,8BAA8B,MAAM;AACpC,YAAI,mBAAmB,QAAQ,kBAAkB,mBAAmB,YAAY;AAChF,gBAAQ,qBAAqB,kBAAkB,aAAa,MAAM,mCAAmC,UAAU;AAE/G,YAAI,kBAAkB;AACtB,YAAI,sBAAsB;AACtB,4BAAkB;QACtB;AAEA,eAAO,eAAe,iBAAiB,cAAc;UACjD,OAAO;UACP,YAAY,2BAA2B;UACvC,UAAU,2BAA2B;UACrC,cAAc,2BAA2B;SAC5C;AAED,kBAAU;MACd,OAAO;AACH,eAAO,eAAe,QAAQ,cAAc;UACxC,OAAO;SACV;AAED,kBAAU;MACd;IACJ,OAAO;AACH,aAAO,eAAe,QAAQ,cAAc;QACxC,OAAO;OACV;AAED,gBAAU;IACd;EACJ,SAASD,QAAO;AACZ,QAAI,YAAY;AACZ,cAAQ,MAAM,aAAa,cAAc,OAAO,QAAQ,uBAAuB;IACnF;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,qBAAqB,YAAY,UAAU,YAAY,OAAO,+BAA+B,OAAO,aAAa,OAAK;AAClI,MAAI,cAAc,MAAM;AACpB,QAAI,WAAW;AACX,cAAQ,sBAAsB,QAAQ;IAC1C;AAEA,WAAO,eAAe,UAAU,OAAO,eAAe,UAAU,CAAC;AAEjE,QAAI,0BAA0B,OAAO,oBAAoB,UAAU;AACnE,aAAS,0BAA0B,yBAAyB;AACxD,UAAI;AACA,YAAI,+BAA+B,OAAO,yBAAyB,YAAY,sBAAsB;AAErG,eAAO,eAAe,UAAU,wBAAwB;UACpD,OAAO,6BAA6B;UACpC,YAAY,6BAA6B;UACzC,UAAU,6BAA6B;UACvC,cAAc,6BAA6B;SAC9C;MACL,SAASA,QAAO;AACZ,YAAI,YAAY;AACZ,kBAAQ,MAAM,aAAa,wBAAwB,OAAO,WAAW,MAAM,uBAAuB;QACtG;MACJ;IACJ;AAEA,QAAI,8BAA8B;AAC9B,oCAA8B,YAAY,QAAQ;IACtD;EACJ;AACJ;AAEM,SAAU,sBAAsB,QAAM;AACxC,MAAI,cAAc,OAAO,oBAAoB,MAAM;AACnD,aAAW,WAAW,aAAa,WAAW;AAE9C,WAAS,cAAc,aAAa;AAChC,QAAI;AACA,aAAO,eAAe,QAAQ,YAAY;QACtC,OAAO;OACV;IACL,SAASA,QAAO;IAEhB;AAEA,QAAI;AACA,aAAO,OAAO,UAAU;IAC5B,SAASA,QAAO;IAEhB;EACJ;AAEA,SAAO,eAAe,QAAQ,IAAI;AACtC;AAEM,SAAU,+BAA+B,QAAQ,cAAY;AAC/D,MAAI,uBAAuB;AAE3B,MAAI,qBAAqB,QAAQ,4BAA4B,QAAQ,YAAY;AAEjF,MAAI,sBAAsB,SAAS,mBAAmB,OAAO,QAAQ,mBAAmB,OAAO,OAAO;AAClG,2BAAuB;EAC3B;AAEA,SAAO;AACX;AAEM,SAAU,iBAAiB,gBAAgB,cAAY;AACzD,MAAI,mBAAmB;AAEvB,MAAI,mBAAmB,QAAQ,kBAAkB,gBAAgB,YAAY;AAC7E,MAAI,oBAAoB,MAAM;AAC1B,uBAAmB,QAAQ,WAAW,gBAAgB;EAC1D;AAEA,SAAO;AACX;AAEM,SAAU,cAAc,aAAa,WAAS;AAChD,MAAI,gBAAgB;AAEpB,MAAI,gBAAgB,QAAQ,kBAAkB,aAAa,SAAS;AACpE,MAAI,iBAAiB,MAAM;AACvB,oBAAgB,QAAQ,QAAQ,aAAa;EACjD;AAEA,SAAO;AACX;AAEM,SAAU,eAAe,cAAc,YAAU;AACnD,MAAI,iBAAiB;AAErB,MAAI,iBAAiB,QAAQ,kBAAkB,cAAc,UAAU;AACvE,MAAI,kBAAkB,MAAM;AACxB,qBAAiB,QAAQ,SAAS,cAAc;EACpD;AAEA,SAAO;AACX;AAEM,SAAU,WAAWC,WAAQ;AAC/B,SAAO,OAAOA,aAAY,cAAc,CAAC,QAAQ,QAAQA,SAAQ;AACrE;AAEO,IAAI,UAAU,WAAA;AACjB,MAAI,kBAAkB,IAAI,OAAO,QAAQ;AACzC,SAAO,SAASC,SAAQD,WAAQ;AAC5B,WAAO,OAAOA,aAAY,cACtBA,UAAS,aAAa,QAAQ,OAAOA,UAAS,UAAU,eAAe,cACvEA,UAAS,YAAY,QAAQ,OAAOA,UAAS,YAAY,cAAcA,UAAS,SAAQ,GAAI,MAAM,eAAe,KAAK;EAC9H;AACJ,EAAC;AAEK,SAAU,SAASA,WAAQ;AAC7B,SAAO,OAAOA,aAAY;AAC9B;AAEO,IAAI,UAAU;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKJ,SAAS,8BAA8B,YAAY,UAAQ;AACvD,MAAI;AACA,QAAI,OAAO,YAAY,cAAc,OAAO,cAAc,YAAY;AAClE,UAAI,uBAAuB,CAAC,YAAY,kBAAkB,SAAS;AAEnE,eAAS,uBAAuB,sBAAsB;AAClD,YAAI,gCAAgC,QAAQ,4BAA4B,YAAY,mBAAmB;AAEvG,YAAI,iCAAiC,QAAQ,8BAA8B,SAAS,QAC/E,8BAA8B,SAAS,OAAO,mBAAmB,GAAI;AACtE,cAAI,gBAAgB,OAAO,mBAAmB,EAAE,KAAK,UAAU,EAAC;AAChE,cAAI,sBAAsB,WAAA;AAAc,mBAAO;UAAe;AAC9D,kBAAQ,wBAAwB,qBAAqB,UAAU,qBAAqB,OAAO,KAAK;QACpG;MACJ;IACJ;EACJ,SAASD,QAAO;EAEhB;AACJ;;;AC/WM,SAAU,iBAAiB,eAAoC,aAAqB,aAAsB,MAAM,WAAoB,MAAM,eAAwB,MAAM,mCAA4C,MAAM,uBAAgC,OAAO,QAAiB,yBAA6C,CAAA,GAAE;AACnU,QAAM,mBAAmB,OAAO,oBAAoB,aAAa;AACjE,aAAW,mBAAmB,kBAAkB;AAC5C,QAAI,uBAAuB,SAAS,eAAe;AAAG;AAEtD,QAAI,kBAAuC;AAC3C,QAAI,gBAAqC;AACzC,QAAI,oBAAyC;AAE7C,QAAI,kCAAkC;AAClC,YAAM,qBAAqB,OAAO,yBAAyB,aAAa,eAAe;AACvF,UAAI,sBAAsB,MAAM;AAC5B,0BAAkB,mBAAmB;AACrC,wBAAgB,mBAAmB;AACnC,4BAAoB,mBAAmB;MAC3C;IACJ;AAEA,QAAI,uBAAuB;AAC3B,QAAI,UAAU,MAAM;AAChB,UAAI,qBAAqB,SAAS,KAAK,qBAAqB,CAAC,KAAK,qBAAqB,CAAC,EAAE,YAAW,GAAI;AACrG,+BAAuB,OAAO,YAAW,IAAK;MAClD,OAAO;AACH,+BAAuB,SAAS;MACpC;IACJ;AAEA,UAAM,qBAAqB,OAAO,yBAAyB,eAAe,eAAe;AACzF,UAAM,eAAe,sBAAsB,SAAS,mBAAmB,OAAO,QAAQ,mBAAmB,OAAO;AAEhH,QAAI,CAAC,cAAc;AACf,UAAI,uBAAuB,cAAc,eAAe;AAExD,UAAI,wBAAwB,QAAQ,WAAW,oBAAoB,GAAG;AAClE,cAAM,mBAAmB,cAAc,eAAe;AACtD,+BAAuB,YAAwB,MAAW;AACtD,iBAAO,iBAAiB,MAAM,GAAG,IAAI;QACzC;AAEA,eAAO,eAAe,sBAAsB,QAAQ;UAChD,OAAO;SACV;MACL;AAEA,aAAO,eAAe,aAAa,sBAAsB;QACrD,OAAO;QACP,YAAY;QACZ,UAAU;QACV,cAAc;OACjB;IACL,OAAO;AACH,aAAO,eAAe,aAAa,sBAAsB;QACrD,KAAK,mBAAmB;QACxB,KAAK,mBAAmB;QACxB,YAAY;QACZ,cAAc;OACjB;IACL;EACJ;AACJ;AAEO,IAAM,cAAc;EACvB;;;;AChEG,IAAM,qBAAqB;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGG,IAAM,sBAAsB;EAC/B;;;;ACPE,SAAU,qBAAkB;AAC9B,mCAAgC;AAChC,8BAA2B;AAC/B;AAEA,SAAS,mCAAgC;AAErC,QAAM,qBAA0C,CAAA;AAEhD,qBAAmB,UAAU,SAAS,QAA4D,OAA+B,cAAqD;AAClL,WAAO,WAAW,KAAK,OAAO,MAAM,YAAY;EACpD;AAEA,qBAAmB,WAAW,SAAS,SAAuE,eAAwC;AAClJ,WAAO,WAAW,MAAM,MAAM,aAAa;EAC/C;AAEA,qBAAmB,YAAY,SAAS,UAA2C,OAA+B,uBAAoE;AAClL,WAAO,WAAW,OAAO,MAAM,OAAO,qBAAqB;EAC/D;AAEA,qBAAmB,WAAW,SAAS,WAAQ;AAC3C,WAAO,WAAW,MAAM,IAAI;EAChC;AAEA,qBAAmB,UAAU,SAAS,UAAO;AACzC,WAAO,WAAW,KAAK,IAAI;EAC/B;AAEA,qBAAmB,SAAS,SAAS,OAAwC,UAA8D;AACvI,WAAO,WAAW,IAAI,MAAM,QAAQ;EACxC;AAEA,qBAAmB,cAAc,SAAS,YAA6C,eAAkB,uBAAwE;AAC7K,WAAO,WAAW,SAAS,MAAM,eAAe,qBAAqB;EACzE;AAEA,qBAAmB,UAAU,SAAS,QAAyC,UAA8D;AACzI,WAAO,WAAW,KAAK,MAAM,QAAQ;EACzC;AAEA,qBAAmB,eAAe,SAAS,aAA8C,UAA8D;AACnJ,WAAO,WAAW,UAAU,MAAM,QAAQ;EAC9C;AAEA,qBAAmB,aAAa,SAAS,WAA4C,UAA8D;AAC/I,WAAO,WAAW,QAAQ,MAAM,QAAQ;EAC5C;AAEA,qBAAmB,oBAAoB,SAAS,kBAAmD,UAA8D;AAC7J,WAAO,WAAW,eAAe,MAAM,QAAQ;EACnD;AAEA,qBAAmB,eAAe,SAAS,aAA8C,eAAkB,uBAAwE;AAC/K,WAAO,WAAW,UAAU,MAAM,eAAe,qBAAqB;EAC1E;AAEA,qBAAmB,kBAAkB,SAAS,gBAAiD,eAAkB,uBAAwE;AACrL,WAAO,WAAW,aAAa,MAAM,eAAe,qBAAqB;EAC7E;AAEA,qBAAmB,oBAAoB,SAAS,kBAAmD,eAAkB,uBAAwE;AACzL,WAAO,WAAW,eAAe,MAAM,eAAe,qBAAqB;EAC/E;AAEA,qBAAmB,yBAAyB,SAAS,uBAAwD,eAAkB,uBAAwE;AACnM,WAAO,WAAW,oBAAoB,MAAM,eAAe,qBAAqB;EACpF;AAEA,aAAW,0BAA0B,oBAAoB,oBAAoB;AACzE,gBAAY,iBAAiB,oBAAoB,uBAAuB,WAAW,OAAO,MAAM,IAAI;EACxG;AACJ;AAEA,SAAS,8BAA2B;AAEhC,QAAM,iBAAsC,CAAA;AAE5C,iBAAe,YAAY,SAAS,UAAwB,UAA8D;AACtH,WAAO,WAAW,OAAO,MAAM,QAAQ;EAC3C;AAEA,iBAAe,iBAAiB,SAAS,eAA6B,OAAa;AAC/E,WAAO,WAAW,YAAY,MAAM,KAAK;EAC7C;AAEA,iBAAe,eAAe,SAAS,aAA2B,UAA8D;AAC5H,WAAO,WAAW,UAAU,MAAM,QAAQ;EAC9C;AAEA,iBAAe,sBAAsB,SAAS,oBAAkC,SAAiB;AAC7F,WAAO,WAAW,iBAAiB,MAAM,OAAO;EACpD;AAEA,iBAAe,iBAAiB,SAAS,eAA6B,iBAAoB,uBAA0E;AAChK,WAAO,WAAW,YAAY,MAAM,iBAAiB,qBAAqB;EAC9E;AAEA,iBAAe,oBAAoB,SAAS,kBAAgC,iBAAoB,uBAA0E;AACtK,WAAO,WAAW,eAAe,MAAM,iBAAiB,qBAAqB;EACjF;AAEA,iBAAe,WAAW,SAAS,WAAQ;AACvC,WAAO,WAAW,MAAM,IAAI;EAChC;AAEA,iBAAe,gBAAgB,SAAS,cAA4B,cAAiB,uBAAuE;AACxJ,WAAO,WAAW,WAAW,MAAM,cAAc,qBAAqB;EAC1E;AAEA,iBAAe,mBAAmB,SAAS,iBAA+B,cAAiB,uBAAuE;AAC9J,WAAO,WAAW,cAAc,MAAM,cAAc,qBAAqB;EAC7E;AAEA,cAAY,iBAAiB,gBAAgB,MAAM,WAAW,OAAO,MAAM,IAAI;AACnF;;;ACoCM,SAAU,2BAAwB;AACpC,oCAAiC;AACrC;AAEM,SAAU,oCAAiC;AAI7C,MAAI,gBAAgB,CAAA;AAEpB,gBAAc,WAAW,SAAS,SAAS,GAAG,GAAG,GAAC;AAC9C,WAAO,UAAU,IAAI,MAAM,GAAG,GAAG,CAAC;EACtC;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,UAAU,MAAM,GAAG;EACxC;AACA,gBAAc,YAAY,SAAS,UAAU,QAAM;AAC/C,WAAO,UAAU,KAAK,QAAQ,IAAI;EACtC;AAEA,gBAAc,aAAa,SAAS,WAAW,MAAM,UAAU,OAAM,GAAE;AACnE,WAAO,UAAU,MAAM,MAAM,GAAG;EACpC;AAEA,gBAAc,YAAY,SAAS,YAAS;AACxC,WAAO,UAAU,KAAK,IAAI;EAC9B;AAEA,gBAAc,aAAa,SAAS,WAAW,QAAM;AACjD,WAAO,UAAU,MAAM,MAAM,MAAM;EACvC;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,QAAM;AAC/D,WAAO,UAAU,aAAa,MAAM,MAAM;EAC9C;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,QAAM;AAC/D,WAAO,UAAU,aAAa,MAAM,MAAM;EAC9C;AAEA,gBAAc,cAAc,SAAS,YAAY,QAAQ,UAAU,GAAC;AAChE,WAAO,UAAU,OAAO,MAAM,QAAQ,OAAO;EACjD;AAEA,gBAAc,cAAc,SAAS,cAAW;AAC5C,WAAO,UAAU,OAAO,IAAI;EAChC;AAEA,gBAAc,qBAAqB,SAAS,qBAAkB;AAC1D,WAAO,UAAU,cAAc,IAAI;EACvC;AAEA,gBAAc,gBAAgB,SAAS,cAAc,QAAM;AACvD,WAAO,UAAU,SAAS,MAAM,MAAM;EAC1C;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,QAAM;AACrE,WAAO,UAAU,gBAAgB,MAAM,MAAM;EACjD;AAEA,gBAAc,WAAW,SAAS,SAAS,QAAQ,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,IAAI,MAAM,QAAQ,GAAG;EAC1C;AAEA,gBAAc,WAAW,SAAS,SAAS,QAAQ,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,IAAI,MAAM,QAAQ,GAAG;EAC1C;AAEA,gBAAc,WAAW,SAAS,SAAS,QAAQ,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,IAAI,MAAM,QAAQ,GAAG;EAC1C;AAEA,gBAAc,WAAW,SAAS,SAAS,QAAQ,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,IAAI,MAAM,QAAQ,GAAG;EAC1C;AAEA,gBAAc,aAAa,SAAS,WAAW,OAAO,MAAM,UAAU,OAAM,GAAE;AAC1E,WAAO,UAAU,MAAM,MAAM,OAAO,GAAG;EAC3C;AAEA,gBAAc,WAAW,SAAS,SAAS,QAAM;AAC7C,WAAO,UAAU,IAAI,MAAM,MAAM;EACrC;AAEA,gBAAc,cAAc,SAAS,YAAY,MAAM,UAAU,OAAM,GAAE;AACrE,WAAO,UAAU,OAAO,MAAM,GAAG;EACrC;AAEA,gBAAc,aAAa,SAAS,WAAW,QAAQ,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,MAAM,MAAM,QAAQ,GAAG;EAC5C;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,MAAM,MAAM,UAAU,OAAM,GAAE;AACzF,WAAO,UAAU,cAAc,MAAM,MAAM,GAAG;EAClD;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,QAAQ,MAAM,UAAU,OAAM,GAAE;AAC3F,WAAO,UAAU,cAAc,MAAM,QAAQ,GAAG;EACpD;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,QAAQ,MAAM,UAAU,OAAM,GAAE;AAC3F,WAAO,UAAU,cAAc,MAAM,QAAQ,GAAG;EACpD;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,mBAAiB;AAC1E,WAAO,UAAU,aAAa,MAAM,iBAAiB;EACzD;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,QAAQ,eAAa;AAC5E,WAAO,UAAU,YAAY,MAAM,QAAQ,aAAa;EAC5D;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,QAAQ,eAAa;AAC1F,WAAO,UAAU,mBAAmB,MAAM,QAAQ,aAAa;EACnE;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,QAAQ,eAAa;AAC1F,WAAO,UAAU,mBAAmB,MAAM,QAAQ,aAAa;EACnE;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,QAAQ,eAAa;AAC9E,WAAO,UAAU,aAAa,MAAM,QAAQ,aAAa;EAC7D;AAEA,gBAAc,2BAA2B,SAAS,yBAAyB,QAAQ,eAAa;AAC5F,WAAO,UAAU,oBAAoB,MAAM,QAAQ,aAAa;EACpE;AAEA,gBAAc,2BAA2B,SAAS,yBAAyB,QAAQ,eAAa;AAC5F,WAAO,UAAU,oBAAoB,MAAM,QAAQ,aAAa;EACpE;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,QAAQ,eAAa;AAC1F,WAAO,UAAU,mBAAmB,MAAM,QAAQ,aAAa;EACnE;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,QAAQ,eAAa;AACxG,WAAO,UAAU,0BAA0B,MAAM,QAAQ,aAAa;EAC1E;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,QAAQ,eAAa;AACxG,WAAO,UAAU,0BAA0B,MAAM,QAAQ,aAAa;EAC1E;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,UAAU,MAAM,GAAG;EACxC;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,UAAU,MAAM,GAAG;EACxC;AAEA,gBAAc,cAAc,SAAS,YAAY,KAAG;AAChD,WAAO,UAAU,OAAO,MAAM,GAAG;EACrC;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,MAAM,UAAU,OAAM,GAAE;AACnF,WAAO,UAAU,cAAc,MAAM,GAAG;EAC5C;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,MAAM,UAAU,OAAM,GAAE;AACnF,WAAO,UAAU,cAAc,MAAM,GAAG;EAC5C;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,UAAU,UAAU,SAAO;AACpF,WAAO,UAAU,aAAa,MAAM,OAAO;EAC/C;AAEA,gBAAc,cAAc,SAAS,YAAY,UAAU,GAAC;AACxD,WAAO,UAAU,OAAO,MAAM,OAAO;EACzC;AAEA,gBAAc,sBAAsB,SAAS,oBAAoB,MAAI;AACjE,WAAO,UAAU,eAAe,MAAM,IAAI;EAC9C;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,aAAW;AAC1E,WAAO,UAAU,gBAAgB,MAAM,WAAW;EACtD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,MAAM,MAAM,UAAU,OAAM,GAAE;AACnG,WAAO,UAAU,mBAAmB,MAAM,MAAM,GAAG;EACvD;AAEA,gBAAc,gCAAgC,SAAS,8BAA8B,MAAM,MAAM,UAAU,OAAM,GAAE;AAC/G,WAAO,UAAU,yBAAyB,MAAM,MAAM,GAAG;EAC7D;AAEA,gBAAc,8BAA8B,SAAS,4BAA4B,QAAQ,MAAM,MAAM,UAAU,OAAM,GAAE;AACnH,WAAO,UAAU,uBAAuB,QAAQ,MAAM,MAAM,GAAG;EACnE;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,QAAM;AAC/D,WAAO,UAAU,aAAa,MAAM,MAAM;EAC9C;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,QAAQ,MAAI;AACjF,WAAO,UAAU,mBAAmB,MAAM,QAAQ,IAAI;EAC1D;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,QAAQ,eAAa;AAC9E,WAAO,UAAU,aAAa,MAAM,QAAQ,aAAa;EAC7D;AAEA,gBAAc,cAAc,SAAS,YAAY,QAAQ,eAAe,WAAW,GAAC;AAChF,WAAO,UAAU,OAAO,MAAM,QAAQ,eAAe,QAAQ;EACjE;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,MAAM,MAAM,UAAU,OAAM,GAAE;AACzF,WAAO,UAAU,cAAc,MAAM,MAAM,GAAG;EAClD;AAEA,gBAAc,8BAA8B,SAAS,4BAA4B,MAAM,kBAAkB,MAAM,UAAU,OAAM,GAAE;AAC7H,WAAO,UAAU,uBAAuB,MAAM,MAAM,kBAAkB,GAAG;EAC7E;AAEA,gBAAc,sBAAsB,SAAS,oBAAoB,aAAa,MAAM,UAAU,OAAM,GAAE;AAClG,WAAO,UAAU,eAAe,MAAM,aAAa,GAAG;EAC1D;AAEA,gBAAc,+BAA+B,SAAS,6BAA6B,aAAa,kBAAkB,MAAM,UAAU,OAAM,GAAE;AACtI,WAAO,UAAU,wBAAwB,MAAM,aAAa,kBAAkB,GAAG;EACrF;AAEA,gBAAc,gBAAgB,SAAS,cAAc,MAAI;AACrD,WAAO,UAAU,SAAS,MAAM,IAAI;EACxC;AAEA,gBAAc,iBAAiB,SAAS,eAAe,aAAW;AAC9D,WAAO,UAAU,UAAU,MAAM,WAAW;EAChD;AAEA,gBAAc,cAAc,SAAS,YAAY,UAAU,KAAG;AAC1D,WAAO,UAAU,OAAO,MAAM,UAAU,GAAG;EAC/C;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,UAAU,KAAG;AACxE,WAAO,UAAU,cAAc,MAAM,UAAU,GAAG;EACtD;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,UAAU,KAAG;AACxE,WAAO,UAAU,cAAc,MAAM,UAAU,GAAG;EACtD;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,UAAU,KAAG;AAClE,WAAO,UAAU,WAAW,MAAM,UAAU,GAAG;EACnD;AAEA,gBAAc,kBAAkB,SAAS,gBAAgBG,QAAO,MAAM,KAAG;AACrE,WAAO,UAAU,WAAW,MAAMA,QAAO,MAAM,GAAG;EACtD;AAEA,gBAAc,yBAAyB,SAAS,uBAAuBA,QAAO,MAAM,KAAG;AACnF,WAAO,UAAU,kBAAkB,MAAMA,QAAO,MAAM,GAAG;EAC7D;AAEA,gBAAc,yBAAyB,SAAS,uBAAuBA,QAAO,MAAM,KAAG;AACnF,WAAO,UAAU,kBAAkB,MAAMA,QAAO,MAAM,GAAG;EAC7D;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,UAAU,QAAQ,KAAG;AAC9E,WAAO,UAAU,aAAa,MAAM,UAAU,QAAQ,GAAG;EAC7D;AAEA,gBAAc,2BAA2B,SAAS,yBAAyB,UAAU,QAAQ,MAAM,UAAU,OAAM,GAAE;AACjH,WAAO,UAAU,oBAAoB,MAAM,UAAU,QAAQ,GAAG;EACpE;AAEA,gBAAc,2BAA2B,SAAS,yBAAyB,UAAU,QAAQ,MAAM,UAAU,OAAM,GAAE;AACjH,WAAO,UAAU,oBAAoB,MAAM,UAAU,QAAQ,GAAG;EACpE;AAEA,gBAAc,wBAAwB,SAAS,sBAAsB,UAAU,QAAQ,MAAM,UAAU,OAAM,GAAE;AAC3G,WAAO,UAAU,iBAAiB,MAAM,UAAU,QAAQ,GAAG;EACjE;AAEA,gBAAc,wBAAwB,SAAS,sBAAsBA,QAAO,MAAM,QAAQ,KAAG;AACzF,WAAO,UAAU,iBAAiB,MAAMA,QAAO,MAAM,QAAQ,GAAG;EACpE;AAEA,gBAAc,+BAA+B,SAAS,6BAA6BA,QAAO,MAAM,QAAQ,KAAG;AACvG,WAAO,UAAU,wBAAwB,MAAMA,QAAO,MAAM,QAAQ,GAAG;EAC3E;AAEA,gBAAc,+BAA+B,SAAS,6BAA6BA,QAAO,MAAM,QAAQ,MAAM,UAAU,OAAM,GAAE;AAC5H,WAAO,UAAU,wBAAwB,MAAMA,QAAO,MAAM,QAAQ,GAAG;EAC3E;AAEA,gBAAc,8BAA8B,SAAS,4BAA4B,iBAAiB,KAAG;AACjG,WAAO,UAAU,uBAAuB,MAAM,iBAAiB,GAAG;EACtE;AAEA,gBAAc,8BAA8B,SAAS,4BAA4B,iBAAiB,KAAG;AACjG,WAAO,UAAU,uBAAuB,MAAM,iBAAiB,GAAG;EACtE;AAEA,gBAAc,oCAAoC,SAAS,kCAAkC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAClI,WAAO,UAAU,6BAA6B,MAAM,iBAAiB,GAAG;EAC5E;AAEA,gBAAc,oCAAoC,SAAS,kCAAkC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAClI,WAAO,UAAU,6BAA6B,MAAM,iBAAiB,GAAG;EAC5E;AAEA,gBAAc,kCAAkC,SAAS,gCAAgC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAC9H,WAAO,UAAU,2BAA2B,MAAM,iBAAiB,GAAG;EAC1E;AAEA,gBAAc,kCAAkC,SAAS,gCAAgC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAC9H,WAAO,UAAU,2BAA2B,MAAM,iBAAiB,GAAG;EAC1E;AAEA,gBAAc,+BAA+B,SAAS,6BAA6B,iBAAiB,KAAG;AACnG,WAAO,UAAU,wBAAwB,MAAM,iBAAiB,GAAG;EACvE;AAEA,gBAAc,+BAA+B,SAAS,6BAA6B,iBAAiB,KAAG;AACnG,WAAO,UAAU,wBAAwB,MAAM,iBAAiB,GAAG;EACvE;AAEA,gBAAc,qCAAqC,SAAS,mCAAmC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AACpI,WAAO,UAAU,8BAA8B,MAAM,iBAAiB,GAAG;EAC7E;AAEA,gBAAc,qCAAqC,SAAS,mCAAmC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AACpI,WAAO,UAAU,8BAA8B,MAAM,iBAAiB,GAAG;EAC7E;AAEA,gBAAc,mCAAmC,SAAS,iCAAiC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAChI,WAAO,UAAU,4BAA4B,MAAM,iBAAiB,GAAG;EAC3E;AAEA,gBAAc,mCAAmC,SAAS,iCAAiC,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAChI,WAAO,UAAU,4BAA4B,MAAM,iBAAiB,GAAG;EAC3E;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,UAAU,KAAG;AACpE,WAAO,UAAU,YAAY,MAAM,UAAU,GAAG;EACpD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,UAAU,KAAG;AAC5E,WAAO,UAAU,gBAAgB,MAAM,UAAU,GAAG;EACxD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,UAAU,MAAM,UAAU,OAAM,GAAE;AACrH,WAAO,UAAU,0BAA0B,MAAM,UAAU,GAAG;EAClE;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,UAAU,MAAM,UAAU,OAAM,GAAE;AACrH,WAAO,UAAU,0BAA0B,MAAM,UAAU,GAAG;EAClE;AAEA,gBAAc,8BAA8B,SAAS,4BAA4B,UAAU,MAAM,UAAU,OAAM,GAAE;AAC/G,WAAO,UAAU,uBAAuB,MAAM,UAAU,GAAG;EAC/D;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,UAAU,MAAM,UAAU,OAAM,GAAE;AACrH,WAAO,UAAU,0BAA0B,MAAM,UAAU,GAAG;EAClE;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,UAAU,MAAM,UAAU,OAAM,GAAE;AACrH,WAAO,UAAU,0BAA0B,MAAM,UAAU,GAAG;EAClE;AAEA,gBAAc,8BAA8B,SAAS,4BAA4B,UAAU,MAAM,UAAU,OAAM,GAAE;AAC/G,WAAO,UAAU,uBAAuB,MAAM,UAAU,GAAG;EAC/D;AAEA,gBAAc,gBAAgB,SAAS,cAAc,MAAM,UAAU,OAAM,GAAE;AACzE,WAAO,UAAU,SAAS,MAAM,GAAG;EACvC;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,MAAM,UAAU,OAAM,GAAE;AACvF,WAAO,UAAU,gBAAgB,MAAM,GAAG;EAC9C;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,MAAM,UAAU,OAAM,GAAE;AACvF,WAAO,UAAU,gBAAgB,MAAM,GAAG;EAC9C;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,IAAI,KAAG;AAC5D,WAAO,UAAU,WAAW,MAAM,IAAI,GAAG;EAC7C;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,IAAI,MAAM,UAAU,OAAM,GAAE;AAC/F,WAAO,UAAU,kBAAkB,MAAM,IAAI,GAAG;EACpD;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,IAAI,MAAM,UAAU,OAAM,GAAE;AAC/F,WAAO,UAAU,kBAAkB,MAAM,IAAI,GAAG;EACpD;AAEA,gBAAc,sBAAsB,SAAS,oBAAoB,IAAI,MAAM,UAAU,OAAM,GAAE;AACzF,WAAO,UAAU,eAAe,MAAM,IAAI,GAAG;EACjD;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,IAAI,WAAW,KAAG;AACrF,WAAO,UAAU,kBAAkB,MAAM,IAAI,WAAW,GAAG;EAC/D;AAEA,gBAAc,gCAAgC,SAAS,8BAA8B,IAAI,WAAW,MAAM,UAAU,OAAM,GAAE;AACxH,WAAO,UAAU,yBAAyB,MAAM,IAAI,WAAW,GAAG;EACtE;AAEA,gBAAc,gCAAgC,SAAS,8BAA8B,IAAI,WAAW,MAAM,UAAU,OAAM,GAAE;AACxH,WAAO,UAAU,yBAAyB,MAAM,IAAI,WAAW,GAAG;EACtE;AAEA,gBAAc,6BAA6B,SAAS,2BAA2B,IAAI,WAAW,MAAM,UAAU,OAAM,GAAE;AAClH,WAAO,UAAU,sBAAsB,MAAM,IAAI,WAAW,GAAG;EACnE;AAEA,gBAAc,YAAY,SAAS,UAAU,IAAI,qBAAqB,MAAM,UAAU,OAAM,GAAE;AAC1F,WAAO,UAAU,KAAK,MAAM,IAAI,qBAAqB,GAAG;EAC5D;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,IAAI,qBAAqB,iBAAiB,eAAe,QAAQ,MAAM,UAAU,OAAM,GAAE;AAChJ,WAAO,UAAU,YAAY,MAAM,IAAI,qBAAqB,gBAAgB,GAAG;EACnF;AAEA,gBAAc,2BAA2B,SAAS,yBAAyB,MAAM,UAAU,OAAM,GAAE;AAC/F,WAAO,UAAU,oBAAoB,MAAM,GAAG;EAClD;AAIA,MAAI,gBAAgB,CAAA;AAEpB,gBAAc,WAAW,SAAS,SAAS,GAAG,GAAG,GAAG,GAAC;AACjD,WAAO,UAAU,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;EACzC;AAEA,gBAAc,YAAY,SAAS,UAAU,QAAM;AAC/C,WAAO,UAAU,KAAK,QAAQ,IAAI;EACtC;AAEA,gBAAc,aAAa,SAAS,WAAW,MAAM,UAAU,OAAM,GAAE;AACnE,WAAO,UAAU,MAAM,MAAM,GAAG;EACpC;AAIA,MAAI,gBAAgB,CAAA;AAEpB,gBAAc,WAAW,SAAS,SAAS,GAAG,GAAG,GAAG,GAAC;AACjD,WAAO,UAAU,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;EACzC;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,UAAU,MAAM,GAAG;EACxC;AAEA,gBAAc,YAAY,SAAS,UAAU,MAAI;AAC7C,WAAO,UAAU,KAAK,MAAM,IAAI;EACpC;AAEA,gBAAc,aAAa,SAAS,WAAW,MAAM,UAAU,OAAM,GAAE;AACnE,WAAO,UAAU,MAAM,MAAM,GAAG;EACpC;AAEA,gBAAc,gBAAgB,SAAS,gBAAa;AAChD,WAAO,UAAU,SAAS,IAAI;EAClC;AAEA,gBAAc,cAAc,SAAS,cAAW;AAC5C,WAAO,UAAU,OAAO,IAAI;EAChC;AAEA,gBAAc,qBAAqB,SAAS,qBAAkB;AAC1D,WAAO,UAAU,cAAc,IAAI;EACvC;AAEA,gBAAc,cAAc,SAAS,YAAY,MAAM,UAAU,OAAM,GAAE;AACrE,WAAO,UAAU,OAAO,MAAM,GAAG;EACrC;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,UAAU,MAAM,GAAG;EACxC;AAEA,gBAAc,WAAW,SAAS,SAAS,UAAU,MAAM,UAAU,OAAM,GAAE;AACzE,WAAO,UAAU,IAAI,MAAM,UAAU,GAAG;EAC5C;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,QAAQ,MAAM,GAAG;EACtC;AAEA,gBAAc,gBAAgB,SAAS,gBAAa;AAChD,WAAO,UAAU,SAAS,IAAI;EAClC;AAEA,gBAAc,uBAAuB,SAAS,uBAAoB;AAC9D,WAAO,UAAU,gBAAgB,IAAI;EACzC;AAEA,gBAAc,uBAAuB,SAAS,uBAAoB;AAC9D,WAAO,UAAU,gBAAgB,IAAI;EACzC;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,MAAM,UAAU,OAAM,GAAE;AACnF,WAAO,UAAU,cAAc,MAAM,GAAG;EAC5C;AAEA,gBAAc,4BAA4B,SAAS,0BAA0B,MAAM,UAAU,OAAM,GAAE;AACjG,WAAO,UAAU,qBAAqB,MAAM,GAAG;EACnD;AAEA,gBAAc,4BAA4B,SAAS,0BAA0B,MAAM,UAAU,OAAM,GAAE;AACjG,WAAO,UAAU,qBAAqB,MAAM,GAAG;EACnD;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,CAAC,UAAU,OAAM,GAAI,UAAU,OAAM,GAAI,UAAU,OAAM,CAAE,GAAC;AACjH,WAAO,UAAU,QAAQ,MAAM,GAAG;EACtC;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,MAAM,UAAU,OAAM,GAAE;AAC7E,WAAO,UAAU,WAAW,MAAM,GAAG;EACzC;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,KAAG;AAC1D,WAAO,UAAU,YAAY,MAAM,GAAG;EAC1C;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,QAAQ,MAAM,GAAG;EACtC;AAEA,gBAAc,gBAAgB,SAAS,cAAc,KAAG;AACpD,WAAO,UAAU,SAAS,MAAM,GAAG;EACvC;AAEA,gBAAc,aAAa,SAAS,WAAW,MAAM,UAAU,OAAM,GAAE;AACnE,WAAO,UAAU,MAAM,MAAM,GAAG;EACpC;AAEA,gBAAc,eAAe,SAAS,aAAa,KAAG;AAClD,WAAO,UAAU,QAAQ,MAAM,GAAG;EACtC;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,IAAI,SAAO;AAChE,WAAO,UAAU,QAAQ,MAAM,MAAM,IAAI,OAAO;EACpD;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,SAAS,KAAK,MAAM,OAAO,MAAI;AACpF,WAAO,UAAU,WAAW,MAAM,SAAS,IAAI,IAAI;EACvD;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,UAAU,KAAK,MAAM,OAAO,MAAI;AACvF,WAAO,UAAU,YAAY,MAAM,UAAU,IAAI,IAAI;EACzD;AAEA,gBAAc,aAAa,SAAS,WAAW,IAAI,UAAU,MAAM,OAAO,MAAI;AAC1E,WAAO,UAAU,MAAM,MAAM,IAAI,SAAS,IAAI;EAClD;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,UAAU,MAAM,OAAO,MAAI;AAChF,WAAO,UAAU,QAAQ,MAAM,MAAM,SAAS,IAAI;EACtD;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,KAAK,MAAM,UAAU,MAAI;AAC9E,WAAO,UAAU,QAAQ,MAAM,MAAM,IAAI,OAAO;EACpD;AAEA,gBAAc,gBAAgB,SAAS,cAAc,OAAO,KAAK,MAAM,UAAU,MAAI;AACjF,WAAO,UAAU,SAAS,MAAM,OAAO,IAAI,OAAO;EACtD;AAEA,gBAAc,eAAe,SAAS,aAAa,YAAY,MAAM,UAAU,OAAM,GAAE;AACnF,WAAO,UAAU,QAAQ,MAAM,YAAY,GAAG;EAClD;AAEA,gBAAc,eAAe,SAAS,aAAa,YAAY,MAAM,UAAU,OAAM,GAAE;AACnF,WAAO,UAAU,QAAQ,MAAM,YAAY,GAAG;EAClD;AAEA,gBAAc,gBAAgB,SAAS,cAAcA,QAAO,MAAI;AAC5D,WAAO,UAAU,SAASA,QAAO,MAAM,IAAI;EAC/C;AAEA,gBAAc,uBAAuB,SAAS,qBAAqBA,QAAO,MAAI;AAC1E,WAAO,UAAU,gBAAgBA,QAAO,MAAM,IAAI;EACtD;AAEA,gBAAc,uBAAuB,SAAS,qBAAqBA,QAAO,MAAI;AAC1E,WAAO,UAAU,gBAAgBA,QAAO,MAAM,IAAI;EACtD;AAEA,gBAAc,gBAAgB,SAAS,cAAc,UAAU,QAAQ,aAAW;AAC9E,WAAO,UAAU,SAAS,UAAU,QAAQ,aAAa,IAAI;EACjE;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,iBAAe;AACtE,WAAO,UAAU,YAAY,iBAAiB,IAAI;EACtD;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,iBAAe;AACtE,WAAO,UAAU,YAAY,iBAAiB,IAAI;EACtD;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,UAAU,MAAM,GAAG;EACxC;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,UAAU,MAAM,GAAG;EACxC;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,UAAU,UAAU,SAAO;AACpF,WAAO,UAAU,aAAa,MAAM,OAAO;EAC/C;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,UAAU,KAAG;AACpE,WAAO,UAAU,YAAY,MAAM,UAAU,GAAG;EACpD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,UAAU,MAAM,UAAU,OAAM,GAAE;AACjG,WAAO,UAAU,gBAAgB,MAAM,UAAU,GAAG;EACxD;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,UAAU,KAAG;AACpE,WAAO,UAAU,YAAY,MAAM,UAAU,GAAG;EACpD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAU,KAAG;AAClF,WAAO,UAAU,mBAAmB,MAAM,UAAU,GAAG;EAC3D;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,UAAU,MAAM,UAAU,OAAM,GAAE;AACjG,WAAO,UAAU,gBAAgB,MAAM,UAAU,GAAG;EACxD;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,IAAI,KAAG;AAC5D,WAAO,UAAU,WAAW,MAAM,IAAI,GAAG;EAC7C;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,IAAI,KAAG;AAC1E,WAAO,UAAU,kBAAkB,MAAM,IAAI,GAAG;EACpD;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,IAAI,KAAG;AAC1E,WAAO,UAAU,kBAAkB,MAAM,IAAI,GAAG;EACpD;AAEA,gBAAc,sBAAsB,SAAS,oBAAoB,IAAI,KAAG;AACpE,WAAO,UAAU,eAAe,MAAM,IAAI,GAAG;EACjD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,MAAM,KAAG;AAC9E,WAAO,UAAU,mBAAmB,MAAM,MAAM,GAAG;EACvD;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,MAAM,MAAM,UAAU,OAAM,GAAE;AACjH,WAAO,UAAU,0BAA0B,MAAM,MAAM,GAAG;EAC9D;AAEA,gBAAc,iCAAiC,SAAS,+BAA+B,MAAM,MAAM,UAAU,OAAM,GAAE;AACjH,WAAO,UAAU,0BAA0B,MAAM,MAAM,GAAG;EAC9D;AAEA,gBAAc,8BAA8B,SAAS,4BAA4B,MAAM,MAAM,UAAU,OAAM,GAAE;AAC3G,WAAO,UAAU,uBAAuB,MAAM,MAAM,GAAG;EAC3D;AAEA,gBAAc,gBAAgB,SAAS,cAAc,MAAM,MAAM,UAAU,OAAM,GAAE;AAC/E,WAAO,UAAU,SAAS,MAAM,MAAM,GAAG;EAC7C;AAEA,gBAAc,gBAAgB,SAAS,cAAc,MAAM,MAAM,UAAU,OAAM,GAAE;AAC/E,WAAO,UAAU,SAAS,MAAM,MAAM,GAAG;EAC7C;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,OAAO,MAAM,UAAU,OAAM,GAAE;AAClG,WAAO,UAAU,kBAAkB,MAAM,OAAO,GAAG;EACvD;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,OAAO,MAAM,UAAU,OAAM,GAAE;AAClG,WAAO,UAAU,kBAAkB,MAAM,OAAO,GAAG;EACvD;AAEA,gBAAc,sBAAsB,SAAS,oBAAoB,OAAO,OAAK;AACzE,WAAO,UAAU,eAAe,OAAO,OAAO,IAAI;EACtD;AAEA,gBAAc,gBAAgB,SAAS,cAAc,MAAM,UAAU,OAAM,GAAE;AACzE,WAAO,UAAU,SAAS,MAAM,GAAG;EACvC;AAEA,gBAAc,cAAc,SAAS,YAAY,UAAU,KAAG;AAC1D,WAAO,UAAU,OAAO,MAAM,UAAU,GAAG;EAC/C;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,UAAU,KAAG;AACxE,WAAO,UAAU,cAAc,MAAM,UAAU,GAAG;EACtD;AAEA,gBAAc,qBAAqB,SAAS,mBAAmB,UAAU,KAAG;AACxE,WAAO,UAAU,cAAc,MAAM,UAAU,GAAG;EACtD;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,UAAU,KAAG;AAClE,WAAO,UAAU,WAAW,MAAM,UAAU,GAAG;EACnD;AAEA,gBAAc,kBAAkB,SAAS,gBAAgBA,QAAO,MAAM,KAAG;AACrE,WAAO,UAAU,WAAW,MAAMA,QAAO,MAAM,GAAG;EACtD;AAEA,gBAAc,yBAAyB,SAAS,uBAAuBA,QAAO,MAAM,KAAG;AACnF,WAAO,UAAU,kBAAkB,MAAMA,QAAO,MAAM,GAAG;EAC7D;AAEA,gBAAc,yBAAyB,SAAS,uBAAuBA,QAAO,MAAM,KAAG;AACnF,WAAO,UAAU,kBAAkB,MAAMA,QAAO,MAAM,GAAG;EAC7D;AAEA,gBAAc,YAAY,SAAS,UAAU,IAAI,qBAAqB,MAAM,UAAU,OAAM,GAAE;AAC1F,WAAO,UAAU,KAAK,MAAM,IAAI,qBAAqB,GAAG;EAC5D;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,IAAI,qBAAqB,iBAAiB,eAAe,QAAQ,MAAM,UAAU,OAAM,GAAE;AAChJ,WAAO,UAAU,YAAY,MAAM,IAAI,qBAAqB,gBAAgB,GAAG;EACnF;AAEA,gBAAc,aAAa,SAAS,WAAW,IAAI,qBAAqB,MAAM,UAAU,OAAM,GAAE;AAC5F,WAAO,UAAU,MAAM,MAAM,IAAI,qBAAqB,GAAG;EAC7D;AAEA,gBAAc,oBAAoB,SAAS,kBAAkB,IAAI,qBAAqB,iBAAiB,eAAe,QAAQ,MAAM,UAAU,OAAM,GAAE;AAClJ,WAAO,UAAU,aAAa,MAAM,IAAI,qBAAqB,gBAAgB,GAAG;EACpF;AAIA,MAAI,iBAAiB,CAAA;AAErB,iBAAe,YAAY,SAAS,UAAU,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAE;AACxE,WAAO,WAAW,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EAC9D;AAEA,iBAAe,kBAAkB,SAAS,gBAAgB,MAAM,WAAW,OAAM,GAAE;AAC/E,WAAO,WAAW,UAAU,MAAM,GAAG;EACzC;AAEA,iBAAe,eAAe,SAAS,aAAa,MAAM,WAAW,OAAM,GAAE;AACzE,WAAO,WAAW,OAAO,MAAM,GAAG;EACtC;AAEA,iBAAe,kBAAkB,SAAS,gBAAgB,MAAM,WAAW,OAAM,GAAE;AAC/E,WAAO,WAAW,UAAU,MAAM,GAAG;EACzC;AAEA,iBAAe,aAAa,SAAS,WAAW,MAAI;AAChD,WAAO,WAAW,KAAK,MAAM,IAAI;EACrC;AAEA,iBAAe,iBAAiB,SAAS,iBAAc;AACnD,WAAO,WAAW,SAAS,IAAI;EACnC;AAEA,iBAAe,oBAAoB,SAAS,kBAAkB,MAAM,UAAU,OAAM,GAAE;AAClF,WAAO,WAAW,YAAY,MAAM,GAAG;EAC3C;AAEA,iBAAe,oBAAoB,SAAS,kBAAkB,KAAG;AAC7D,WAAO,WAAW,YAAY,MAAM,GAAG;EAC3C;AAEA,iBAAe,2BAA2B,SAAS,yBAAyB,MAAM,UAAU,OAAM,GAAE;AAChG,WAAO,WAAW,mBAAmB,MAAM,GAAG;EAClD;AAEA,iBAAe,2BAA2B,SAAS,yBAAyB,MAAM,UAAU,OAAM,GAAE;AAChG,WAAO,WAAW,mBAAmB,MAAM,GAAG;EAClD;AAEA,iBAAe,wBAAwB,SAAS,sBAAsB,MAAM,UAAU,OAAM,GAAE;AAC1F,WAAO,WAAW,gBAAgB,MAAM,GAAG;EAC/C;AAEA,iBAAe,oBAAoB,SAAS,kBAAkB,UAAQ;AAClE,WAAO,WAAW,YAAY,MAAM,QAAQ;EAChD;AAEA,iBAAe,oBAAoB,SAAS,kBAAkB,UAAQ;AAClE,WAAO,WAAW,YAAY,MAAM,QAAQ;EAChD;AAEA,iBAAe,2BAA2B,SAAS,yBAAyB,UAAQ;AAChF,WAAO,WAAW,mBAAmB,MAAM,QAAQ;EACvD;AAEA,iBAAe,2BAA2B,SAAS,yBAAyB,UAAQ;AAChF,WAAO,WAAW,mBAAmB,MAAM,QAAQ;EACvD;AAEA,iBAAe,wBAAwB,SAAS,sBAAsB,UAAQ;AAC1E,WAAO,WAAW,gBAAgB,MAAM,QAAQ;EACpD;AAEA,iBAAe,4BAA4B,SAAS,0BAA0B,UAAU,UAAQ;AAC5F,WAAO,WAAW,oBAAoB,MAAM,UAAU,QAAQ;EAClE;AAEA,iBAAe,mCAAmC,SAAS,iCAAiC,UAAU,UAAQ;AAC1G,WAAO,WAAW,2BAA2B,MAAM,UAAU,QAAQ;EACzE;AAEA,iBAAe,mCAAmC,SAAS,iCAAiC,UAAU,UAAQ;AAC1G,WAAO,WAAW,2BAA2B,MAAM,UAAU,QAAQ;EACzE;AAEA,iBAAe,gCAAgC,SAAS,8BAA8B,UAAU,UAAQ;AACpG,WAAO,WAAW,wBAAwB,MAAM,UAAU,QAAQ;EACtE;AAEA,iBAAe,qBAAqB,SAAS,mBAAmB,UAAU,UAAU,SAAO;AACvF,WAAO,WAAW,aAAa,MAAM,OAAO;EAChD;AAEA,iBAAe,eAAe,SAAS,eAAY;AAC/C,WAAO,WAAW,OAAO,IAAI;EACjC;AAEA,iBAAe,sBAAsB,SAAS,sBAAmB;AAC7D,WAAO,WAAW,cAAc,IAAI;EACxC;AAEA,iBAAe,YAAY,SAAS,UAAU,MAAM,MAAM,WAAW,OAAM,GAAE;AACzE,WAAO,WAAW,IAAI,MAAM,MAAM,GAAG;EACzC;AAEA,iBAAe,gBAAgB,SAAS,cAAc,MAAM,CAAC,UAAU,OAAM,GAAI,UAAU,OAAM,GAAI,UAAU,OAAM,CAAE,GAAC;AACpH,WAAO,WAAW,QAAQ,MAAM,GAAG;EACvC;AAEA,iBAAe,mBAAmB,SAAS,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAChF,WAAO,WAAW,WAAW,MAAM,GAAG;EAC1C;AAEA,iBAAe,oBAAoB,SAAS,kBAAkB,KAAG;AAC7D,WAAO,WAAW,YAAY,MAAM,GAAG;EAC3C;AAEA,iBAAe,gBAAgB,SAAS,cAAc,MAAM,UAAU,OAAM,GAAE;AAC1E,WAAO,WAAW,QAAQ,MAAM,GAAG;EACvC;AAEA,iBAAe,iBAAiB,SAAS,eAAe,KAAG;AACvD,WAAO,WAAW,SAAS,MAAM,GAAG;EACxC;AAEA,iBAAe,cAAc,SAAS,YAAY,MAAM,UAAU,OAAM,GAAE;AACtE,WAAO,WAAW,MAAM,MAAM,GAAG;EACrC;AAEA,iBAAe,gBAAgB,SAAS,cAAc,KAAG;AACrD,WAAO,WAAW,QAAQ,MAAM,GAAG;EACvC;AAEA,iBAAe,gBAAgB,SAAS,cAAc,qBAAqB,MAAM,WAAW,OAAM,GAAE;AAChG,WAAO,WAAW,QAAQ,MAAM,qBAAqB,GAAG;EAC5D;AAEA,iBAAe,gBAAgB,SAAS,cAAc,qBAAqB,MAAM,WAAW,OAAM,GAAE;AAChG,WAAO,WAAW,QAAQ,MAAM,qBAAqB,GAAG;EAC5D;AAEA,iBAAe,mBAAmB,SAAS,iBAAiBA,QAAO,MAAM,KAAG;AACxE,WAAO,WAAW,WAAW,MAAMA,QAAO,MAAM,GAAG;EACvD;AAEA,iBAAe,0BAA0B,SAAS,wBAAwBA,QAAO,MAAM,KAAG;AACtF,WAAO,WAAW,kBAAkB,MAAMA,QAAO,MAAM,GAAG;EAC9D;AAEA,iBAAe,0BAA0B,SAAS,wBAAwBA,QAAO,MAAM,MAAM,WAAW,OAAM,GAAE;AAC5G,WAAO,WAAW,kBAAkB,MAAMA,QAAO,MAAM,GAAG;EAC9D;AAEA,iBAAe,iBAAiB,SAAS,eAAe,MAAM,UAAU,OAAM,GAAE;AAC5E,WAAO,WAAW,SAAS,MAAM,GAAG;EACxC;AAEA,iBAAe,mBAAmB,SAAS,iBAAiB,QAAM;AAC9D,WAAO,WAAW,WAAW,QAAQ,IAAI;EAC7C;AAEA,iBAAe,aAAa,SAAS,WAAW,IAAI,qBAAqB,MAAM,WAAW,OAAM,GAAE;AAC9F,WAAO,WAAW,KAAK,MAAM,IAAI,qBAAqB,GAAG;EAC7D;AAEA,iBAAe,oBAAoB,SAAS,kBAAkB,IAAI,qBAAqB,iBAAiB,eAAe,QAAQ,MAAM,WAAW,OAAM,GAAE;AACpJ,WAAO,WAAW,YAAY,MAAM,IAAI,qBAAqB,gBAAgB,GAAG;EACpF;AAEA,iBAAe,cAAc,SAAS,YAAY,IAAI,qBAAqB,MAAM,WAAW,OAAM,GAAE;AAChG,WAAO,WAAW,MAAM,MAAM,IAAI,qBAAqB,GAAG;EAC9D;AAEA,iBAAe,qBAAqB,SAAS,mBAAmB,IAAI,qBAAqB,iBAAiB,eAAe,QAAQ,MAAM,WAAW,OAAM,GAAE;AACtJ,WAAO,WAAW,aAAa,MAAM,IAAI,qBAAqB,gBAAgB,GAAG;EACrF;AAIA,MAAI,gBAAgB,CAAA;AAEpB,gBAAc,WAAW,SAAS,SAC9B,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,KAAG;AAClB,WAAO,UAAU,IAAI,MACjB,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,GAAG;EAE1B;AAEA,gBAAc,YAAY,SAAS,UAAU,QAAM;AAC/C,WAAO,UAAU,KAAK,QAAQ,IAAI;EACtC;AAEA,gBAAc,gBAAgB,SAAS,gBAAa;AAChD,WAAO,UAAU,SAAS,IAAI;EAClC;AAEA,gBAAc,cAAc,SAAS,YAAY,MAAM,UAAU,OAAM,GAAE;AACrE,WAAO,UAAU,OAAO,MAAM,GAAG;EACrC;AAEA,gBAAc,WAAW,SAAS,SAAS,QAAQ,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,IAAI,MAAM,QAAQ,GAAG;EAC1C;AAEA,gBAAc,aAAa,SAAS,WAAW,QAAQ,MAAM,UAAU,OAAM,GAAE;AAC3E,WAAO,UAAU,MAAM,MAAM,QAAQ,GAAG;EAC5C;AAEA,gBAAc,aAAa,SAAS,WAAW,MAAM,UAAU,OAAM,GAAE;AACnE,WAAO,UAAU,MAAM,MAAM,GAAG;EACpC;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAC/E,WAAO,UAAU,YAAY,MAAM,GAAG;EAC1C;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,MAAM,UAAU,OAAM,GAAE;AAC/E,WAAO,UAAU,YAAY,MAAM,GAAG;EAC1C;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,MAAM,UAAU,OAAM,GAAE;AAC7F,WAAO,UAAU,mBAAmB,MAAM,GAAG;EACjD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,MAAM,UAAU,OAAM,GAAE;AAC7F,WAAO,UAAU,mBAAmB,MAAM,GAAG;EACjD;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,MAAM,UAAU,OAAM,GAAE;AACvF,WAAO,UAAU,gBAAgB,MAAM,GAAG;EAC9C;AAEA,gBAAc,gBAAgB,SAAS,cAAc,MAAM,UAAU,OAAM,GAAE;AACzE,WAAO,UAAU,SAAS,MAAM,GAAG;EACvC;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,UAAQ;AAC/D,WAAO,UAAU,YAAY,MAAM,QAAQ;EAC/C;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,UAAQ;AAC/D,WAAO,UAAU,YAAY,MAAM,QAAQ;EAC/C;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAQ;AAC7E,WAAO,UAAU,mBAAmB,MAAM,QAAQ;EACtD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,UAAQ;AAC7E,WAAO,UAAU,mBAAmB,MAAM,QAAQ;EACtD;AAEA,gBAAc,uBAAuB,SAAS,qBAAqB,UAAQ;AACvE,WAAO,UAAU,gBAAgB,MAAM,QAAQ;EACnD;AAEA,gBAAc,gBAAgB,SAAS,cAAcC,QAAK;AACtD,WAAO,UAAU,SAAS,MAAMA,MAAK;EACzC;AAEA,gBAAc,gCAAgC,SAAS,8BAA8B,UAAU,UAAUA,QAAK;AAC1G,WAAO,UAAU,yBAAyB,MAAM,UAAU,UAAUA,MAAK;EAC7E;AAEA,gBAAc,uCAAuC,SAAS,qCAAqC,UAAU,UAAUA,QAAK;AACxH,WAAO,UAAU,gCAAgC,MAAM,UAAU,UAAUA,MAAK;EACpF;AAEA,gBAAc,uCAAuC,SAAS,qCAAqC,UAAU,UAAUA,QAAK;AACxH,WAAO,UAAU,gCAAgC,MAAM,UAAU,UAAUA,MAAK;EACpF;AAEA,gBAAc,oCAAoC,SAAS,kCAAkC,UAAU,UAAUA,QAAK;AAClH,WAAO,UAAU,6BAA6B,MAAM,UAAU,UAAUA,MAAK;EACjF;AAEA,gBAAc,2BAA2B,SAAS,yBAAyB,UAAU,UAAQ;AACzF,WAAO,UAAU,oBAAoB,MAAM,UAAU,QAAQ;EACjE;AAEA,gBAAc,kCAAkC,SAAS,gCAAgC,UAAU,UAAQ;AACvG,WAAO,UAAU,2BAA2B,MAAM,UAAU,QAAQ;EACxE;AAEA,gBAAc,kCAAkC,SAAS,gCAAgC,UAAU,UAAQ;AACvG,WAAO,UAAU,2BAA2B,MAAM,UAAU,QAAQ;EACxE;AAEA,gBAAc,+BAA+B,SAAS,6BAA6B,UAAU,UAAQ;AACjG,WAAO,UAAU,wBAAwB,MAAM,UAAU,QAAQ;EACrE;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,CAAC,UAAU,OAAM,GAAI,UAAU,OAAM,GAAI,UAAU,OAAM,CAAE,GAAC;AACjH,WAAO,UAAU,QAAQ,MAAM,GAAG;EACtC;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,MAAM,UAAU,OAAM,GAAE;AAC7E,WAAO,UAAU,WAAW,MAAM,GAAG;EACzC;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,KAAG;AAC1D,WAAO,UAAU,YAAY,MAAM,GAAG;EAC1C;AAEA,gBAAc,eAAe,SAAS,aAAa,MAAM,UAAU,OAAM,GAAE;AACvE,WAAO,UAAU,QAAQ,MAAM,GAAG;EACtC;AAEA,gBAAc,gBAAgB,SAAS,cAAc,KAAG;AACpD,WAAO,UAAU,SAAS,MAAM,GAAG;EACvC;AAEA,gBAAc,aAAa,SAAS,WAAW,MAAM,UAAU,OAAM,GAAE;AACnE,WAAO,UAAU,MAAM,MAAM,GAAG;EACpC;AAEA,gBAAc,eAAe,SAAS,aAAa,KAAG;AAClD,WAAO,UAAU,QAAQ,MAAM,GAAG;EACtC;AAEA,gBAAc,eAAe,SAAS,aAAa,uBAAuB,MAAM,UAAU,OAAM,GAAE;AAC9F,WAAO,UAAU,QAAQ,MAAM,uBAAuB,GAAG;EAC7D;AAEA,gBAAc,eAAe,SAAS,aAAa,uBAAuB,MAAM,UAAU,OAAM,GAAE;AAC9F,WAAO,UAAU,QAAQ,MAAM,uBAAuB,GAAG;EAC7D;AAEA,gBAAc,uBAAuB,SAAS,uBAAoB;AAC9D,WAAO,UAAU,gBAAgB,IAAI;EACzC;AAEA,gBAAc,cAAc,SAAS,YAAY,MAAM,WAAW,OAAM,GAAE;AACtE,WAAO,UAAU,OAAO,MAAM,GAAG;EACrC;AAEA,gBAAc,gBAAgB,SAAS,cAAc,MAAI;AACrD,WAAO,UAAU,SAAS,MAAM,IAAI;EACxC;AAIA,MAAI,0BAA0B;IAC1B,MAAM;IAAW,kBAAkB;IAAW,WAAW;IAAW,YAAY;IAAW,YAAY;IAAW,UAAU;IAC5H,WAAW;IAAW,WAAW;IAAW,aAAa;IAAW,aAAa;;AAErF,WAAS,0BAA0B,yBAAyB;AACxD,gBAAY,iBAAiB,eAAe,wBAAwB,OAAO,MAAM,IAAI;AACrF,gBAAY,iBAAiB,eAAe,wBAAwB,OAAO,MAAM,IAAI;AAErF,gBAAY,iBAAiB,eAAe,wBAAwB,OAAO,MAAM,IAAI;AACrF,gBAAY,iBAAiB,gBAAgB,wBAAwB,OAAO,MAAM,IAAI;AAEtF,gBAAY,iBAAiB,eAAe,wBAAwB,OAAO,MAAM,IAAI;EACzF;AACJ;;;ACpvCM,SAAU,oBAAiB;AAC7B,6BAA0B;AAC9B;AAEA,SAAS,6BAA0B;AAE/B,QAAM,gBAAqC,CAAA;AAE3C,gBAAc,WAAW,SAAS,SAC9B,KAAa,KAAc,KAC3B,KAAc,KAAc,KAC5B,KAAc,KAAc,KAAY;AACxC,WAAO,UAAU,IAAI,MACjB,KAAK,KAAM,KACX,KAAM,KAAM,KACZ,KAAM,KAAM,GAAI;EAExB;AAEA,gBAAc,YAAY,SAAS,UAAsC,QAAyB;AAC9F,WAAO,UAAU,KAAK,QAAQ,IAAI;EACtC;AAEA,gBAAc,aAAa,SAAS,aAAU;AAC1C,WAAO,UAAU,MAAS,IAAI;EAClC;AAEA,gBAAc,iBAAiB,SAAS,eAAwE,KAAiB;AAC7H,WAAO,UAAU,UAAU,MAAM,GAAI;EACzC;AAEA,gBAAc,iBAAiB,SAAS,eAAwE,KAAiB;AAC7H,WAAO,UAAU,UAAU,MAAM,GAAI;EACzC;AAEA,gBAAc,cAAc,SAAS,YAAwE,KAAoB;AAC7H,WAAO,UAAU,OAAO,MAAM,GAAI;EACtC;AACA,gBAAc,gBAAgB,SAAS,cAA0C,UAA6B,QAA2B,aAA8B;AACnK,WAAO,UAAU,SAAS,UAAU,QAAQ,aAAa,IAAI;EACjE;AAEA,aAAW,0BAA0B,oBAAoB,oBAAoB;AACzE,gBAAY,iBAAiB,eAAe,uBAAuB,WAAW,OAAO,MAAM,IAAI;EACnG;AACJ;;;AC7CM,SAAU,oBAAiB;AAC7B,6BAA0B;AAC9B;AAEA,SAAS,6BAA0B;AAE/B,QAAM,gBAAqC,CAAA;AAE3C,gBAAc,WAAW,SAAS,SAAqC,GAAW,GAAU;AACxF,WAAO,UAAU,IAAI,MAAM,GAAG,CAAE;EACpC;AAEA,gBAAc,YAAY,SAAS,UAAsC,QAAyB;AAC9F,WAAO,UAAU,KAAK,QAAQ,IAAI;EACtC;AAEA,gBAAc,aAAa,SAAS,aAAU;AAC1C,WAAO,UAAU,MAAS,IAAI;EAClC;AAEA,gBAAc,cAAc,SAAS,cAAW;AAC5C,WAAO,UAAU,OAAO,IAAI;EAChC;AAEA,gBAAc,iBAAiB,SAAS,eAAwE,KAAO;AACnH,WAAO,UAAU,UAAU,MAAM,GAAI;EACzC;AAEA,gBAAc,YAAY,SAAS,YAAS;AACxC,WAAO,UAAU,KAAK,IAAI;EAC9B;AAEA,gBAAc,cAAc,SAAS,YAAqC,SAAgB;AACtF,WAAO,UAAU,OAAO,MAAM,OAAO;EACzC;AAEA,aAAW,0BAA0B,oBAAoB,oBAAoB;AACzE,gBAAY,iBAAiB,eAAe,uBAAuB,WAAW,OAAO,MAAM,IAAI;EACnG;AACJ;;;ACtCM,SAAUC,QAAwB,QAAmB;AACvD,SAAO,OAAO,MAAM,CAAC;AACzB;AAEM,SAAUC,QAAO,QAA0B,OAAyB,UAAkB,GAAC;AACzF,MAAIA,UAAS,OAAO,UAAU,MAAM;AAEpC,WAAS,IAAI,GAAG,IAAI,OAAO,UAAUA,SAAQ,KAAK;AAC9C,IAAAA,UAASA,WAAW,KAAK,IAAI,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK;EAC1D;AAEA,SAAOA;AACX;AAEM,SAAUC,MAAuB,QAAS;AAC5C,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,WAAO,CAAC,IAAI;EAChB;AAEA,SAAO;AACX;AAEM,SAAUC,QAAO,QAA0B,UAAU,GAAC;AACxD,MAAID,QAAO;AAEX,WAAS,IAAI,GAAG,IAAI,OAAO,UAAUA,OAAM,KAAK;AAC5C,IAAAA,QAAOA,SAAS,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK;EAC3C;AAEA,SAAOA;AACX;AAIM,SAAUE,OAA0C,QAAqB,OAAe,MAAa,SAAS,MAAS,MAAM,GAAC;AAChI,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,CAAC,IAAI,OAAO,CAAC,IAAI;EACzB;AAEA,SAAO;AACX;AAIM,SAAU,MAA0C,QAAqB,MAAa,SAAS,MAAS,MAAM,GAAC;AACjH,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,CAAC,IAAI,KAAK,MAAM,OAAO,CAAC,CAAC;EACjC;AAEA,SAAO;AACX;AAIM,SAAU,MAA0C,QAAqB,MAAa,SAAS,MAAS,MAAM,GAAC;AACjH,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,CAAC,IAAI,KAAK,MAAM,OAAO,CAAC,CAAC;EACjC;AAEA,SAAO;AACX;AAIM,SAAU,KAAyC,QAAqB,MAAa,SAAS,MAAS,MAAM,GAAC;AAChH,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;EAChC;AAEA,SAAO;AACX;AAIM,SAAUC,OAA0C,QAAqB,OAAe,KAAa,MAAa,SAAS,MAAS,MAAM,GAAC;AAC7I,QAAM,aAAc,SAAS,OAAQ,QAAQ,CAAC,OAAO;AACrD,QAAM,WAAY,OAAO,OAAQ,MAAM,OAAO;AAC9C,QAAM,MAAM,KAAK,IAAI,YAAY,QAAQ;AACzC,QAAM,MAAM,KAAK,IAAI,YAAY,QAAQ;AAEzC,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,CAAC,IAAI,UAAU,MAAM,OAAO,CAAC,GAAG,KAAK,GAAG;EAChD;AAEA,SAAO;AACX;AAEM,SAAUC,UAAS,QAA0B,gBAAwB,GAAC;AACxE,QAAM,UAAU,qBAAqB,QAAQ,aAAa;AAC1D,SAAO;AACX;AAEM,SAAUC,KAAI,QAA0B,gBAAwB,GAAC;AACnE,QAAM,UAAU,qBAAqB,QAAQ,aAAa;AAC1D,UAAQ,IAAI,OAAO;AAEnB,SAAO;AACX;AAEM,SAAUC,OAAM,QAA0B,gBAAwB,GAAC;AACrE,QAAM,UAAU,qBAAqB,QAAQ,aAAa;AAC1D,UAAQ,MAAM,OAAO;AAErB,SAAO;AACX;AAEM,SAAUC,MAAK,QAA0B,gBAAwB,GAAC;AACpE,QAAM,UAAU,qBAAqB,QAAQ,aAAa;AAC1D,UAAQ,KAAK,OAAO;AAEpB,SAAO;AACX;AAEO,IAAM,WAAW;EACpB,OAAAT;EACA,QAAAC;EACA,MAAAC;EACA,QAAAC;EACA,OAAAC;EACA;EACA;EACA;EACA,OAAAC;EACA,UAAAC;EACA,KAAAC;EACA,OAAAC;EACA,MAAAC;;AAKJ,SAAS,qBAAqB,QAA0B,eAAsB;AAC1E,MAAI,UAAU;AAEd,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,QAAI,KAAK,GAAG;AACR,gBAAU,QAAQ,OAAO,IAAI;IACjC;AAEA,QAAI,iBAAiB,MAAM;AACvB,gBAAU,QAAQ,OAAO,OAAO,CAAC,EAAE,QAAQ,aAAa,CAAC;IAC7D,OAAO;AACH,gBAAU,QAAQ,OAAO,OAAO,CAAC,EAAE,SAAQ,CAAE;IACjD;EACJ;AAEA,YAAU,QAAQ,OAAO,GAAG;AAC5B,SAAO;AACX;;;ACrJM,SAAU,mBAAgB;AAC5B,4BAAyB;AAC7B;AAEA,SAAS,4BAAyB;AAE9B,QAAM,eAAoC,CAAA;AAE1C,eAAa,YAAY,SAAS,YAAS;AACvC,WAAO,SAAS,MAAS,IAAI;EACjC;AAEA,eAAa,aAAa,SAAS,WAAmC,QAA0B,SAAgB;AAC5G,WAAO,SAAS,OAAO,MAAM,QAAQ,OAAO;EAChD;AAEA,eAAa,WAAW,SAAS,WAAQ;AACrC,WAAO,SAAS,KAAK,IAAI;EAC7B;AAEA,eAAa,aAAa,SAAS,WAAmC,SAAgB;AAClF,WAAO,SAAS,OAAO,MAAM,OAAO;EACxC;AAEA,eAAa,YAAY,SAAS,UAAiE,OAAe,KAAO;AACrH,WAAO,SAAS,MAAM,MAAM,OAAO,GAAI;EAC3C;AAEA,eAAa,YAAY,SAAS,UAAiE,KAAO;AACtG,WAAO,SAAS,MAAM,MAAM,GAAI;EACpC;AAEA,eAAa,YAAY,SAAS,UAAiE,KAAO;AACtG,WAAO,SAAS,MAAM,MAAM,GAAI;EACpC;AAEA,eAAa,WAAW,SAAS,SAAgE,KAAO;AACpG,WAAO,SAAS,KAAK,MAAM,GAAI;EACnC;AAEA,eAAa,YAAY,SAAS,UAAiE,OAAe,KAAa,KAAO;AAClI,WAAO,SAAS,MAAM,MAAM,OAAO,KAAK,GAAI;EAChD;AAEA,eAAa,eAAe,SAAS,aAAqC,eAAsB;AAC5F,WAAO,SAAS,SAAS,MAAM,aAAa;EAChD;AAEA,eAAa,UAAU,SAAS,QAAgC,eAAsB;AAClF,WAAO,SAAS,IAAI,MAAM,aAAa;EAC3C;AAEA,eAAa,YAAY,SAAS,UAAkC,eAAsB;AACtF,WAAO,SAAS,MAAM,MAAM,aAAa;EAC7C;AAEA,eAAa,WAAW,SAAS,SAAiC,eAAsB;AACpF,WAAO,SAAS,KAAK,MAAM,aAAa;EAC5C;AAEA,aAAW,0BAA0B,oBAAoB,oBAAoB;AACzE,gBAAY,iBAAiB,cAAc,uBAAuB,WAAW,OAAO,MAAM,IAAI;EAClG;AACJ;;;ACjEM,SAAU,oBAAiB;AAC7B,6BAA0B;AAC9B;AAEA,SAAS,6BAA0B;AAE/B,QAAM,gBAAqC,CAAA;AAE3C,SAAO,eAAe,eAAe,cAAc;IAC/C,MAAG;AACC,aAAO,UAAU;IACrB;GACH;AAED,SAAO,eAAe,eAAe,sBAAsB;IACvD,MAAG;AACC,aAAO,UAAU;IACrB;GACH;AAED,SAAO,eAAe,eAAe,sBAAsB;IACvD,MAAG;AACC,aAAO,UAAU;IACrB;GACH;AAED,gBAAc,WAAW,SAAS,SAAS,OAAe,OAAe,KAAW;AAChF,WAAO,UAAU,MAAM,OAAO,OAAO,GAAG;EAC5C;AAEA,gBAAc,UAAU,SAAS,QAAQ,OAAe,UAAiB;AACrE,WAAO,UAAU,KAAK,OAAO,QAAQ;EACzC;AAEA,gBAAc,eAAe,SAAS,aAAaC,QAAa;AAC5D,WAAO,UAAU,UAAUA,MAAK;EACpC;AAEA,gBAAc,eAAe,SAAS,aAAaA,QAAa;AAC5D,WAAO,UAAU,UAAUA,MAAK;EACpC;AAEA,gBAAc,kBAAkB,SAAS,gBAAgB,QAAgB,eAAqB;AAC1F,WAAO,UAAU,aAAa,QAAQ,aAAa;EACvD;AAEA,gBAAc,gBAAgB,SAAS,cAAc,OAAe,kBAA0B,gBAAwB,eAAuB,aAAmB;AAC5J,WAAO,UAAU,WAAW,OAAO,kBAAkB,gBAAgB,eAAe,WAAW;EACnG;AAEA,gBAAc,YAAY,SAAS,UAAU,OAAgB,KAAY;AACrE,WAAO,UAAU,OAAO,OAAO,GAAG;EACtC;AAEA,gBAAc,eAAe,SAAS,aAAa,OAAe,KAAW;AACzE,WAAO,UAAU,UAAU,OAAO,GAAG;EACzC;AAEA,gBAAc,gBAAgB,SAAS,gBAAa;AAChD,WAAO,UAAU,WAAU;EAC/B;AAEA,gBAAc,gBAAgB,SAAS,gBAAa;AAChD,WAAO,UAAU,WAAU;EAC/B;AAEA,gBAAc,gBAAgB,SAAS,iBAAoB,MAAS;AAChE,WAAO,UAAU,WAAW,GAAG,IAAI;EACvC;AAEA,gBAAc,gBAAgB,SAAS,gBAAa;AAChD,WAAO,UAAU,WAAU;EAC/B;AAEA,gBAAc,UAAU,SAAS,QAAQ,MAAc,IAAY,qBAA2B;AAC1F,WAAO,UAAU,KAAK,MAAM,IAAI,mBAAmB;EACvD;AAEA,gBAAc,iBAAiB,SAAS,eAAe,MAAc,IAAY,qBAA6B,gBAA+B;AACzI,WAAO,UAAU,YAAY,MAAM,IAAI,qBAAqB,cAAc;EAC9E;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,MAAc,IAAY,qBAA6B,gBAA+B;AACzJ,WAAO,UAAU,oBAAoB,MAAM,IAAI,qBAAqB,cAAc;EACtF;AAEA,gBAAc,mBAAmB,SAAS,iBAAiB,MAAc,IAAU;AAC/E,WAAO,UAAU,cAAc,MAAM,EAAE;EAC3C;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,MAAc,IAAU;AAC7F,WAAO,UAAU,qBAAqB,MAAM,EAAE;EAClD;AAEA,gBAAc,0BAA0B,SAAS,wBAAwB,MAAc,IAAU;AAC7F,WAAO,UAAU,qBAAqB,MAAM,EAAE;EAClD;AAEA,gBAAc,yBAAyB,SAAS,uBAAuB,MAAc,IAAU;AAC3F,WAAO,UAAU,oBAAoB,MAAM,EAAE;EACjD;AAEA,gBAAc,gCAAgC,SAAS,8BAA8B,MAAc,IAAU;AACzG,WAAO,UAAU,2BAA2B,MAAM,EAAE;EACxD;AAEA,gBAAc,gCAAgC,SAAS,8BAA8B,MAAc,IAAU;AACzG,WAAO,UAAU,2BAA2B,MAAM,EAAE;EACxD;AAEA,gBAAc,gBAAgB,SAAS,cAAcA,QAAe,kBAA0B;AAC1F,WAAO,UAAU,WAAWA,QAAO,gBAAgB;EACvD;AAEA,gBAAc,uBAAuB,SAAS,qBAAqBA,QAAe,kBAA0B;AACxG,WAAO,UAAU,kBAAkBA,QAAO,gBAAgB;EAC9D;AAEA,gBAAc,uBAAuB,SAAS,qBAAqBA,QAAe,kBAA0B;AACxG,WAAO,UAAU,kBAAkBA,QAAO,gBAAgB;EAC9D;AAEA,gBAAc,wBAAwB,SAAS,sBAAsBA,QAAe,OAAe,KAAa,kBAA0B;AACtI,WAAO,UAAU,mBAAmBA,QAAO,OAAO,KAAK,gBAAgB;EAC3E;AAEA,gBAAc,+BAA+B,SAAS,6BAA6BA,QAAe,OAAe,KAAa,kBAA0B;AACpJ,WAAO,UAAU,0BAA0BA,QAAO,OAAO,KAAK,gBAAgB;EAClF;AAEA,gBAAc,+BAA+B,SAAS,6BAA6BA,QAAe,OAAe,KAAa,kBAA0B;AACpJ,WAAO,UAAU,0BAA0BA,QAAO,OAAO,KAAK,gBAAgB;EAClF;AAIA,cAAY,iBAAiB,eAAe,MAAM,OAAO,MAAM,IAAI;AACvE;;;AC1IM,SAAU,sBAAmB;AAC/B,gCAA6B;AACjC;AAEA,SAAS,gCAA6B;AAElC,QAAM,kBAAuC,CAAA;AAG7C,kBAAgB,MAAM,SAAS,IAAkB,QAAe;AAC5D,WAAO,KAAK,QAAO;EACvB;AAIA,cAAY,iBAAiB,iBAAiB,OAAO,WAAW,OAAO,MAAM,IAAI;AACrF;;;ACAM,SAAU,mBAAgB;AAC5B,oBAAiB;AAEjB,qBAAkB;AAClB,mBAAgB;AAChB,oBAAiB;AACjB,oBAAiB;AACjB,2BAAwB;AAExB,sBAAmB;AACvB;;;ACrBM,SAAU,gBAAa;AACzB,mBAAgB;AACpB;;;ACXA,SAAS,SAAS,cAAc;AAG1B,SAAU,yBAAsB;AAClC,iCAA8B;AAC9B,gCAA6B;AACjC;AAEA,SAAS,iCAA8B;AAEnC,MAAI,YAAY,CAAA;AAEhB,YAAU,eAAe,SAAS,eAAY;AAC1C,WAAO,KAAK;EAChB;AAEA,cAAY,iBAAiB,WAAW,QAAQ,WAAW,OAAO,MAAM,IAAI;AAChF;AAEA,SAAS,gCAA6B;AAElC,MAAI,YAAY,CAAA;AAEhB,YAAU,kBAAkB,SAAS,gBAAgB,KAAG;AACpD,QAAI,CAAC;AAAK,YAAM,MAAM,KAAK,EAAE,QAAQ,KAAK,SAAQ,GAAI,MAAM,IAAI,aAAa,CAAC,CAAC;AAE/E,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,aAAa,KAAK,OAAO;AAC/B,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;AACpC,YAAM,cAAc,aAAa,IAAI;AACrC,UAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,WAAW;AACpC,UAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,cAAc,CAAC;AACxC,UAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,cAAc,CAAC;IAC5C;AACA,WAAO;EACX;AAEA,YAAU,gBAAgB,SAAS,cAAc,KAAG;AAChD,QAAI,CAAC;AAAK,YAAM,MAAM,KAAK,EAAE,QAAQ,KAAK,SAAQ,GAAI,MAAM,IAAI,aAAa,CAAC,CAAC;AAE/E,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,cAAc,KAAK,OAAO,MAAM;AACtC,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;AACpC,YAAM,YAAY,aAAa,IAAI;AACnC,UAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,SAAS;AAClC,UAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,YAAY,CAAC;AACtC,UAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,YAAY,CAAC;IAC1C;AACA,WAAO;EACX;AAEA,YAAU,kBAAkB,SAAS,gBAAgB,MAAM,IAAI,aAAa,KAAK,QAAQ,GAAC;AACtF,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,cAAc,KAAK,OAAO,KAAK,KAAK;AAC1C,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;AACpC,YAAM,cAAc,aAAa;AACjC,UAAI,CAAC,IAAI,KAAK,QAAQ,WAAW;IACrC;AACA,WAAO;EACX;AAEA,YAAU,gBAAgB,SAAS,cAAc,MAAM,IAAI,MAAM,KAAK,QAAQ,GAAC;AAC3E,UAAM,UAAU,KAAK,QAAQ,KAAK;AAClC,UAAM,aAAc,KAAK,QAAQ,KAAK,IAAI,OAAQ;AAClD,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;AACpC,YAAM,YAAY,aAAa;AAC/B,UAAI,CAAC,IAAI,KAAK,QAAQ,WAAW,QAAQ,YAAY,CAAC,CAAC;IAC3D;AACA,WAAO;EACX;AAIA,cAAY,iBAAiB,WAAW,OAAO,WAAW,OAAO,MAAM,IAAI;AAC/E;;;AC1EA,SAAoB,gBAA6D;AAO3E,SAAU,sBAAmB;AAC/B,+BAA4B;AAChC;AAEA,SAAS,+BAA4B;AAEjC,QAAM,kBAAuC,CAAA;AAM7C,kBAAgB,iBAAiB,SAAS,eAA4D,aAAe;AACjH,WAAO,YAAY,YAAY,MAAM,WAAW;EACpD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAiE,aAAe;AAC3H,WAAO,YAAY,iBAAiB,MAAM,WAAW;EACzD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAiE,aAAe;AAC3H,WAAO,YAAY,iBAAiB,MAAM,WAAW;EACzD;AAIA,kBAAgB,iBAAiB,SAAS,eAA4D,aAAe;AACjH,WAAO,YAAY,YAAY,MAAM,WAAW;EACpD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAmE,aAAe;AAC/H,WAAO,YAAY,mBAAmB,MAAM,WAAW;EAC3D;AAEA,kBAAgB,wBAAwB,SAAS,sBAAmE,aAAe;AAC/H,WAAO,YAAY,mBAAmB,MAAM,WAAW;EAC3D;AAEA,kBAAgB,uBAAuB,SAAS,qBAAkE,aAAyB;AACvI,WAAO,YAAY,kBAAkB,MAAM,WAAY;EAC3D;AAEA,kBAAgB,qBAAqB,SAAS,mBAAmE,aAAe;AAC5H,WAAO,YAAY,gBAAgB,MAAM,WAAW;EACxD;AAIA,kBAAgB,sBAAsB,SAAS,oBAAiE,aAAe;AAC3H,WAAO,YAAY,iBAAiB,MAAM,WAAW;EACzD;AAEA,kBAAgB,6BAA6B,SAAS,2BAAwE,aAAe;AACzI,WAAO,YAAY,wBAAwB,MAAM,WAAW;EAChE;AAEA,kBAAgB,6BAA6B,SAAS,2BAAwE,aAAe;AACzI,WAAO,YAAY,wBAAwB,MAAM,WAAW;EAChE;AAEA,kBAAgB,4BAA4B,SAAS,0BAAuE,aAAyB;AACjJ,WAAO,YAAY,uBAAuB,MAAM,WAAY;EAChE;AAEA,kBAAgB,0BAA0B,SAAS,wBAAwE,aAAe;AACtI,WAAO,YAAY,qBAAqB,MAAM,WAAW;EAC7D;AAIA,kBAAgB,sBAAsB,SAAS,oBAAiE,aAAe;AAC3H,WAAO,YAAY,iBAAiB,MAAM,WAAW;EACzD;AAEA,kBAAgB,6BAA6B,SAAS,2BAAwE,aAAe;AACzI,WAAO,YAAY,wBAAwB,MAAM,WAAW;EAChE;AAEA,kBAAgB,6BAA6B,SAAS,2BAAwE,aAAe;AACzI,WAAO,YAAY,wBAAwB,MAAM,WAAW;EAChE;AAEA,kBAAgB,4BAA4B,SAAS,0BAAuE,aAAyB;AACjJ,WAAO,YAAY,uBAAuB,MAAM,WAAY;EAChE;AAEA,kBAAgB,0BAA0B,SAAS,wBAAwE,aAAe;AACtI,WAAO,YAAY,qBAAqB,MAAM,WAAW;EAC7D;AAIA,kBAAgB,cAAc,SAAS,YAAyD,UAAY;AACxG,WAAO,YAAY,SAAS,MAAM,QAAQ;EAC9C;AAEA,kBAAgB,mBAAmB,SAAS,iBAA8D,UAAY;AAClH,WAAO,YAAY,cAAc,MAAM,QAAQ;EACnD;AAEA,kBAAgB,mBAAmB,SAAS,iBAA8D,UAAY;AAClH,WAAO,YAAY,cAAc,MAAM,QAAQ;EACnD;AAIA,kBAAgB,kBAAkB,SAAS,gBAA6D,cAAgB;AACpH,WAAO,YAAY,aAAa,MAAM,YAAY;EACtD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAmE,cAAgB;AAChI,WAAO,YAAY,mBAAmB,MAAM,YAAY;EAC5D;AAEA,kBAAgB,sBAAsB,SAAS,oBAAqE,cAAgB;AAChI,WAAO,YAAY,iBAAiB,MAAM,YAAY;EAC1D;AAIA,kBAAgB,uBAAuB,SAAS,qBAAkE,cAAgB;AAC9H,WAAO,YAAY,kBAAkB,MAAM,YAAY;EAC3D;AAEA,kBAAgB,6BAA6B,SAAS,2BAAwE,cAAgB;AAC1I,WAAO,YAAY,wBAAwB,MAAM,YAAY;EACjE;AAEA,kBAAgB,2BAA2B,SAAS,yBAA0E,cAAgB;AAC1I,WAAO,YAAY,sBAAsB,MAAM,YAAY;EAC/D;AAIA,kBAAgB,uBAAuB,SAAS,qBAAkE,cAAgB;AAC9H,WAAO,YAAY,kBAAkB,MAAM,YAAY;EAC3D;AAEA,kBAAgB,6BAA6B,SAAS,2BAAwE,cAAgB;AAC1I,WAAO,YAAY,wBAAwB,MAAM,YAAY;EACjE;AAEA,kBAAgB,2BAA2B,SAAS,yBAA0E,cAAgB;AAC1I,WAAO,YAAY,sBAAsB,MAAM,YAAY;EAC/D;AAIA,kBAAgB,aAAa,SAAS,WAAqC,SAAqC;AAC5G,WAAO,YAAY,QAAQ,MAAM,OAAO;EAC5C;AAEA,kBAAgB,kBAAkB,SAAS,gBAA0C,SAAqC;AACtH,WAAO,YAAY,aAAa,MAAM,OAAO;EACjD;AAEA,kBAAgB,kBAAkB,SAAS,gBAA0C,SAAqC;AACtH,WAAO,YAAY,aAAa,MAAM,OAAO;EACjD;AAIA,kBAAgB,gBAAgB,SAAS,cAA2D,YAAc;AAC9G,WAAO,YAAY,WAAW,MAAM,UAAU;EAClD;AAEA,kBAAgB,qBAAqB,SAAS,mBAAgE,YAAc;AACxH,WAAO,YAAY,gBAAgB,MAAM,UAAU;EACvD;AAEA,kBAAgB,qBAAqB,SAAS,mBAAgE,YAAc;AACxH,WAAO,YAAY,gBAAgB,MAAM,UAAU;EACvD;AAIA,kBAAgB,iBAAiB,SAAS,eAA4D,aAAe;AACjH,WAAO,YAAY,YAAY,MAAM,WAAW;EACpD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAiE,aAAe;AAC3H,WAAO,YAAY,iBAAiB,MAAM,WAAW;EACzD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAiE,aAAe;AAC3H,WAAO,YAAY,iBAAiB,MAAM,WAAW;EACzD;AAIA,kBAAgB,WAAW,SAAS,SAAsD,OAAS;AAC/F,WAAO,YAAY,MAAM,MAAM,KAAK;EACxC;AAEA,kBAAgB,gBAAgB,SAAS,cAA2D,OAAS;AACzG,WAAO,YAAY,WAAW,MAAM,KAAK;EAC7C;AAEA,kBAAgB,gBAAgB,SAAS,cAA2D,OAAS;AACzG,WAAO,YAAY,WAAW,MAAM,KAAK;EAC7C;AAIA,kBAAgB,aAAa,SAAS,WAAwD,SAAW;AACrG,WAAO,YAAY,QAAQ,MAAM,OAAO;EAC5C;AAEA,kBAAgB,kBAAkB,SAAS,gBAA6D,SAAW;AAC/G,WAAO,YAAY,aAAa,MAAM,OAAO;EACjD;AAEA,kBAAgB,kBAAkB,SAAS,gBAA6D,SAAW;AAC/G,WAAO,YAAY,aAAa,MAAM,OAAO;EACjD;AAIA,kBAAgB,aAAa,SAAS,WAAwD,SAAW;AACrG,WAAO,YAAY,QAAQ,MAAM,OAAO;EAC5C;AAEA,kBAAgB,kBAAkB,SAAS,gBAA6D,SAAW;AAC/G,WAAO,YAAY,aAAa,MAAM,OAAO;EACjD;AAEA,kBAAgB,kBAAkB,SAAS,gBAA6D,SAAW;AAC/G,WAAO,YAAY,aAAa,MAAM,OAAO;EACjD;AAIA,kBAAgB,cAAc,SAAS,YAAyD,UAAY;AACxG,WAAO,YAAY,SAAS,MAAM,QAAQ;EAC9C;AAEA,kBAAgB,mBAAmB,SAAS,iBAA8D,UAAY;AAClH,WAAO,YAAY,cAAc,MAAM,QAAQ;EACnD;AAEA,kBAAgB,mBAAmB,SAAS,iBAA8D,UAAY;AAClH,WAAO,YAAY,cAAc,MAAM,QAAQ;EACnD;AAMA,kBAAgB,iBAAiB,SAAS,eAA+B,UAA2B;AAChG,WAAO,YAAY,YAAY,MAAM,QAAQ;EACjD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAA2B;AAC1G,WAAO,YAAY,iBAAiB,MAAM,QAAQ;EACtD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAA2B;AAC1G,WAAO,YAAY,iBAAiB,MAAM,QAAQ;EACtD;AAIA,kBAAgB,iBAAiB,SAAS,eAA+B,UAA2B;AAChG,WAAO,YAAY,YAAY,MAAM,QAAQ;EACjD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA2B;AAC9G,WAAO,YAAY,mBAAmB,MAAM,QAAQ;EACxD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA2B;AAC9G,WAAO,YAAY,mBAAmB,MAAM,QAAQ;EACxD;AAEA,kBAAgB,uBAAuB,SAAS,qBAAqC,UAA2B;AAC5G,WAAO,YAAY,kBAAkB,MAAM,QAAQ;EACvD;AAEA,kBAAgB,qBAAqB,SAAS,mBAAmC,UAA8B;AAC3G,WAAO,YAAY,gBAAgB,MAAM,QAAQ;EACrD;AAIA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAA2B;AAC1G,WAAO,YAAY,iBAAiB,MAAM,QAAQ;EACtD;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,UAA2B;AACxH,WAAO,YAAY,wBAAwB,MAAM,QAAQ;EAC7D;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,UAA2B;AACxH,WAAO,YAAY,wBAAwB,MAAM,QAAQ;EAC7D;AAEA,kBAAgB,4BAA4B,SAAS,0BAA0C,UAA2B;AACtH,WAAO,YAAY,uBAAuB,MAAM,QAAQ;EAC5D;AAEA,kBAAgB,0BAA0B,SAAS,wBAAwC,UAA8B;AACrH,WAAO,YAAY,qBAAqB,MAAM,QAAQ;EAC1D;AAIA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAA2B;AAC1G,WAAO,YAAY,iBAAiB,MAAM,QAAQ;EACtD;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,UAA2B;AACxH,WAAO,YAAY,wBAAwB,MAAM,QAAQ;EAC7D;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,UAA2B;AACxH,WAAO,YAAY,wBAAwB,MAAM,QAAQ;EAC7D;AAEA,kBAAgB,4BAA4B,SAAS,0BAA0C,UAA2B;AACtH,WAAO,YAAY,uBAAuB,MAAM,QAAQ;EAC5D;AAEA,kBAAgB,0BAA0B,SAAS,wBAAwC,UAA8B;AACrH,WAAO,YAAY,qBAAqB,MAAM,QAAQ;EAC1D;AAIA,kBAAgB,cAAc,SAAS,YAA4BC,QAAuB;AACtF,WAAO,YAAY,SAAS,MAAMA,MAAgB;EACtD;AAEA,kBAAgB,mBAAmB,SAAS,iBAAiCA,QAAuB;AAChG,WAAO,YAAY,cAAc,MAAMA,MAAgB;EAC3D;AAEA,kBAAgB,mBAAmB,SAAS,iBAAiCA,QAAuB;AAChG,WAAO,YAAY,cAAc,MAAMA,MAAgB;EAC3D;AAIA,kBAAgB,aAAa,SAAS,WAA2B,MAA0B,IAAwB,SAA2B;AAC1I,WAAO,YAAY,QAAQ,MAAM,MAAM,IAAI,OAAO;EACtD;AAEA,kBAAgB,kBAAkB,SAAS,gBAAgC,MAA0B,IAAwB,SAA2B;AACpJ,WAAO,YAAY,aAAa,MAAM,MAAM,IAAI,OAAO;EAC3D;AAEA,kBAAgB,kBAAkB,SAAS,gBAAgC,MAA0B,IAAwB,SAA2B;AACpJ,WAAO,YAAY,aAAa,MAAM,MAAM,IAAI,OAAO;EAC3D;AAIA,kBAAgB,gBAAgB,SAAS,cAA8B,SAA4B,IAAwB,MAAwB;AAC/I,WAAO,YAAY,WAAW,MAAM,SAAS,IAAI,IAAI;EACzD;AAEA,kBAAgB,qBAAqB,SAAS,mBAAmC,SAA4B,IAAwB,MAAwB;AACzJ,WAAO,YAAY,gBAAgB,MAAM,SAAS,IAAI,IAAI;EAC9D;AAEA,kBAAgB,qBAAqB,SAAS,mBAAmC,SAA4B,IAAwB,MAAwB;AACzJ,WAAO,YAAY,gBAAgB,MAAM,SAAS,IAAI,IAAI;EAC9D;AAIA,kBAAgB,iBAAiB,SAAS,eAA+B,UAA6B,IAAwB,MAAwB;AAClJ,WAAO,YAAY,YAAY,MAAM,UAAU,IAAI,IAAI;EAC3D;AAEA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAA6B,IAAwB,MAAwB;AAC5J,WAAO,YAAY,iBAAiB,MAAM,UAAU,IAAI,IAAI;EAChE;AAEA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAA6B,IAAwB,MAAwB;AAC5J,WAAO,YAAY,iBAAiB,MAAM,UAAU,IAAI,IAAI;EAChE;AAIA,kBAAgB,WAAW,SAAS,SAAyB,IAAuB,SAA6B,MAAwB;AACrI,WAAO,YAAY,MAAM,MAAM,IAAI,SAAS,IAAI;EACpD;AAEA,kBAAgB,gBAAgB,SAAS,cAA8B,IAAuB,SAA6B,MAAwB;AAC/I,WAAO,YAAY,WAAW,MAAM,IAAI,SAAS,IAAI;EACzD;AAEA,kBAAgB,gBAAgB,SAAS,cAA8B,IAAuB,SAA6B,MAAwB;AAC/I,WAAO,YAAY,WAAW,MAAM,IAAI,SAAS,IAAI;EACzD;AAIA,kBAAgB,aAAa,SAAS,WAA2B,MAAyB,SAA6B,MAAwB;AAC3I,WAAO,YAAY,QAAQ,MAAM,MAAM,SAAS,IAAI;EACxD;AAEA,kBAAgB,kBAAkB,SAAS,gBAAgC,MAAyB,SAA6B,MAAwB;AACrJ,WAAO,YAAY,aAAa,MAAM,MAAM,SAAS,IAAI;EAC7D;AAEA,kBAAgB,kBAAkB,SAAS,gBAAgC,MAAyB,SAA6B,MAAwB;AACrJ,WAAO,YAAY,aAAa,MAAM,MAAM,SAAS,IAAI;EAC7D;AAIA,kBAAgB,aAAa,SAAS,WAA2B,MAAyB,IAAwB,SAA2B;AACzI,WAAO,YAAY,QAAQ,MAAM,MAAM,IAAI,OAAO;EACtD;AAEA,kBAAgB,kBAAkB,SAAS,gBAAgC,MAAyB,IAAwB,SAA2B;AACnJ,WAAO,YAAY,aAAa,MAAM,MAAM,IAAI,OAAO;EAC3D;AAEA,kBAAgB,kBAAkB,SAAS,gBAAgC,MAAyB,IAAwB,SAA2B;AACnJ,WAAO,YAAY,aAAa,MAAM,MAAM,IAAI,OAAO;EAC3D;AAIA,kBAAgB,cAAc,SAAS,YAA4B,OAA0B,IAAwB,SAA2B;AAC5I,WAAO,YAAY,SAAS,MAAM,OAAO,IAAI,OAAO;EACxD;AAEA,kBAAgB,mBAAmB,SAAS,iBAAiC,OAA0B,IAAwB,SAA2B;AACtJ,WAAO,YAAY,cAAc,MAAM,OAAO,IAAI,OAAO;EAC7D;AAEA,kBAAgB,mBAAmB,SAAS,iBAAiC,OAA0B,IAAwB,SAA2B;AACtJ,WAAO,YAAY,cAAc,MAAM,OAAO,IAAI,OAAO;EAC7D;AAIA,kBAAgB,kBAAkB,SAAS,gBAAgC,WAA4B;AACnG,WAAO,YAAY,aAAa,MAAM,SAAS;EACnD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,WAA4B;AAC/G,WAAO,YAAY,mBAAmB,MAAM,SAAS;EACzD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAoC,WAAgC;AAC/G,WAAO,YAAY,iBAAiB,MAAM,SAAS;EACvD;AAIA,kBAAgB,uBAAuB,SAAS,qBAAqC,WAA4B;AAC7G,WAAO,YAAY,kBAAkB,MAAM,SAAS;EACxD;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,WAA4B;AACzH,WAAO,YAAY,wBAAwB,MAAM,SAAS;EAC9D;AAEA,kBAAgB,2BAA2B,SAAS,yBAAyC,WAAgC;AACzH,WAAO,YAAY,sBAAsB,MAAM,SAAS;EAC5D;AAIA,kBAAgB,uBAAuB,SAAS,qBAAqC,WAA4B;AAC7G,WAAO,YAAY,kBAAkB,MAAM,SAAS;EACxD;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,WAA4B;AACzH,WAAO,YAAY,wBAAwB,MAAM,SAAS;EAC9D;AAEA,kBAAgB,2BAA2B,SAAS,yBAAyC,WAAgC;AACzH,WAAO,YAAY,sBAAsB,MAAM,SAAS;EAC5D;AAMA,kBAAgB,mBAAmB,SAAS,mBAAgB;AACxD,WAAO,YAAY,cAAc,IAAI;EACzC;AAEA,kBAAgB,wBAAwB,SAAS,wBAAqB;AAClE,WAAO,YAAY,mBAAmB,IAAI;EAC9C;AAEA,kBAAgB,wBAAwB,SAAS,wBAAqB;AAClE,WAAO,YAAY,mBAAmB,IAAI;EAC9C;AAIA,kBAAgB,mBAAmB,SAAS,mBAAgB;AACxD,WAAO,YAAY,cAAc,IAAI;EACzC;AAEA,kBAAgB,wBAAwB,SAAS,wBAAqB;AAClE,WAAO,YAAY,mBAAmB,IAAI;EAC9C;AAEA,kBAAgB,wBAAwB,SAAS,wBAAqB;AAClE,WAAO,YAAY,mBAAmB,IAAI;EAC9C;AAIA,kBAAgB,gBAAgB,SAAS,gBAAa;AAClD,WAAO,YAAY,WAAW,IAAI;EACtC;AAEA,kBAAgB,qBAAqB,SAAS,qBAAkB;AAC5D,WAAO,YAAY,gBAAgB,IAAI;EAC3C;AAEA,kBAAgB,qBAAqB,SAAS,qBAAkB;AAC5D,WAAO,YAAY,gBAAgB,IAAI;EAC3C;AAIA,kBAAgB,oBAAoB,SAAS,oBAAiB;AAC1D,WAAO,YAAY,eAAe,IAAI;EAC1C;AAEA,kBAAgB,yBAAyB,SAAS,yBAAsB;AACpE,WAAO,YAAY,oBAAoB,IAAI;EAC/C;AAEA,kBAAgB,yBAAyB,SAAS,yBAAsB;AACpE,WAAO,YAAY,oBAAoB,IAAI;EAC/C;AAMA,kBAAgB,eAAe,SAAS,aAA6B,aAA8B;AAC/F,WAAO,YAAY,UAAU,MAAM,WAAW;EAClD;AAEA,kBAAgB,oBAAoB,SAAS,kBAAkC,aAA8B;AACzG,WAAO,YAAY,eAAe,MAAM,WAAW;EACvD;AAEA,kBAAgB,oBAAoB,SAAS,kBAAkC,aAA8B;AACzG,WAAO,YAAY,eAAe,MAAM,WAAW;EACvD;AAEA,kBAAgB,qBAAqB,SAAS,mBAAmC,aAA8B;AAC3G,WAAO,YAAY,gBAAgB,MAAM,WAAW;EACxD;AAIA,kBAAgB,mBAAmB,SAAS,iBAAiC,QAAgB,WAA4B;AACrH,WAAO,YAAY,cAAc,MAAM,QAAQ,SAAS;EAC5D;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,QAAgB,WAA4B;AAC/H,WAAO,YAAY,mBAAmB,MAAM,QAAQ,SAAS;EACjE;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,QAAgB,WAA4B;AAC/H,WAAO,YAAY,mBAAmB,MAAM,QAAQ,SAAS;EACjE;AAEA,kBAAgB,yBAAyB,SAAS,uBAAuC,QAAgB,WAA4B;AACjI,WAAO,YAAY,oBAAoB,MAAM,QAAQ,SAAS;EAClE;AAIA,kBAAgB,YAAY,SAAS,UAA0B,UAA2B;AACtF,WAAO,YAAY,OAAO,MAAM,QAAQ;EAC5C;AAEA,kBAAgB,mBAAmB,SAAS,iBAAiC,UAA2B;AACpG,WAAO,YAAY,cAAc,MAAM,QAAQ;EACnD;AAEA,kBAAgB,mBAAmB,SAAS,iBAAiC,UAA2B;AACpG,WAAO,YAAY,cAAc,MAAM,QAAQ;EACnD;AAEA,kBAAgB,kBAAkB,SAAS,gBAAgC,UAA2B;AAClG,WAAO,YAAY,aAAa,MAAM,QAAQ;EAClD;AAEA,kBAAgB,gBAAgB,SAAS,cAA8B,UAA8B;AACjG,WAAO,YAAY,WAAW,MAAM,QAAQ;EAChD;AAIA,kBAAgB,iBAAiB,SAAS,eAA+B,UAA2B;AAChG,WAAO,YAAY,YAAY,MAAM,QAAQ;EACjD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA2B;AAC9G,WAAO,YAAY,mBAAmB,MAAM,QAAQ;EACxD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA2B;AAC9G,WAAO,YAAY,mBAAmB,MAAM,QAAQ;EACxD;AAEA,kBAAgB,uBAAuB,SAAS,qBAAqC,UAA2B;AAC5G,WAAO,YAAY,kBAAkB,MAAM,QAAQ;EACvD;AAEA,kBAAgB,qBAAqB,SAAS,mBAAmC,UAA8B;AAC3G,WAAO,YAAY,gBAAgB,MAAM,QAAQ;EACrD;AAIA,kBAAgB,iBAAiB,SAAS,eAA+B,UAA2B;AAChG,WAAO,YAAY,YAAY,MAAM,QAAQ;EACjD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA2B;AAC9G,WAAO,YAAY,mBAAmB,MAAM,QAAQ;EACxD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA2B;AAC9G,WAAO,YAAY,mBAAmB,MAAM,QAAQ;EACxD;AAEA,kBAAgB,uBAAuB,SAAS,qBAAqC,UAA2B;AAC5G,WAAO,YAAY,kBAAkB,MAAM,QAAQ;EACvD;AAEA,kBAAgB,qBAAqB,SAAS,mBAAmC,UAA8B;AAC3G,WAAO,YAAY,gBAAgB,MAAM,QAAQ;EACrD;AAIA,kBAAgB,kBAAkB,SAAS,gBAAgC,UAA2B;AAClG,WAAO,YAAY,aAAa,MAAM,QAAQ;EAClD;AAEA,kBAAgB,yBAAyB,SAAS,uBAAuC,UAA2B;AAChH,WAAO,YAAY,oBAAoB,MAAM,QAAQ;EACzD;AAEA,kBAAgB,yBAAyB,SAAS,uBAAuC,UAA2B;AAChH,WAAO,YAAY,oBAAoB,MAAM,QAAQ;EACzD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA2B;AAC9G,WAAO,YAAY,mBAAmB,MAAM,QAAQ;EACxD;AAEA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAA8B;AAC7G,WAAO,YAAY,iBAAiB,MAAM,QAAQ;EACtD;AAIA,kBAAgB,gBAAgB,SAAS,cAA8BC,QAAe,MAAuB;AACzG,WAAO,YAAY,WAAW,MAAMA,QAAO,IAAI;EACnD;AAEA,kBAAgB,uBAAuB,SAAS,qBAAqCA,QAAe,MAAuB;AACvH,WAAO,YAAY,kBAAkB,MAAMA,QAAO,IAAI;EAC1D;AAEA,kBAAgB,uBAAuB,SAAS,qBAAqCA,QAAe,MAAuB;AACvH,WAAO,YAAY,kBAAkB,MAAMA,QAAO,IAAI;EAC1D;AAIA,kBAAgB,qBAAqB,SAAS,mBAAmCA,QAAe,MAAuB;AACnH,WAAO,YAAY,gBAAgB,MAAMA,QAAO,IAAI;EACxD;AAEA,kBAAgB,4BAA4B,SAAS,0BAA0CA,QAAe,MAAuB;AACjI,WAAO,YAAY,uBAAuB,MAAMA,QAAO,IAAI;EAC/D;AAEA,kBAAgB,4BAA4B,SAAS,0BAA0CA,QAAe,MAAuB;AACjI,WAAO,YAAY,uBAAuB,MAAMA,QAAO,IAAI;EAC/D;AAIA,kBAAgB,qBAAqB,SAAS,mBAAmCA,QAAe,MAAuB;AACnH,WAAO,YAAY,gBAAgB,MAAMA,QAAO,IAAI;EACxD;AAEA,kBAAgB,4BAA4B,SAAS,0BAA0CA,QAAe,MAAuB;AACjI,WAAO,YAAY,uBAAuB,MAAMA,QAAO,IAAI;EAC/D;AAEA,kBAAgB,4BAA4B,SAAS,0BAA0CA,QAAe,MAAuB;AACjI,WAAO,YAAY,uBAAuB,MAAMA,QAAO,IAAI;EAC/D;AAIA,kBAAgB,sBAAsB,SAAS,oBAAoCA,QAAe,MAAuB;AACrH,WAAO,YAAY,iBAAiB,MAAMA,QAAO,IAAI;EACzD;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2CA,QAAe,MAAuB;AACnI,WAAO,YAAY,wBAAwB,MAAMA,QAAO,IAAI;EAChE;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2CA,QAAe,MAAuB;AACnI,WAAO,YAAY,wBAAwB,MAAMA,QAAO,IAAI;EAChE;AAIA,kBAAgB,kBAAkB,SAAS,gBAAgC,UAA6B,QAAyB;AAC7H,WAAO,YAAY,aAAa,MAAM,UAAU,MAAM;EAC1D;AAEA,kBAAgB,yBAAyB,SAAS,uBAAuC,UAA6B,QAAyB;AAC3I,WAAO,YAAY,oBAAoB,MAAM,UAAU,MAAM;EACjE;AAEA,kBAAgB,yBAAyB,SAAS,uBAAuC,UAA6B,QAAyB;AAC3I,WAAO,YAAY,oBAAoB,MAAM,UAAU,MAAM;EACjE;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA6B,QAAyB;AACzI,WAAO,YAAY,mBAAmB,MAAM,UAAU,MAAM;EAChE;AAEA,kBAAgB,sBAAsB,SAAS,oBAAoC,UAAgC,QAAyB;AACxI,WAAO,YAAY,iBAAiB,MAAM,UAAU,MAAM;EAC9D;AAIA,kBAAgB,uBAAuB,SAAS,qBAAqC,UAA6B,QAAyB;AACvI,WAAO,YAAY,kBAAkB,MAAM,UAAU,MAAM;EAC/D;AAEA,kBAAgB,8BAA8B,SAAS,4BAA4C,UAA6B,QAAyB;AACrJ,WAAO,YAAY,yBAAyB,MAAM,UAAU,MAAM;EACtE;AAEA,kBAAgB,8BAA8B,SAAS,4BAA4C,UAA6B,QAAyB;AACrJ,WAAO,YAAY,yBAAyB,MAAM,UAAU,MAAM;EACtE;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,UAA6B,QAAyB;AACnJ,WAAO,YAAY,wBAAwB,MAAM,UAAU,MAAM;EACrE;AAEA,kBAAgB,2BAA2B,SAAS,yBAAyC,UAAgC,QAAyB;AAClJ,WAAO,YAAY,sBAAsB,MAAM,UAAU,MAAM;EACnE;AAIA,kBAAgB,uBAAuB,SAAS,qBAAqC,UAA6B,QAAyB;AACvI,WAAO,YAAY,kBAAkB,MAAM,UAAU,MAAM;EAC/D;AAEA,kBAAgB,8BAA8B,SAAS,4BAA4C,UAA6B,QAAyB;AACrJ,WAAO,YAAY,yBAAyB,MAAM,UAAU,MAAM;EACtE;AAEA,kBAAgB,8BAA8B,SAAS,4BAA4C,UAA6B,QAAyB;AACrJ,WAAO,YAAY,yBAAyB,MAAM,UAAU,MAAM;EACtE;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,UAA6B,QAAyB;AACnJ,WAAO,YAAY,wBAAwB,MAAM,UAAU,MAAM;EACrE;AAEA,kBAAgB,2BAA2B,SAAS,yBAAyC,UAAgC,QAAyB;AAClJ,WAAO,YAAY,sBAAsB,MAAM,UAAU,MAAM;EACnE;AAIA,kBAAgB,wBAAwB,SAAS,sBAAsC,UAA6B,QAAyB;AACzI,WAAO,YAAY,mBAAmB,MAAM,UAAU,MAAM;EAChE;AAEA,kBAAgB,+BAA+B,SAAS,6BAA6C,UAA6B,QAAyB;AACvJ,WAAO,YAAY,0BAA0B,MAAM,UAAU,MAAM;EACvE;AAEA,kBAAgB,+BAA+B,SAAS,6BAA6C,UAA6B,QAAyB;AACvJ,WAAO,YAAY,0BAA0B,MAAM,UAAU,MAAM;EACvE;AAEA,kBAAgB,8BAA8B,SAAS,4BAA4C,UAA6B,QAAyB;AACrJ,WAAO,YAAY,yBAAyB,MAAM,UAAU,MAAM;EACtE;AAEA,kBAAgB,4BAA4B,SAAS,0BAA0C,UAAgC,QAAyB;AACpJ,WAAO,YAAY,uBAAuB,MAAM,UAAU,MAAM;EACpE;AAIA,kBAAgB,sBAAsB,SAAS,oBAAoCA,QAAe,MAAyB,QAAyB;AAChJ,WAAO,YAAY,iBAAiB,MAAMA,QAAO,MAAM,MAAM;EACjE;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2CA,QAAe,MAAyB,QAAyB;AAC9J,WAAO,YAAY,wBAAwB,MAAMA,QAAO,MAAM,MAAM;EACxE;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2CA,QAAe,MAAyB,QAAyB;AAC9J,WAAO,YAAY,wBAAwB,MAAMA,QAAO,MAAM,MAAM;EACxE;AAIA,kBAAgB,2BAA2B,SAAS,yBAAyCA,QAAe,MAAyB,QAAyB;AAC1J,WAAO,YAAY,sBAAsB,MAAMA,QAAO,MAAM,MAAM;EACtE;AAEA,kBAAgB,kCAAkC,SAAS,gCAAgDA,QAAe,MAAyB,QAAyB;AACxK,WAAO,YAAY,6BAA6B,MAAMA,QAAO,MAAM,MAAM;EAC7E;AAEA,kBAAgB,kCAAkC,SAAS,gCAAgDA,QAAe,MAAyB,QAAyB;AACxK,WAAO,YAAY,6BAA6B,MAAMA,QAAO,MAAM,MAAM;EAC7E;AAIA,kBAAgB,2BAA2B,SAAS,yBAAyCA,QAAe,MAAyB,QAAyB;AAC1J,WAAO,YAAY,sBAAsB,MAAMA,QAAO,MAAM,MAAM;EACtE;AAEA,kBAAgB,kCAAkC,SAAS,gCAAgDA,QAAe,MAAyB,QAAyB;AACxK,WAAO,YAAY,6BAA6B,MAAMA,QAAO,MAAM,MAAM;EAC7E;AAEA,kBAAgB,kCAAkC,SAAS,gCAAgDA,QAAe,MAAyB,QAAyB;AACxK,WAAO,YAAY,6BAA6B,MAAMA,QAAO,MAAM,MAAM;EAC7E;AAIA,kBAAgB,4BAA4B,SAAS,0BAA0CA,QAAe,MAAyB,QAAyB;AAC5J,WAAO,YAAY,uBAAuB,MAAMA,QAAO,MAAM,MAAM;EACvE;AAEA,kBAAgB,mCAAmC,SAAS,iCAAiDA,QAAe,MAAyB,QAAyB;AAC1K,WAAO,YAAY,8BAA8B,MAAMA,QAAO,MAAM,MAAM;EAC9E;AAEA,kBAAgB,mCAAmC,SAAS,iCAAiDA,QAAe,MAAyB,QAAyB;AAC1K,WAAO,YAAY,8BAA8B,MAAMA,QAAO,MAAM,MAAM;EAC9E;AAIA,kBAAgB,iBAAiB,SAAS,eAA+BD,QAAuB;AAC5F,WAAO,YAAY,YAAY,MAAMA,MAAgB;EACzD;AAIA,kBAAgB,YAAY,SAAS,UAA0B,UAA6B,IAAqB;AAC7G,WAAO,YAAY,OAAO,MAAM,UAAU,EAAE;EAChD;AAEA,kBAAgB,iBAAiB,SAAS,eAA+B,UAA6B,IAAqB;AACvH,WAAO,YAAY,YAAY,MAAM,UAAU,EAAE;EACrD;AAEA,kBAAgB,iBAAiB,SAAS,eAA+B,UAA6B,IAAqB;AACvH,WAAO,YAAY,YAAY,MAAM,UAAU,EAAE;EACrD;AAEA,kBAAgB,YAAY,SAAS,UAA0B,WAA8B,IAAqB;AAC9G,WAAO,YAAY,OAAO,MAAM,WAAW,EAAE;EACjD;AAEA,kBAAgB,iBAAiB,SAAS,eAA+B,WAA8B,IAAqB;AACxH,WAAO,YAAY,YAAY,MAAM,WAAW,EAAE;EACtD;AAEA,kBAAgB,iBAAiB,SAAS,eAA+B,WAA8B,IAAqB;AACxH,WAAO,YAAY,YAAY,MAAM,WAAW,EAAE;EACtD;AAMA,kBAAgB,kCAAkC,SAAS,gCAA6E,UAA6B,aAAe;AAChL,WAAO,YAAY,6BAA6B,MAAM,UAAU,WAAW;EAC/E;AAEA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAEA,kBAAgB,kCAAkC,SAAS,gCAA6E,UAA6B,aAAe;AAChL,WAAO,YAAY,6BAA6B,MAAM,UAAU,WAAW;EAC/E;AAEA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAIA,kBAAgB,iCAAiC,SAAS,+BAA4E,UAA6B,aAAe;AAC9K,WAAO,YAAY,4BAA4B,MAAM,UAAU,WAAW;EAC9E;AAEA,kBAAgB,kCAAkC,SAAS,gCAA6E,WAA8B,cAAgB;AAClL,WAAO,YAAY,6BAA6B,MAAM,WAAW,YAAY;EACjF;AAEA,kBAAgB,iCAAiC,SAAS,+BAA4E,UAA6B,aAAe;AAC9K,WAAO,YAAY,4BAA4B,MAAM,UAAU,WAAW;EAC9E;AAEA,kBAAgB,kCAAkC,SAAS,gCAA6E,WAA8B,cAAgB;AAClL,WAAO,YAAY,6BAA6B,MAAM,WAAW,YAAY;EACjF;AAIA,kBAAgB,kCAAkC,SAAS,gCAA6E,UAA6B,aAAe;AAChL,WAAO,YAAY,6BAA6B,MAAM,UAAU,WAAW;EAC/E;AAEA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAEA,kBAAgB,kCAAkC,SAAS,gCAA6E,UAA6B,aAAe;AAChL,WAAO,YAAY,6BAA6B,MAAM,UAAU,WAAW;EAC/E;AAEA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAIA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAEA,kBAAgB,yCAAyC,SAAS,uCAAoF,WAA8B,cAAgB;AAChM,WAAO,YAAY,oCAAoC,MAAM,WAAW,YAAY;EACxF;AAEA,kBAAgB,uCAAuC,SAAS,qCAAsF,WAAkC,cAAgB;AACpM,WAAO,YAAY,kCAAkC,MAAM,WAAW,YAAY;EACtF;AAEA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAEA,kBAAgB,yCAAyC,SAAS,uCAAoF,WAA8B,cAAgB;AAChM,WAAO,YAAY,oCAAoC,MAAM,WAAW,YAAY;EACxF;AAEA,kBAAgB,uCAAuC,SAAS,qCAAsF,WAAkC,cAAgB;AACpM,WAAO,YAAY,kCAAkC,MAAM,WAAW,YAAY;EACtF;AAIA,kBAAgB,kCAAkC,SAAS,gCAA6E,WAA8B,cAAgB;AAClL,WAAO,YAAY,6BAA6B,MAAM,WAAW,YAAY;EACjF;AAEA,kBAAgB,wCAAwC,SAAS,sCAAmF,WAA8B,cAAgB;AAC9L,WAAO,YAAY,mCAAmC,MAAM,WAAW,YAAY;EACvF;AAEA,kBAAgB,sCAAsC,SAAS,oCAAqF,WAAkC,cAAgB;AAClM,WAAO,YAAY,iCAAiC,MAAM,WAAW,YAAY;EACrF;AAEA,kBAAgB,kCAAkC,SAAS,gCAA6E,WAA8B,cAAgB;AAClL,WAAO,YAAY,6BAA6B,MAAM,WAAW,YAAY;EACjF;AAEA,kBAAgB,wCAAwC,SAAS,sCAAmF,WAA8B,cAAgB;AAC9L,WAAO,YAAY,mCAAmC,MAAM,WAAW,YAAY;EACvF;AAEA,kBAAgB,sCAAsC,SAAS,oCAAqF,WAAkC,cAAgB;AAClM,WAAO,YAAY,iCAAiC,MAAM,WAAW,YAAY;EACrF;AAIA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAEA,kBAAgB,yCAAyC,SAAS,uCAAoF,WAA8B,cAAgB;AAChM,WAAO,YAAY,oCAAoC,MAAM,WAAW,YAAY;EACxF;AAEA,kBAAgB,uCAAuC,SAAS,qCAAsF,WAAkC,cAAgB;AACpM,WAAO,YAAY,kCAAkC,MAAM,WAAW,YAAY;EACtF;AAEA,kBAAgB,mCAAmC,SAAS,iCAA8E,WAA8B,cAAgB;AACpL,WAAO,YAAY,8BAA8B,MAAM,WAAW,YAAY;EAClF;AAEA,kBAAgB,yCAAyC,SAAS,uCAAoF,WAA8B,cAAgB;AAChM,WAAO,YAAY,oCAAoC,MAAM,WAAW,YAAY;EACxF;AAEA,kBAAgB,uCAAuC,SAAS,qCAAsF,WAAkC,cAAgB;AACpM,WAAO,YAAY,kCAAkC,MAAM,WAAW,YAAY;EACtF;AAIA,kBAAgB,eAAe,SAAS,aAA6B,WAAqB,oBAA4B;AAClH,WAAO,YAAY,UAAU,MAAM,WAAW,kBAAkB;EACpE;AAEA,kBAAgB,eAAe,SAAS,eAAY;AAChD,WAAO,YAAY,UAAU,IAAI;EACrC;AAIA,kBAAgB,kBAAkB,SAAS,gBAAqD,aAA+C,gBAAgD,QAAgB;AAC3M,WAAO,YAAY,aAAa,MAAM,aAAa,gBAAgB,MAAM;EAC7E;AAEA,kBAAgB,kBAAkB,SAAS,gBAA+D,aAA+C,OAAc;AACnK,WAAO,YAAY,aAAa,MAAM,aAAa,KAAK;EAC5D;AAEA,kBAAgB,sBAAsB,SAAS,oBAAmE,aAA+C,OAAc;AAC3K,WAAO,YAAY,iBAAiB,MAAM,aAAa,KAAK;EAChE;AAEA,kBAAgB,2BAA2B,SAAS,yBAAwE,aAA+C,OAAc;AACrL,WAAO,YAAY,sBAAsB,MAAM,aAAa,KAAK;EACrE;AAEA,kBAAgB,kCAAkC,SAAS,gCAA+E,aAA+C,OAAc;AACnM,WAAO,YAAY,6BAA6B,MAAM,aAAa,KAAK;EAC5E;AAEA,kBAAgB,gCAAgC,SAAS,8BAA6E,aAA+C,OAAc;AAC/L,WAAO,YAAY,2BAA2B,MAAM,aAAa,KAAK;EAC1E;AAEA,kBAAgB,6BAA6B,SAAS,2BAA0E,aAA+C,OAAc;AACzL,WAAO,YAAY,wBAAwB,MAAM,aAAa,KAAK;EACvE;AAEA,kBAAgB,oCAAoC,SAAS,kCAAiF,aAA+C,OAAc;AACvM,WAAO,YAAY,+BAA+B,MAAM,aAAa,KAAK;EAC9E;AAEA,kBAAgB,kCAAkC,SAAS,gCAA+E,aAA+C,OAAc;AACnM,WAAO,YAAY,6BAA6B,MAAM,aAAa,KAAK;EAC5E;AAEA,kBAAgB,0BAA0B,SAAS,wBAAuE,aAA+C,OAAc;AACnL,WAAO,YAAY,qBAAqB,MAAM,aAAa,KAAK;EACpE;AAEA,kBAAgB,mBAAmB,SAAS,iBAAgE,aAA8C;AACtJ,WAAO,YAAY,cAAc,MAAM,WAAW;EACtD;AAEA,kBAAgB,uBAAuB,SAAS,qBAAoE,aAA8C;AAC9J,WAAO,YAAY,kBAAkB,MAAM,WAAW;EAC1D;AAEA,kBAAgB,4BAA4B,SAAS,0BAAyE,aAA8C;AACxK,WAAO,YAAY,uBAAuB,MAAM,WAAW;EAC/D;AAEA,kBAAgB,mCAAmC,SAAS,iCAAgF,aAA8C;AACtL,WAAO,YAAY,8BAA8B,MAAM,WAAW;EACtE;AAEA,kBAAgB,iCAAiC,SAAS,+BAA8E,aAA8C;AAClL,WAAO,YAAY,4BAA4B,MAAM,WAAW;EACpE;AAEA,kBAAgB,8BAA8B,SAAS,4BAA2E,aAA8C;AAC5K,WAAO,YAAY,yBAAyB,MAAM,WAAW;EACjE;AAEA,kBAAgB,qCAAqC,SAAS,mCAAkF,aAA8C;AAC1L,WAAO,YAAY,gCAAgC,MAAM,WAAW;EACxE;AAEA,kBAAgB,mCAAmC,SAAS,iCAAgF,aAA8C;AACtL,WAAO,YAAY,8BAA8B,MAAM,WAAW;EACtE;AAEA,kBAAgB,2BAA2B,SAAS,yBAAwE,aAA8C;AACtK,WAAO,YAAY,sBAAsB,MAAM,WAAW;EAC9D;AAIA,kBAAgB,eAAe,SAAS,aAA6B,QAAe;AAChF,WAAO,YAAY,UAAU,MAAM,MAAM;EAC7C;AAEA,kBAAgB,mBAAmB,SAAS,iBAAiC,QAAe;AACxF,WAAO,YAAY,cAAc,MAAM,MAAM;EACjD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAsC,QAAe;AAClG,WAAO,YAAY,mBAAmB,MAAM,MAAM;EACtD;AAEA,kBAAgB,+BAA+B,SAAS,6BAA6C,QAAe;AAChH,WAAO,YAAY,0BAA0B,MAAM,MAAM;EAC7D;AAEA,kBAAgB,6BAA6B,SAAS,2BAA2C,QAAe;AAC5G,WAAO,YAAY,wBAAwB,MAAM,MAAM;EAC3D;AAEA,kBAAgB,0BAA0B,SAAS,wBAAwC,QAAe;AACtG,WAAO,YAAY,qBAAqB,MAAM,MAAM;EACxD;AAEA,kBAAgB,iCAAiC,SAAS,+BAA+C,QAAe;AACpH,WAAO,YAAY,4BAA4B,MAAM,MAAM;EAC/D;AAEA,kBAAgB,+BAA+B,SAAS,6BAA6C,QAAe;AAChH,WAAO,YAAY,0BAA0B,MAAM,MAAM;EAC7D;AAEA,kBAAgB,uBAAuB,SAAS,qBAAqC,QAAe;AAChG,WAAO,YAAY,kBAAkB,MAAM,MAAM;EACrD;AAIA,kBAAgB,qBAAqB,SAAS,qBAAkB;AAC5D,WAAO,YAAY,gBAAgB,IAAI;EAC3C;AAEA,kBAAgB,0BAA0B,SAAS,0BAAuB;AACtE,WAAO,YAAY,qBAAqB,IAAI;EAChD;AAEA,kBAAgB,0BAA0B,SAAS,0BAAuB;AACtE,WAAO,YAAY,qBAAqB,IAAI;EAChD;AAIA,kBAAgB,WAAW,SAAS,SAAmC,aAAmC;AACtG,WAAO,YAAY,MAAM,MAAM,WAAW;EAC9C;AAEA,kBAAgB,iBAAiB,SAAS,eAAyC,aAAmC;AAClH,WAAO,YAAY,YAAY,MAAM,WAAW;EACpD;AAIA,kBAAgB,cAAc,SAAS,cAAW;AAC9C,WAAO,YAAY,SAAS,IAAI;EACpC;AAEA,kBAAgB,sBAAsB,SAAS,sBAAmB;AAC9D,WAAO,YAAY,iBAAiB,IAAI;EAC5C;AAEA,kBAAgB,qBAAqB,SAAS,qBAAkB;AAC5D,WAAO,YAAY,gBAAgB,IAAI;EAC3C;AAIA,kBAAgB,qBAAqB,SAAS,mBAA6C,MAAc,SAAmB,OAAc;AACtI,WAAO,YAAY,gBAAgB,MAAM,MAAM,SAAS,KAAK;EACjE;AAEA,kBAAgB,8BAA8B,SAAS,4BAAsD,MAAc,SAAmB,OAAc;AACxJ,WAAO,YAAY,yBAAyB,MAAM,MAAM,SAAS,KAAK;EAC1E;AAEA,kBAAgB,qCAAqC,SAAS,mCAA6D,MAAc,SAAmB,OAAc;AACtK,WAAO,YAAY,gCAAgC,MAAM,MAAM,SAAS,KAAK;EACjF;AAEA,kBAAgB,mCAAmC,SAAS,iCAA2D,MAAc,SAAmB,OAAc;AAClK,WAAO,YAAY,8BAA8B,MAAM,MAAM,SAAS,KAAK;EAC/E;AAEA,kBAAgB,gCAAgC,SAAS,8BAAwD,MAAc,SAAmB,OAAc;AAC5J,WAAO,YAAY,2BAA2B,MAAM,MAAM,SAAS,KAAK;EAC5E;AAEA,kBAAgB,uCAAuC,SAAS,qCAA+D,MAAc,SAAmB,OAAc;AAC1K,WAAO,YAAY,kCAAkC,MAAM,MAAM,SAAS,KAAK;EACnF;AAEA,kBAAgB,qCAAqC,SAAS,mCAA6D,MAAc,SAAmB,OAAc;AACtK,WAAO,YAAY,gCAAgC,MAAM,MAAM,SAAS,KAAK;EACjF;AAEA,kBAAgB,6BAA6B,SAAS,2BAAqD,MAAc,SAAmB,OAAc;AACtJ,WAAO,YAAY,wBAAwB,MAAM,MAAM,SAAS,KAAK;EACzE;AAEA,kBAAgB,sBAAsB,SAAS,oBAA8C,MAAc,SAAiB;AACxH,WAAO,YAAY,iBAAiB,MAAM,MAAM,OAAO;EAC3D;AAEA,kBAAgB,+BAA+B,SAAS,6BAAuD,MAAc,SAAiB;AAC1I,WAAO,YAAY,0BAA0B,MAAM,MAAM,OAAO;EACpE;AAEA,kBAAgB,sCAAsC,SAAS,oCAA8D,MAAc,SAAiB;AACxJ,WAAO,YAAY,iCAAiC,MAAM,MAAM,OAAO;EAC3E;AAEA,kBAAgB,oCAAoC,SAAS,kCAA4D,MAAc,SAAiB;AACpJ,WAAO,YAAY,+BAA+B,MAAM,MAAM,OAAO;EACzE;AAEA,kBAAgB,iCAAiC,SAAS,+BAAyD,MAAc,SAAiB;AAC9I,WAAO,YAAY,4BAA4B,MAAM,MAAM,OAAO;EACtE;AAEA,kBAAgB,wCAAwC,SAAS,sCAAgE,MAAc,SAAiB;AAC5J,WAAO,YAAY,mCAAmC,MAAM,MAAM,OAAO;EAC7E;AAEA,kBAAgB,sCAAsC,SAAS,oCAA8D,MAAc,SAAiB;AACxJ,WAAO,YAAY,iCAAiC,MAAM,MAAM,OAAO;EAC3E;AAEA,kBAAgB,8BAA8B,SAAS,4BAAsD,MAAc,SAAiB;AACxI,WAAO,YAAY,yBAAyB,MAAM,MAAM,OAAO;EACnE;AAIA,kBAAgB,mBAAmB,SAAS,iBAA2C,IAAU;AAC7F,WAAO,YAAY,cAAc,MAAM,EAAE;EAC7C;AAEA,kBAAgB,4BAA4B,SAAS,0BAAoD,IAAU;AAC/G,WAAO,YAAY,uBAAuB,MAAM,EAAE;EACtD;AAEA,kBAAgB,mCAAmC,SAAS,iCAA2D,IAAU;AAC7H,WAAO,YAAY,8BAA8B,MAAM,EAAE;EAC7D;AAEA,kBAAgB,iCAAiC,SAAS,+BAAyD,IAAU;AACzH,WAAO,YAAY,4BAA4B,MAAM,EAAE;EAC3D;AAEA,kBAAgB,8BAA8B,SAAS,4BAAsD,IAAU;AACnH,WAAO,YAAY,yBAAyB,MAAM,EAAE;EACxD;AAEA,kBAAgB,qCAAqC,SAAS,mCAA6D,IAAU;AACjI,WAAO,YAAY,gCAAgC,MAAM,EAAE;EAC/D;AAEA,kBAAgB,mCAAmC,SAAS,iCAA2D,IAAU;AAC7H,WAAO,YAAY,8BAA8B,MAAM,EAAE;EAC7D;AAEA,kBAAgB,2BAA2B,SAAS,yBAAmD,IAAU;AAC7G,WAAO,YAAY,sBAAsB,MAAM,EAAE;EACrD;AAIA,kBAAgB,yBAAyB,SAAS,yBAAsB;AACpE,WAAO,YAAY,oBAAoB,IAAI;EAC/C;AAEA,kBAAgB,uBAAuB,SAAS,uBAAoB;AAChE,WAAO,YAAY,kBAAkB,IAAI;EAC7C;AAEA,kBAAgB,oBAAoB,SAAS,oBAAiB;AAC1D,WAAO,YAAY,eAAe,IAAI;EAC1C;AAEA,kBAAgB,2BAA2B,SAAS,2BAAwB;AACxE,WAAO,YAAY,sBAAsB,IAAI;EACjD;AAEA,kBAAgB,yBAAyB,SAAS,yBAAsB;AACpE,WAAO,YAAY,oBAAoB,IAAI;EAC/C;AAEA,kBAAgB,iBAAiB,SAAS,iBAAc;AACpD,WAAO,YAAY,YAAY,IAAI;EACvC;AAEA,kBAAgB,aAAa,SAAS,aAAU;AAC5C,WAAO,YAAY,QAAQ,IAAI;EACnC;AAIA,kBAAgB,eAAe,SAAS,eAAY;AAChD,WAAO,YAAY,UAAU,IAAI;EACrC;AAEA,kBAAgB,aAAa,SAAS,aAAU;AAC5C,WAAO,YAAY,QAAQ,IAAI;EACnC;AAEA,kBAAgB,aAAa,SAAS,WAA2B,MAAY;AACzE,WAAO,YAAY,QAAQ,MAAM,IAAI;EACzC;AAEA,kBAAgB,eAAe,SAAS,eAAY;AAChD,WAAO,YAAY,UAAU,IAAI;EACrC;AAEA,kBAAgB,WAAW,SAAS,WAAQ;AACxC,WAAO,YAAY,MAAM,IAAI;EACjC;AAEA,kBAAgB,eAAe,SAAS,eAAY;AAChD,WAAO,YAAY,UAAU,IAAI;EACrC;AAEA,kBAAgB,wBAAwB,SAAS,wBAAqB;AAClE,WAAO,YAAY,mBAAmB,IAAI;EAC9C;AAEA,kBAAgB,YAAY,SAAS,UAAoC,QAA0B;AAC/F,WAAO,YAAY,OAAO,MAAM,MAAM;EAC1C;AAEA,kBAAgB,aAAa,SAAS,aAAU;AAC5C,WAAO,YAAY,QAAQ,IAAI;EACnC;AAEA,kBAAgB,oBAAoB,SAAS,kBAA4C,OAAa;AAClG,WAAO,YAAY,eAAe,MAAM,KAAK;EACjD;AAEA,kBAAgB,wBAAwB,SAAS,sBAAgD,OAAa;AAC1G,WAAO,YAAY,mBAAmB,MAAM,KAAK;EACrD;AAEA,kBAAgB,6BAA6B,SAAS,2BAAqD,OAAa;AACpH,WAAO,YAAY,wBAAwB,MAAM,KAAK;EAC1D;AAEA,kBAAgB,+BAA+B,SAAS,6BAAuD,OAAa;AACxH,WAAO,YAAY,0BAA0B,MAAM,KAAK;EAC5D;AAEA,kBAAgB,4BAA4B,SAAS,0BAAoD,OAAa;AAClH,WAAO,YAAY,uBAAuB,MAAM,KAAK;EACzD;AAEA,kBAAgB,4BAA4B,SAAS,0BAAoD,wBAA4C;AACjJ,WAAO,YAAY,uBAAuB,MAAM,sBAAsB;EAC1E;AAEA,kBAAgB,gCAAgC,SAAS,8BAAwD,wBAA4C;AACzJ,WAAO,YAAY,2BAA2B,MAAM,sBAAsB;EAC9E;AAEA,kBAAgB,qCAAqC,SAAS,mCAA6D,wBAA4C;AACnK,WAAO,YAAY,gCAAgC,MAAM,sBAAsB;EACnF;AAEA,kBAAgB,uCAAuC,SAAS,qCAA+D,wBAA4C;AACvK,WAAO,YAAY,kCAAkC,MAAM,sBAAsB;EACrF;AAEA,kBAAgB,oCAAoC,SAAS,kCAA4D,wBAA4C;AACjK,WAAO,YAAY,+BAA+B,MAAM,sBAAsB;EAClF;AAIA,cAAY,iBAAiB,iBAAiB,SAAS,WAAW,OAAO,MAAM,IAAI;AACvF;;;ACz3CM,SAAU,mBAAgB;AAC5B,sBAAmB;AACnB,yBAAsB;AAC1B;;;ACdA,SAAS,WAAAE,gBAAe;AAGlB,SAAU,mBAAgB;AAC5B,2BAAwB;AAC5B;AAEA,SAAS,2BAAwB;AAC7B,QAAM,aAAkC,CAAA;AAExC,aAAW,qBAAqB,SAAS,qBAAkB;AACvD,UAAM,YAAY,KAAK;AACvB,UAAM,gBAAwB,KAAa;AAE3C,aAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,YAAM,cAAc,cAAc,CAAC;AACnC,UAAI,YAAY,QAAQ,GAAG;AACvB,kBAAU,KAAK,YAAY,IAAI;MACnC,OAAO;AACH,aAAK,OAAO,YAAY,IAAI;MAChC;IACJ;AAEA,kBAAc,SAAS;EAC3B;AAEA,cAAY,iBAAiB,YAAYC,SAAQ,WAAW,OAAO,MAAM,IAAI;AACjF;;;AC3BA,SAAS,kBAAAC,iBAAgB,iBAAAC,sBAAqB;AAC9C,SAAS,UAAAC,SAAQ,gBAAAC,eAAc,mBAAAC,wBAAuB;AAQhD,SAAU,yBAAsB;AAClC,mCAAgC;AACpC;AAEA,SAAS,mCAAgC;AAErC,MAAI,qBAAqB,CAAA;AAIzB,qBAAmB,OAAO,SAAS,OAAI;AACnC,SAAK,cAAc;AACnB,SAAK,UAAU;AACf,SAAK,eAAe,KAAK,OAAO,gBAAgBC,aAAY;AAC5D,SAAK,gBAAgB,KAAK,OAAO,gBAAgBA,aAAY;AAC7D,SAAK,iBAAiB;AACtB,SAAK,uBAAuB;AAE5B,SAAK,YAAY,YAAW;AAE5B,SAAK,iBAAkB,KAAK,KAAK;AAEjC,SAAK,oBAAoB;AACzB,SAAK,oBAAoB;AACzB,SAAK,uBAAuB;AAC5B,SAAK,sBAAsB;AAE3B,SAAK,sBAAsB,CAAA;AAE3B,SAAK,gCAAgC,YAAW;AAEhD,SAAK,aAAa;AAElB,SAAK,sBAAsB;AAE3B,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,iBAAiB;AAEtB,SAAK,0BAA0B;AAC/B,SAAK,4BAA4B;AAEjC,SAAK,yBAAyB;AAC9B,SAAK,0BAA0B;AAE/B,SAAK,iBAAiB,aAAY;AAClC,SAAK,UAAU,YAAW;AAC1B,SAAK,aAAa,YAAW;AAE7B,SAAK,cAAc;AAEnB,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,cAAc;AAEnB,SAAK,uBAAuB;AAC5B,SAAK,kBAAkB;AAEvB,SAAK,WAAW,YAAW;AAE3B,SAAK,iBAAiB;AAEtB,SAAK,mBAAmB,YAAW;AACnC,SAAK,kBAAkB,YAAW;AAElC,SAAK,oBAAoB,YAAW;AAEpC,SAAK,mBAAmB;AACxB,SAAK,iBAAiB;AAEtB,SAAK,kBAAkB,YAAW;AAClC,SAAK,iBAAiB,CAAC,MAAM,MAAM,IAAI;AAEvC,SAAK,kCAAkC;EAC3C;AAEA,qBAAmB,QAAQ,SAAS,QAAK;AACrC,QAAI,KAAK,cAAc,GAAG;AACtB,UAAI,YAAY,KAAK,OAAO,gBAAgBC,eAAc;AAC1D,UAAI,CAAC,WAAW;AACZ,gBAAQ,KAAK,gCAAgC,KAAK,OAAO,WAAU,IAAK,uFAA8F;MAC1K,OAAO;AACH,aAAK,aAAa,UAAU;AAC5B,aAAK,QAAQ;MACjB;IACJ,OAAO;AACH,WAAK,aAAa,WAAW,qBAAqB,KAAK,aAAa,CAAC;IACzE;AAEA,SAAK,oBAAoB,KAAK,OAAO,gBAAgBC,cAAa,CAAC;AAEnE,YAAQ,kCAAkC,MAAM,KAAK,cAAc,KAAK,IAAI,GAAG,MAAM,OAAO,KAAK,MAAM;AACvG,SAAK,oBAAoB,KAAK,MAAK;AAC/B,cAAQ,oCAAoC,MAAM,KAAK,MAAM;IACjE,CAAC;AAED,QAAI,KAAK,iBAAiB;AACtB,WAAK,gBAAgB,aAAa,KAAK;AACvC,WAAK,gBAAgB,IAAI,KAAK,gBAAgB,iBAAgB,CAAE;AAGhE,WAAK,uBAAuB,IAAI;IACpC;AAEA,SAAK,qBAAqB,KAAK;AAE/B,QAAI,KAAK,iBAAiB;AACtB,WAAK,iBAAiB,KAAK,OAAO,aAAY;AAC9C,WAAK,mBAAmB,KAAK,cAAc,gBAAgBC,kBAAiB,EAAE,aAAa,MAAK,CAAG;IACvG;EACJ;AAEA,qBAAmB,SAAS,SAAS,OAAO,IAAE;AAC1C,QAAI,KAAK,oBAAoB,GAAG;AAC5B,WAAK,qBAAqB;IAC9B;AAEA,QAAI,KAAK,oBAAoB,GAAG;AAC5B,WAAK,qBAAqB;IAC9B;AAIA,QAAI,QAAQ,gBAAgB,KAAK,MAAM,KAAK,KAAK,kBAAkB,MAAM;AAErE,UAAI,KAAK,eAAe,KAAK,SAAQ,GAAI;AACrC,YAAI,OAAO,QAAQ,WAAW,KAAK,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ;AAEnE,aAAK,WAAW,SAAS,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAI;AAChD,aAAK,gBAAe;MACxB,OAAO;AACH,aAAK,OAAO,eAAe,KAAK,OAAO;AACvC,aAAK,OAAO,cAAc,KAAK,UAAU;MAC7C;AAEA,UAAI,gBAAgB,KAAK,YAAW;AACpC,WAAK,mBAAmB,cAAc,CAAC,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC,GAAG,KAAK,yBAAyB;IAChH,WAAW,CAAC,QAAQ,gBAAgB,KAAK,MAAM,KAAK,KAAK,kBAAkB,MAAM;AAC7E,UAAI,KAAK,kBAAkB,MAAM;AAC7B,aAAK,mBAAmB,KAAK,cAAc,KAAK,cAAc,KAAK,YAAY,KAAK,WAAW;AAE/F,YAAI,gBAAgB,KAAK,YAAW;AACpC,aAAK,mBAAmB,cAAc,CAAC,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC,GAAG,KAAK,uBAAuB;AAE1G,YAAI,KAAK,kBAAkB,MAAM;AAC7B,eAAK,aAAa,KAAK;QAC3B,OAAO;AACH,eAAK,aAAa;QACtB;MACJ,WAAW,KAAK,kBAAkB,MAAM;AACpC,aAAK,mBAAmB,MAAM,MAAM,MAAM,KAAK,yBAAyB,IAAI;MAChF;IACJ,WAAW,KAAK,kBAAkB,MAAM;AACpC,WAAK,mBAAmB,MAAM,MAAM,MAAM,MAAM,IAAI;IACxD;AAEA,SAAK,wBAAuB;AAE5B,QAAI,KAAK,kBAAkB,SAAS,KAAK,UAAU,CAAC,KAAK,KAAK,KAAK,UAAU,CAAC,KAAK,KAAK,KAAK,UAAU,CAAC,KAAK,IAAI;AAC7G,UAAI,KAAK,cAAc;AACnB,aAAK,qBAAqB,IAAI;AAE9B,aAAK,aAAa,eAAe,KAAK,SAAS;AAC/C,aAAK,aAAa,yBAAyB,KAAK,aAAa,yBAAyB,KAAK,cAAc,EAAE,gBAAgB,KAAK,cAAc,CAAC;MACnJ;AAEA,UAAI,KAAK,iBAAiB;AACtB,aAAK,uBAAuB,KAAK,SAAS;MAC9C;IACJ,OAAO;AACH,UAAI,KAAK,cAAc;AACnB,aAAK,qBAAqB,KAAK;MACnC;AAEA,UAAI,KAAK,iBAAiB;AACtB,aAAK,uBAAuB,IAAI;MACpC;IACJ;AAEA,QAAI,KAAK,iBAAiB;AACtB,UAAK,QAAQ,gBAAgB,KAAK,MAAM,KAAK,KAAK,kBAAkB,QAAU,CAAC,QAAQ,gBAAgB,KAAK,MAAM,KAAK,KAAK,kBAAkB,QAAQ,KAAK,cAAc,WAAW,QAAQ,KAAK,cAAc,WAAW,OAAQ;AAC9N,aAAK,gBAAgB,aAAa,IAAI;MAC1C,OAAO;AACH,aAAK,gBAAgB,aAAa,KAAK;MAC3C;IACJ;AAEA,QAAI,KAAK,kBAAkB,MAAM;AAC7B,WAAK,aAAa;IACtB;AAEA,SAAK,sBAAsB;AAE3B,SAAK,0BAA0B;AAC/B,SAAK,4BAA4B;EACrC;AAEA,qBAAmB,aAAa,SAAS,aAAU;AAC/C,SAAK,UAAU;AACf,SAAK,cAAc;AAEnB,SAAK,uBAAuB;AAC5B,SAAK,kBAAkB;EAC3B;AAEA,qBAAmB,eAAe,SAAS,eAAY;AACnD,QAAI,KAAK,kBAAkB,MAAM;AAC7B,WAAK,mBAAmB,MAAM,MAAM,MAAM,MAAM,IAAI;IACxD;AAEA,SAAK,iBAAiB;AACtB,SAAK,uBAAuB;AAE5B,SAAK,sBAAqB;AAE1B,SAAK,qBAAqB,KAAK;AAC/B,QAAI,KAAK,iBAAiB;AACtB,WAAK,gBAAgB,aAAa,KAAK;IAC3C;AAEA,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,cAAc;AAEnB,SAAK,uBAAuB;AAC5B,SAAK,kBAAkB;AAEvB,SAAK,aAAa;AAElB,SAAK,iBAAiB;AAEtB,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,cAAc;AAEnB,SAAK,0BAA0B;AAC/B,SAAK,4BAA4B;AAEjC,SAAK,yBAAyB;AAC9B,SAAK,0BAA0B;EACnC;AAEA,qBAAmB,YAAY,SAAS,YAAS;AAC7C,QAAI,KAAK,kBAAkB,MAAM;AAC7B,WAAK,eAAe,WAAU;IAClC;AAEA,aAAS,YAAY,KAAK,qBAAqB;AAC3C,eAAQ;IACZ;EACJ;AAEA,qBAAmB,kBAAkB,WAAA;AACjC,QAAI,iBAAiB,aAAY;AACjC,WAAO,SAAS,kBAAe;AAC3B,WAAK,OAAO,eAAe,KAAK,OAAO;AAGvC,WAAK,WAAW,mBAAmB,KAAK,mBAAmB,KAAK,UAAU;AAC1E,WAAK,WAAW,eAAe,KAAK,UAAU;AAC9C,WAAK,WAAW,mBAAmB,KAAK,OAAO,oBAAoB,cAAc,GAAG,KAAK,UAAU;IACvG;EACJ,EAAC;AAED,qBAAmB,gBAAgB,SAAS,cAAc,SAAO;AAG7D,QAAI,WAAW,KAAK,SAAS,KAAK,IAAI;AACtC,YAAQ,iBAAiB,UAAU,QAAQ;AAC3C,QAAI,gBAAgB,KAAK,cAAc,KAAK,IAAI;AAChD,YAAQ,iBAAiB,eAAe,aAAa;AACrD,QAAI,cAAc,KAAK,YAAY,KAAK,IAAI;AAC5C,YAAQ,iBAAiB,aAAa,WAAW;AAEjD,SAAK,oBAAoB,KAAK,MAAK;AAC/B,UAAI,CAAC,QAAQ,gBAAgB,KAAK,MAAM;AAAG;AAE3C,UAAIC,WAAU,QAAQ,WAAW,KAAK,MAAM;AAC5C,MAAAA,SAAQ,oBAAoB,UAAU,QAAQ;AAC9C,MAAAA,SAAQ,oBAAoB,eAAe,aAAa;AACxD,MAAAA,SAAQ,oBAAoB,aAAa,WAAW;IACxD,CAAC;AAGD,SAAK,kBAAiB;EAC1B;AAEA,qBAAmB,WAAW,SAAS,SAAS,GAAC;EACjD;AAEA,qBAAmB,gBAAgB,SAAS,cAAc,GAAC;AACvD,QAAI,KAAK,QAAQ;AACb,UAAI,KAAK,SAAQ,GAAI;AACjB,aAAK,cAAc;AACnB,aAAK,4BAA4B;MACrC,WAAW,EAAE,YAAY,cAAc,KAAK,YAAY;AACpD,aAAK,UAAU;AACf,aAAK,cAAc;AAEnB,YAAI,CAAC,KAAK,aAAa;AACnB,eAAK,uBAAuB;QAChC;AAEA,aAAK,4BAA4B;MACrC;IACJ;EACJ;AAEA,qBAAmB,cAAc,SAAS,YAAY,GAAC;AACnD,QAAI,KAAK,QAAQ;AACb,UAAI,KAAK,SAAQ,GAAI;AACjB,aAAK,cAAc;AACnB,aAAK,4BAA4B;MACrC,WAAW,EAAE,YAAY,cAAc,KAAK,YAAY;AACpD,YAAI,CAAC,KAAK,sBAAsB;AAC5B,eAAK,kBAAkB;QAC3B;AAEA,aAAK,UAAU;AACf,aAAK,cAAc;AAEnB,aAAK,uBAAuB;AAE5B,aAAK,4BAA4B;MACrC;IACJ;EACJ;AAEA,qBAAmB,gBAAgB,SAAS,cAAc,GAAC;AACvD,QAAI,KAAK,UAAU,CAAC,KAAK,wBAAwB;AAE7C,UAAI,KAAK,cAAc,QAAQ,KAAK,cAAc,EAAE;AAAW;AAE/D,UAAI,SAAS,SAAS,KAAK,sBAAqB;AAChD,WAAK,oBAAoB,GAAG,EAAE,SAAS,EAAE,SAAS,OAAO,OAAO,OAAO,QAAQ,EAAE,SAAS;IAC9F;EACJ;AAEA,qBAAmB,UAAU,SAAS,QAAQ,GAAC;EAC/C;AAEA,qBAAmB,gBAAgB,SAAS,cAAc,GAAC;AACvD,QAAI,KAAK,UAAU,CAAC,KAAK,wBAAwB;AAE7C,UAAK,KAAK,cAAc,QAAQ,KAAK,cAAc,EAAE,aAAc,EAAE,UAAU;AAAG;AAElF,UAAI,SAAS,SAAS,KAAK,sBAAqB;AAChD,WAAK,oBAAoB,GAAG,EAAE,SAAS,EAAE,SAAS,OAAO,OAAO,OAAO,QAAQ,EAAE,SAAS;AAE1F,WAAK,UAAU;AACf,WAAK,cAAc;AAEnB,UAAI,CAAC,KAAK,aAAa;AACnB,aAAK,uBAAuB;MAChC;IACJ;EACJ;AAEA,qBAAmB,cAAc,SAAS,YAAY,GAAC;AACnD,QAAI,KAAK,UAAU,CAAC,KAAK,wBAAwB;AAE7C,UAAK,KAAK,cAAc,QAAQ,KAAK,cAAc,EAAE,aAAc,EAAE,UAAU;AAAG;AAElF,UAAI,SAAS,SAAS,KAAK,sBAAqB;AAChD,WAAK,oBAAoB,GAAG,EAAE,SAAS,EAAE,SAAS,OAAO,OAAO,OAAO,QAAQ,EAAE,SAAS;AAE1F,UAAI,CAAC,KAAK,sBAAsB;AAC5B,aAAK,kBAAkB;MAC3B;AAEA,WAAK,UAAU;AACf,WAAK,cAAc;AAEnB,WAAK,uBAAuB;AAE5B,WAAK,sBAAsB;IAC/B;EACJ;AAEA,qBAAmB,oBAAoB,SAAS,oBAAiB;AAC7D,QAAI,CAAC,KAAK;AAAgB;AAI1B,SAAK,eAAe,iBAAiB,YAAY,KAAK,iBAAiB;EAC3E;AAEA,qBAAmB,yBAAyB,SAAS,uBAAuB,aAAW;AACnF,QAAI,CAAC,KAAK;AAAiB;AAC3B,QAAI,KAAK,wBAAwB,GAAG;AAChC,WAAK,gBAAgB,mBAAkB;AAEvC,UAAI,eAAe,MAAM;AACrB,aAAK,gBAAgB,eAAe,KAAK,gBAAgB;AACzD,YAAI,OAAO,KAAK,iBAAiB,cAAc,WAAW;AAC1D,aAAK,gBAAgB,KAAK,oBAAoB,IAAI;AAClD,aAAK,gBAAgB,eAAe,KAAK,eAAe;MAC5D;IACJ;EACJ;AAEA,qBAAmB,uBAAuB,SAAS,qBAAqB,SAAO;AAC3E,SAAK,UAAU;AACf,QAAI,CAAC,KAAK;AAAc;AAExB,SAAK,aAAa,aAAa,OAAO;EAC1C;AAIA,qBAAmB,qBAAqB,SAAS,mBAAmB,WAAW,aAAa,gBAAgB,gBAAgB,MAAM,eAAe,OAAK;AAClJ,QAAI,CAAC,gBAAgB,aAAa,MAAM;AACpC,UAAI,wBAAwB;AAC5B,UAAI,KAAK,kBAAkB,QAAQ,CAAC,KAAK,eAAe,UAAU,SAAS,GAAG;AAE1E,YAAI,KAAK,kBAAkB,MAAM;AAC7B,cAAI,CAAC,KAAK,iBAAiB;AACvB,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,UAAU,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAClH,iBAAK,aAAa,UAAU,OAAO,KAAK,gBAAgB,MAAM,aAAa;UAC/E,OAAO;AACH,iBAAK,cAAc,UAAU,OAAO,MAAM,MAAM,aAAa;UACjE;QACJ;AAEA,gCAAwB;AAGxB,aAAK,iBAAiB;AACtB,aAAK,uBAAuB,KAAK,eAAe,gBAAgBJ,aAAY;AAE5E,YAAI,CAAC,KAAK,iBAAiB;AACvB,cAAI,KAAK;AAAsB,iBAAK,qBAAqB,QAAQ,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAChH,eAAK,aAAa,QAAQ,OAAO,KAAK,gBAAgB,MAAM,aAAa;QAC7E,OAAO;AACH,eAAK,cAAc,QAAQ,OAAO,gBAAgB,MAAM,aAAa;QACzE;AAEA,aAAK,sBAAqB;AAE1B,YAAI,CAAC,KAAK,oBAAmB,KAAM,KAAK,aAAa;AACjD,eAAK,UAAU;AACf,eAAK,cAAc;AAEnB,eAAK,uBAAuB;AAC5B,eAAK,kBAAkB;AAEvB,cAAI,CAAC,KAAK,iBAAiB;AACvB,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;AACtH,iBAAK,aAAa,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;UACnF,OAAO;AACH,iBAAK,cAAc,cAAc,OAAO,gBAAgB,MAAM,aAAa;UAC/E;QACJ;MACJ;AAEA,UAAI,KAAK,qBAAqB;AAC1B,aAAK,sBAAqB;MAC9B;AAEA,UAAI,CAAC,yBAAyB,KAAK,aAAa,WAAW,GAAG;AAE1D,YAAI,CAAC,KAAK,iBAAiB;AACvB,cAAI,KAAK;AAAsB,iBAAK,qBAAqB,OAAO,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAC/G,eAAK,aAAa,OAAO,OAAO,KAAK,gBAAgB,MAAM,aAAa;QAC5E,OAAO;AACH,eAAK,cAAc,OAAO,OAAO,gBAAgB,MAAM,aAAa;QACxE;MACJ;AAEA,UAAI,KAAK,oBAAmB,GAAI;AAE5B,YAAI,CAAC,KAAK,iBAAiB;AACvB,cAAI,KAAK;AAAsB,iBAAK,qBAAqB,OAAO,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAC/G,eAAK,aAAa,OAAO,OAAO,KAAK,gBAAgB,MAAM,aAAa;QAC5E,OAAO;AACH,eAAK,cAAc,OAAO,OAAO,gBAAgB,MAAM,aAAa;QACxE;AAGA,YAAI,CAAC,KAAK,iBAAiB;AACvB,cAAI,KAAK;AAAsB,iBAAK,qBAAqB,QAAQ,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAChH,eAAK,aAAa,QAAQ,OAAO,KAAK,gBAAgB,MAAM,aAAa;QAC7E,OAAO;AACH,eAAK,cAAc,QAAQ,OAAO,gBAAgB,MAAM,aAAa;QACzE;AAGA,YAAI,KAAK,oBAAoB,KAAK,KAAK,wBAAwB,KAAK,qBAAqB,UAAU,KAAK,cAAc,GAAG;AACrH,cAAI,CAAC,KAAK,iBAAiB;AACvB,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;AACtH,iBAAK,aAAa,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;UACnF,OAAO;AACH,iBAAK,cAAc,cAAc,OAAO,gBAAgB,MAAM,aAAa;UAC/E;AAEA,eAAK,oBAAoB;QAC7B,WAAW,KAAK,oBAAoB,KAAK,KAAK,wBAAwB,KAAK,qBAAqB,UAAU,KAAK,cAAc,GAAG;AAC5H,cAAI,CAAC,KAAK,iBAAiB;AACvB,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;AACtH,iBAAK,aAAa,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;UACnF,OAAO;AACH,iBAAK,cAAc,cAAc,OAAO,gBAAgB,MAAM,aAAa;UAC/E;AAEA,eAAK,oBAAoB,KAAK;AAC9B,eAAK,oBAAoB;QAC7B,OAAO;AACH,cAAI,CAAC,KAAK,iBAAiB;AACvB,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;AACtH,iBAAK,aAAa,cAAc,OAAO,KAAK,gBAAgB,MAAM,aAAa;UACnF,OAAO;AACH,iBAAK,cAAc,cAAc,OAAO,gBAAgB,MAAM,aAAa;UAC/E;AAEA,eAAK,oBAAoB;AACzB,eAAK,oBAAoB,KAAK;AAC9B,eAAK,uBAAuB,KAAK;QACrC;MACJ,OAAO;AAEH,YAAI,CAAC,KAAK,mBAAmB,CAAC,yBAAyB,KAAK,kBAAiB,GAAI;AAC7E,cAAI,CAAC,KAAK,iBAAiB;AACvB,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,KAAK,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAC7G,iBAAK,aAAa,KAAK,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAEtE,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,aAAa,OAAO,KAAK,gBAAgB,MAAM,aAAa;AACrH,iBAAK,aAAa,aAAa,OAAO,KAAK,gBAAgB,MAAM,aAAa;UAClF,OAAO;AACH,iBAAK,cAAc,KAAK,OAAO,gBAAgB,MAAM,aAAa;AAElE,iBAAK,cAAc,aAAa,OAAO,gBAAgB,MAAM,aAAa;UAC9E;QACJ,WAAW,KAAK,mBAAoB,yBAAyB,KAAK,kBAAiB,GAAK;AACpF,cAAI,CAAC,KAAK,iBAAiB;AACvB,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,KAAK,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAC7G,iBAAK,aAAa,KAAK,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAEtE,gBAAI,KAAK;AAAsB,mBAAK,qBAAqB,eAAe,OAAO,KAAK,gBAAgB,MAAM,aAAa;AACvH,iBAAK,aAAa,eAAe,OAAO,KAAK,gBAAgB,MAAM,aAAa;UACpF,OAAO;AACH,iBAAK,cAAc,KAAK,OAAO,gBAAgB,MAAM,aAAa;AAElE,iBAAK,cAAc,eAAe,OAAO,gBAAgB,MAAM,aAAa;UAChF;QACJ;MACJ;AAEA,WAAK,gCAAgC,KAAK,eAAe,+BAA+B,aAAa,KAAK,6BAA6B;IAC3I,WAAW,KAAK,kBAAkB,SAAS,gBAAgB,aAAa,OAAO;AAC3E,UAAI,CAAC,KAAK,iBAAiB;AACvB,YAAI,KAAK;AAAsB,eAAK,qBAAqB,UAAU,OAAO,KAAK,gBAAgB,MAAM,aAAa;AAClH,aAAK,aAAa,UAAU,OAAO,KAAK,gBAAgB,MAAM,aAAa;MAC/E,OAAO;AACH,aAAK,cAAc,UAAU,OAAO,MAAM,MAAM,aAAa;MACjE;AAEA,WAAK,iBAAiB;AACtB,WAAK,uBAAuB;AAE5B,WAAK,sBAAqB;IAC9B;AAEA,QAAI,KAAK,kBAAkB,MAAM;AAC7B,WAAK,cAAc,KAAK;IAC5B,OAAO;AACH,WAAK,UAAU;AACf,WAAK,cAAc;AAEnB,WAAK,uBAAuB;IAChC;AAEA,SAAK,kBAAkB;EAC3B;AAEA,qBAAmB,cAAc,SAAS,cAAW;AACjD,QAAI,SACA,KAAK,eAAe,IACd,QAAQ,SAAS,KAAK,MAAM,EAAE,QAC5B,KAAK,SACL,KAAK,YACL,KAAK,cAAc,IAErB,QAAQ,WAAW,KAAK,MAAM,EAAE,QAC9B,KAAK,SACL,KAAK,YACL,KAAK,gBACL,KAAK,WAAW;AAG5B,QAAI,+BAA+B;AACnC,QAAI,KAAK,eAAe,KAAK,OAAO,WAAW,KAAK,OAAO,UAAU,CAAC,IAAI,KAAK,aAAa;AACxF,qCAA+B;IACnC;AAEA,SAAK,eAAe,CAAC,IAAI;AACzB,SAAK,eAAe,CAAC,IAAI;AACzB,SAAK,eAAe,CAAC,IAAI;AAEzB,QAAI,wBAAwB;AAC5B,QAAI,KAAK,oBAAoB,QAAQ,KAAK,iBAAiB,SAAS;AAChE,WAAK,eAAe,oBAAoB,KAAK,SAAS;AACtD,WAAK,gBAAgB,UAAU,KAAK,SAAS;AAC7C,8BAAwB,KAAK,UAAU,cAAc,KAAK,OAAO,oBAAoB,KAAK,QAAQ,CAAC;AAEnG,WAAK,eAAe,CAAC,IAAI,KAAK;AAC9B,WAAK,eAAe,CAAC,IAAI,KAAK;IAClC;AAEA,SAAK,kBAAkB;AAEvB,QAAI,OAAO,WAAW,KAAK,8BAA8B;AACrD,UAAI,iBAAiB,OAAO,UAAU,CAAC;AACvC,UAAI,kBAAkB,uBAAuB;AAEzC,aAAK,UAAU,UAAU,OAAO,UAAU,CAAC,CAAC;AAC5C,aAAK,gBAAgB,UAAU,KAAK,SAAS;AAE7C,aAAK,eAAe,CAAC,IAAI,OAAO,QAAQ,CAAC;AACzC,aAAK,eAAe,CAAC,IAAI,KAAK;MAClC,OAAO;AACH,aAAK,kBAAkB;MAC3B;IACJ,WAAW,yBAAyB,UAAU;AAC1C,WAAK,UAAU,UAAS;AAExB,WAAK,eAAe,CAAC,IAAI;AACzB,WAAK,eAAe,CAAC,IAAI;IAC7B;AAEA,QAAI,UAAU,QAAQ,SAAS,KAAK,MAAM;AAC1C,QAAI,KAAK,mBAAmB,WAAW,MAAM;AACzC,WAAK,eAAe,CAAC,IAAI,KAAK,iBAAiB,kBAAkB,OAAO,EAAE,CAAC;IAC/E;AAEA,WAAO,KAAK;EAChB;AAEA,qBAAmB,sBAAsB,SAAS,oBAAoB,GAAG,SAAS,SAAS,GAAG,GAAG,WAAS;AACtG,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,iBAAiB;AAEtB,SAAK,0BAA0B;EACnC;AAEA,qBAAmB,qBAAqB,SAAS,mBAAmB,SAAS,SAAS,GAAG,GAAC;AAEtF,QAAI,OAAO,UAAU;AACrB,QAAI,MAAM,UAAU;AACpB,SAAK,WAAW,SAAS,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAI;AAEzD,SAAK,gBAAe;EACxB;AAEA,qBAAmB,sBAAsB,SAAS,oBAAoB,eAAa;AAC/E,SAAK,iBAAiB;AAItB,QAAI,KAAK,kBAAkB,MAAM;AAC7B,WAAK,eAAe,iBAAiB,YAAY,KAAK,iBAAiB;AAEvE,UAAI,CAAC,KAAK,iCAAiC;AACvC,aAAK,kCAAkC;AAEvC,YAAI,UAAU,KAAK,QAAQ,KAAK,IAAI;AACpC,gBAAQ,UAAU,KAAK,MAAM,EAAE,iBAAiB,SAAS,OAAO;AAChE,YAAI,gBAAgB,KAAK,cAAc,KAAK,IAAI;AAChD,gBAAQ,UAAU,KAAK,MAAM,EAAE,iBAAiB,eAAe,aAAa;AAC5E,YAAI,gBAAgB,KAAK,cAAc,KAAK,IAAI;AAChD,gBAAQ,UAAU,KAAK,MAAM,EAAE,iBAAiB,eAAe,aAAa;AAC5E,YAAI,cAAc,KAAK,YAAY,KAAK,IAAI;AAC5C,gBAAQ,UAAU,KAAK,MAAM,EAAE,iBAAiB,aAAa,WAAW;AACxE,YAAI,iBAAiB,KAAK,mBAAmB,KAAK,IAAI;AACtD,gBAAQ,UAAU,KAAK,MAAM,EAAE,iBAAiB,gBAAgB,cAAc;AAE9E,YAAI,mBAAmB,KAAK,kBAAkB,KAAK,IAAI;AACvD,aAAK,OAAO,SAAS,IAAI,gBAAgB;AAEzC,aAAK,oBAAoB,KAAK,MAAK;AAC/B,kBAAQ,UAAU,KAAK,MAAM,EAAE,oBAAoB,SAAS,OAAO;AACnE,kBAAQ,UAAU,KAAK,MAAM,EAAE,oBAAoB,eAAe,aAAa;AAC/E,kBAAQ,UAAU,KAAK,MAAM,EAAE,oBAAoB,eAAe,aAAa;AAC/E,kBAAQ,UAAU,KAAK,MAAM,EAAE,oBAAoB,aAAa,WAAW;AAC3E,kBAAQ,UAAU,KAAK,MAAM,EAAE,oBAAoB,gBAAgB,cAAc;AAEjF,eAAK,OAAO,SAAS,OAAO,gBAAgB;AAE5C,eAAK,kCAAkC;QAC3C,CAAC;MACL;IACJ;EACJ;AAEA,qBAAmB,qBAAqB,SAAS,mBAAmB,GAAC;AACjE,QAAI,KAAK,cAAc,QAAQ,KAAK,cAAc,EAAE,WAAW;AAC3D,WAAK,yBAAyB;AAC9B,WAAK,0BAA0B;IACnC;EACJ;AAEA,qBAAmB,0BAA0B,SAAS,0BAAuB;AACzE,QAAI,KAAK,wBAAwB;AAC7B,WAAK,aAAa;AAElB,WAAK,iBAAiB;AAEtB,WAAK,eAAe;AACpB,WAAK,eAAe;AACpB,WAAK,aAAa;AAClB,WAAK,cAAc;AAEnB,WAAK,0BAA0B,KAAK;AAEpC,WAAK,yBAAyB;AAC9B,WAAK,0BAA0B;AAE/B,UAAI,KAAK,kBAAkB,MAAM;AAC7B,aAAK,mBAAmB,MAAM,MAAM,MAAM,KAAK,yBAAyB,IAAI;MAChF;AAEA,WAAK,UAAU;AACf,WAAK,cAAc;AACnB,WAAK,cAAc;AAEnB,WAAK,uBAAuB;AAC5B,WAAK,kBAAkB;IAC3B;EACJ;AAEA,qBAAmB,sBAAsB,SAAS,sBAAmB;AACjE,WAAO,KAAK,WAAW,KAAK,eAAe,KAAK;EACpD;AAEA,qBAAmB,oBAAoB,SAAS,oBAAiB;AAC7D,WAAO,KAAK,WAAW,KAAK,eAAe,CAAC,KAAK;EACrD;AAEA,qBAAmB,eAAe,WAAA;AAC9B,QAAI,2BAA2B,YAAW;AAC1C,WAAO,SAAS,aAAa,aAAW;AACpC,UAAI,SAAS;AAEb,iCAA2B,KAAK,eAAe,+BAA+B,aAAa,wBAAwB;AAEnH,UAAI,CAAC,yBAAyB,WAAW,KAAK,+BAA+B,IAAM,GAAG;AAClF,iBAAS;MACb;AAEA,aAAO;IACX;EACJ,EAAC;AAED,qBAAmB,WAAW,SAAS,WAAQ;AAC3C,QAAI,mBAAmB,QAAQ,WAAW,KAAK,MAAM,EAAE,aAAa,CAAC;AACrE,WAAO,KAAK,SAAS,QAAQ,iBAAiB,cAAc,UAAU,iBAAiB,WAAW;EACtG;AAEA,qBAAmB,wBAAwB,SAAS,wBAAqB;AACrE,QAAI,KAAK,aAAa;AAClB,UAAI,KAAK,wBAAwB,QAAQ,CAAC,KAAK,qBAAqB,WAAW;AAC3E,iBAAS,KAAK,MAAM,SAAS;MACjC,WAAW,SAAS,KAAK,MAAM,UAAU,WAAW;AAChD,iBAAS,KAAK,MAAM,SAAS;MACjC;IACJ;EACJ;AAIA,cAAY,iBAAiB,oBAAoBK,QAAO,WAAW,OAAO,MAAM,IAAI;AACxF;;;ACjxBA,SAAS,WAAAC,gBAAe;AACxB,SAAS,gBAAAC,qBAAoB;AAKvB,SAAU,+BAA4B;AACxC,yCAAsC;AAC1C;AAEA,SAAS,yCAAsC;AAE3C,QAAM,2BAAgD,CAAA;AAItD,2BAAyB,OAAO,SAAS,OAAI;AACzC,SAAK,gBAAgB,IAAIC,SAAO;AAChC,SAAK,gBAAgB,IAAIA,SAAO;AAChC,SAAK,gBAAgB,IAAIA,SAAO;AAEhC,SAAK,gBAAgB,IAAIA,SAAO;AAEhC,SAAK,eAAe,IAAIA,SAAO;AAC/B,SAAK,iBAAiB,IAAIA,SAAO;AAGjC,SAAK,YAAY;EACrB;AAEA,2BAAyB,QAAQ,SAAS,QAAK;EAAW;AAC1D,2BAAyB,SAAS,SAAS,OAAO,IAAU;EAAU;AACtE,2BAAyB,aAAa,SAAS,aAAU;EAAW;AACpE,2BAAyB,eAAe,SAAS,eAAY;EAAW;AACxE,2BAAyB,YAAY,SAAS,YAAS;EAAW;AAIlE,cAAY,iBAAiB,0BAA0BC,cAAa,WAAW,OAAO,MAAM,IAAI;AACpG;;;ACvCA,SAAS,sBAAAC,2BAA0B;AAM7B,SAAU,4BAAyB;AACrC,sCAAmC;AACvC;AAEA,SAAS,sCAAmC;AAExC,MAAI,wBAAwB,CAAA;AAI5B,wBAAsB,OAAO,SAAS,OAAI;AACtC,SAAK,YAAY;AACjB,SAAK,gBAAgB;AAErB,SAAK,mBAAmB;AACxB,SAAK,mBAAmB,IAAI,MAAM,KAAK,kBAAkB,KAAK;AAC9D,SAAK,WAAW;AAChB,SAAK,YAAY;AAEjB,SAAK,sBAAsB,KAAK,QAAQ,KAAK,IAAI;AAEjD,SAAK,sBAAsB,SAAU,OAAK;AACtC,UAAI,KAAK,QAAQ;AACb,cAAM,eAAc;MACxB;IACJ,EAAE,KAAK,IAAI;AAEX,SAAK,cAAc,SAAU,OAAK;AAC9B,UAAI,KAAK,QAAQ;AACb,YAAI,KAAK,aAAa;AAAM;AAE5B,YAAI,CAAC,KAAK,WAAW;AACjB,cAAI,MAAM,UAAU,KAAK,kBAAkB;AACvC,iBAAK,YAAY,MAAM;AACvB,iBAAK,YAAY;AAIjB,gBAAI,MAAM,UAAU,GAAG;AACnB,oBAAM,eAAc;AACpB,qBAAO;YACX;UACJ;QACJ;MACJ;IACJ,EAAE,KAAK,IAAI;AAEX,SAAK,YAAY,SAAU,OAAK;AAC5B,UAAI,KAAK,QAAQ;AACb,YAAI,MAAM,aAAa,KAAK;AAAW;AAEvC,YAAI,KAAK,WAAW;AAChB,cAAI,MAAM,UAAU,KAAK,kBAAkB;AACvC,iBAAK,YAAY;UAErB;QACJ;MACJ;IACJ,EAAE,KAAK,IAAI;AAEX,SAAK,eAAe,SAAU,OAAK;AAC/B,UAAI,KAAK,QAAQ;AACb,YAAI,MAAM,aAAa,KAAK;AAAW;AAEvC,aAAK,YAAY;AACjB,aAAK,gBAAgB;AAErB,YAAI,KAAK,WAAW;AAChB,eAAK,YAAY;QAErB;MACJ;IACJ,EAAE,KAAK,IAAI;AAEX,aAAS,KAAK,iBAAiB,eAAe,KAAK,mBAAmB;AAEtE,QAAI,KAAK,kBAAkB;AACvB,UAAI,KAAK,oBAAoB,GAAG;AAC5B,gBAAQ,UAAU,KAAK,MAAM,EAAE,iBAAiB,eAAe,KAAK,qBAAqB,KAAK;MAClG;AAEA,cAAQ,UAAU,KAAK,MAAM,EAAE,iBAAiB,eAAe,KAAK,WAAW;AAE/E,eAAS,KAAK,iBAAiB,aAAa,KAAK,SAAS;IAC9D;AAEA,aAAS,KAAK,iBAAiB,gBAAgB,KAAK,YAAY;EACpE;AAIA,wBAAsB,QAAQ,SAAS,QAAK;EAAK;AACjD,wBAAsB,aAAa,SAAS,aAAU;EAAK;AAE3D,wBAAsB,eAAe,SAAS,eAAY;AACtD,QAAI,KAAK,WAAW;IAEpB;AAEA,SAAK,WAAW;AAChB,SAAK,YAAY;AAEjB,SAAK,YAAY;AACjB,SAAK,gBAAgB;EACzB;AAEA,wBAAsB,YAAY,SAAS,YAAS;AAChD,aAAS,KAAK,oBAAoB,eAAe,KAAK,mBAAmB;AACzE,YAAQ,UAAU,KAAK,MAAM,EAAE,oBAAoB,eAAe,KAAK,mBAAmB;AAC1F,YAAQ,UAAU,KAAK,MAAM,EAAE,oBAAoB,eAAe,KAAK,WAAW;AAClF,aAAS,KAAK,oBAAoB,aAAa,KAAK,SAAS;AAC7D,aAAS,KAAK,oBAAoB,gBAAgB,KAAK,YAAY;EACvE;AAEA,wBAAsB,SAAS,SAAS,OAAO,IAAE;AAC7C,QAAI,KAAK,iBAAiB,UAAS,GAAI;AACnC,WAAK,iBAAiB,OAAO,EAAE;AAC/B,UAAI,KAAK,iBAAiB,OAAM,GAAI;AAChC,aAAK,iBAAiB,MAAK;AAC3B,aAAK,WAAW;MACpB;IACJ;AAEA,QAAI,CAAC,KAAK,UAAU;AAChB,UAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,WAAW;AAC3C,aAAK,YAAY;MACrB;AAEA,WAAK,gBAAgB;IACzB;EACJ;AAEA,wBAAsB,UAAU,WAAA;AAC5B,QAAI,cAAc,YAAW;AAC7B,QAAI,SAAS,YAAW;AAExB,QAAI,cAAc,YAAW;AAC7B,QAAI,oBAAoB,YAAW;AACnC,QAAI,iBAAiB,YAAW;AAEhC,QAAI,QAAQ,YAAW;AACvB,WAAO,SAAS,QAAQ,OAAK;AACzB,UAAI,KAAK,QAAQ;AACb,YAAI,KAAK,aAAa,QAAQ,MAAM,aAAa,KAAK;AAAW;AAEjE,YAAI,KAAK,aAAa,CAAC,KAAK,kBAAkB;AAE1C,wBAAc,KAAK,OAAO,eAAe,WAAW;AACpD,mBAAS,KAAK,OAAO,SAAS,MAAM;AAEpC,sBAAY,SAAS,GAAG,GAAG,CAAC;AAC5B,cAAI,KAAK,OAAO,aAAY,KAAM,MAAM;AACpC,0BAAc,KAAK,OAAO,aAAY,EAAG,SAAS,WAAW;UACjE;AAEA,2BAAiB,YAAY,WAAW,aAAa,cAAc;AAEnE,cAAI,WAAW;AACf,cAAI,YAAY,WAAW,WAAW,IAAI,UAAU;AAChD,6BAAiB,OAAO,YAAY,cAAc,EAAE,WAAW,aAAa,cAAc;UAC9F,WAAW,YAAY,WAAW,YAAY,YAAY,iBAAiB,CAAC,IAAI,UAAU;AACtF,6BAAiB,OAAO,WAAW,aAAa,cAAc;UAClE,WAAW,CAAC,OAAO,kBAAkB,WAAW,GAAG;AAC/C,2BAAe,YAAY,cAAc;UAC7C;AACA,yBAAe,eAAe,cAAc;AAE5C,cAAI,YAAY,MAAM;AACtB,cAAI,YAAY,MAAM;AAEtB,cAAI,aAAa,QAAQ,aAAa,MAAM;AACxC,gBAAI,KAAK,iBAAiB,MAAM;AAC5B,0BAAY,MAAM,QAAQ,KAAK,cAAc;AAC7C,0BAAY,MAAM,QAAQ,KAAK,cAAc;YACjD,OAAO;AACH,0BAAY;AACZ,0BAAY;YAChB;UACJ;AAEA,eAAK,YAAY,CAAC,KAAK,YAAY;AACnC,eAAK,YAAY,CAAC,KAAK,YAAY;AAEnC,eAAK,OAAO,cAAc,KAAK,WAAW,cAAc;AAExD,cAAI,mBAAmB,KAAK;AAC5B,kBAAQ,KAAK,OAAO,SAAS,KAAK;AAClC,cAAI,cAAc,KAAK,cAAc,MAAM,iBAAiB,aAAa,cAAc,CAAC;AACxF,cAAI,KAAK,IAAI,WAAW,IAAI,kBAAkB;AAC1C,gBAAI,YAAY,KAAK,IAAI,WAAW,IAAI,oBAAoB,KAAK,QAAQ,WAAW;AACpF,iBAAK,OAAO,cAAc,UAAU,cAAc;UACtD;AAEA,eAAK,OAAO,cAAc,KAAK,WAAW,WAAW;AAErD,eAAK,gBAAgB;AACrB,eAAK,YAAY,MAAM;AAEvB,eAAK,iBAAiB,MAAM,KAAK,gBAAgB;AACjD,eAAK,WAAW;QACpB;MACJ;IACJ;EACJ,EAAC;AAID,cAAY,iBAAiB,uBAAuBC,oBAAmB,WAAW,OAAO,MAAM,IAAI;AACvG;;;ACvMM,SAAU,oBAAiB;AAC7B,yBAAsB;AACtB,+BAA4B;AAC5B,4BAAyB;AAEzB,mBAAgB;AACpB;;;ACZM,SAAU,aAAU;AACtB,oBAAiB;AACrB;;;ACAM,SAAU,gBAAa;AACzB,mBAAgB;AAChB,aAAU;AACd;;;ACHM,SAAU,cAAW;AACvB,gBAAa;AACb,gBAAa;AACjB;;;ACdO,IAAM,aAAa;;;ACepB,SAAU,OAAO,QAAwB;AAC3C,UAAQ,IAAI,iBAAiB,UAAU;AAEvC,UAAQ,cAAc,MAAM;AAE5B,iBAAe,oCAAoC,MAAM;AAEzD,uBAAqB,MAAM;AAC3B,uBAAqB,MAAM;AAE3B,cAAW;AACf;;;AC1BA,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAG9B,IAAO,yBAAP,cAAsCC,YAAS;EACjD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,QAAQC,WAAS,KAAK,IAAI;;EAG9B,OAAI;AACA,QAAI,KAAK,QAAQ;AACb,aAAO,KAAK,CAAA;AACZ,WAAK,eAAe,UAAK;IAC7B;EACJ;EAEA,eAAe,QAAM;AACjB,QAAI,gBAAgB,OAAO,oBAAoB,MAAM;AACrD,aAAS,gBAAgB,eAAe;AACpC,UAAI,OAAO,YAAY,KAAK,QAAW;AACnC,eAAO,GAAG,YAAY,IAAI,OAAO,YAAY;MACjD;IACJ;EACJ;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;;;;A3HJJ,IAAM,uBAAkE,oBAAI,QAAO;AAE7E,IAAO,qBAAP,cAAkCC,YAAS;EACtC,OAAgB,WAAW;EAC3B,OAAgB,aAAa;IAChC,gBAAgBC,WAAS,KAAK,IAAI;IAClC,eAAeA,WAAS,KAAK,IAAI;IACjC,kBAAkBA,WAAS,KAAK,IAAI;IACpC,kBAAkBA,WAAS,KAAK,IAAI;IACpC,GAAG,sBAAsB;IACzB,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,kCAAkC;IACrC,GAAG,2BAA2B;IAC9B,GAAG,qBAAqB;IACxB,GAAG,0BAA0B;IAC7B,GAAG,sBAAsB;IACzB,GAAG,yBAAyB;IAC5B,GAAG,6BAA6B;;EAG5B;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAED,OAAgB,WAAW,QAAwB;AACtD,QAAI,CAAC,qBAAqB,IAAI,MAAM,GAAG;AACnC,2BAAqB,IAAI,QAAQ,IAAI;AACrC,aAAO,MAAM;IACjB;EACJ;EAEgB,OAAI;AAChB,SAAK,kCAAkC,KAAK,OAAO,gBAAgB,8BAA8B,KAAK,eAAe,6BAA6B,UAAU,GAAG,KAAK;AACpK,SAAK,8BAA8B,KAAK,OAAO,gBAAgB,0BAA0B,KAAK,eAAe,yBAAyB,UAAU,GAAG,KAAK;AAExJ,QAAI,KAAK,gBAAgB;AACrB,WAAK,0BAA0B,KAAK,OAAO,gBAAgB,sBAAsB,KAAK;IAC1F;AAEA,QAAI,KAAK,eAAe;AACpB,WAAK,yBAAyB,KAAK,OAAO,gBAAgB,qBAAqB,KAAK;IACxF;AAEA,QAAI,KAAK,kBAAkB;AACvB,WAAK,4BAA4B,KAAK,OAAO,gBAAgB,wBAAwB,KAAK;IAC9F;AAEA,QAAI,KAAK,kBAAkB;AACvB,WAAK,4BAA4B,KAAK,OAAO,gBAAgB,wBAAwB,KAAK;IAC9F;AAEA,SAAK,4BAA4B,KAAK,OAAO,gBAAgB,wBAAwB,KAAK;AAC1F,SAAK,oCAAoC,KAAK,OAAO,gBAAgB,gCAAgC,KAAK;AAE1G,SAAK,gCAAgC,KAAK,OAAO,gBAAgB,4BAA4B,KAAK,eAAe,2BAA2B,UAAU,GAAG,KAAK;AAC9J,SAAK,2BAA2B,KAAK,OAAO,gBAAgB,uBAAuB,KAAK,eAAe,sBAAsB,UAAU,GAAG,KAAK;AAC/I,SAAK,2BAA2B,KAAK,OAAO,gBAAgB,uBAAuB,KAAK,eAAe,sBAAsB,UAAU,GAAG,KAAK;AAC/I,SAAK,4BAA4B,KAAK,OAAO,gBAAgB,wBAAwB,KAAK,eAAe,uBAAuB,UAAU,GAAG,KAAK;AAClJ,SAAK,uCAAuC,KAAK,OAAO,gBAAgB,mCAAmC,KAAK,eAAe,kCAAkC,UAAU,GAAG,KAAK;AACnL,SAAK,0BAA0B,KAAK,OAAO,gBAAgB,sBAAsB,KAAK,eAAe,qBAAqB,UAAU,GAAG,KAAK;AAC5I,SAAK,+BAA+B,KAAK,OAAO,gBAAgB,2BAA2B,KAAK,eAAe,0BAA0B,UAAU,GAAG,KAAK;AAE3J,SAAK,2BAA2B,KAAK,OAAO,gBAAgB,uBAAuB,KAAK,eAAe,sBAAsB,UAAU,GAAG,KAAK;EACnJ;EAEgB,QAAK;AACjB,SAAK,gCAAgC,SAAS;AAC9C,SAAK,4BAA4B,SAAS;AAE1C,QAAI,KAAK,2BAA2B,MAAM;AACtC,WAAK,wBAAwB,SAAS;IAC1C;AAEA,QAAI,KAAK,0BAA0B,MAAM;AACrC,WAAK,uBAAuB,SAAS;IACzC;AAEA,QAAI,KAAK,6BAA6B,MAAM;AACxC,WAAK,0BAA0B,SAAS;IAC5C;AAEA,QAAI,KAAK,6BAA6B,MAAM;AACxC,WAAK,0BAA0B,SAAS;IAC5C;AAEA,SAAK,0BAA0B,SAAS;AACxC,SAAK,kCAAkC,SAAS;AAEhD,SAAK,8BAA8B,SAAS;AAC5C,SAAK,yBAAyB,SAAS;AACvC,SAAK,yBAAyB,SAAS;AACvC,SAAK,0BAA0B,SAAS;AACxC,SAAK,qCAAqC,SAAS;AACnD,SAAK,wBAAwB,SAAS;AACtC,SAAK,6BAA6B,SAAS;AAE3C,SAAK,yBAAyB,SAAS;EAC3C;EAEQ,eAAe,iBAAkD;AACrE,UAAM,aAAkC,CAAA;AAExC,QAAI,mBAAmB,MAAM;AACzB,YAAM,gBAAgB,OAAO,oBAAoB,eAAe;AAEhE,iBAAW,gBAAgB,eAAe;AACtC,cAAM,QAAS;AACf,YAAI,MAAM,YAAY,KAAK,QAAW;AAClC,qBAAW,YAAY,IAAI,MAAM,YAAY;QACjD;MACJ;IACJ;AAEA,WAAO;EACX;;;;A4H7JJ,SAAS,UAAAC,eAAc;AAEjB,SAAU,oBAAiB;AAC7B,MAAI,UAAU;AAEd,MAAIA,WAAU,QAAQA,QAAO,SAAS,WAAW;AAC7C,cAAU;EACd;AAEA,SAAO;AACX;AAEO,IAAI,aAAa;EACpB;;;;ACXE,IAAO,oBAAP,cAAiC,YAAW;EAE9C,YAAY,MAAM,aAAa,MAAI;AAC/B,UAAM,YAAY,IAAI;AAEtB,QAAI,cAAc,MAAM;AACpB,WAAK,cAAc,kBAAkB,KAAK,SAAS;AAEnD,WAAK,cAAc,SAAS,KAAK,SAAS;AAC1C,WAAK,cAAc,aAAa,KAAK,SAAS;AAE9C,WAAK,cAAc,WAAW,KAAK,SAAS;AAC5C,WAAK,cAAc,SAAS,KAAK,SAAS;AAE1C,WAAK,cAAc,SAAS,KAAK,SAAS;AAC1C,WAAK,cAAc,YAAY,KAAK,SAAS;AAE7C,WAAK,cAAc,aAAc,KAAK,SAAS,QAAQ,OAAQ,KAAK,SAAS,KAAK,WAAU,IAAK;AACjG,WAAK,cAAc,YAAY,KAAK,SAAS,QAAQ;AACrD,WAAK,cAAc,sBAAsB,KAAK,SAAS,YAAY;IACvE,OAAO;AACH,WAAK,cAAc,kBAAkB,KAAK,SAAS;AAEnD,WAAK,SAAS,KAAK,KAAK,cAAc,MAAM;AAC5C,WAAK,SAAS,YAAY,KAAK,cAAc;AAE7C,WAAK,SAAS,OAAO,KAAK,cAAc,QAAQ;AAChD,WAAK,SAAS,KAAK,KAAK,cAAc,MAAM;AAE5C,WAAK,SAAS,QAAQ,KAAK,cAAc;AACzC,WAAK,SAAS,WAAW,KAAK,cAAc;AAE5C,WAAK,eAAe,KAAK,cAAc,UAAU;AAEjD,WAAK,SAAS,YAAY,cAAc,KAAK,cAAc;AAE3D,UAAI,KAAK,cAAc,YAAY;AAC/B,aAAK,SAAS,KAAI;MACtB;IACJ;AAEA,SAAK,cAAa;EACtB;;;;AC5CJ,SAAS,aAAAC,mBAAiB;AAC1B,SAAS,UAAAC,eAAc;AAEjB,IAAO,0BAAP,cAAuCD,YAAS;EAClD,OAAO,WAAW;EAClB,OAAO,aAAa,CAAA;EAEpB,QAAK;AACD,IAAAC,QAAO,KAAK,IAAI;EACpB;;;;ACTJ,SAAS,aAAAC,mBAAiB;AAC1B,SAAS,UAAAC,eAAc;AAGjB,IAAO,gCAAP,cAA6CC,YAAS;EACxD,OAAO,WAAW;EAClB,OAAO,aAAa,CAAA;EAEpB,OAAI;AACA,SAAK,YAAY,YAAW;AAC5B,SAAK,aAAa,YAAW;AAC7B,SAAK,QAAQ,YAAW;EAC5B;EAEA,QAAK;AACD,SAAK,qBAAoB;EAC7B;EAEA,OAAO,IAAE;AACL,SAAK,qBAAoB;EAC7B;EAEA,uBAAoB;AAChB,SAAK,OAAO,eAAe,KAAK,SAAS;AACzC,SAAK,OAAO,cAAc,KAAK,UAAU;AACzC,SAAK,OAAO,SAAS,KAAK,KAAK;AAE/B,IAAAC,QAAO,IAAI,KAAK,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;AAClE,IAAAA,QAAO,YAAY,KAAK,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,GACxE,KAAK,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;EACnD;;;;AC9BJ,SAAS,aAAAC,aAAW,kBAAAC,iBAAgB,YAAAC,YAAU,aAAa;;;ACA3D,SAAS,oBAAoB,WAAAC,UAAS,kBAAAC,uBAAsB;AAGtD,IAAO,4BAAP,MAAgC;EAElC,YAAY,gBAAgB,UAAU,OAAK;AACvC,SAAK,WAAW;AAEhB,SAAK,aAAa;AAElB,SAAK,gBAAgB,CAAA;AAErB,SAAK,qBAAqB,CAAA;AAC1B,SAAK,mBAAmB,CAAA;AAExB,SAAK,kBAAkB;AACvB,SAAK,8BAA8B,CAAA;AACnC,SAAK,4BAA4B,CAAA;AAEjC,SAAK,yBAAyB;AAE9B,SAAK,YAAY;AACjB,SAAK,UAAU,IAAI;AAEnB,SAAK,gBAAgB;AAErB,SAAK,2BAA2B,IAAI,MAAM,GAAG;AAE7C,SAAK,sBAAsB,IAAIC,SAAO;AACtC,SAAK,2BAA2B,IAAIA,SAAO;AAC3C,SAAK,yBAAyB,IAAIA,SAAO;AAEzC,SAAK,eAAe;EACxB;EAEA,WAAQ;AACJ,WAAO,KAAK;EAChB;EAEA,gBAAa;AACT,WAAO,KAAK;EAChB;EAEA,qBAAkB;AACd,WAAO,KAAK;EAChB;EAEA,mBAAgB;AACZ,WAAO,KAAK;EAChB;EAEA,WAAQ;AACJ,WAAO,KAAK;EAChB;EAEA,UAAU,QAAM;AACZ,QAAI,KAAK,aAAa,QAAQ;AAC1B,WAAK,YAAY;AAEjB,WAAK,cAAc,SAAQ;AAE3B,WAAK,mBAAmB,SAAQ;AAChC,WAAK,iBAAiB,SAAQ;AAC9B,WAAK,kBAAkB;AACvB,WAAK,4BAA4B,SAAQ;AACzC,WAAK,0BAA0B,SAAQ;AAEvC,UAAI,KAAK,WAAW;AAChB,aAAK,yBAAyB,KAAK,SAAS,YAAY,KAAK,aAAa,KAAK,IAAI,CAAC;MACxF,WAAW,KAAK,0BAA0B,MAAM;AAC5C,aAAK,SAAS,wBAAwB,KAAK,sBAAsB;AACjE,aAAK,yBAAyB;MAClC;IACJ;EACJ;;EAGA,gBAAgB,QAAM;AAClB,SAAK,kBAAkB;EAC3B;;EAGA,OAAO,IAAE;AACL,QAAI,CAAC,KAAK,WAAW;AACjB;IACJ;AAEA,SAAK,kBAAkB;AAEvB,QAAI,+BAA+B,KAAK;AACxC,SAAK,8BAA8B,KAAK;AACxC,SAAK,4BAA4B,SAAQ;AACzC,SAAK,qBAAqB;AAE1B,QAAI,6BAA6B,KAAK;AACtC,SAAK,4BAA4B,KAAK;AACtC,SAAK,0BAA0B,SAAQ;AACvC,SAAK,mBAAmB;AAExB,QAAI,KAAK,YAAY;AACjB,WAAK,kBAAkB,EAAE;IAC7B;EACJ;EAEA,eAAY;AACR,WAAO,KAAK;EAChB;EAEA,cAAc,SAAO;AACjB,SAAK,gBAAgB;EACzB;EAEA,+BAA+B,IAAI,UAAQ;AACvC,SAAK,oBAAoB,IAAI,UAAU,EAAE,GAAM,CAAE;EACrD;EAEA,iCAAiC,IAAE;AAC/B,SAAK,oBAAoB,OAAO,EAAE;EACtC;EAEA,oCAAoC,IAAI,UAAQ;AAC5C,SAAK,yBAAyB,IAAI,UAAU,EAAE,GAAM,CAAE;EAC1D;EAEA,sCAAsC,IAAE;AACpC,SAAK,yBAAyB,OAAO,EAAE;EAC3C;EAEA,kCAAkC,IAAI,UAAQ;AAC1C,SAAK,uBAAuB,IAAI,UAAU,EAAE,GAAM,CAAE;EACxD;EAEA,oCAAoC,IAAE;AAClC,SAAK,uBAAuB,OAAO,EAAE;EACzC;EAEA,aAAa,MAAM,gBAAc;AAC7B,QAAI,QAAQ,mBAAmB,SAAS,QAAQ,mBAAmB,cAAc;AAC7E,WAAK,kBAAkB,MAAM,cAAc;IAC/C,WAAW,QAAQ,mBAAmB,aAAa,QAAQ,mBAAmB,kBAAkB;AAC5F,WAAK,gBAAgB,MAAM,cAAc;IAC7C;AAEA,SAAK,oBAAoB,OAAO,KAAK,UAAU,gBAAgB,IAAI;EACvE;EAEA,kBAAkB,MAAM,gBAAc;AAClC,QAAI,KAAK,eAAe;AACpB,UAAI,cAAc;AAClB,eAAS,UAAU,KAAK,eAAe;AACnC,YAAI,OAAO,UAAU,eAAe,MAAM,GAAG;AACzC,wBAAc;AACd;QACJ;MACJ;AAEA,UAAI,aAAa;AACb,gBAAQ,MAAM,6CAA6C;MAC/D;IACJ;AAEA,SAAK,cAAc,KAAK,eAAe,MAAM;AAE7C,QAAI,KAAK,iBAAiB;AACtB,WAAK,4BAA4B,KAAK,eAAe,MAAM;AAC3D,WAAK,0BAA0B,aAAa,SAAU,SAAO;AACzD,eAAO,QAAQ,UAAU,eAAe,MAAM;MAClD,CAAC;IACL;AAEA,QAAI,KAAK,eAAe;AACpB,cAAQ,IAAI,qBAAqB,KAAK,cAAc,MAAM;IAC9D;AAEA,SAAK,yBAAyB,OAAO,KAAK,UAAU,gBAAgB,IAAI;EAC5E;EAEA,gBAAgB,MAAM,gBAAc;AAChC,QAAI,KAAK,eAAe;AACpB,UAAI,cAAc;AAClB,eAAS,UAAU,KAAK,eAAe;AACnC,YAAI,OAAO,UAAU,eAAe,MAAM,GAAG;AACzC,wBAAc;AACd;QACJ;MACJ;AAEA,UAAI,CAAC,aAAa;AACd,gBAAQ,MAAM,uCAAuC;MACzD;IACJ;AAGA,SAAK,cAAc,aAAa,SAAU,SAAO;AAC7C,aAAO,QAAQ,UAAU,eAAe,MAAM;IAClD,CAAC;AAED,QAAI,KAAK,iBAAiB;AACtB,WAAK,0BAA0B,KAAK,eAAe,MAAM;AACzD,WAAK,4BAA4B,aAAa,SAAU,SAAO;AAC3D,eAAO,QAAQ,UAAU,eAAe,MAAM;MAClD,CAAC;IACL;AAEA,QAAI,KAAK,eAAe;AACpB,cAAQ,IAAI,mBAAmB,KAAK,cAAc,MAAM;IAC5D;AAEA,SAAK,uBAAuB,OAAO,KAAK,UAAU,gBAAgB,IAAI;EAC1E;EAEA,kBAAkB,IAAE;EAEpB;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,QAAI,KAAK,0BAA0B,MAAM;AACrC,WAAK,SAAS,wBAAwB,KAAK,sBAAsB;AACjE,WAAK,yBAAyB;IAClC;EACJ;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAQJ,0BAA0B,UAAU,oBAAoB,WAAA;AACpD,MAAI,kBAAkB,SAAU,SAAO;AACnC,QAAI,QAAQ,QAAQ,oBAAoBC,eAAc;AACtD,WAAO,SAAS,QAAQ,CAAC,MAAM;EACnC;AACA,SAAO,SAAS,kBAAkB,IAAE;AAChC,SAAK,yBAAyB,OAAO,EAAE;AACvC,QAAI,KAAK,yBAAyB,OAAM,GAAI;AACxC,WAAK,yBAAyB,MAAK;AAEnC,UAAI,kBAAkB,KAAK,cAAc,WAAW,eAAe;AAEnE,UAAI,gBAAgB,SAAS,GAAG;AAG5B,iBAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC7C,cAAI,YAAY,gBAAgB,CAAC;AAEjC,cAAI,QAAQ,UAAU,oBAAoBA,eAAc;AACxD,cAAI,OAAO;AACP,iBAAK,gBAAgB,mBAAmB,kBAAkB,KAAK;UACnE,OAAO;AACH,oBAAQ,MAAM,gBAAgB;UAClC;QACJ;MACJ;IACJ;EACJ;AACJ,EAAC;;;AD7PK,IAAO,6BAAP,cAA0CC,YAAS;EACrD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,mBAAmBC,WAAS,MAAM,EAAE;IACpC,qBAAqBA,WAAS,IAAI,GAAI;IACtC,oBAAoBA,WAAS,MAAM,EAAE;IACrC,sBAAsBA,WAAS,IAAI,GAAG;IACtC,sBAAsBA,WAAS,MAAM,GAAG;IACxC,wBAAwBA,WAAS,IAAI,GAAG;IACxC,iBAAiBA,WAAS,IAAI,GAAG;IACjC,qBAAqBA,WAAS,KAAK,KAAK;IACxC,0BAA0BA,WAAS,MAAM,GAAG;;;IAI5C,kBAAkBA,WAAS,KAAK,KAAK;IACrC,eAAeA,WAAS,IAAI,CAAC;IAC7B,yBAAyBA,WAAS,MAAM,CAAC;;IAEzC,eAAeA,WAAS,KAAK,IAAI;IACjC,0BAA0BA,WAAS,KAAK,IAAI;;EAGhD,QAAK;AACD,SAAK,WAAW;AAEhB,QAAI,CAAC,QAAQ,eAAe,KAAK,MAAM;AAAG;AAE1C,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,mBAAmB,IAAI,MAAM,CAAC;EACvC;EAEA,SAAM;AACF,SAAK,kBAAkB,KAAK,OAAO,aAAY;AAE/C,SAAK,mBAAmB,IAAI,cAAc,QAAQ,WAAW,KAAK,MAAM,CAAC;AACzE,SAAK,oBAAoB,IAAI,eAAc;AAE3C,SAAK,wBAAwB,CAAA;AAC7B,SAAK,2BAA2B,CAAA;AAChC,SAAK,2BAA2B,CAAA;AAChC,SAAK,yBAAyB,CAAA;AAC9B,SAAK,4BAA4B,CAAA;AACjC,SAAK,4BAA4B,CAAA;AACjC,SAAK,2BAA2B,CAAA;AAChC,SAAK,8BAA8B,CAAA;AACnC,SAAK,8BAA8B,CAAA;AAEnC,SAAK,WAAW,MAAM,KAAK;AAC3B,SAAK,WAAW,OAAO,KAAK;AAC5B,SAAK,WAAW,OAAO,IAAI;AAE3B,SAAK,gBAAgB,IAAI,MAAM,CAAC;AAChC,SAAK,WAAW,IAAI,MAAM,CAAC;AAC3B,SAAK,gBAAgB,IAAI,MAAM,KAAK,wBAAwB;AAC5D,SAAK,qBAAqB,IAAI,MAAM,CAAC;AACrC,SAAK,gBAAgB,CAAA;AACrB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,cAAc,KAAK,CAAC;IAC7B;AAEA,SAAK,sBAAsB;AAE3B,SAAK,mBAAmB,YAAW;AACnC,SAAK,gBAAgB,YAAW;AAEhC,SAAK,aAAa;EACtB;EAEA,OAAO,IAAE;AACL,QAAI,CAAC,KAAK;AAAU;AAEpB,QAAI,CAAC,KAAK,YAAY;AAClB,WAAK,iBAAiB,OAAO,EAAE;AAC/B,UAAI,KAAK,iBAAiB,OAAM,GAAI;AAChC,aAAK,OAAM;MACf;IACJ,OAAO;AACH,WAAK,cAAc,OAAO,EAAE;AAC5B,UAAI,KAAK,cAAc,OAAM,GAAI;AAC7B,aAAK,SAAS,OAAO,EAAE;AACvB,aAAK,cAAc,OAAO,EAAE;AAC5B,aAAK,mBAAmB,OAAO,EAAE;AACjC,YAAI,KAAK,SAAS,OAAM,GAAI;AACxB,eAAK,SAAS,MAAK;AAEnB,cAAI,eAAe;AACnB,cAAI,KAAK,cAAc,OAAM,GAAI;AAC7B,iBAAK,cAAc,MAAK;AACxB,2BAAe;UACnB;AAEA,yBAAe,gBAAgB,KAAK;AACpC,eAAK,aAAa,YAAY;QAClC;AAEA,aAAK,cAAc,IAAG;AACtB,aAAK,cAAc,QAAQ,KAAK,MAAM,IAAI,EAAE,CAAC;AAE7C,YAAI,KAAK,eAAe;AACpB,cAAI,KAAK,mBAAmB,OAAM,GAAI;AAClC,iBAAK,mBAAmB,MAAK;AAC7B,gBAAI,KAAK,0BAA0B;AAC/B,sBAAQ,MAAK;YACjB;AACA,oBAAQ,IAAI,2BAA2B,KAAK,sBAAsB,MAAM;AACxE,oBAAQ,IAAI,4BAA4B,KAAK,uBAAuB,MAAM;AAC1E,oBAAQ,IAAI,8BAA8B,KAAK,yBAAyB,MAAM;AAE9E,gBAAI,mBAAmB;AACvB,qBAAS,aAAa,KAAK,0BAA0B;AACjD,kCAAoB,UAAU,cAAa,EAAG;YAClD;AAEA,gBAAI,oBAAoB;AACxB,qBAAS,aAAa,KAAK,2BAA2B;AAClD,mCAAqB,UAAU,cAAa,EAAG;YACnD;AAEA,gBAAI,sBAAsB;AAC1B,qBAAS,aAAa,KAAK,6BAA6B;AACpD,qCAAuB,UAAU,cAAa,EAAG;YACrD;AAGA,gBAAI,mBAAmB,mBAAmB,oBAAoB,uBAAuB;AAErF,oBAAQ,IAAI,6BAA6B,eAAe;AACxD,oBAAQ,IAAI,kBAAkB,KAAK,eAAe;AAClD,oBAAQ,IAAI,cAAc;AAC1B,gBAAI,YAAY;AAChB,qBAAS,OAAO,KAAK,eAAe;AAChC,0BAAY,UAAU,OAAO,KAAK,IAAI;YAC1C;AACA,oBAAQ,IAAI,SAAS;UACzB;QACJ;MACJ;AAEA,UAAI,KAAK,sBAAsB,GAAG;AAC9B,aAAK;AACL,YAAI,KAAK,uBAAuB,GAAG;AAC/B,mBAAS,SAAS,KAAK,2BAA2B;AAC9C,kBAAM,YAAY;AAClB,gBAAI,WAAW;AACf,kBAAM,iBAAiB,CAAC,KAAK,UAAU,CAAC,UAAU,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,QAAQ,CAAC;AACrI,kBAAM,kBAAkB,CAAC,KAAK,UAAU,CAAC,UAAU,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,QAAQ,CAAC;UAC1I;QACJ;MACJ;AAEA,eAAS,SAAS,KAAK,0BAA0B;AAC7C,YAAI,WAAW,IAAI;AACnB,aAAK,iBAAiB,SAAS,KAAK,UAAU,CAAC,UAAU,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,QAAQ,GAAG,KAAK,UAAU,CAAC,UAAU,QAAQ,CAAC;AAC5I,cAAM,aAAa,KAAK,gBAAgB;AAExC,YAAI,iBAAiB,KAAK;AAC1B,aAAK,cAAc,SAAS,KAAK,UAAU,CAAC,gBAAgB,cAAc,GAAG,KAAK,UAAU,CAAC,gBAAgB,cAAc,GAAG,KAAK,UAAU,CAAC,gBAAgB,cAAc,CAAC;AAC7K,cAAM,UAAU,KAAK,aAAa;MACtC;IACJ;EACJ;EAEA,aAAa,cAAY;AACrB,QAAI,eAAe,KAAK;AAExB,QAAIC,YAAW;AAEf,aAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACnC,UAAI,SAAS,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,KAAK,cAAa,GAAI,KAAK,UAAU,GAAG,CAAC,IAAI,KAAK,cAAa,GAAI,KAAK,UAAU,GAAG,CAAC,IAAI,KAAK,cAAa,CAAE;AACnJ,UAAI,YAAY,CAAC,KAAK,UAAU,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,CAAC;AACpF,gBAAU,eAAe,SAAS;AAElC,WAAK,iBAAiB,SAAS,UAAU,MAAM;AAC/C,WAAK,iBAAiB,YAAY,UAAU,SAAS;AACrD,WAAK,iBAAiB,aAAaA;AACnC,WAAK,iBAAiB,kBAAkB,kBAAiB;AAEzD,UAAI,iBAAiB,aAAa,QAAQ,KAAK,kBAAkB,KAAK,iBAAiB;AAEvF,UAAI,gBAAgB,QAAQ,eAAe,KAAK,MAAM,GAAG;AACrD,gBAAQ,sBAAsB,KAAK,MAAM,EAAE,YAAY,KAAK,cAAc,YAAW,GAAI,gBAAgB,MAAM,GAAG,KAAK;MAC3H;IACJ;EACJ;EAEA,WAAW,YAAY,aAAW;AAC9B,QAAI,WAAW,KAAK;AACpB,QAAI,YAAY,KAAK;AACrB,QAAI,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,mBAAmB,CAAC;AAC1D,QAAI,CAAC,YAAY;AACb,UAAI,aAAa;AACb,iBAAS,KAAK,KAAK,KAAK,KAAK,KAAK,oBAAoB,CAAC;AACvD,mBAAW,KAAK;AAChB,oBAAY,KAAK;MACrB,OAAO;AACH,iBAAS,KAAK,KAAK,KAAK,KAAK,KAAK,sBAAsB,CAAC;AACzD,mBAAW,KAAK;AAChB,oBAAY,KAAK;MACrB;IACJ;AAEA,QAAI,gBAAgB,KAAK,KAAK,IAAI;AAElC,QAAI,cAAc,KAAK,IAAI,GAAG,KAAK,oBAAoB,EAAE;AACzD,QAAI,cAAc,KAAK,oBAAoB;AAE3C,QAAI,CAAC,YAAY;AACb,UAAI,aAAa;AACb,sBAAc,KAAK,IAAI,GAAG,KAAK,qBAAqB,EAAE;AACtD,sBAAc,KAAK,qBAAqB;MAC5C,OAAO;AACH,sBAAc,KAAK,IAAI,GAAG,KAAK,uBAAuB,EAAE;AACxD,sBAAc,KAAK,uBAAuB;MAC9C;IACJ;AAEA,QAAI,mBAAmB;AACvB,QAAI,mBAAmB,KAAK,aAAa,EAAE;AAE3C,QAAI,cAAc,YAAY,GAAG,GAAG,CAAC;AACrC,QAAI,sBAAsB,YAAY,GAAG,GAAG,EAAE;AAE9C,aAAS,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK;AACjC,UAAI,oBAAoB,YAAY,GAAG,GAAG,CAAC;AAE3C,UAAI,eAAe,YAAW;AAC9B,0BAAoB,WAAW,mBAAmB,YAAY;AAC9D,mBAAa,eAAe,YAAY;AAExC,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,YAAI,UAAU,SAAS,UAAU;AAC7B,cAAIA,YAAW,KAAK,OAAM,KAAM,cAAc,eAAe;AAC7D,cAAI,qBAAqB,KAAK,OAAM,IAAK,IAAI,MAAM,mBAAmB,oBAAoB;AAC1F,cAAI,mBAAmB,KAAK,OAAM,IAAK,IAAI,MAAM,mBAAmB,oBAAoB;AACxF,cAAI,iBAAiB,kBAAkB,SAAQ;AAE/C,yBAAe,uBAAuB,mBAAmB,cAAc,cAAc;AACrF,yBAAe,uBAAuB,iBAAiB,aAAa,cAAc;AAElF,yBAAe,WAAWA,WAAU,cAAc;AAElD,eAAK,UAAU,gBAAgB,YAAY,WAAW;QAC1D;AAEA,0BAAkB,uBAAuB,gBAAgB,GAAG,cAAc,iBAAiB;AAE3F,YAAI,UAAU,SAAS,UAAU;AAC7B,cAAIA,YAAW,KAAK,OAAM,KAAM,cAAc,eAAe;AAC7D,cAAI,qBAAqB,KAAK,OAAM,IAAK,IAAI,MAAM,mBAAmB,oBAAoB;AAC1F,cAAI,mBAAmB,KAAK,OAAM,IAAK,IAAI,MAAM,mBAAmB,oBAAoB;AACxF,cAAI,iBAAiB,kBAAkB,SAAQ;AAE/C,yBAAe,uBAAuB,mBAAmB,cAAc,cAAc;AACrF,yBAAe,uBAAuB,iBAAiB,aAAa,cAAc;AAElF,yBAAe,WAAWA,WAAU,cAAc;AAElD,eAAK,UAAU,gBAAgB,YAAY,WAAW;QAC1D;AAEA,0BAAkB,uBAAuB,gBAAgB,GAAG,cAAc,iBAAiB;MAE/F;AAEA,0BAAoB,uBAAuB,eAAe,aAAa,mBAAmB;IAC9F;EACJ;EAEA,UAAU,gBAAgB,YAAY,aAAW;AAC7C,QAAI,WAAW;AACf,QAAIC,SAAQ,KAAK,UAAU,GAAG,EAAE;AAChC,QAAI,QAAQ,KAAK,cAAc,MAAM,QAAQ,MAAM,GAAG;AACtD,QAAI,KAAK,kBAAkB;AACvB,cAAQ,MAAM;AACd,MAAAA,UAAS,KAAK;IAClB;AAEA,QAAI,QAAQ,KAAK,gBAAgB,aAAY;AAC7C,UAAM,eAAe,QAAQ;AAE7B,QAAI,iBAAiB,MAAM,gBAAgBC,iBAAgB;MACvD,SAAS;MACT,aAAa,EAAE,OAAO,KAAK,cAAa;MACxC,WAAW,YAAYD,QAAOA,QAAOA,MAAK;MAC1C,UAAU;MACV,aAAa,CAAC;MACd,QAAQ;KACX;AAED,QAAI,YAAY;AACZ,WAAK,sBAAsB,KAAK,KAAK;AACrC,WAAK,yBAAyB,KAAK,cAAc;AACjD,WAAK,yBAAyB,KAAK,IAAI,0BAA0B,cAAc,CAAC;IACpF,WAAW,aAAa;AACpB,WAAK,uBAAuB,KAAK,KAAK;AACtC,WAAK,0BAA0B,KAAK,cAAc;AAClD,WAAK,0BAA0B,KAAK,IAAI,0BAA0B,cAAc,CAAC;IACrF,OAAO;AACH,WAAK,yBAAyB,KAAK,KAAK;AACxC,WAAK,4BAA4B,KAAK,cAAc;AACpD,WAAK,4BAA4B,KAAK,IAAI,0BAA0B,cAAc,CAAC;IACvF;EACJ;EAEA,YAAS;AACL,aAAS,aAAa,KAAK,0BAA0B;AACjD,gBAAU,QAAO;IACrB;AAEA,aAAS,aAAa,KAAK,2BAA2B;AAClD,gBAAU,QAAO;IACrB;AAEA,aAAS,aAAa,KAAK,6BAA6B;AACpD,gBAAU,QAAO;IACrB;EACJ;;;;AEvUJ,SAAS,aAAAE,YAAW,aAAAC,aAAW,iBAAAC,gBAAe,iBAAAC,gBAAe,YAAAC,YAAU,iBAAAC,sBAAqB;AAStF,IAAO,wCAAP,cAAqDC,YAAS;EAChE,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,oBAAoBC,WAAS,IAAI,EAAE;;IACnC,6BAA6BA,WAAS,IAAI,CAAC;IAC3C,oBAAoBA,WAAS,IAAI,CAAC;IAClC,mBAAmBA,WAAS,IAAI,GAAG;IACnC,0BAA0BA,WAAS,MAAM,GAAG;;IAC5C,gCAAgCA,WAAS,MAAM,IAAI;IACnD,kBAAkBA,WAAS,KAAK,KAAK;IACrC,cAAcA,WAAS,KAAK,KAAK;IAEjC,eAAeA,WAAS,KAAK,IAAI;IAEjC,mBAAmBA,WAAS,KAAK,KAAK;IACtC,2BAA2BA,WAAS,KAAK,IAAI;IAC7C,mCAAmCA,WAAS,MAAM,EAAE;IAEpD,kBAAkBA,WAAS,SAAQ;IACnC,uBAAuBA,WAAS,SAAQ;IACxC,iBAAiBA,WAAS,SAAS,IAAI;;EAG3C,SAAM;AACF,SAAK,oBAAoB;AACzB,SAAK,oBAAoB,aAAa,IAAI;AAC1C,SAAK,oBAAoB,YAAY,KAAK,oBAAoB,GAAG;AACjE,SAAK,oBAAoB,kBAAkB,YAAY,GAAG,GAAG,KAAM,CAAC;AAEpE,SAAK,iBAAiB,IAAI,MAAM,KAAK,wBAAwB;AAC7D,SAAK,UAAU;AAEf,SAAK,mBAAmB,KAAK;AAE7B,SAAK,eAAe,CAAA;AAEpB,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;AAErB,SAAK,YAAY,CAAA;AACjB,SAAK,oBAAoB;AACzB,SAAK,mBAAmB;AAExB,SAAK,sBAAsB;AAE3B,SAAK,eAAe;EACxB;EAEA,QAAQ,IAAE;AAEN;AACI,UAAI,KAAK,MAAS;AACd;MACJ;AAEA,UAAI,KAAK,OAAO,KAAK,mBAAmB,GAAG;AACvC,aAAK;AACL;MACJ;AAEA,WAAK,mBAAmB;AAExB,UAAI,KAAK,oBAAoB,GAAG;AAC5B,aAAK;AACL;MACJ;IACJ;AAEA,QAAI,CAAC,KAAK,SAAS;AACf,WAAK,eAAe,OAAO,EAAE;AAE7B,WAAK,aAAa,KAAK,EAAE;AAEzB,UAAI,KAAK,eAAe,OAAM,GAAI;AAC9B,aAAK,eAAe,MAAK;AAEzB,YAAI,YAAY,KAAK,yBAAyB,KAAK;AAEnD,YAAI,KAAK,cAAc;AACnB,eAAK,eAAe;QACxB,OAAO;AAGH,cAAI,UAAU;AACd,cAAI,YAAY,KAAK,qBAAqB,KAAK,6BAA6B;AACxE,iBAAK,gBAAgB,KAAK;AAE1B,sBAAU;AAEV,gBAAI,KAAK,iBAAiB,GAAG;AACzB,mBAAK,gBAAgB;YACzB;UACJ,OAAO;AACH,iBAAK,gBAAgB,KAAK;AAC1B,gBAAI,KAAK,gBAAgB,GAAG;AACxB,mBAAK,gBAAgB,KAAK,IAAI,KAAK,eAAe,KAAK,aAAa;YACxE;UACJ;AAEA,eAAK,yBAAyB,OAAO,gBAAgB,KAAK,mBAAmB,KAAK;AAClF,eAAK,sBAAsB,OAAO,aAAa,KAAK;AACpD,eAAK,oBAAoB,OAAO,UAAU,YAAY,QAAQ,KAAK;AAEnE,cAAI,SAAS;AACT,iBAAK,yBAAyB,SAAS,QAAQ,KAAK;AACpD,iBAAK,sBAAsB,SAAS,QAAQ,KAAK;AACjD,iBAAK,oBAAoB,SAAS,QAAQ,KAAK;UACnD,OAAO;AACH,iBAAK,yBAAyB,SAAS,QAAQ,KAAK;AACpD,iBAAK,sBAAsB,SAAS,QAAQ,KAAK;AACjD,iBAAK,oBAAoB,SAAS,QAAQ,KAAK;UACnD;AAEA,cAAIC,UAAQ;AAGZ,cAAK,KAAK,gBAAgB,MACrB,CAAC,WAAY,KAAK,gBAAgB,KAAK,iBAAkB,KAAK,IAAI,GAAG,MAAO,KAAK,sBAAsB,MACvG,WAAY,KAAK,gBAAgB,KAAK,iBAAkB,KACxD,CAAC,WAAW,KAAK,qBAAsB;AACxC,gBAAI,YAAY,KAAK,qBAAqB,KAAK,6BAA6B;AAExE,mBAAK,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,gBAAgB,GAAG,CAAC;AACrE,mBAAK,gBAAgB;AACrB,cAAAA,UAAQ;AAER,kBAAI,KAAK,eAAe;AAEpB,wBAAQ,IAAI,oBAAoB,KAAK,mBAAmB,KAAK,wBAAwB,aAAa,KAAK,kBAAkB,iBAAiB,SAAS;cACvJ;YACJ,OAAO;AACH,kBAAI,KAAK,qBAAqB;AAC1B,oBAAI,KAAK,eAAe;AACpB,0BAAQ,IAAI,8BAA8B;AAE1C,uBAAK,qBAAqB,OAAO;gBACrC;cACJ,OAAO;AACH,qBAAK,eAAe,KAAK,aAAa;AAEtC,oBAAI,KAAK,eAAe;AACpB,0BAAQ,IAAI,sBAAsB,KAAK,gBAAgB,KAAK,wBAAwB,aAAa,KAAK,eAAe,iBAAiB,SAAS;AAC/I,0BAAQ,IAAI,+BAA+B,KAAK,sBAAsB;AACtE,0BAAQ,IAAI,sBAAsB,KAAK,oBAAoB,iBAAkB,KAAK,qBAAqB,KAAK,2BAA4B;gBAC5I;AAEA,qBAAK,yBAAyB,OAAO,gBAAgB,KAAK,gBAAgB,KAAK;AAC/E,qBAAK,sBAAsB,OAAO,aAAa,KAAK;AACpD,qBAAK,oBAAoB,OAAO,UAAU,YAAY,QAAQ,KAAK;AAEnE,qBAAK,qBAAqB,OAAO;cACrC;AACA,mBAAK,UAAU;YACnB;UACJ;AAEA,cAAI,WAAW,CAACA,SAAO;AACnB,gBAAI,KAAK,eAAe;AACpB,sBAAQ,IAAI,oBAAoB,KAAK,mBAAmB,KAAK,wBAAwB,aAAa,KAAK,kBAAkB,iBAAiB,SAAS;YACvJ;UACJ;AAEA,cAAI,CAAC,KAAK,SAAS;AAEf,gBAAI,KAAK,gBAAgB,GAAG;AACxB,mBAAK,mBAAmB,KAAK,OAAO,KAAK,gBAAgB,KAAK,iBAAiB,CAAC;AAChF,mBAAK,mBAAmB,KAAK,IAAI,KAAK,kBAAkB,CAAC;YAC7D,WAAW,CAACA,SAAO;AACf,mBAAK,mBAAmB,KAAK,gBAAgB;YACjD,OAAO;AACH,mBAAK,mBAAmB,KAAK;YACjC;AAEA,gBAAI,KAAK,mBAAmB,KAAO;AAC/B,mBAAK,mBAAmB;AACxB,mBAAK,sBAAsB;YAC/B,OAAO;AACH,mBAAK,sBAAsB;YAC/B;UACJ;QACJ;AAEA,YAAI,CAAC,KAAK,SAAS;AACf,eAAK,eAAe,KAAK,gBAAgB;AACzC,eAAK,iBAAiB;AACtB,eAAK,gBAAgB;AAErB,eAAK,oBAAoB;QAC7B;MACJ;IACJ;EACJ;EAEA,eAAe,OAAK;AAChB,WAAO,KAAK,UAAU,SAAS,OAAO;AAClC,UAAI,QAAQ,KAAK,UAAU,IAAG;AAC9B,cAAQ,qBAAqB,KAAK,MAAM,EAAE,QAAQ,KAAK,WAAW,KAAK;IAC3E;AAEA,WAAO,KAAK,UAAU,SAAS,OAAO;AAClC,UAAI,QAAQ,QAAQ,qBAAqB,KAAK,MAAM,EAAE,IAAI,KAAK,SAAS;AACxE,WAAK,UAAU,KAAK,KAAK;IAC7B;AAEA,QAAI,WAAW;AACf,WAAO,WAAW,WAAW,OAAO;AAChC;IACJ;AAEA,QAAI,eAAe;AACnB,QAAI,oBAAoB,gBAAgB,WAAW;AACnD,QAAI,aAAa,KAAK,oBAAoB,IAAI,sBAAsB,WAAW;AAE/E,QAAI,eAAe;AAEnB,aAAS,IAAI,GAAG,IAAI,YAAY,eAAe,GAAG,KAAK;AACnD,eAAS,IAAI,GAAG,IAAI,YAAY,eAAe,GAAG,KAAK;AACnD,YAAI,QAAQ,KAAK,UAAU,eAAe,CAAC;AAC3C,cAAM,YAAY,SAAS;AAE3B,YAAI,WAAW,CAAC,CAAC,KAAK,oBAAoB,YAAY,IAAI,YAAY,IAAI,IAAI,cAAc,KAAK,oBAAoB,YAAY,IAAI,YAAY,IAAI,IAAI,cAAc,CAAC;AAExK,cAAM,oBAAoB,QAAQ;AAClC,cAAM,aAAa,IAAI;AAEvB;MACJ;IACJ;EACJ;EAEA,QAAK;AACD,SAAK,WAAW;AAEhB,QAAI,CAAC,QAAQ,eAAe,KAAK,MAAM;AAAG;AAE1C,SAAK,WAAW;AAEhB,QAAI,KAAK,oBAAoB,MAAM;AAC/B,WAAK,mBAAmB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,cAAc,MAAK;AACpF,WAAK,iBAAiB,eAAe,YAAY,MAAM,MAAM,MAAM,CAAC;AACpE,WAAK,iBAAiB,eAAe,YAAY,GAAG,GAAG,GAAG,CAAC;AAC3D,WAAK,iBAAiB,gBAAgB;IAC1C;AAEA,QAAI,KAAK,yBAAyB,MAAM;AACpC,WAAK,wBAAwB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,cAAc,MAAK;AACzF,WAAK,sBAAsB,eAAe,YAAY,MAAM,MAAM,MAAM,CAAC;AACzE,WAAK,sBAAsB,eAAe,YAAY,GAAG,GAAG,GAAG,CAAC;AAChE,WAAK,sBAAsB,gBAAgB;IAC/C;AAEA,QAAI,KAAK,mBAAmB,MAAM;AAC9B,WAAK,kBAAkB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,OAAO,MAAK;IAChF;AAEA,SAAK,cAAc,YAAY,KAAK,GAAG,GAAG,CAAC;AAC3C,SAAK,iBAAiB,YAAY,MAAM,MAAM,MAAM,CAAC;AAErD,SAAK,yBAAyB;AAE9B,QAAI,SAAS,KAAK;AAClB,QAAI,KAAK,2BAA2B;AAChC,eAAS,QAAQ,iBAAiB,KAAK,MAAM,EAAE,OAAO,aAAY;AAClE,aAAO,cAAc,KAAK,YAAY,GAAG,GAAG,CAAC,CAAC;AAC9C,aAAO,kBAAkB,YAAY,GAAG,GAAG,KAAK,iCAAiC,CAAC;IACtF;AAEA,SAAK,qBAAqB,OAAO,aAAY;AAE7C,SAAK,sBAAsB,KAAK,mBAAmB,aAAY;AAC/D;AACI,UAAI,gBAAgB,KAAK,oBAAoB,gBAAgBC,cAAa;AAC1E,oBAAc,OAAO,UAAU,YAAY,KAAK,MAAM;AACtD,oBAAc,WAAW,KAAK,sBAAsB,MAAK;IAC7D;AAEA,SAAK,iBAAiB,KAAK,mBAAmB,aAAY;AAC1D;AACI,UAAI,gBAAgB,KAAK,eAAe,gBAAgBA,cAAa;AACrE,oBAAc,OAAO,KAAK,iBAAiB,KAAK,iBAAiB;AACjE,WAAK,yBAAyB,cAAc,KAAK,UAAU,SAAS;AACpE,oBAAc,WAAW,KAAK,iBAAiB,MAAK;IACxD;AAEA,QAAI,aAAa,IAAI,iBAAgB;AACrC,QAAI,CAAC,KAAK,cAAc;AACpB,iBAAW,oBAAoB;IACnC,OAAO;AACH,UAAI,KAAK,0BAA0B,GAAG;AAClC,mBAAW,oBAAoB;MACnC,WAAW,KAAK,0BAA0B,GAAG;AACzC,mBAAW,oBAAoB;MACnC,WAAW,KAAK,0BAA0B,IAAI;AAC1C,mBAAW,oBAAoB;MACnC,OAAO;AACH,mBAAW,oBAAoB;MACnC;IACJ;AACA,eAAW,6BAA6B;AACxC,eAAW,yBAAyB;AACpC,eAAW,gBAAgB,IAAI,YAAW;AAC1C,eAAW,cAAc,2BAA2B,8BAA8BA,eAAc,UAAU,YAAY,KAAK,gBAAgB;AAC3I,eAAW,cAAc,2BAA2B,8BAA8BA,eAAc,UAAU,QAAQ,KAAK,YAAY;AAEnI,SAAK,YAAY,KAAK,OAAO,MAAM,KAAK,cAAa;AACrD,YAAQ,qBAAqB,KAAK,MAAM,EAAE,QAAQ,KAAK,WAAW,IAAI,WAAW,KAAK,gBAAgB,UAAU,CAAC;AAEjH,SAAK,oBAAoB,aAAa,KAAK;AAC3C,SAAK,eAAe,aAAa,KAAK;AAEtC,SAAK,gBAAgB,IAAI,MAAM,CAAC;AAChC,SAAK,oBAAoB;AAEzB,SAAK,iBAAiB,KAAK,mBAAmB,aAAY;AAG1D,SAAK,wBAAwB,KAAK,eAAe,aAAY;AAG7D,SAAK,2BAA2B,KAAK,sBAAsB,gBAAgBC,cAAa;AAExF,SAAK,yBAAyB,YAAYC,WAAU;AACpD,SAAK,yBAAyB,gBAAgBC,eAAc;AAC5D,SAAK,yBAAyB,WAAW,KAAK,gBAAgB,MAAK;AACnE,SAAK,yBAAyB,SAAS,QAAQ,KAAK;AACpD,SAAK,yBAAyB,OAAO;AAGrC,SAAK,qBAAqB,KAAK,eAAe,aAAY;AAE1D,SAAK,wBAAwB,KAAK,mBAAmB,gBAAgBF,cAAa;AAGlF,SAAK,sBAAsB,YAAYC,WAAU;AACjD,SAAK,sBAAsB,gBAAgBC,eAAc;AACzD,SAAK,sBAAsB,WAAW,KAAK,gBAAgB,MAAK;AAChE,SAAK,sBAAsB,SAAS,QAAQ,KAAK;AACjD,SAAK,sBAAsB,OAAO;AAGlC,SAAK,mBAAmB,KAAK,eAAe,aAAY;AAExD,SAAK,sBAAsB,KAAK,iBAAiB,gBAAgBF,cAAa;AAG9E,SAAK,oBAAoB,YAAYC,WAAU;AAC/C,SAAK,oBAAoB,gBAAgBC,eAAc;AACvD,SAAK,oBAAoB,WAAW,KAAK,gBAAgB,MAAK;AAC9D,SAAK,oBAAoB,SAAS,QAAQ,KAAK;AAC/C,SAAK,oBAAoB,OAAO;AAGhC,SAAK,oBAAoB,KAAK,mBAAmB,aAAY;AAE7D,SAAK,uBAAuB,KAAK,kBAAkB,gBAAgBF,cAAa;AAGhF,SAAK,qBAAqB,YAAYC,WAAU;AAChD,SAAK,qBAAqB,gBAAgBC,eAAc;AACxD,SAAK,qBAAqB,WAAW,KAAK,gBAAgB,MAAK;AAC/D,SAAK,qBAAqB,SAAS,QAAQ,KAAK;AAChD,SAAK,qBAAqB,OAAO;AAGjC,SAAK,eAAe,oBAAoB,YAAY,GAAG,KAAK,CAAC,CAAC;AAC9D,SAAK,eAAe,YAAY,IAAI;AAEpC,SAAK,sBAAsB,oBAAoB,YAAY,MAAM,GAAG,CAAC,CAAC;AACtE,SAAK,mBAAmB,oBAAoB,YAAY,MAAM,GAAG,CAAC,CAAC;AACnE,SAAK,iBAAiB,oBAAoB,YAAY,QAAQ,GAAG,CAAC,CAAC;AACnE,SAAK,kBAAkB,oBAAoB,YAAY,GAAG,MAAM,CAAC,CAAC;AAClE,SAAK,kBAAkB,YAAY,CAAC;AAEpC,SAAK,eAAe,CAAA;AAEpB,SAAK,kBAAkB;EAC3B;EAEA,OAAO,IAAE;AACL,QAAI,CAAC,KAAK;AAAU;AAEpB,QAAI,KAAK,mBAAmB,GAAG;AAC3B,UAAI,KAAK,qBAAqB,CAAC,KAAK,mBAAmB;AACnD,YAAI,KAAK,cAAc,UAAS,GAAI;AAChC,eAAK,cAAc,OAAO,EAAE;AAE5B,eAAK,aAAa,KAAK,EAAE;AAEzB,cAAI,KAAK,cAAc,OAAM,GAAI;AAC7B,iBAAK,qBAAqB,KAAK,yBAAyB,IAAI;AAC5D,gBAAI,KAAK,qBAAqB,GAAG;AAC7B,mBAAK,qBAAqB,KAAK;YACnC;AAEA,gBAAI,KAAK,eAAe;AACpB,sBAAQ,IAAI,iCAAiC,KAAK,sBAAsB;AACxE,sBAAQ,IAAI,sBAAsB,KAAK,oBAAoB,iBAAkB,KAAK,qBAAqB,KAAK,2BAA4B;AACxI,sBAAQ,IAAI,EAAE;YAClB;AACA,iBAAK,OAAM;UACf;QACJ,OAAO;AACH,eAAK,QAAQ,EAAE;QACnB;MACJ,OAAO;AACH,aAAK,oBAAoB,QAAQ,WAAW,KAAK,MAAM,KAAK;MAChE;IACJ,OAAO;AACH,WAAK;IACT;EACJ;EAEA,yBAAyB,cAAY;AACjC,QAAI,YAAY;AAEhB,SAAK,aAAa,KAAI;AACtB,QAAI,mBAAmB,KAAK,MAAM,KAAK,aAAa,SAAS,KAAK,IAAI,KAAK,KAAK,kCAAkC,eAAe,IAAI,EAAE,CAAC;AACxI,aAAS,IAAI,GAAG,IAAI,oBAAoB,KAAK,aAAa,SAAS,GAAG,KAAK;AACvE,WAAK,aAAa,IAAG;IACzB;AAEA,QAAI,YAAY;AAChB,aAAS,MAAM,KAAK,cAAc;AAC9B,mBAAa;IACjB;AACA,iBAAa,KAAK,aAAa;AAC/B,gBAAY,KAAK,MAAM,IAAI,SAAS;AAEpC,SAAK,eAAe,CAAA;AAEpB,WAAO;EACX;EAEA,iBAAiB,iBAAe;AAC5B,QAAI,gBAAgB,KAAK,KAAK,kBAAkB,CAAC;AAEjD,QAAI,MAAM;AACV,QAAI,SAAS;AAEb,QAAI,cAAc;AAClB,WAAO,cAAc,cAAc,eAAe;AAC9C;IACJ;AAEA,UAAM;AACN,aAAS;AAET,WAAO,MAAM,KAAK,SAAS,KAAK,MAAM,SAAS,kBAAmB,MAAM,KAAK,UAAU,eAAgB;AACnG;IACJ;AAEA,QAAI,qBAAqB,IAAI,mBAAmB,KAAK,MAAM;AAE3D,aAAS,IAAI,GAAG,IAAI,MAAM,GAAG,KAAK;AAC9B,eAAS,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK;AAEjC,YAAI,IAAK,IAAI,SAAU;AACvB,YAAI,IAAK,IAAI,MAAO;AAEpB,YAAI,uBAAuB,IAAI,yBAAwB;AAEvD,6BAAqB,aAAa,YAAW;AAC7C,6BAAqB,WAAW,CAAC,IAAI,IAAI;AACzC,6BAAqB,WAAW,CAAC,IAAI,IAAI;AACzC,6BAAqB,WAAW,CAAC,IAAI;AAErC,6BAAqB,uBAAuB,YAAW;AACvD,6BAAqB,qBAAqB,CAAC,IAAI,IAAI;AACnD,6BAAqB,qBAAqB,CAAC,IAAI,IAAI;AAEnD,6BAAqB,WAAW,YAAW;AAC3C,6BAAqB,SAAS,CAAC,IAAI;AACnC,6BAAqB,SAAS,CAAC,IAAI;AACnC,6BAAqB,SAAS,CAAC,IAAI;AAEnC,2BAAmB,WAAW,KAAK,oBAAoB;MAC3D;IACJ;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,YAAI,gBAAgB,IAAI,2BAA0B;AAClD,sBAAc,UAAU,CAAC,IAAK,KAAK,SAAS,KAAM;AAClD,sBAAc,UAAU,CAAC,IAAK,KAAK,SAAS,KAAM,IAAI;AACtD,sBAAc,UAAU,CAAC,KAAM,IAAI,MAAM,SAAS,KAAM;AAExD,YAAI,iBAAiB,IAAI,2BAA0B;AACnD,uBAAe,UAAU,CAAC,KAAM,IAAI,MAAM,SAAS,KAAM;AACzD,uBAAe,UAAU,CAAC,IAAK,KAAK,SAAS,KAAM,IAAI;AACvD,uBAAe,UAAU,CAAC,KAAM,IAAI,MAAM,SAAS,KAAM,IAAI;AAE7D,2BAAmB,YAAY,KAAK,aAAa;AACjD,2BAAmB,YAAY,KAAK,cAAc;MACtD;IACJ;AAEA,QAAI,OAAO,UAAU,OAAO,kBAAkB;AAE9C,WAAO;EACX;EAEA,YAAS;AACL,YAAQ,qBAAqB,KAAK,MAAM,GAAG,YAAY,KAAK,SAAS;EACzE;;;;AChgBJ,SAAS,aAAAC,aAAW,kBAAAC,iBAAgB,YAAAC,kBAAgB;AAE9C,IAAO,qCAAP,cAAkDF,YAAS;EAC7D,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,SAASE,WAAS,KAAK,CAAC,QAAQ,SAAS,cAAc,GAAG,OAAO;;EAGrE,OAAI;AACA,QAAI,KAAK,UAAU,KAAK,WAAW,GAAG;AAClC,WAAK,aAAY;IACrB;EACJ;EAEA,QAAK;AACD,QAAI,KAAK,WAAW,GAAG;AACnB,WAAK,aAAY;IACrB;AACA,SAAK,WAAW;EACpB;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,WAAW,KAAK,KAAK,UAAU;AACpC,WAAK,WAAW;AAChB,WAAK,aAAY;IACrB;EACJ;EAEA,eAAY;AACR,QAAIC,SAAQ,KAAK,OAAO,YAAW;AACnC,QAAI,kBAAkB,KAAK,OAAO,iBAAiBF,eAAc;AACjE,aAAS,SAAS,iBAAiB;AAC/B,YAAM,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAIE,OAAM,CAAC;AAC7C,YAAM,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAIA,OAAM,CAAC;AAC7C,YAAM,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAIA,OAAM,CAAC;AAE7C,UAAI,MAAM,QAAQ;AACd,cAAM,SAAS;AACf,cAAM,SAAS;MACnB;IACJ;EACJ;;;;ACzCJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAG9B,IAAO,wCAAP,cAAqDC,YAAS;EAChE,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,kBAAkBC,WAAS,KAAK,IAAI;;EAGxC,QAAK;AACD,SAAK,eAAe;AACpB,YAAQ,kCAAkC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,MAAM,OAAO,KAAK,MAAM;EAC/G;EAEA,oBAAiB;AACb,QAAI,CAAC,KAAK,oBAAoB,KAAK,cAAc;AAC7C,WAAK,eAAe;AACpB,cAAQ,MAAK;IACjB;EACJ;EAEA,YAAS;AACL,YAAQ,oCAAoC,MAAM,KAAK,MAAM;EACjE;;;;ACvBJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAG9B,IAAO,qBAAP,cAAkCC,YAAS;EAC7C,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,WAAWC,WAAS,KAAK,IAAI;IAC7B,gBAAgBA,WAAS,KAAK,CAAC,QAAQ,YAAY,eAAe,WAAW,GAAG,WAAW;IAC3F,kBAAkBA,WAAS,KAAK,CAAC,QAAQ,SAAS,gBAAgB,YAAY,WAAW,kBAAkB,eAAe,GAAG,MAAM;;EAGvI,OAAI;AACA,QAAI,KAAK,UAAU,KAAK,oBAAoB,GAAG;AAC3C,WAAK,WAAU;IACnB;EACJ;EAEA,QAAK;AACD,QAAI,KAAK,oBAAoB,GAAG;AAC5B,WAAK,WAAU;IACnB;AAEA,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,SAAK,gBAAgB;AAErB,QAAI,KAAK,oBAAoB,KAAK,KAAK,oBAAoB,GAAG;AAC1D,cAAQ,kCAAkC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,MAAM,MAAM,KAAK,MAAM;IAC9G;AAEA,QAAI,KAAK,oBAAoB,KAAK,KAAK,oBAAoB,GAAG;AAC1D,cAAQ,gCAAgC,MAAM,KAAK,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM;IAC9F;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,oBAAoB,KAAK,KAAK,gBAAgB;AACnD,WAAK,WAAU;IACnB;AAEA,SAAK,iBAAiB;EAC1B;EAEA,oBAAiB;AACb,QAAI,KAAK,oBAAoB,KAAM,KAAK,oBAAoB,KAAK,KAAK,iBAAkB;AACpF,WAAK,WAAU;IACnB;AAEA,SAAK,kBAAkB;EAC3B;EAEA,kBAAe;AACX,QAAI,KAAK,oBAAoB,KAAM,KAAK,oBAAoB,KAAK,KAAK,eAAgB;AAClF,WAAK,WAAU;IACnB;AAEA,SAAK,gBAAgB;EACzB;EAEA,aAAU;AACN,QAAI,KAAK,kBAAkB,GAAG;AAC1B,WAAK,OAAO,iBAAiB,KAAK,SAAS;IAC/C,WAAW,KAAK,kBAAkB,GAAG;AACjC,WAAK,OAAO,qBAAqB,KAAK,SAAS;IACnD,WAAW,KAAK,kBAAkB,GAAG;AACjC,WAAK,OAAO,wBAAwB,KAAK,SAAS;IACtD,OAAO;AACH,WAAK,OAAO,aAAa,KAAK,SAAS;IAC3C;EACJ;EAEA,YAAS;AACL,YAAQ,wCAAwC,MAAM,KAAK,MAAM;EACrE;;;;ACzEJ,SAAS,aAAAC,YAAW,aAAAC,aAAW,iBAAAC,gBAAe,YAAAC,kBAAgB;AAKxD,IAAO,mBAAP,cAAgCC,YAAS;EAC3C,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,mBAAmBC,WAAS,MAAM,IAAI;IACtC,oBAAoBA,WAAS,MAAM,CAAC;IACpC,oBAAoBA,WAAS,MAAM,EAAE;IACrC,oBAAoBA,WAAS,MAAM,CAAC;IACpC,UAAUA,WAAS,MAAM,GAAG;IAC5B,iBAAiBA,WAAS,SAAQ;;EAGtC,QAAK;AACD,SAAK,WAAW,YAAY,GAAG,GAAG,GAAG,CAAC;AACtC,QAAI,KAAK,mBAAmB,MAAM;AAC9B,WAAK,SAAS,UAAU,KAAK,gBAAgB,KAAK;IACtD;AAEA,SAAK,oBAAoB,YAAY,KAAK,oBAAoB,KAAK,oBAAoB,KAAK,kBAAkB;AAE9G,SAAK,gBAAgB;AAErB,SAAK,WAAW,IAAI,MAAM,KAAK,iBAAiB;AAChD,SAAK,aAAa;AAClB,SAAK,YAAY;EACrB;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,eAAe,KAAK,MAAM,GAAG;AACrC,WAAK,cAAc;AACnB,WAAK;AAEL,WAAK,SAAS,OAAO,EAAE;AACvB,UAAI,KAAK,SAAS,OAAM,GAAI;AACxB,aAAK,SAAS,MAAK;AAEnB,aAAK,gBAAgB,KAAK,MAAM,KAAK,YAAY,KAAK,UAAU;AAEhE,aAAK,aAAa;AAClB,aAAK,YAAY;MACrB;AAEA,cAAQ,sBAAsB,KAAK,MAAM,EAAE,WAAW,GAAG,KAAK,cAAc,QAAQ,CAAC,GAAG,KAAK,mBAAmB,KAAK,UAAU,KAAK,UAAUC,WAAU,OAAOC,eAAc,MAAM;IACvL;EACJ;;;;AChDJ,SAAS,aAAAC,mBAAiB;AAC1B,SAAS,gBAAgB;;;;;;;;;;;AAGzB,IAAK;CAAL,SAAKC,kCAA+B;AAChC,EAAAA,iCAAA,MAAA,IAAA;AACA,EAAAA,iCAAA,SAAA,IAAA;AACA,EAAAA,iCAAA,MAAA,IAAA;AACJ,GAJK,oCAAA,kCAA+B,CAAA,EAAA;AAO9B,IAAO,yBAAP,cAAsCC,YAAS;EAC1C,OAAgB,WAAW;EAG1B;EAEA;EAGA;EAEA;EAEA,wBAA4C;EAC5C,cAAkC;EAClC,cAAkC;EAElC,iBAA0B;EAE1B,+BAAwC;EACxC,8BAAuC;EACvC,oCAA6C;EAE7C,+BAAwC;EACxC,8BAAuC;EACvC,oCAA6C;EAErC,OAAI;AAChB,SAAK,wBAAwB,SAAS,eAAe,sBAAsB;AAE3E,SAAK,cAAc,SAAS,eAAe,WAAW;AACtD,SAAK,cAAc,SAAS,eAAe,WAAW;EAC1D;EAEgB,QAAK;AACjB,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,IAAI;EAChI;EAEgB,OAAO,IAAU;AAC7B,QAAI,CAAC,KAAK,gBAAgB;AACtB,WAAK,iBAAiB;AAEtB,UAAI,KAAK,yBAAyB,MAAM;AACpC,YAAI,KAAK,mBAAmB,KAAK,iBAAiB;AAC9C,eAAK,sBAAsB,MAAM,YAAY,WAAW,MAAM;QAClE,OAAO;AACH,eAAK,sBAAsB,MAAM,YAAY,WAAW,MAAM;QAClE;MACJ;AAEA,UAAI,KAAK,eAAe,MAAM;AAC1B,YAAI,KAAK,iBAAiB;AACtB,eAAK,YAAY,MAAM,YAAY,WAAW,OAAO;QACzD,OAAO;AACH,eAAK,YAAY,MAAM,YAAY,WAAW,MAAM;QACxD;MACJ;AAEA,UAAI,KAAK,eAAe,MAAM;AAC1B,YAAI,KAAK,iBAAiB;AACtB,eAAK,YAAY,MAAM,YAAY,WAAW,OAAO;QACzD,OAAO;AACH,eAAK,YAAY,MAAM,YAAY,WAAW,MAAM;QACxD;MACJ;IACJ,OAAO;AACH,WAAK,iBAAiB,EAAE;IAC5B;EACJ;EAEQ,iBAAiB,IAAU;AAC/B,QAAI,KAAK,iBAAiB;AACtB,UAAI,CAAC,KAAK,6BAA6B;AACnC,YAAI,KAAK,eAAe,MAAM;AAC1B,cAAI,CAAC,KAAK,8BAA8B;AACpC,iBAAK,YAAY,MAAM,YAAY,aAAa,UAAU;AAC1D,iBAAK,+BAA+B;UACxC;AAEA,cAAI,CAAC,KAAK,6BAA6B;AACnC,gBAAI,QAAQ,cAAa,GAAI;AACzB,mBAAK,YAAY,MAAM,YAAY,WAAW,GAAG;AACjD,mBAAK,YAAY,MAAM,YAAY,kBAAkB,KAAK;AAE1D,mBAAK,8BAA8B;YACvC,WAAW,CAAC,KAAK,mCAAmC;AAChD,sBAAQ,KAAK,qCAAqC;gBAC9C,KAAK;AACD,uBAAK,YAAY,MAAM,YAAY,WAAW,GAAG;AACjD,uBAAK,YAAY,MAAM,YAAY,kBAAkB,KAAK;AAC1D;gBACJ,KAAK;AACD,uBAAK,YAAY,MAAM,YAAY,WAAW,KAAK;AACnD;gBACJ,KAAK;AACD,uBAAK,YAAY,MAAM,YAAY,WAAW,MAAM;AACpD;cACR;AAEA,mBAAK,oCAAoC;YAC7C;UACJ;QACJ,OAAO;AACH,eAAK,8BAA8B;QACvC;MACJ;IACJ;AAEA,QAAI,KAAK,iBAAiB;AACtB,UAAI,CAAC,KAAK,6BAA6B;AACnC,YAAI,KAAK,eAAe,MAAM;AAC1B,cAAI,CAAC,KAAK,8BAA8B;AACpC,iBAAK,YAAY,MAAM,YAAY,aAAa,UAAU;AAC1D,iBAAK,+BAA+B;UACxC;AAEA,cAAI,CAAC,KAAK,6BAA6B;AACnC,gBAAI,QAAQ,cAAa,GAAI;AACzB,mBAAK,YAAY,MAAM,YAAY,WAAW,GAAG;AACjD,mBAAK,YAAY,MAAM,YAAY,kBAAkB,KAAK;AAE1D,mBAAK,8BAA8B;YACvC,WAAW,CAAC,KAAK,mCAAmC;AAChD,sBAAQ,KAAK,qCAAqC;gBAC9C,KAAK;AACD,uBAAK,YAAY,MAAM,YAAY,WAAW,GAAG;AACjD,uBAAK,YAAY,MAAM,YAAY,kBAAkB,KAAK;AAC1D;gBACJ,KAAK;AACD,uBAAK,YAAY,MAAM,YAAY,WAAW,KAAK;AACnD;gBACJ,KAAK;AACD,uBAAK,YAAY,MAAM,YAAY,WAAW,MAAM;AACpD;cACR;AAEA,mBAAK,oCAAoC;YAC7C;UACJ;QACJ,OAAO;AACH,eAAK,8BAA8B;QACvC;MACJ;IACJ;EACJ;EAEQ,oBAAiB;AACrB,QAAI,KAAK,yBAAyB,MAAM;AACpC,WAAK,sBAAsB,MAAM,YAAY,WAAW,MAAM;IAClE;EACJ;EAEQ,kBAAe;AACnB,QAAI,KAAK,yBAAyB,SAAS,KAAK,mBAAmB,KAAK,kBAAkB;AACtF,WAAK,sBAAsB,MAAM,eAAe,SAAS;IAC7D;EACJ;;AAxJQ,WAAA;EADP,SAAS,KAAK,IAAI;;AAGX,WAAA;EADP,SAAS,KAAK,OAAO,OAAO,+BAA+B,GAAG,gCAAgC,OAAO;;AAI9F,WAAA;EADP,SAAS,KAAK,IAAI;;AAGX,WAAA;EADP,SAAS,KAAK,OAAO,OAAO,+BAA+B,GAAG,gCAAgC,OAAO;;;;ACZ1G,SAAS,WAAAC,gBAAe;AAElB,IAAO,YAAP,MAAgB;EAElB,YAAY,SAAS,aAAW;AAC5B,SAAK,OAAO;AACZ,SAAK,WAAW;EACpB;;AAGE,IAAO,iBAAP,MAAqB;EAEvB,YAAY,cAAc,eAAe,aAAa,kBAAkB,mBAAiB;AACrF,SAAK,OAAO;AACZ,SAAK,cAAc;AACnB,SAAK,YAAY;AACjB,SAAK,WAAW;AAChB,SAAK,sBAAsB;EAC/B;;AAGG,IAAI,cAAc;EACrB,WAAW;EACX,SAAS;;AAGN,IAAI,qBAAqB;EAC5B,OAAO;EACP,YAAY;EACZ,WAAW;;AAGR,IAAI,oBAAoB;EAC3B,MAAM;EACN,KAAK;EACL,OAAO;EACP,MAAM;;AAGJ,IAAO,MAAP,MAAO,KAAG;EAEZ,YAAY,cAAc,YAAY,WAAW,qBAAqB,mBAAmB,OAAK;AAC1F,SAAK,sBAAsB;AAE3B,SAAK,YAAY,oBAAI,IAAG;AACxB,SAAK,iBAAiB,oBAAI,IAAG;AAE7B,SAAK,gBAAgB;AACrB,SAAK,wBAAwB;AAC7B,SAAK,gBAAgB;AAErB,SAAK,iBAAiB;AACtB,SAAK,wBAAwB;AAC7B,SAAK,qBAAqB,CAAA;AAC1B,SAAK,kCAAkC;AAEvC,SAAK,iBAAiB,IAAIA,SAAO;AACjC,SAAK,oBAAoB,oBAAI,IAAG;AAChC,SAAK,uBAAuB,IAAIA,SAAO;AACvC,SAAK,0BAA0B,CAAA;EACnC;EAEA,SAAS,SAAS,QAAQ,MAAI;AAC1B,QAAI,cAAc;AAClB,QAAI,CAAC,SAAS,OAAO,SAAS,YAAY;AACtC,oBAAc,CAAA;AACd,UAAI,OAAO,SAAS,YAAY;AAC5B,oBAAY,SAAS,SAAS,SAAM;AAAK,iBAAO,MAAM,GAAG,SAAS;QAAG;MACzE,OAAO;AACH,oBAAY,SAAS;MACzB;AACA,kBAAY,QAAQ,SAASC,UAAK;AAC9B,YAAI,cAAc,CAAA;AAClB,oBAAY,SAAS,KAAK;AAC1B,oBAAY,QAAQ,KAAK;AACzB,eAAO;MACX;IACJ,OAAO;AACH,oBAAc;IAClB;AAEA,QAAI,YAAY,IAAI,UAAU,SAAS,WAAW;AAClD,SAAK,UAAU,IAAI,SAAS,SAAS;AACrC,SAAK,eAAe,IAAI,SAAS,oBAAI,IAAG,CAAE;EAC9C;EAEA,cAAc,aAAa,WAAW,cAAc,aAAa,MAAM,oBAAoB,kBAAkB,MAAI;AAC7G,QAAI,mBAAmB;AACvB,QAAI,CAAC,cAAc,OAAO,cAAc,YAAY;AAChD,yBAAmB,CAAA;AACnB,UAAI,OAAO,cAAc,YAAY;AACjC,yBAAiB,UAAU,SAAS,UAAO;AAAK,iBAAO,WAAW,GAAG,SAAS;QAAG;MACrF,OAAO;AACH,yBAAiB,UAAU;MAC/B;AACA,uBAAiB,QAAQ,SAASA,UAAK;AACnC,YAAI,cAAc,CAAA;AAClB,oBAAY,UAAU,KAAK;AAC3B,oBAAY,QAAQ,KAAK;AACzB,eAAO;MACX;IACJ,OAAO;AACH,yBAAmB;IACvB;AAEA,QAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,SAAS,GAAG;AACxD,UAAI,uBAAuB,KAAK,yBAAyB,WAAW;AAEpE,UAAI,iBAAiB,IAAI,eAAe,cAAc,KAAK,SAAS,WAAW,GAAG,KAAK,SAAS,SAAS,GAAG,kBAAkB,iBAAiB;AAC/I,2BAAqB,IAAI,cAAc,cAAc;IACzD,OAAO;AACH,UAAI,CAAC,KAAK,SAAS,WAAW,KAAK,CAAC,KAAK,SAAS,SAAS,GAAG;AAC1D,gBAAQ,MAAM,yBAAyB,cAAc,2BAA2B,aAAa,yBAAyB,SAAS;MACnI,WAAW,CAAC,KAAK,SAAS,WAAW,GAAG;AACpC,gBAAQ,MAAM,yBAAyB,cAAc,2BAA2B,WAAW;MAC/F,WAAW,CAAC,KAAK,SAAS,SAAS,GAAG;AAClC,gBAAQ,MAAM,yBAAyB,cAAc,yBAAyB,SAAS;MAC3F;IACJ;EACJ;EAEA,KAAK,aAAa,iBAAiB,SAAS,MAAI;AAC5C,QAAI,uBAAuB;AAC3B,QAAI,kBAAkB,OAAO,kBAAkB,YAAY;AACvD,6BAAuB,CAAA;AACvB,2BAAqB,cAAc;IACvC;AAEA,QAAI,KAAK,SAAS,WAAW,GAAG;AAC5B,UAAI,gBAAgB,KAAK,UAAU,IAAI,WAAW;AAElD,UAAI,KAAK,eAAe;AACpB,gBAAQ,IAAI,KAAK,eAAe,WAAW,WAAW;MAC1D;AAEA,UAAI,wBAAwB,qBAAqB,aAAa;AAC1D,6BAAqB,YAAY,MAAM,eAAe,GAAG,IAAI;MACjE,WAAW,cAAc,YAAY,cAAc,SAAS,MAAM;AAC9D,sBAAc,SAAS,KAAK,MAAM,eAAe,GAAG,IAAI;MAC5D;AAEA,WAAK,sBAAsB;AAE3B,WAAK,eAAe,OAAO,MAAM,eAAe,sBAAsB,GAAG,IAAI;AAE7E,UAAI,KAAK,kBAAkB,OAAO,GAAG;AACjC,YAAI,UAAU,KAAK,kBAAkB,IAAI,WAAW;AACpD,YAAI,WAAW,MAAM;AACjB,kBAAQ,OAAO,MAAM,eAAe,sBAAsB,GAAG,IAAI;QACrE;MACJ;IACJ,WAAW,KAAK,eAAe;AAC3B,cAAQ,KAAK,KAAK,eAAe,2BAA2B,WAAW;IAC3E;EACJ;EAEA,OAAO,OAAO,MAAI;AACd,QAAI,KAAK,mBAAmB,SAAS,GAAG;AACpC,eAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACrD,aAAK,SAAS,KAAK,mBAAmB,CAAC,EAAE,MAAM,YAAY,SAAS,GAAG,KAAK,mBAAmB,CAAC,EAAE,MAAM;MAC5G;AACA,WAAK,qBAAqB,CAAA;IAC9B;AAEA,QAAI,KAAK,uBAAuB,KAAK,oBAAoB,YAAY,KAAK,oBAAoB,SAAS,QAAQ;AAC3G,WAAK,oBAAoB,SAAS,OAAO,IAAI,MAAM,GAAG,IAAI;IAC9D;EACJ;EAEA,QAAQ,iBAAiB,MAAI;AACzB,QAAI,KAAK,kBAAkB,YAAY,SAAS;AAC5C,WAAK,eAAe,cAAc,GAAG,IAAI;IAC7C,OAAO;AACH,WAAK,iBAAiB,cAAc,GAAG,IAAI;IAC/C;EACJ;EAEA,eAAe,iBAAiB,MAAI;AAChC,QAAI,iBAAiB;AAErB,YAAQ,KAAK,uBAAuB;MAChC,KAAK,mBAAmB;AACpB,aAAK,mBAAmB,KAAK,IAAI,gBAAgB,cAAc,GAAG,IAAI,CAAC;AACvE,yBAAiB;AACjB;MACJ,KAAK,mBAAmB;AACpB,YAAI,CAAC,KAAK,mBAAkB,GAAI;AAC5B,eAAK,mBAAmB,KAAK,IAAI,gBAAgB,cAAc,GAAG,IAAI,CAAC;AACvE,2BAAiB;QACrB;AACA;MACJ,KAAK,mBAAmB;AACpB,aAAK,qBAAoB;AACzB,aAAK,mBAAmB,KAAK,IAAI,gBAAgB,cAAc,GAAG,IAAI,CAAC;AACvE,yBAAiB;AACjB;IACR;AAEA,WAAO;EACX;EAEA,iBAAiB,iBAAiB,MAAI;AAClC,WAAO,KAAK,SAAS,cAAc,YAAY,WAAW,GAAG,IAAI;EACrE;EAEA,WAAW,cAAY;AACnB,WAAO,KAAK,uBAAuB,KAAK,oBAAoB,MAAM,YAAY;EAClF;EAEA,QAAQ,SAAS,eAAe,MAAI;AAChC,WAAO,KAAK,8BAA8B,KAAK,oBAAoB,MAAM,SAAS,YAAY;EAClG;EAEA,UAAU,SAAO;AACb,WAAO,KAAK,uBAAuB,QAAQ,KAAK,oBAAoB,QAAQ;EAChF;EAEA,yBAAsB;AAClB,WAAO,KAAK,mCAAmC;EACnD;EAEA,kCAA+B;AAC3B,WAAO,KAAK;EAChB;EAEA,cAAW;AACP,WAAO,KAAK,uBAAuB;EACvC;EAEA,QAAK;AACD,SAAK,WAAU;AACf,SAAK,qBAAoB;EAC7B;EAEA,aAAU;AACN,SAAK,sBAAsB;EAC/B;EAEA,uBAAoB;AAChB,SAAK,qBAAqB,CAAA;EAC9B;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,wBAAqB;AACjB,WAAO,KAAK,wBAAwB,KAAK,oBAAoB,IAAI;EACrE;EAEA,6BAA6B,SAAO;AAChC,WAAO,KAAK,+BAA+B,KAAK,oBAAoB,MAAM,OAAO;EACrF;EAEA,SAAS,SAAO;AACZ,WAAO,KAAK,UAAU,IAAI,OAAO;EACrC;EAEA,YAAS;AACL,WAAO,KAAK,UAAU,OAAM;EAChC;EAEA,iBAAc;AACV,QAAI,cAAc,CAAA;AAElB,aAAS,wBAAwB,KAAK,eAAe,OAAM,GAAI;AAC3D,eAAS,kBAAkB,qBAAqB,OAAM,GAAI;AACtD,oBAAY,KAAK,cAAc;MACnC;IACJ;AAEA,WAAO;EACX;EAEA,wBAAwB,aAAW;AAC/B,QAAI,uBAAuB,KAAK,yBAAyB,WAAW;AACpE,WAAO,MAAM,KAAK,qBAAqB,OAAM,CAAE;EACnD;EAEA,+BAA+B,aAAa,WAAS;AACjD,QAAI,uBAAuB,KAAK,yBAAyB,WAAW;AAEpE,QAAI,qBAAqB,CAAA;AACzB,aAAS,kBAAkB,qBAAqB,OAAM,GAAI;AACtD,UAAI,eAAe,UAAU,QAAQ,WAAW;AAC5C,2BAAmB,KAAK,cAAc;MAC1C;IACJ;AAEA,WAAO;EACX;EAEA,YAAY,SAAO;AACf,QAAI,KAAK,SAAS,OAAO,GAAG;AACxB,WAAK,UAAU,OAAO,OAAO;AAC7B,WAAK,eAAe,OAAO,OAAO;AAElC,eAAS,wBAAwB,KAAK,eAAe,OAAM,GAAI;AAC3D,YAAI,WAAW,CAAA;AACf,iBAAS,CAAC,cAAc,cAAc,KAAK,qBAAqB,QAAO,GAAI;AACvE,cAAI,eAAe,UAAU,QAAQ,SAAS;AAC1C,qBAAS,KAAK,YAAY;UAC9B;QACJ;AAEA,iBAAS,gBAAgB,UAAU;AAC/B,+BAAqB,OAAO,YAAY;QAC5C;MACJ;AAEA,aAAO;IACX;AACA,WAAO;EACX;EAEA,0BAA0B,aAAa,cAAY;AAC/C,QAAI,kBAAkB,KAAK,yBAAyB,WAAW;AAC/D,QAAI,iBAAiB;AACjB,aAAO,gBAAgB,OAAO,YAAY;IAC9C;AAEA,WAAO;EACX;EAEA,SAAS,SAAO;AACZ,WAAO,KAAK,UAAU,IAAI,OAAO;EACrC;EAEA,uBAAuB,aAAa,cAAY;AAC5C,QAAI,cAAc,KAAK,wBAAwB,WAAW;AAE1D,QAAI,kBAAkB,YAAY,UAAU,SAAU,YAAU;AAC5D,aAAO,WAAW,QAAQ;IAC9B,CAAC;AAED,WAAO,mBAAmB;EAC9B;EAEA,8BAA8B,aAAa,WAAW,eAAe,MAAI;AACrE,QAAI,cAAc,KAAK,+BAA+B,aAAa,SAAS;AAE5E,QAAI,gBAAgB;AACpB,QAAI,cAAc;AACd,UAAI,kBAAkB,YAAY,UAAU,SAAU,YAAU;AAC5D,eAAO,WAAW,QAAQ;MAC9B,CAAC;AAED,sBAAgB,mBAAmB;IACvC,OAAO;AACH,sBAAgB,YAAY,SAAS;IACzC;AAEA,WAAO;EACX;EAEA,eAAe,aAAW;AACtB,SAAK,iBAAiB;EAC1B;EAEA,iBAAc;AACV,WAAO,KAAK;EAChB;EAEA,sBAAsB,oBAAkB;AACpC,SAAK,wBAAwB;EACjC;EAEA,wBAAqB;AACjB,WAAO,KAAK;EAChB;EAEA,qBAAkB;AACd,WAAO,KAAK,mBAAmB,SAAS;EAC5C;EAEA,qBAAkB;AACd,WAAO,KAAK,mBAAmB,SAAQ;EAC3C;EAEA,MAAM,YAAY,OAAK;AACnB,QAAI,CAAC,KAAK,YAAY,SAAS,GAAG;AAC9B,aAAO;IACX;AAEA,QAAI,WAAW,IAAI,KAAG;AAEtB,aAAS,gBAAgB,KAAK;AAC9B,aAAS,wBAAwB,KAAK;AACtC,aAAS,gBAAgB,KAAK;AAE9B,aAAS,iBAAiB,KAAK;AAC/B,aAAS,wBAAwB,KAAK;AACtC,aAAS,qBAAqB,KAAK,mBAAmB,SAAQ;AAE9D,aAAS,SAAS,KAAK,UAAU,QAAO,GAAI;AACxC,UAAI,YAAY;AAEhB,UAAI,WAAW;AACX,oBAAY,IAAI,UAAU,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,EAAE,SAAS,MAAK,CAAE;MACtE,OAAO;AACH,oBAAY,IAAI,UAAU,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,EAAE,QAAQ;MAC9D;AAEA,eAAS,UAAU,IAAI,UAAU,MAAM,SAAS;IACpD;AAEA,aAAS,SAAS,KAAK,eAAe,QAAO,GAAI;AAC7C,UAAI,uBAAuB,oBAAI,IAAG;AAClC,eAAS,eAAe,IAAI,MAAM,CAAC,GAAG,oBAAoB;AAE1D,eAAS,kBAAkB,MAAM,CAAC,EAAE,QAAO,GAAI;AAC3C,YAAI,iBAAiB;AAErB,YAAI,YAAY,SAAS,SAAS,eAAe,CAAC,EAAE,YAAY,IAAI;AACpE,YAAI,UAAU,SAAS,SAAS,eAAe,CAAC,EAAE,UAAU,IAAI;AAEhE,YAAI,WAAW;AACX,2BAAiB,IAAI,eAAe,eAAe,CAAC,EAAE,MAAM,WAAW,SAAS,eAAe,CAAC,EAAE,SAAS,MAAK,GAAI,eAAe,CAAC,EAAE,mBAAmB;QAC7J,OAAO;AACH,2BAAiB,IAAI,eAAe,eAAe,CAAC,EAAE,MAAM,WAAW,SAAS,eAAe,CAAC,EAAE,UAAU,eAAe,CAAC,EAAE,mBAAmB;QACrJ;AAEA,6BAAqB,IAAI,eAAe,MAAM,cAAc;MAChE;IACJ;AAEA,QAAI,KAAK,qBAAqB;AAC1B,eAAS,sBAAsB,SAAS,SAAS,KAAK,oBAAoB,IAAI;IAClF;AAEA,WAAO;EACX;EAEA,YAAY,YAAY,OAAK;AACzB,QAAI,CAAC,WAAW;AACZ,aAAO;IACX;AAEA,QAAI,gBAAgB;AAEpB,aAAS,SAAS,KAAK,UAAU,QAAO,GAAI;AACxC,sBAAgB,iBAAiB,MAAM,CAAC,EAAE,SAAS,SAAS;IAChE;AAEA,aAAS,SAAS,KAAK,eAAe,QAAO,GAAI;AAC7C,eAAS,kBAAkB,MAAM,CAAC,EAAE,QAAO,GAAI;AAC3C,wBAAgB,iBAAiB,eAAe,CAAC,EAAE,SAAS,SAAS;MACzE;IACJ;AAEA,WAAO;EACX;EAEA,cAAc,QAAQ,UAAU,MAAM,kBAAkB,OAAK;AACzD,SAAK,gBAAgB;AACrB,SAAK,wBAAwB;AAC7B,QAAI,SAAS;AACT,WAAK,gBAAgB,QAAQ,OAAO,OAAO;IAC/C;EACJ;EAEA,0BAA0B,YAAY,UAAQ;AAC1C,SAAK,eAAe,IAAI,UAAU,EAAE,IAAI,WAAU,CAAE;EACxD;EAEA,4BAA4B,YAAU;AAClC,SAAK,eAAe,OAAO,UAAU;EACzC;EAEA,4BAA4B,aAAa,YAAY,UAAQ;AACzD,QAAI,qBAAqB,KAAK,kBAAkB,IAAI,WAAW;AAC/D,QAAI,sBAAsB,MAAM;AAC5B,WAAK,kBAAkB,IAAI,aAAa,IAAID,SAAO,CAAE;AACrD,2BAAqB,KAAK,kBAAkB,IAAI,WAAW;IAC/D;AAEA,uBAAmB,IAAI,UAAU,EAAE,IAAI,WAAU,CAAE;EACvD;EAEA,8BAA8B,aAAa,YAAU;AACjD,QAAI,qBAAqB,KAAK,kBAAkB,IAAI,WAAW;AAC/D,QAAI,sBAAsB,MAAM;AAC5B,yBAAmB,OAAO,UAAU;AAEpC,UAAI,mBAAmB,SAAS;AAC5B,aAAK,kBAAkB,OAAO,WAAW;MAC7C;IACJ;EACJ;EAEA,gCAAgC,YAAY,UAAQ;AAChD,SAAK,qBAAqB,IAAI,UAAU,EAAE,IAAI,WAAU,CAAE;EAC9D;EAEA,kCAAkC,YAAU;AACxC,SAAK,qBAAqB,OAAO,UAAU;EAC/C;;;EAIA,kCAAkC,aAAa,WAAW,cAAc,YAAY,UAAQ;AACxF,QAAI,8BAA8B;AAClC,aAAS,SAAS,KAAK,yBAAyB;AAC5C,UAAI,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,KAAK,cAAc;AAC9E,sCAA8B,MAAM,CAAC;AACrC;MACJ;IACJ;AAEA,QAAI,+BAA+B,MAAM;AACrC,UAAI,sBAAsB,CAAA;AAC1B,0BAAoB,CAAC,IAAI;AACzB,0BAAoB,CAAC,IAAI;AACzB,0BAAoB,CAAC,IAAI;AACzB,0BAAoB,CAAC,IAAI,IAAIA,SAAO;AAEpC,oCAA8B,oBAAoB,CAAC;AAEnD,WAAK,wBAAwB,KAAK,mBAAmB;IACzD;AAEA,gCAA4B,IAAI,UAAU,EAAE,IAAI,WAAU,CAAE;EAChE;EAEA,oCAAoC,aAAa,WAAW,cAAc,YAAU;AAChF,QAAI,8BAA8B;AAClC,aAAS,SAAS,KAAK,yBAAyB;AAC5C,UAAI,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,KAAK,cAAc;AAC9E,sCAA8B,MAAM,CAAC;AACrC;MACJ;IACJ;AAEA,QAAI,+BAA+B,MAAM;AACrC,kCAA4B,OAAO,UAAU;AAE7C,UAAI,4BAA4B,SAAS;AACrC,aAAK,wBAAwB,UAAU,aAAW,QAAQ,CAAC,KAAK,eAAe,QAAQ,CAAC,KAAK,aAAa,QAAQ,CAAC,KAAK,YAAY;MACxI;IACJ;EACJ;EAEA,SAAS,cAAc,gBAAgB,MAAI;AACvC,QAAI,KAAK,uBAAsB,GAAI;AAC/B,UAAI,+BAA+B,KAAK,gCAA+B;AACvE,UAAI,mBAAmB,CAAC,KAAK,eAAe,wBAAwB,YAAY;AAChF,UAAI,KAAK,uBAAuB;AAC5B,yBAAiB,KAAK,eAAe,YAAY,UAAU,cAAc,aAAa;MAC1F;AACA,uBAAiB,KAAK,2DAA2D,6BAA6B,IAAI;AAClH,cAAQ,KAAK,GAAG,gBAAgB;AAEhC,aAAO;IACX;AAEA,QAAI,KAAK,qBAAqB;AAC1B,UAAI,KAAK,WAAW,YAAY,GAAG;AAC/B,YAAI,cAAc,KAAK,eAAe,IAAI,KAAK,oBAAoB,IAAI;AACvE,YAAI,sBAAsB,YAAY,IAAI,YAAY;AAEtD,aAAK,kCAAkC;AAEvC,YAAI,YAAY,KAAK;AACrB,YAAI,UAAU,KAAK,UAAU,IAAI,oBAAoB,UAAU,IAAI;AAEnE,YAAI,KAAK,eAAe;AACpB,cAAI,mBAAmB,CAAC,KAAK,eAAe,WAAW,UAAU,MAAM,SAAS,QAAQ,MAAM,WAAW,YAAY;AACrH,cAAI,KAAK,uBAAuB;AAC5B,6BAAiB,KAAK,eAAe,YAAY,UAAU,cAAc,aAAa;UAC1F;AACA,kBAAQ,IAAI,GAAG,gBAAgB;QACnC;AAEA,YAAI,oBAAoB,uBAAuB,kBAAkB,OAAO,oBAAoB,uBAAuB,kBAAkB,QACjI,UAAU,YAAY,UAAU,SAAS,KAAK;AAC9C,oBAAU,SAAS,IAAI,MAAM,qBAAqB,GAAG,IAAI;QAC7D;AAEA,YAAI,oBAAoB,YAAY,oBAAoB,SAAS,SAAS;AACtE,8BAAoB,SAAS,QAAQ,MAAM,qBAAqB,GAAG,IAAI;QAC3E;AAEA,YAAI,oBAAoB,uBAAuB,kBAAkB,SAAS,oBAAoB,uBAAuB,kBAAkB,QACnI,QAAQ,YAAY,QAAQ,SAAS,OAAO;AAC5C,kBAAQ,SAAS,MAAM,MAAM,qBAAqB,GAAG,IAAI;QAC7D;AAEA,aAAK,sBAAsB,oBAAoB;AAE/C,aAAK,qBAAqB,OAAO,MAAM,WAAW,SAAS,qBAAqB,aAAa,GAAG,IAAI;AAEpG,YAAI,KAAK,wBAAwB,SAAS,GAAG;AACzC,cAAI,+BAA+B,CAAA;AACnC,mBAAS,SAAS,KAAK,yBAAyB;AAC5C,iBAAK,MAAM,CAAC,KAAK,QAAQ,MAAM,CAAC,KAAK,UAAU,UAC1C,MAAM,CAAC,KAAK,QAAQ,MAAM,CAAC,KAAK,QAAQ,UACxC,MAAM,CAAC,KAAK,QAAQ,MAAM,CAAC,KAAK,oBAAoB,OAAO;AAC5D,2CAA6B,KAAK,MAAM,CAAC,CAAC;YAC9C;UACJ;AAEA,mBAAS,WAAW,8BAA8B;AAC9C,oBAAQ,OAAO,MAAM,WAAW,SAAS,qBAAqB,aAAa,GAAG,IAAI;UACtF;QACJ;AAEA,aAAK,kCAAkC;AAEvC,eAAO;MACX,WAAW,KAAK,eAAe;AAC3B,YAAI,mBAAmB,CAAC,KAAK,eAAe,oBAAoB,cAAc,WAAW,KAAK,oBAAoB,IAAI;AACtH,YAAI,KAAK,uBAAuB;AAC5B,2BAAiB,KAAK,eAAe,YAAY,UAAU,cAAc,aAAa;QAC1F;AACA,gBAAQ,KAAK,GAAG,gBAAgB;MACpC;IACJ,WAAW,KAAK,eAAe;AAC3B,UAAI,mBAAmB,CAAC,KAAK,eAAe,2BAA2B;AACvE,UAAI,KAAK,uBAAuB;AAC5B,yBAAiB,KAAK,eAAe,YAAY,UAAU,cAAc,aAAa;MAC1F;AACA,cAAQ,KAAK,GAAG,gBAAgB;IACpC;AAEA,WAAO;EACX;EAEA,yBAAyB,aAAW;AAChC,WAAO,KAAK,eAAe,IAAI,WAAW;EAC9C;;AAGJ,IAAM,kBAAN,MAAqB;EAEjB,YAAY,iBAAiB,MAAI;AAC7B,SAAK,OAAO;AACZ,SAAK,SAAS;EAClB;;;;AC3nBE,IAAO,QAAP,MAAY;;;EAId,OAAO,IAAI,QAAQ,MAAI;EACvB;;;EAIA,KAAK,KAAK,UAAU,MAAI;EACxB;;;EAIA,MAAM,KAAK,eAAe,MAAI;EAC9B;;;EAIA,IAAI,KAAK,eAAe,MAAI;EAC5B;;;;ACvBE,IAAO,aAAP,MAAiB;;EAGnB,YAAY,KAAK,cAAc,MAAI;EAEnC;;;EAIA,QAAQ,KAAK,eAAe,MAAI;EAChC;;;;ACfE,IAAO,aAAP,cAA0B,MAAK;EAEjC,YAAY,WAAW,GAAG,2BAA2B,SAAS,gBAAc;AACxE,UAAK;AAEL,SAAK,8BAA8B;AACnC,SAAK,oBAAoB;AAEzB,SAAK,WAAW,IAAI,MAAM,UAAU,KAAK;EAC7C;EAEA,YAAY,UAAQ;AAChB,SAAK,SAAS,YAAY,QAAQ;EACtC;EAEA,4BAA4B,6BAA6B,gBAAc;AACnE,SAAK,8BAA8B;AACnC,SAAK,oBAAoB;EAC7B;EAEA,MAAM,UAAU,KAAK,MAAI;AACrB,SAAK,SAAS,MAAM,UAAU,EAAE;EACpC;EAEA,gBAAgB,KAAK,MAAI;AACrB,SAAK,SAAS,gBAAgB,EAAE;EACpC;EAEA,OAAO,IAAI,KAAG;AACV,SAAK,SAAS,OAAO,EAAE;AACvB,QAAI,KAAK,SAAS,OAAM,GAAI;AACxB,UAAI,KAAK,+BAA+B,MAAM;AAC1C,YAAI,QAAQ,KAAK,6BAA6B,GAAG,KAAK,iBAAiB;MAC3E;IACJ;EACJ;EAEA,MAAM,KAAK,YAAY,WAAW,MAAM,2BAA2B,SAAS,gBAAc;AACtF,SAAK,SAAS,MAAM,QAAQ;AAC5B,QAAI,4BAA4B,MAAM;AAClC,WAAK,8BAA8B;AACnC,WAAK,oBAAoB;IAC7B;EACJ;EAEA,KAAK,KAAK,OAAO,WAAW,MAAM,2BAA2B,SAAS,gBAAc;AAChF,SAAK,SAAS,MAAM,QAAQ;AAC5B,QAAI,4BAA4B,MAAM;AAClC,WAAK,8BAA8B;AACnC,WAAK,oBAAoB;IAC7B;EACJ;;;;ACrDE,SAAU,SAAS,KAAG;AACxB,MAAI,MAAM,IAAI,SAAQ;AAEtB,MAAI,IAAI,IAAI,CAAC;AACb,MAAI,IAAI,IAAI,CAAC;AACb,MAAI,IAAI,IAAI,CAAC;AAEb,MAAI,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,GAAG,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,GAC/C,IAAI,MAAM,KACV,GACA,IAAK,OAAO,IAAI,IAAI,IAAI,KACxB,IAAI;AAER,UAAQ,KAAK;IACT,KAAK;AAAK,UAAI;AAAG;IACjB,KAAK;AAAG,UAAK,IAAI,IAAK,KAAK,IAAI,IAAI,IAAI;AAAI,WAAK,IAAI;AAAG;IACvD,KAAK;AAAG,UAAK,IAAI,IAAK,IAAI;AAAG,WAAK,IAAI;AAAG;IACzC,KAAK;AAAG,UAAK,IAAI,IAAK,IAAI;AAAG,WAAK,IAAI;AAAG;EAC7C;AAEA,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI;AAET,SAAO;AACX;AAGM,SAAU,SAAS,KAAG;AACxB,MAAI,MAAM,IAAI,SAAQ;AAEtB,MAAI,IAAI,IAAI,CAAC;AACb,MAAI,IAAI,IAAI,CAAC;AACb,MAAI,IAAI,IAAI,CAAC;AAEb,MAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACzB,MAAI,KAAK,MAAM,IAAI,CAAC;AACpB,MAAI,IAAI,IAAI;AACZ,MAAI,KAAK,IAAI;AACb,MAAI,KAAK,IAAI,IAAI;AACjB,MAAI,KAAK,KAAK,IAAI,KAAK;AAEvB,UAAQ,IAAI,GAAG;IACX,KAAK;AAAG,UAAI,GAAG,IAAI,GAAG,IAAI;AAAG;IAC7B,KAAK;AAAG,UAAI,GAAG,IAAI,GAAG,IAAI;AAAG;IAC7B,KAAK;AAAG,UAAI,GAAG,IAAI,GAAG,IAAI;AAAG;IAC7B,KAAK;AAAG,UAAI,GAAG,IAAI,GAAG,IAAI;AAAG;IAC7B,KAAK;AAAG,UAAI,GAAG,IAAI,GAAG,IAAI;AAAG;IAC7B,KAAK;AAAG,UAAI,GAAG,IAAI,GAAG,IAAI;AAAG;EACjC;AAEA,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI;AAET,SAAO;AACX;AAEM,SAAU,eAAe,KAAG;AAC9B,SAAO,WAAW,YAAY,GAAG;AACrC;AAEM,SAAU,eAAe,KAAG;AAC9B,SAAO,WAAW,YAAY,GAAG;AACrC;AAEM,SAAU,eAAe,KAAG;AAC9B,SAAO,WAAW,YAAY,GAAG;AACrC;AAEM,SAAU,eAAe,KAAG;AAC9B,SAAO,WAAW,YAAY,GAAG;AACrC;AAEM,SAAU,YAAY,OAAK;AAC7B,MAAI,SAAS,MAAM,SAAQ;AAE3B,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,WAAO,CAAC,KAAK;AACb,WAAO,CAAC,IAAI,KAAK,SAAS,OAAO,CAAC,GAAG,GAAG,CAAC;EAC7C;AAEA,SAAO;AACX;AAEM,SAAU,YAAY,OAAK;AAC7B,MAAI,SAAS,MAAM,SAAQ;AAE3B,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,WAAO,CAAC,IAAI,KAAK,MAAM,OAAO,CAAC,IAAI,GAAG;AACtC,WAAO,CAAC,IAAI,KAAK,SAAS,OAAO,CAAC,GAAG,GAAG,GAAG;EAC/C;AAEA,SAAO;AACX;AAEO,IAAI,aAAa;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;ACzGJ,IAAI,sBAAsB;AAE1B,IAAI,sBAAsB;AAE1B,IAAI,oBAAoB,CAAA;AAExB,IAAI,oBAAoB;AACxB,IAAI,sBAAsB;AAE1B,IAAI,sBAAsB;AAEpB,SAAU,oBAAoB,SAAO;AACvC,wBAAsB;AAC1B;AAEM,SAAU,qBAAkB;AAC9B,SAAO;AACX;AAEM,SAAU,oBAAoB,UAAQ;AACxC,wBAAsB;AAC1B;AAEM,SAAU,YAAY,MAAI;AAC5B,MAAI;AACA,QAAI,qBAAqB;AACrB,UAAI,mBAAmB;AACnB,gBAAQ,IAAI,qBAAqB,IAAI;MACzC;AAEA,UAAI,uBAAuB,MAAM;AAC7B,4BAAoB,GAAG,IAAI;MAC/B,WAAW,qBAAqB;AAC5B,gBAAQ,MAAM,wCAAwC;MAC1D;IACJ;EACJ,SAASE,QAAO;AACZ,QAAI,qBAAqB;AACrB,cAAQ,MAAMA,MAAK;IACvB;EACJ;AACJ;AAEM,SAAU,UAAU,WAAW,QAAQ,MAAM,WAAW,OAAK;AAC/D,MAAI;AACA,QAAI,qBAAqB;AACrB,UAAI,mBAAmB;AAEvB,UAAI,UAAU;AACV,2BAAmB,CAAC,eAAe,wBAAwB,SAAS;MACxE;AAEA,UAAI,kBAAkB;AAClB,YAAI,qBAAqB;AACrB,cAAI,SAAS,MAAM;AACf,oBAAQ,IAAI,sBAAsB,YAAY,eAAe,KAAK;UACtE,OAAO;AACH,oBAAQ,IAAI,sBAAsB,SAAS;UAC/C;QACJ;AAEA,YAAI,uBAAuB,MAAM;AAC7B,cAAI,SAAS,MAAM;AACf,gCAAoB,SAAS,WAAW,EAAE,SAAS,MAAK,CAAE;UAC9D,OAAO;AACH,gCAAoB,SAAS,SAAS;UAC1C;AAEA,cAAI,UAAU;AACV,8BAAkB,cAAc,SAAS;UAC7C;QACJ,WAAW,qBAAqB;AAC5B,kBAAQ,MAAM,wCAAwC;QAC1D;MACJ;IACJ;EACJ,SAASA,QAAO;AACZ,QAAI,qBAAqB;AACrB,cAAQ,MAAMA,MAAK;IACvB;EACJ;AACJ;AAEM,SAAU,cAAc,WAAW,QAAQ,MAAI;AACjD,iBAAe,UAAU,WAAW,OAAO,IAAI;AACnD;AAEM,SAAU,wBAAwB,WAAS;AAC7C,oBAAkB,eAAe,SAAS;AAC9C;AAEM,SAAU,8BAA2B;AACvC,oBAAkB,SAAQ;AAC9B;AAEM,SAAU,wBAAwB,WAAS;AAC7C,SAAO,kBAAkB,YAAY,SAAS;AAClD;AAEM,SAAU,2BAAwB;AACpC,SAAO;AACX;AAEM,SAAU,kBAAkB,SAAO;AACrC,sBAAoB;AACxB;AAEM,SAAU,mBAAgB;AAC5B,SAAO;AACX;AAEM,SAAU,oBAAoB,SAAO;AACvC,wBAAsB;AAC1B;AAEM,SAAU,qBAAkB;AAC9B,SAAO;AACX;AAEM,SAAU,oBAAoB,SAAO;AACvC,wBAAsB;AAC1B;AAEM,SAAU,qBAAkB;AAC9B,SAAO;AACX;AAEO,IAAI,iBAAiB;EACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;AC/IJ,SAAS,iBAAAC,sBAAqB;AAGvB,IAAI,WAAW,WAAA;AAClB,MAAI,QAAQ,YAAW;AACvB,SAAO,SAASC,UAAS,UAAU,OAAK;AACpC,QAAI,SAAS,SAAS,MAAM;AACxB,YAAM,UAAU,SAAS,KAAK;AAC9B,YAAM,CAAC,IAAI;AACX,eAAS,QAAQ;IACrB;AAEA,QAAI,SAAS,gBAAgB,MAAM;AAC/B,YAAM,UAAU,SAAS,YAAY;AACrC,YAAM,CAAC,IAAI;AACX,eAAS,eAAe;IAC5B;AAEA,QAAI,SAAS,gBAAgB,MAAM;AAC/B,YAAM,UAAU,SAAS,YAAY;AACrC,YAAM,CAAC,IAAI;AACX,eAAS,eAAe;IAC5B;EACJ;AACJ,EAAC;AAEK,SAAU,eAAe,QAAQ,OAAK;AACxC,MAAI,iBAAiB,OAAO,iBAAiBC,cAAa;AAE1D,WAAS,iBAAiB,gBAAgB;AACtC,QAAI,cAAc,YAAY,MAAM;AAChC,oBAAc,SAAS,cAAc,UAAU,KAAK;IACxD;EACJ;AACJ;AAEM,SAAU,kBAAkB,QAAQ,UAAU,gBAAgB,OAAK;AACrE,MAAI,iBAAiB,OAAO,iBAAiBA,cAAa;AAE1D,WAAS,iBAAiB,gBAAgB;AACtC,QAAI,eAAe;AACf,oBAAc,WAAW,SAAS,MAAK;IAC3C,OAAO;AACH,oBAAc,WAAW;IAC7B;EACJ;AACJ;AAEM,SAAU,yBAAyB,QAAM;AAC3C,MAAI,iBAAiB,OAAO,iBAAiBA,cAAa;AAE1D,WAAS,iBAAiB,gBAAgB;AACtC,QAAI,cAAc,YAAY,MAAM;AAChC,oBAAc,WAAW,cAAc,SAAS,MAAK;IACzD;EACJ;AACJ;AAEM,SAAU,uBAAuB,QAAQ,OAAK;AAChD,MAAI,iBAAiB,OAAO,iBAAiBA,cAAa;AAE1D,WAAS,iBAAiB,gBAAgB;AACtC,QAAI,cAAc,SAAS,iBAAiB,MAAM;AAC9C,oBAAc,SAAS,gBAAgB;IAC3C;EACJ;AACJ;AAEM,SAAU,kBAAkB,QAAQ,OAAK;AAC3C,MAAI,iBAAiB,OAAO,iBAAiBA,cAAa;AAE1D,WAAS,iBAAiB,gBAAgB;AACtC,QAAI,cAAc,SAAS,YAAY,MAAM;AACzC,oBAAc,SAAS,WAAW;IACtC;EACJ;AACJ;AAEO,IAAI,gBAAgB;EACvB;EACA;EACA;EACA;EACA;EACA;;;;ACpFJ,SAAS,iBAAAC,sBAAqB;AAExB,SAAU,mBAAmB,QAAM;AACrC,MAAI,iBAAiB,OAAO,iBAAiBA,cAAa;AAE1D,WAAS,iBAAiB,gBAAgB;AACtC,QAAI,cAAc,YAAY,MAAM;AAChC,oBAAc,WAAW,cAAc,SAAS,MAAK;IACzD;EACJ;AACJ;AAEO,IAAI,YAAY;EACnB;;;;ACbJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,0BAAP,cAAuCC,YAAS;EAClD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,WAAWC,WAAS,MAAM,GAAG;IAC7B,cAAcA,WAAS,MAAM,IAAK;;EAGtC,QAAK;AACD,SAAK,aAAa;AAElB,QAAI,QAAQ,eAAe,KAAK,MAAM,GAAG;AACrC,WAAK,0BAA0B;AAE/B,WAAK,0BAA0B,IAAI,sBAAsB,KAAK,MAAM;AACpE,WAAK,wBAAwB,WAAW,KAAK;AAC7C,WAAK,wBAAwB,cAAc,KAAK;AAEhD,WAAK,0BAA0B,IAAI,gBAAgB,KAAK,uBAAuB;AAC/E,WAAK,wBAAwB,WAAW,QAAQ,eAAe,KAAK,MAAM,CAAC;AAE3E,WAAK,aAAa;IACtB;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,eAAe,KAAK,MAAM,GAAG;AACrC,UAAI,KAAK,YAAY;AACjB,aAAK,OAAO,gBAAgB,KAAK,wBAAwB,WAAW;AACpE,aAAK,wBAAwB,cAAa;AAC1C,aAAK,wBAAwB,WAAW,IAAI;MAChD;IACJ;EACJ;EAEA,YAAS;AACL,QAAI,KAAK,YAAY;AACjB,WAAK,wBAAwB,QAAO;IACxC;EACJ;;;;AClCE,IAAO,iCAAP,MAAqC;EAEvC,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,uBAAuB,CAAA;AAC5B,SAAK,kBAAkB,CAAA;AAEvB,SAAK,uBAAuB,CAAA;AAC5B,SAAK,kBAAkB,CAAA;AAIvB,SAAK,oBAAoB,CAAA;AAEzB,SAAK,wBAAwB;AAC7B,SAAK,6BAA6B;AAElC,SAAK,2BAA2B,CAAA;AAChC,SAAK,2BAA2B,CAAA;AAGhC,SAAK,2BAA2B,CAAA;AAChC,SAAK,2BAA2B,CAAA;AAEhC,SAAK,yCAAyC;AAC9C,SAAK,wCAAwC;AAK7C,SAAK,yBAAyB,CAAA;AAC9B,SAAK,yBAAyB,CAAA;AAE9B,SAAK,wBAAwB,CAAA;AAC7B,SAAK,wBAAwB,CAAA;AAE7B,SAAK,yBAAyB,CAAA;AAC9B,SAAK,yBAAyB,CAAA;AAE9B,SAAK,wBAAwB,CAAA;AAC7B,SAAK,wBAAwB,CAAA;AAO7B,SAAK,eAAe;AAEpB,SAAK,WAAW;EACpB;;AAGE,IAAO,2BAAP,MAA+B;EAEjC,YAAY,SAAS,IAAI,+BAA8B,GAAE;AACrD,SAAK,YAAY;AAEjB,SAAK,kCAAkC,oBAAI,IAAG;EAClD;EAEA,qBAAkB;AACd,QAAI,oBAAoB,KAAK,yBAAyB,KAAK,UAAU,sBAAsB,KAAK,UAAU,iBAAiB,IAAI;AAC/H,QAAI,oBAAoB,KAAK,yBAAyB,KAAK,UAAU,sBAAsB,KAAK,UAAU,iBAAiB,KAAK;AAChI,QAAI,sBAAsB,KAAK,yBAAyB,CAAA,GAAI,KAAK,UAAU,mBAAmB,KAAK;AAEnG,SAAK,sBAAsB,mBAAmB,iBAAiB;AAE/D,aAAS,sBAAsB,mBAAmB;AAC9C,UAAI,YAAY,mBAAmB,CAAC;AACpC,UAAI,kBAAkB,mBAAmB,CAAC;AAC1C,UAAI,gBAAgB,mBAAmB,CAAC;AACxC,UAAI,gBAAgB,mBAAmB,CAAC;AACxC,UAAI,yBAAyB,mBAAmB,CAAC;AAEjD,WAAK,6BAA6B,WAAW,iBAAiB,eAAe,eAAe,wBAAwB,IAAI;IAC5H;AAEA,aAAS,sBAAsB,mBAAmB;AAC9C,UAAI,YAAY,mBAAmB,CAAC;AACpC,UAAI,kBAAkB,mBAAmB,CAAC;AAC1C,UAAI,gBAAgB,mBAAmB,CAAC;AACxC,UAAI,gBAAgB,mBAAmB,CAAC;AACxC,UAAI,yBAAyB,mBAAmB,CAAC;AAEjD,WAAK,6BAA6B,WAAW,iBAAiB,eAAe,eAAe,wBAAwB,KAAK;IAC7H;AAEA,aAAS,sBAAsB,qBAAqB;AAChD,UAAI,kBAAkB,mBAAmB,CAAC;AAC1C,UAAI,gBAAgB,mBAAmB,CAAC;AACxC,UAAI,gBAAgB,mBAAmB,CAAC;AAExC,WAAK,mBAAmB,iBAAiB,eAAe,MAAM,MAAM,eAAe,OAAO,IAAI;IAClG;EACJ;;EAIA,wBAAwB,WAAW,cAAc,eAAeC,UAASC,aAAU;AAC/E,WAAO,QAAQ,kBAAkB,WAAW,YAAY;EAC5D;EAEA,2BAA2B,WAAW,cAAc,eAAeD,UAASC,aAAU;AAClF,WAAO,QAAQ,kBAAkB,WAAW,YAAY;EAC5D;EAEA,oBAAoB,WAAW,cAAc,+BAA+B,6BAA6B,eAAeD,UAASC,aAAY,eAAa;EAE1J;EAEA,oBAAoB,WAAW,cAAc,+BAA+B,6BAA6B,eAAeD,UAASC,aAAY,eAAa;EAE1J;;EAIA,6BAA6B,WAAW,iBAAiB,eAAe,eAAe,wBAAwBD,UAAO;AAClH,QAAI,kBAAkB,KAAK,UAAU;AACrC,QAAI,kBAAkB,KAAK,UAAU;AACrC,QAAI,kBAAkB,KAAK,UAAU;AACrC,QAAI,kBAAkB,KAAK,UAAU;AACrC,QAAIA,UAAS;AACT,wBAAkB,KAAK,UAAU;AACjC,wBAAkB,KAAK,UAAU;AACjC,wBAAkB,KAAK,UAAU;AACjC,wBAAkB,KAAK,UAAU;IACrC;AAEA,QAAI,qBAAqB,KAAK,YAAY,eAAe,iBAAiB,eAAe;AACzF,QAAI,qBAAqB,KAAK,YAAY,wBAAwB,iBAAiB,eAAe;AAClG,QAAI,sBAAsB,oBAAoB;AAC1C,UAAI,gBAAgB,QAAQ,uBAAuB,SAAS;AAC5D,UAAI,cAAc,YAAY,aAAa,GAAG;AAC1C,sBAAc,QAAQ,aAAa;MACvC;AAEA,eAAS,gBAAgB,eAAe;AACpC,YAAI,2BAA2B;AAE/B,YAAI,gCAAgC;AACpC,YAAI,8BAA8B;AAElC,YAAIA,UAAS;AACT,cAAI,iBAAiB;AAErB,cAAI,mBAAmB,MAAM;AACzB,gBAAI,yBAAyB,OAAO,yBAAyB,iBAAiB,aAAa;AAC3F,gBAAI,0BAA0B,QAAQ,uBAAuB,SAAS,MAAM;AACxE,+BAAiB,uBAAuB;YAC5C;UACJ;AAEA,qCAA2B,eAAe;AAC1C,cAAI,4BAA4B,MAAM;AAClC,uCAA2B;UAC/B,OAAO;AACH,gBAAI;AACA,kBAAI,oBAAoB,QAAQ,kBAAkB,0BAA0B,YAAY;AACxF,kBAAI,qBAAqB,MAAM;AAC3B,2CAA2B;cAC/B;YACJ,SAASE,QAAO;AACZ,yCAA2B;YAC/B;UACJ;AAEA,0CAAgC;AAChC,wCAA8B;QAClC,OAAO;AACH,qCAA2B;QAC/B;AAEA,aAAK,mBAAmB,0BAA0B,cAAc,+BAA+B,6BAA6B,eAAeF,UAAS,KAAK;MAE7J;IACJ;EACJ;EAEA,mBAAmB,WAAW,cAAc,+BAA+B,6BAA6B,eAAeA,UAASC,aAAU;AACtI,QAAI;AACA,UAAI,yBAAyB,KAAK,gCAAgC,IAAI,YAAY,KAAK,QAAQ,KAAK,gCAAgC,IAAI,YAAY,EAAE,YAAY,SAAS;AAC3K,UAAI,CAAC,wBAAwB;AACzB,YAAI,QAAQ,iBAAiB,WAAW,YAAY,KAAM,gBAAgB,iBAAiB,QAAQ,cAAc,WAAW,YAAY,GAAI;AACxI,cAAI,CAAC,KAAK,UAAU,8BAA8B,CAAC,KAAK,oBAAoB,YAAY,GAAG;AACvF,gBAAI,oBAAoB,KAAK,YAAY,cAAc,KAAK,UAAU,0BAA0B,KAAK,UAAU,wBAAwB;AACvI,gBAAI,oBAAoB,KAAK,aAAa,iBAAiB,OAAO,gBAAgB,MAAM,MAAM,cAAc,KAAK,UAAU,0BAA0B,KAAK,UAAU,wBAAwB;AAC5L,gBAAI,qBAAqB,mBAAmB;AACxC,kBAAI,CAAC,KAAK,gCAAgC,IAAI,YAAY,GAAG;AACzD,qBAAK,gCAAgC,IAAI,cAAc,CAAA,CAAE;cAC7D;AAEA,kBAAI,mBAAmB;AACvB,kBAAI,gBAAgB;AACpB,kBAAI,gBAAgB,eAAe;AAC/B,oBAAI;AACA,sBAAI,cAAc,KAAK,wBAAwB,WAAW,cAAc,eAAeD,UAASC,WAAU;AAC1G,sBAAI,eAAe,QAAQ,kBAAkB,WAAW,YAAY,GAAG;AACnE,uCAAmB,QAAQ,wBAAwB,aAAa,WAAW,cAAc,OAAO,MAAM,KAAK,UAAU,YAAY;kBACrI,OAAO;AACH,uCAAmB;kBACvB;gBACJ,SAASC,QAAO;AACZ,qCAAmB;AAEnB,sBAAI,KAAK,UAAU,cAAc;AAC7B,4BAAQ,MAAMA,MAAK;kBACvB;gBACJ;cACJ,WAAW,CAAC,KAAK,UAAU,yBAAyBF,YAAW,iCAAiC,MAAM;AAClG,oBAAI,0BAA0B,QAAQ,kBAAkB,+BAA+B,2BAA2B;AAClH,oBAAI,2BAA2B,QAAQ,wBAAwB,aAAa,MAAM;AAC9E,kCAAgB;AAEhB,sBAAI;AACA,wBAAI,iBAAiB,KAAK,2BAA2B,+BAA+B,6BAA6B,eAAeA,UAASC,WAAU;AACnJ,wBAAI,kBAAkB,yBAAyB;AAC3C,yCAAmB,QAAQ,wBAAwB,gBAAgB,+BAA+B,6BAA6B,OAAO,MAAM,KAAK,UAAU,YAAY;AACvK,0BAAI,kBAAkB;AAClB,2CAAmB,QAAQ,wBAAwB,gBAAgB,wBAAwB,WAAW,cAAc,OAAO,MAAM,KAAK,UAAU,YAAY;sBAChK;oBACJ,OAAO;AACH,yCAAmB;oBACvB;kBACJ,SAASC,QAAO;AACZ,uCAAmB;AAEnB,wBAAI,KAAK,UAAU,cAAc;AAC7B,8BAAQ,MAAMA,MAAK;oBACvB;kBACJ;gBACJ;cACJ;AAEA,kBAAI,kBAAkB;AAClB,qBAAK,gCAAgC,IAAI,YAAY,EAAE,KAAK,SAAS;AACrE,qBAAK,oBAAoB,WAAW,cAAc,+BAA+B,6BAA6B,eAAeF,UAASC,aAAY,aAAa;cACnK,OAAO;AACH,qBAAK,oBAAoB,WAAW,cAAc,+BAA+B,6BAA6B,eAAeD,UAASC,aAAY,aAAa;cACnK;YACJ;UACJ;QACJ;MACJ;IACJ,SAASC,QAAO;AACZ,UAAI,KAAK,UAAU,cAAc;AAC7B,gBAAQ,MAAMA,MAAK;MACvB;IACJ;EACJ;EAEA,yBAAyB,iBAAiB,YAAYF,UAAO;AACzD,QAAI,sBAAsB,CAAA;AAE1B,QAAI,gBAAgB,CAACG,QAAO,WAAWA,OAAM,CAAC,KAAK,OAAO,CAAC;AAE3D,aAAS,YAAY,YAAY;AAC7B,UAAI,OAAO;AACX,UAAI,gBAAgB;AACpB,UAAI,gBAAgB;AACpB,UAAI,yBAAyB;AAE7B,UAAI,YAAY,QAAQ,MAAM,QAAQ,QAAQ,KAAK,SAAS,UAAU,QAAQ,SAAS,UAAU,KAAK,OAAO,SAAS,CAAC,KAAK,UAAU;AAClI,eAAO,SAAS,CAAC;AACjB,wBAAgB,SAAS,CAAC;MAC9B;AAEA,sBAAgB,QAAQ,sBAAsB,IAAI;AAClD,+BAAyB,QAAQ,sBAAsB,aAAa;AAEpE,UAAI,YAAY,QAAQ,kBAAkB,MAAM,MAAM;AACtD,UAAI,kBAAkB,QAAQ,wBAAwB,MAAM,MAAM;AAElE,UAAI,aAAa,MAAM;AACnB,4BAAoB,cAAc,CAAC,WAAW,iBAAiB,eAAe,eAAe,sBAAsB,GAAG,aAAa;MACvI;IACJ;AAEA,aAAS,iBAAiB,iBAAiB;AACvC,UAAI,YAAY;AAChB,UAAI,gBAAgB;AACpB,UAAI,gBAAgB;AACpB,UAAI,yBAAyB;AAE7B,UAAI,iBAAiB,QAAQ,cAAc,UAAU,QAAQ,cAAc,UAAU,KAAK,OAAO,cAAc,CAAC,KAAK,UAAU;AAC3H,oBAAY,cAAc,CAAC;AAC3B,wBAAgB,cAAc,CAAC;AAC/B,iCAAyB,QAAQ,sBAAsB,aAAa;MACxE,OAAO;AACH,wBAAgBH,WAAU,UAAU,OAAO;AAC3C,iCAAyBA,WAAU,UAAU,OAAO;MACxD;AAEA,UAAIA,UAAS;AACT,wBAAgB,UAAU;MAC9B,OAAO;AACH,wBAAgB,QAAQ,sBAAsB,aAAa;MAC/D;AAEA,UAAI,aAAa,MAAM;AACnB,4BAAoB,cAAc,CAAC,WAAW,MAAM,eAAe,eAAe,sBAAsB,GAAG,aAAa;MAC5H;IACJ;AAEA,WAAO;EACX;EAEA,sBAAsB,mBAAmB,mBAAiB;AACtD,QAAI,gBAAgB,CAACG,QAAO,WAAWA,OAAM,CAAC,KAAK,OAAO,CAAC;AAE3D,QAAI,iBAAiB,CAAA;AACrB,aAAS,mBAAmB,mBAAmB;AAC3C,qBAAe,cAAc,CAAC,gBAAgB,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,GAAG,aAAa;IAC3F;AAEA,WAAO,eAAe,SAAS,GAAG;AAC9B,UAAI,gBAAgB,eAAe,MAAK;AAExC,UAAI,SAAS,cAAc,CAAC;AAC5B,UAAI,cAAc,cAAc,CAAC;AACjC,UAAI,aAAa,cAAc,CAAC;AAEhC,UACI,cAAc,KAAK,KAAK,UAAU,0CAA0C,KAAK,UAAU,0CAA0C,MACrI,cAAc,KAAK,KAAK,UAAU,yCAAyC,KAAK,UAAU,yCAAyC,IAAI;AAEvI,YAAI,gBAAgB;AACpB,YAAI;AACA,0BAAgB,QAAQ,uBAAuB,MAAM;QACzD,SAASD,QAAO;AACZ;QACJ;AAEA,iBAAS,gBAAgB,eAAe;AACpC,cAAI,iBAAiB;AAErB,cAAI;AACA,6BAAiB,QAAQ,kBAAkB,QAAQ,YAAY;AAC/D,gBAAI,kBAAkB,MAAM;AACxB;YACJ;UACJ,SAASA,QAAO;AACZ;UACJ;AAEA,cAAI,cAAc;AAClB,cAAI,cAAc;AAClB,cAAI,cAAc,MAAM;AACpB,0BAAc;AACd,0BAAc,aAAa,MAAM;UACrC,OAAO;AACH,0BAAc;AACd,0BAAc;UAClB;AAEA,cAAIF,WAAU,QAAQ,cAAc,QAAQ,YAAY;AACxD,cAAII,YAAW,QAAQ,eAAe,QAAQ,YAAY;AAE1D,cAAI,kBAAkB,KAAK,UAAU;AACrC,cAAI,kBAAkB,KAAK,UAAU;AACrC,cAAI,kBAAkB,KAAK,UAAU;AACrC,cAAI,kBAAkB,KAAK,UAAU;AACrC,cAAIJ,UAAS;AACT,8BAAkB,KAAK,UAAU;AACjC,8BAAkB,KAAK,UAAU;AACjC,8BAAkB,KAAK,UAAU;AACjC,8BAAkB,KAAK,UAAU;UACrC;AAEA,cAAI,qBAAqB,KAAK,YAAY,aAAa,iBAAiB,eAAe;AACvF,cAAI,qBAAqB,KAAK,YAAY,cAAc,iBAAiB,eAAe;AACxF,cAAI,sBAAsB,oBAAoB;AAC1C,gBAAII,cAAa,cAAc,KAAK,KAAK,UAAU,0CAA0C,KAAK,UAAU,0CAA0C,KAAK;AACvJ,gCAAkB,cAAc,CAAC,gBAAgB,QAAQ,cAAc,aAAa,WAAW,GAAG,aAAa;YACnH;AAEA,gBAAIJ,YAAW,gBAAgB,kBAAkB,cAAc,KAAK,KAAK,UAAU,yCAAyC,KAAK,UAAU,yCAAyC,KAAK;AACrL,gCAAkB,cAAc,CAAC,gBAAgB,QAAQ,cAAc,aAAa,WAAW,GAAG,aAAa;YACnH;AAEA,gBAAII,WAAU;AACV,6BAAe,cAAc,CAAC,gBAAgB,cAAc,GAAG,WAAW,GAAG,aAAa;YAC9F;UACJ;QACJ;MACJ;IACJ;EACJ;EAEA,YAAY,MAAM,aAAa,aAAW;AACtC,QAAI,YAAY,YAAY,UAAU;AACtC,aAAS,eAAe,aAAa;AACjC,UAAI,KAAK,MAAM,WAAW,KAAK,MAAM;AACjC,oBAAY;AACZ;MACJ;IACJ;AAEA,QAAI,WAAW;AACX,eAAS,eAAe,aAAa;AACjC,YAAI,KAAK,MAAM,WAAW,KAAK,MAAM;AACjC,sBAAY;AACZ;QACJ;MACJ;IACJ;AAEA,WAAO;EACX;EAEA,oBAAoB,cAAY;EAEhC;;AAOJ,yBAAyB,UAAU,sBAAsB,WAAA;AACrD,MAAI,oBAAoB;IACpB;IAAoB;IAAoB;IAAkB;IAAoB;IAAoB;IAClG;IAAwB;IAAY;IAAW;IAAa;IAAkB;IAAa;IAAU;IAAS;IAAQ;IAAQ;;AAClI,SAAO,SAAS,oBAAoB,cAAY;AAC5C,WAAO,kBAAkB,YAAY,YAAY;EACrD;AACJ,EAAC;;;AC9aK,IAAO,0CAAP,cAAuD,+BAA8B;EAEvF,cAAA;AACI,UAAK;AAEL,SAAK,iCAAiC;AAEtC,SAAK,8BAA8B;AAInC,SAAK,mDAAmD;EAC5D;;AAGE,IAAO,0CAAP,MAA8C;EAEhD,cAAA;AACI,SAAK,cAAc;AACnB,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,OAAO;AAEZ,SAAK,eAAe;AACpB,SAAK,uBAAuB;AAC5B,SAAK,iCAAiC;AACtC,SAAK,yBAAyB;AAC9B,SAAK,8BAA8B;AAEnC,SAAK,gCAAgC;EACzC;EAEA,QAAK;AACD,SAAK,eAAe;AACpB,SAAK,uBAAuB;AAC5B,SAAK,iCAAiC;AACtC,SAAK,yBAAyB;AAC9B,SAAK,8BAA8B;AAEnC,SAAK,gCAAgC;EACzC;EAEA,IAAI,OAAK;AACL,SAAK,eAAe,KAAK,IAAI,KAAK,cAAc,MAAM,YAAY;AAClE,SAAK,uBAAuB,KAAK,IAAI,KAAK,sBAAsB,MAAM,oBAAoB;AAC1F,SAAK,iCAAiC,KAAK,IAAI,KAAK,gCAAgC,MAAM,8BAA8B;AACxH,SAAK,yBAAyB,KAAK,IAAI,KAAK,wBAAwB,MAAM,sBAAsB;EACpG;EAEA,KAAK,OAAK;AACN,SAAK,cAAc,MAAM;AACzB,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS,MAAM;AACpB,SAAK,OAAO,MAAM;AAElB,SAAK,eAAe,MAAM;AAC1B,SAAK,uBAAuB,MAAM;AAClC,SAAK,iCAAiC,MAAM;AAC5C,SAAK,yBAAyB,MAAM;AACpC,SAAK,8BAA8B,MAAM;AAEzC,SAAK,gCAAgC,MAAM;EAC/C;;AAGG,IAAI,6CAA6C;EACpD,MAAM;EACN,aAAa;EACb,sBAAsB;EACtB,wBAAwB;;AAGtB,IAAO,oCAAP,MAAO,2CAA0C,yBAAwB;EAE3E,YAAY,SAAS,IAAI,wCAAuC,GAAE;AAC9D,UAAM,MAAM;AAEZ,SAAK,wCAAwC,oBAAI,IAAG;AACpD,SAAK,2CAA2C,oBAAI,IAAG;AAEvD,SAAK,yBAAyB;AAE9B,SAAK,oBAAoB;MACrB,uCAAuC;MACvC,6BAA6B;MAC7B,0CAA0C,CAAA;;AAE9C,SAAK,qBAAqB,OAAO,YAAY,IAAG;AAChD,SAAK,kCAAkC;AAEvC,QAAI,eAAe,MAAM,UAAU,MAAM;AACzC,QAAI,cAAc,MAAM,UAAU,KAAK;AACvC,SAAK,kBAAkB,yCAAyC,OAAO,WAAA;AAAc,aAAO,aAAa,KAAK,IAAI,EAAE,GAAG,SAAS;IAAG;AACnI,SAAK,kBAAkB,yCAAyC,MAAM,WAAA;AAAc,aAAO,YAAY,KAAK,IAAI,EAAE,GAAG,SAAS;IAAG;EACrI;EAEA,qBAAkB;AACd,UAAM,mBAAkB;AAExB,SAAK,aAAY;AACjB,SAAK,gBAAe;EACxB;EAEA,+BAA4B;AACxB,WAAO,OAAO,YAAY,IAAG,IAAK,KAAK,qBAAqB,KAAK,kBAAkB;EACvF;EAEA,kCAA+B;AAC3B,SAAK,kCAAkC,KAAK,IAAI,KAAK,iCAAiC,KAAK,6BAA4B,CAAE;AACzH,WAAO,KAAK;EAChB;EAEA,eAAY;AACR,SAAK,wBAAuB;AAC5B,SAAK,kBAAiB;AAEtB,aAASC,aAAY,KAAK,sCAAsC,KAAI,GAAI;AACpE,WAAK,sCAAsC,IAAIA,SAAQ,EAAE,MAAK;IAClE;AAEA,SAAK,kBAAkB,wCAAwC;AAE/D,SAAK,qBAAqB,OAAO,YAAY,IAAG;EACpD;EAEA,kBAAe;AACX,SAAK,kCAAkC;AACvC,aAASA,aAAY,KAAK,yCAAyC,KAAI,GAAI;AACvE,WAAK,yCAAyC,IAAIA,SAAQ,EAAE,MAAK;IACrE;EACJ;EAEA,WAAW,YAAY,2CAA2C,MAAI;AAClE,SAAK,wBAAuB;AAC5B,SAAK,kBAAiB;AAEtB,QAAI,UAAU,KAAK;AACnB,cAAU,KAAK,aAAa,SAAS,SAAS;AAC9C,WAAO;EACX;EAEA,cAAc,YAAY,2CAA2C,MAAI;AACrE,SAAK,wBAAuB;AAC5B,SAAK,kBAAiB;AAEtB,QAAI,UAAU,KAAK;AACnB,cAAU,KAAK,aAAa,SAAS,SAAS;AAC9C,WAAO;EACX;EAEA,wBAAwB,WAAW,cAAc,eAAeC,UAASC,aAAU;AAC/E,WAAO,KAAK,gCAAgC,WAAW,cAAc,eAAeD,UAASC,aAAY,KAAK;EAClH;EAEA,2BAA2B,WAAW,cAAc,eAAeD,UAASC,aAAU;AAClF,WAAO,KAAK,gCAAgC,WAAW,cAAc,eAAeD,UAASC,aAAY,IAAI;EACjH;EAEA,oBAAoB,WAAW,cAAc,+BAA+B,6BAA6B,eAAeD,UAASC,aAAY,eAAa;AACtJ,SAAK,yBAAyB;EAClC;EAEA,oBAAoB,WAAW,cAAc,+BAA+B,6BAA6B,eAAeD,UAASC,aAAY,eAAa;AACtJ,QAAI,KAAK,wBAAwB;AAC7B,UAAI,aAAa,KAAK,eAAe,cAAc,eAAeA,aAAY,aAAa;AAC3F,WAAK,sCAAsC,OAAO,UAAU;IAChE;EACJ;EAEA,aAAa,SAAS,WAAS;AAC3B,QAAI,gBAAgB;AAEpB,QAAI,aAAa,2CAA2C,MAAM;AAC9D,sBAAgB,IAAI,IAAI,CAAC,GAAG,QAAQ,QAAO,CAAE,EAAE,KAAK,SAAUC,QAAO,QAAM;AACvE,YAAI,aAAa;AAEjB,YAAI,aAAa,2CAA2C,aAAa;AACrE,uBAAa,EAAEA,OAAM,CAAC,EAAE,eAAe,OAAO,CAAC,EAAE;AACjD,cAAI,cAAc,GAAG;AACjB,yBAAa,EAAEA,OAAM,CAAC,EAAE,uBAAuB,OAAO,CAAC,EAAE;AACzD,gBAAI,cAAc,GAAG;AACjB,2BAAa,EAAEA,OAAM,CAAC,EAAE,yBAAyB,OAAO,CAAC,EAAE;YAC/D;UACJ;QACJ,WAAW,aAAa,2CAA2C,sBAAsB;AACrF,uBAAa,EAAEA,OAAM,CAAC,EAAE,uBAAuB,OAAO,CAAC,EAAE;AACzD,cAAI,cAAc,GAAG;AACjB,yBAAa,EAAEA,OAAM,CAAC,EAAE,yBAAyB,OAAO,CAAC,EAAE;AAC3D,gBAAI,cAAc,GAAG;AACjB,2BAAa,EAAEA,OAAM,CAAC,EAAE,eAAe,OAAO,CAAC,EAAE;YACrD;UACJ;QACJ,OAAO;AACH,uBAAa,EAAEA,OAAM,CAAC,EAAE,yBAAyB,OAAO,CAAC,EAAE;AAC3D,cAAI,cAAc,GAAG;AACjB,yBAAa,EAAEA,OAAM,CAAC,EAAE,uBAAuB,OAAO,CAAC,EAAE;AACzD,gBAAI,cAAc,GAAG;AACjB,2BAAa,EAAEA,OAAM,CAAC,EAAE,eAAe,OAAO,CAAC,EAAE;YACrD;UACJ;QACJ;AAEA,eAAO;MACX,CAAC,CAAC;IACN;AAEA,WAAO;EACX;EAEA,eAAe,cAAc,eAAeD,aAAY,eAAa;AACjE,QAAI,KAAK,gBAAgB,gBAAgB;AAEzC,QAAI,iBAAiB,QAAQ,KAAK,UAAU,6BAA6B;AACrE,UAAI,CAACA,aAAY;AACb,aAAK,gBAAgB,MAAM;MAC/B,OAAO;AACH,aAAK;MACT;IACJ;AAEA,WAAO;EACX;EAEA,0BAAuB;AACnB,QAAI,4BAA4B,KAAK,6BAA4B;AACjE,QAAI,aAAa,OAAO,YAAY,IAAG;AAEvC,aAASF,aAAY,KAAK,sCAAsC,KAAI,GAAI;AACpE,UAAI,UAAU,KAAK,sCAAsC,IAAIA,SAAQ;AAErE,UAAI,6BAA6B,GAAG;AAChC,gBAAQ,iCAAiC,QAAQ,uBAAuB;MAC5E,OAAO;AACH,YAAI,QAAQ,gBAAgB,GAAG;AAC3B,kBAAQ,iCAAiC;QAC7C,OAAO;AACH,kBAAQ,iCAAiC;QAC7C;MACJ;AAEA,UAAI,QAAQ,gBAAgB,GAAG;AAC3B,gBAAQ,yBAAyB,QAAQ,uBAAuB,QAAQ;MAC5E,OAAO;AACH,gBAAQ,yBAAyB;MACrC;AAEA,cAAQ,8BAA8B;IAC1C;AAEA,SAAK,kBAAkB,yCAAyC,OAAO,YAAY,IAAG,IAAK;EAC/F;EAEA,oBAAiB;AACb,QAAI,aAAa,OAAO,YAAY,IAAG;AAEvC,SAAK,kCAAkC,KAAK,IAAI,KAAK,iCAAiC,KAAK,6BAA4B,CAAE;AAEzH,aAASA,aAAY,KAAK,sCAAsC,KAAI,GAAI;AACpE,UAAI,KAAK,yCAAyC,IAAIA,SAAQ,GAAG;AAC7D,aAAK,yCAAyC,IAAIA,SAAQ,EAAE,IAAI,KAAK,sCAAsC,IAAIA,SAAQ,CAAC;MAC5H,OAAO;AACH,YAAI,aAAa,IAAI,wCAAuC;AAC5D,mBAAW,KAAK,KAAK,sCAAsC,IAAIA,SAAQ,CAAC;AACxE,aAAK,yCAAyC,IAAIA,WAAU,UAAU;MAC1E;IACJ;AAEA,SAAK,kBAAkB,yCAAyC,OAAO,YAAY,IAAG,IAAK;EAC/F;EAEA,gCAAgC,WAAW,cAAc,eAAeC,UAASC,aAAY,eAAa;AACtG,QAAI,cAAc,QAAQ,kBAAkB,WAAW,YAAY;AAEnE,QAAI,CAAC,KAAK,UAAU,oDAAoD,CAAC,KAAK,uBAAuB,WAAW,cAAcD,QAAO,GAAG;AACpI,UAAI,gBAAgB,0CAA0C;AAC1D,YAAI,aAAa,KAAK,eAAe,cAAc,eAAeC,aAAY,aAAa;AAE3F,aAAK,yBAAyB,KAAK,sCAAsC,IAAI,UAAU;AACvF,YAAI,kBAAkB,IAAI,wCAAuC;AAEjE,wBAAgB,cAAc;AAC9B,wBAAgB,SAAS;AACzB,wBAAgB,SAAS;AACzB,wBAAgB,OAAO;AAEvB,aAAK,sCAAsC,IAAI,YAAY,eAAe;AAE1E,YAAI;AACA,cAAI,qCAAqC,KAAK,sCAAsC,IAAI,UAAU;AAClG,cAAI,iBAAiB,KAAK;AAE1B,cAAI,mBAAmB,UAAU,YAAY;AAC7C,cAAI,uBAAuB;AAC3B,cAAI,gBAAgB;AAEpB,cAAI,+BAA+B,KAAK,UAAU;AAElD,cAAI,CAAC,eAAe;AAChB,0BAAc,WAAA;AACV,kBAAI,YAAY,OAAO,YAAY,IAAG;AAEtC,kBAAI,eAAe;AACnB,kBAAI,cAAc;AAClB,kBAAI,wBAAwB;AAC5B,kBAAI,4BAA4B;AAChC,kBAAI,0BAA0B;AAC9B,kBAAI,wCAAwC;AAC5C,kBAAI,wBAAwB;AAC5B,kBAAI,gBAAgB;AACpB,kBAAI,iBAAiB;AACrB,kBAAI,oBAAoB;AAExB,kBAAI,8BAA8B;AAC9B,+BAAe,yCAAyC,KAAK,CAAC;AAE9D,4CAA4B,OAAO,YAAY,IAAG;AAClD,0CAA0B,OAAO,YAAY,IAAG;AAEhD,oBAAI;AACA,0CAAwB,iBAAiB,KAAK,IAAI;AAClD,8CAA4B,OAAO,YAAY,IAAG;AAClD,gCAAc,sBAAsB,GAAG,SAAS;AAChD,4CAA0B,OAAO,YAAY,IAAG;gBACpD,SAASE,QAAO;AACZ,4CAA0B,OAAO,YAAY,IAAG;AAChD,iCAAeA;gBACnB;cACJ,OAAO;AACH,oBAAI;AACA,0CAAwB,iBAAiB,KAAK,IAAI;AAClD,gCAAc,sBAAsB,GAAG,SAAS;gBACpD,SAASA,QAAO;AACZ,iCAAeA;gBACnB;cACJ;AAEA,iDAAmC,gBAAgB;AAEnD,kBAAI,8BAA8B;AAC9B,wDAAwC,eAAe,yCAAyC,IAAG;AAEnG,wCAAwB,0BAA0B,4BAA4B;AAC9E,gCAAgB,wBAAwB;AACxC,oBAAI,iBAAiB,0CAA0C;AAC3D,kCAAgB,eAAe;gBACnC;AAEA,mDAAmC,iCAAiC;AACpE,mDAAmC,uBAAuB,KAAK,IAAI,GAAG,mCAAmC,6BAA6B;AAEtI,+BAAe,8BAA8B;AAE7C,iCAAiB,4BAA4B;AAC7C,oCAAoB,iBAAiB,0BAA0B;AAC/D,oBAAI,eAAe,yCAAyC,SAAS,GAAG;AACpE,iCAAe,yCAAyC,eAAe,yCAAyC,SAAS,CAAC,KACtH,oBAAoB,wCAAwC,gBAAgB;AAChF,iCAAe,yCAAyC,eAAe,yCAAyC,SAAS,CAAC,KACtH,OAAO,YAAY,IAAG;gBAC9B;AAEA,+BAAe,yCAAyC;AACxD,+BAAe,yCAAyC,OAAO,YAAY,IAAG;cAClF;AAEA,kBAAI,gBAAgB,MAAM;AACtB,sBAAM;cACV;AAEA,qBAAO;YACX;UACJ,OAAO;AACH,0BAAc,WAAA;AACV,kBAAI,YAAY,OAAO,YAAY,IAAG;AAEtC,kBAAI,eAAe;AACnB,kBAAI,cAAc;AAClB,kBAAI,4BAA4B;AAChC,kBAAI,0BAA0B;AAC9B,kBAAI,wCAAwC;AAC5C,kBAAI,wBAAwB;AAC5B,kBAAI,gBAAgB;AACpB,kBAAI,iBAAiB;AACrB,kBAAI,oBAAoB;AAExB,kBAAI,8BAA8B;AAC9B,+BAAe,yCAAyC,KAAK,CAAC;AAE9D,4CAA4B,OAAO,YAAY,IAAG;AAClD,0CAA0B,OAAO,YAAY,IAAG;AAEhD,oBAAI;AACA,8CAA4B,OAAO,YAAY,IAAG;AAClD,gCAAc,IAAI,iBAAiB,GAAG,SAAS;AAC/C,4CAA0B,OAAO,YAAY,IAAG;gBACpD,SAASA,QAAO;AACZ,4CAA0B,OAAO,YAAY,IAAG;AAChD,iCAAeA;gBACnB;cACJ,OAAO;AACH,oBAAI;AACA,gCAAc,IAAI,iBAAiB,GAAG,SAAS;gBACnD,SAASA,QAAO;AACZ,iCAAeA;gBACnB;cACJ;AAEA,iDAAmC,gBAAgB;AAEnD,kBAAI,8BAA8B;AAC9B,wDAAwC,eAAe,yCAAyC,IAAG;AAEnG,wCAAwB,0BAA0B,4BAA4B;AAC9E,gCAAgB,wBAAwB;AACxC,oBAAI,iBAAiB,0CAA0C;AAC3D,kCAAgB,eAAe;gBACnC;AAEA,mDAAmC,iCAAiC;AACpE,mDAAmC,uBAAuB,KAAK,IAAI,GAAG,mCAAmC,6BAA6B;AAEtI,+BAAe,8BAA8B;AAE7C,iCAAiB,4BAA4B;AAC7C,oCAAoB,iBAAiB,0BAA0B;AAC/D,oBAAI,eAAe,yCAAyC,SAAS,GAAG;AACpE,iCAAe,yCAAyC,eAAe,yCAAyC,SAAS,CAAC,KACtH,oBAAoB,wCAAwC,gBAAgB;AAChF,iCAAe,yCAAyC,eAAe,yCAAyC,SAAS,CAAC,KACtH,OAAO,YAAY,IAAG;gBAC9B;AAEA,+BAAe,yCAAyC;AACxD,+BAAe,yCAAyC,OAAO,YAAY,IAAG;cAClF;AAEA,kBAAI,gBAAgB,MAAM;AACtB,sBAAM;cACV;AAEA,qBAAO;YACX;UACJ;AAEA,cAAI,eAAe,MAAM;AACrB,mBAAO,eAAe,aAAa,4CAA4C;cAC3E,OAAO;cACP,YAAY;cACZ,cAAc;cACd,UAAU;aACb;AAED,mBAAO,eAAe,aAAa,0CAA0C;cACzE,OAAO;cACP,YAAY;cACZ,cAAc;cACd,UAAU;aACb;UACL;QACJ,SAASA,QAAO;AACZ,cAAI,KAAK,UAAU,cAAc;AAC7B,oBAAQ,MAAM,aAAa,cAAc,OAAO,WAAW,iCAAiCA,MAAK;UACrG;QACJ;MACJ;IACJ;AAEA,WAAO;EACX;EAEA,uBAAuB,WAAW,cAAcH,UAAO;AACnD,QAAI,wBAAwB;AAE5B,QAAIA,UAAS;AACT,UAAI,aAAa,mCAAkC,aAAa,aAAa,wCAAwC,WAAW;AAC5H,gCAAwB;MAC5B;IACJ;AAEA,WAAO;EACX;;;;ACheE,IAAO,uDAAP,MAA2D;EAE7D,cAAA;AACI,SAAK,wBAAwB;AAE7B,SAAK,aAAa;AAClB,SAAK,uBAAuB;AAC5B,SAAK,gBAAgB;AAErB,SAAK,cAAc;AACnB,SAAK,kCAAkC;AAEvC,SAAK,kBAAkB;AAEvB,SAAK,iBAAiB,2CAA2C;AAEjE,SAAK,4BAA4B;AAEjC,SAAK,oCAAoC;AACzC,SAAK,sDAAsD;AAE3D,SAAK,yBAAyB;AAC9B,SAAK,iCAAiC;AACtC,SAAK,2CAA2C;AAChD,SAAK,mCAAmC;AAExC,SAAK,0BAA0B;EACnC;;AAGE,IAAO,iDAAP,MAAqD;EAEvD,YAAY,QAAM;AACd,SAAK,YAAY;AAEjB,SAAK,cAAc,IAAI,MAAM,KAAK,UAAU,oBAAoB;AAEhE,SAAK,mBAAmB;AACxB,SAAK,yBAAyB;AAC9B,SAAK,iCAAiC;AACtC,SAAK,2CAA2C;AAChD,SAAK,mCAAmC;EAC5C;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,UAAU,yBAAyB,MAAM;AAC9C;IACJ;AAEA,SAAK,YAAY,OAAO,EAAE;AAC1B,QAAI,KAAK,YAAY,OAAM,GAAI;AAC3B,WAAK,YAAY,MAAK;AAEtB,UAAI,qBAAqB,KAAK,UAAU,sBAAsB,6BAA4B;AAC1F,UAAI,KAAK,UAAU,iBAAiB;AAChC,6BAAqB,KAAK,UAAU,sBAAsB,gCAA+B;MAC7F;AAEA,UAAI,kBAAkB;AACtB,UAAI,CAAC,KAAK,UAAU,iBAAiB;AACjC,0BAAkB,KAAK,UAAU,sBAAsB,WAAW,KAAK,UAAU,cAAc;MACnG,OAAO;AACH,0BAAkB,KAAK,UAAU,sBAAsB,cAAc,KAAK,UAAU,cAAc;MACtG;AAEA,UAAI,KAAK,UAAU,qCAAqC,MAAM;AAC1D,YAAI,uBAAuB,IAAI,IAAI,eAAe;AAClD,0BAAkB,oBAAI,IAAG;AACzB,YAAI,OAAO,CAAC,GAAG,qBAAqB,KAAI,CAAE;AAC1C,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,cAAI,UAAU,qBAAqB,IAAI,KAAK,CAAC,CAAC;AAC9C,cAAI,QAAQ,eAAe,KAAK,UAAU,mCAAmC;AACzE,4BAAgB,IAAI,KAAK,CAAC,GAAG,OAAO;UACxC;QACJ;MACJ;AAEA,UAAI,KAAK,UAAU,uDAAuD,MAAM;AAC5E,YAAI,uBAAuB,IAAI,IAAI,eAAe;AAClD,0BAAkB,oBAAI,IAAG;AACzB,YAAI,OAAO,CAAC,GAAG,qBAAqB,KAAI,CAAE;AAC1C,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,cAAI,UAAU,qBAAqB,IAAI,KAAK,CAAC,CAAC;AAC9C,cAAI,QAAQ,iCAAiC,MAAM,KAAK,UAAU,qDAAqD;AACnH,4BAAgB,IAAI,KAAK,CAAC,GAAG,OAAO;UACxC;QACJ;MACJ;AAEA,UAAI,KAAK,UAAU,6BAA6B,MAAM;AAClD,YAAI,uBAAuB,IAAI,IAAI,eAAe;AAClD,0BAAkB,oBAAI,IAAG;AACzB,YAAI,OAAO,CAAC,GAAG,qBAAqB,KAAI,CAAE;AAC1C,iBAAS,IAAI,GAAG,IAAI,KAAK,UAAU,6BAA6B,IAAI,KAAK,QAAQ,KAAK;AAClF,cAAI,UAAU,qBAAqB,IAAI,KAAK,CAAC,CAAC;AAC9C,0BAAgB,IAAI,KAAK,CAAC,GAAG,OAAO;QACxC;MACJ;AAEA,UAAI,KAAK,UAAU,yBAAyB;AACxC,gBAAQ,MAAK;MACjB;AAEA,UAAI,uBAAuB,oBAAI,IAAG;AAClC,eAAS,OAAO,gBAAgB,KAAI,GAAI;AACpC,YAAI,iBAAiB,gBAAgB,IAAI,GAAG;AAE5C,YAAI,eAAe,CAAA;AACnB,YAAI,KAAK,UAAU,wBAAwB;AACvC,uBAAa,eAAe,eAAe;QAC/C;AAEA,YAAI,KAAK,UAAU,gCAAgC;AAC/C,uBAAa,uBAAuB,eAAe;QACvD;AAEA,YAAI,KAAK,UAAU,0CAA0C;AACzD,uBAAa,iCAAiC,eAAe;QACjE;AAEA,YAAI,KAAK,UAAU,kCAAkC;AACjD,uBAAa,yBAAyB,eAAe;QACzD;AAEA,6BAAqB,IAAI,KAAK,YAAY;MAC9C;AAEA,UAAI,cAAc;AAElB,eAAS,SAAS,gBAAgB,QAAO,GAAI;AACzC,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,UAAU,MAAM,CAAC;AAErB,aAAK,mBAAmB,KAAK,IAAI,KAAK,kBAAkB,KAAK,MAAM;AAEnE,aAAK,yBAAyB,KAAK,IAAI,KAAK,wBAAwB,QAAQ,aAAa,QAAQ,CAAC,EAAE,MAAM;AAC1G,aAAK,iCAAiC,KAAK,IAAI,KAAK,gCAAgC,QAAQ,qBAAqB,QAAQ,CAAC,EAAE,MAAM;AAClI,aAAK,2CAA2C,KAAK,IAAI,KAAK,2CAA2C,QAAQ,iCAAiC,KAAK,QAAQ,CAAC,EAAE,MAAM;AACxK,aAAK,mCAAmC,KAAK,IAAI,KAAK,kCAAkC,QAAQ,uBAAuB,QAAQ,CAAC,EAAE,MAAM;MAC5I;AAEA,eAAS,SAAS,gBAAgB,QAAO,GAAI;AACzC,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,UAAU,MAAM,CAAC;AAErB,YAAI,kBAAkB;AACtB,YAAI,KAAK,UAAU,wBAAwB;AACvC;QACJ;AAEA,YAAI,KAAK,UAAU,gCAAgC;AAC/C;QACJ;AAEA,YAAI,KAAK,UAAU,0CAA0C;AACzD;QACJ;AAEA,YAAI,KAAK,UAAU,kCAAkC;AACjD;QACJ;AAEA,YAAI,cAAc,CAAA;AAElB,YAAI,iBAAmB,kBAAkB,IAAK,kBAAkB;AAChE,YAAI,KAAK,UAAU,aAAa;AAC5B,mBAAS,IAAI,GAAG,IAAI,KAAK,yBAAyB,QAAQ,aAAa,QAAQ,CAAC,EAAE,QAAQ,KAAK;AAC3F,8BAAkB;UACtB;QACJ;AACA,0BAAkB,QAAQ,aAAa,QAAQ,CAAC;AAEhD,YAAI,yBAA2B,kBAAkB,IAAK,iBAAiB;AACvE,YAAI,KAAK,UAAU,aAAa;AAC5B,mBAAS,IAAI,GAAG,IAAI,KAAK,iCAAiC,QAAQ,qBAAqB,QAAQ,CAAC,EAAE,QAAQ,KAAK;AAC3G,sCAA0B;UAC9B;QACJ;AACA,kCAA0B,QAAQ,qBAAqB,QAAQ,CAAC,IAAI;AAEpE,YAAI,mCAAqC,kBAAkB,IAAK,iBAAiB;AACjF,YAAI,KAAK,UAAU,aAAa;AAC5B,mBAAS,IAAI,GAAG,IAAI,KAAK,4CAA4C,QAAQ,iCAAiC,KAAK,QAAQ,CAAC,EAAE,QAAQ,KAAK;AACvI,gDAAoC;UACxC;QACJ;AACA,6CAAqC,QAAQ,iCAAiC,KAAK,QAAQ,CAAC,IAAI;AAEhG,YAAI,2BAA6B,kBAAkB,IAAK,mBAAmB;AAC3E,YAAI,KAAK,UAAU,aAAa;AAC5B,mBAAS,IAAI,GAAG,IAAI,KAAK,mCAAmC,QAAQ,uBAAuB,QAAQ,CAAC,EAAE,QAAQ,KAAK;AAC/G,wCAA4B;UAChC;QACJ;AACA,oCAA4B,QAAQ,uBAAuB,QAAQ,CAAC,IAAI;AAExE,YAAI,CAAC,KAAK,UAAU,wBAAwB;AACxC,2BAAiB;QACrB;AAEA,YAAI,CAAC,KAAK,UAAU,gCAAgC;AAChD,mCAAyB;QAC7B;AAEA,YAAI,CAAC,KAAK,UAAU,0CAA0C;AAC1D,6CAAmC;QACvC;AAEA,YAAI,CAAC,KAAK,UAAU,kCAAkC;AAClD,qCAA2B;QAC/B;AAEA,gBAAQ,KAAK,UAAU,gBAAgB;UACnC,KAAK,2CAA2C;AAC5C,wBAAY,KAAK,cAAc;AAC/B,wBAAY,KAAK,sBAAsB;AACvC,wBAAY,KAAK,gCAAgC;AACjD,wBAAY,KAAK,wBAAwB;AACzC;UACJ,KAAK,2CAA2C;AAC5C,wBAAY,KAAK,sBAAsB;AACvC,wBAAY,KAAK,gCAAgC;AACjD,wBAAY,KAAK,wBAAwB;AACzC,wBAAY,KAAK,cAAc;AAC/B;UACJ,KAAK,2CAA2C;AAC5C,wBAAY,KAAK,wBAAwB;AACzC,wBAAY,KAAK,sBAAsB;AACvC,wBAAY,KAAK,gCAAgC;AACjD,wBAAY,KAAK,cAAc;AAC/B;UACJ;AACI,wBAAY,KAAK,cAAc;AAC/B,wBAAY,KAAK,sBAAsB;AACvC,wBAAY,KAAK,gCAAgC;AACjD,wBAAY,KAAK,wBAAwB;QACjD;AAEA,uBAAe;AACf,YAAI,KAAK,UAAU,aAAa;AAC5B,cAAI,eAAe,OAAO;AAC1B,iBAAO,aAAa,SAAS,KAAK,mBAAmB,GAAG;AACpD,4BAAgB,KAAK,UAAU;UACnC;AACA,0BAAgB,KAAK,UAAU,kCAAkC;AACjE,yBAAe;QACnB,OAAO;AACH,yBAAe,OAAO;QAC1B;AAEA,YAAI,aAAa;AACjB,iBAAS,QAAQ,aAAa;AAC1B,cAAI,QAAQ,MAAM;AACd,gBAAI,YAAY;AACZ,2BAAa;YACjB,OAAO;AACH,6BAAe;YACnB;AAEA,2BAAe;UACnB;QACJ;MACJ;AAEA,UAAK,KAAK,UAAU,kCAAkC,KAAK,UAAU,4CAA4C,KAAK,UAAU,kCAAmC;AAC/J,gBAAQ,KAAK,UAAU,aAAa,EAAE,OAAO,KAAK,UAAU,YAAY,mBAAmB,mBAAmB,QAAQ,CAAC,GAAG,QAAQ,WAAW;MACjJ,OAAO;AACH,gBAAQ,KAAK,UAAU,aAAa,EAAE,OAAO,KAAK,UAAU,YAAY,MAAM,WAAW;MAC7F;IACJ;EACJ;;;;ACjRJ,SAAS,aAAAI,aAAW,YAAAC,kBAAgB;AAO9B,IAAO,6CAAP,cAA0DC,YAAS;EACrE,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,kBAAkBC,WAAS,OAAO,EAAE;IACpC,kBAAkBA,WAAS,OAAO,EAAE;IACpC,oBAAoBA,WAAS,OAAO,EAAE;IACtC,eAAeA,WAAS,MAAM,CAAG;IACjC,aAAaA,WAAS,OAAO,wCAAwC;IACrE,gBAAgBA,WAAS,KAAK,CAAC,OAAO,SAAS,QAAQ,OAAO,GAAG,OAAO;IACxE,uBAAuBA,WAAS,MAAM,CAAG;IACzC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,iBAAiBA,WAAS,KAAK,CAAC,QAAQ,eAAe,wBAAwB,wBAAwB,GAAG,aAAa;IACvH,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,iCAAiCA,WAAS,KAAK,KAAK;IACpD,2CAA2CA,WAAS,KAAK,KAAK;IAC9D,mCAAmCA,WAAS,KAAK,KAAK;IACtD,4BAA4BA,WAAS,IAAI,EAAE;IAC3C,oCAAoCA,WAAS,IAAI,CAAC;IAClD,sDAAsDA,WAAS,MAAM,EAAE;IACvE,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,wBAAwBA,WAAS,KAAK,KAAK;IAC3C,6BAA6BA,WAAS,KAAK,IAAI;IAC/C,8BAA8BA,WAAS,KAAK,IAAI;IAChD,yCAAyCA,WAAS,IAAI,CAAC;IACvD,wCAAwCA,WAAS,IAAI,CAAC;IACtD,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,mCAAmCA,WAAS,KAAK,KAAK;IACtD,uBAAuBA,WAAS,KAAK,CAAC,aAAa,GAAG,aAAa;IACnE,uBAAuBA,WAAS,KAAK,CAAC,aAAa,GAAG,aAAa;;EAGvE,OAAI;AACA,SAAK,YAAY;AAEjB,QAAI,QAAQ,eAAe,KAAK,MAAM,GAAG;AACrC,WAAK,YAAY;AAEjB,WAAK,kCAAkC;AACvC,WAAK,+CAA+C;AAEpD,WAAK,qBAAqB;AAC1B,WAAK,gBAAgB,IAAI,MAAM,KAAK,aAAa;AACjD,UAAI,KAAK,iBAAiB,GAAG;AACzB,aAAK,cAAc,IAAG;AACtB,aAAK,qBAAqB;AAC1B,aAAK,OAAM;MACf;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,WAAW;AAChB,UAAI,KAAK,oBAAoB;AACzB,aAAK,qBAAqB;AAC1B;MACJ;AAEA,UAAI,KAAK,cAAc,UAAS,GAAI;AAChC,aAAK,cAAc,OAAO,EAAE;AAC5B,YAAI,KAAK,cAAc,OAAM,GAAI;AAC7B,eAAK,OAAM;QACf;MACJ,OAAO;AACH,aAAK,6CAA6C,OAAO,EAAE;AAC3D,aAAK,gCAAgC,aAAY;MACrD;AAEA,UAAI,KAAK,mCAAmC;AACxC,YAAI,QAAQ,eAAe,KAAK,MAAM,EAAE,cAAc,gBAAgB,MAAM,EAAE,WAAW,CAAC,GAAG;AACzF,eAAK,gCAAgC,gBAAe;QACxD;MACJ;IACJ;EACJ;EAEA,SAAM;AACF,QAAI,qCAAqC,IAAI,wCAAwC,KAAK,MAAM;AAEhG,QAAI,KAAK,iBAAiB,SAAS,GAAG;AAClC,UAAI,gBAAgB,CAAC,GAAG,KAAK,iBAAiB,MAAM,GAAG,CAAC;AACxD,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,sBAAc,CAAC,IAAI,cAAc,CAAC,EAAE,KAAI;MAC5C;AACA,yCAAmC,gBAAgB,KAAK,GAAG,aAAa;IAC5E;AAEA,QAAI,KAAK,iBAAiB,SAAS,GAAG;AAClC,UAAI,gBAAgB,CAAC,GAAG,KAAK,iBAAiB,MAAM,GAAG,CAAC;AACxD,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,sBAAc,CAAC,IAAI,cAAc,CAAC,EAAE,KAAI;MAC5C;AACA,yCAAmC,gBAAgB,KAAK,GAAG,aAAa;IAC5E;AAEA,QAAI,KAAK,mBAAmB,SAAS,GAAG;AACpC,UAAI,gBAAgB,CAAC,GAAG,KAAK,mBAAmB,MAAM,GAAG,CAAC;AAC1D,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,sBAAc,CAAC,IAAI,cAAc,CAAC,EAAE,KAAI;MAC5C;AACA,yCAAmC,kBAAkB,KAAK,GAAG,aAAa;IAC9E;AAEA,uCAAmC,wBAAwB,KAAK;AAChE,uCAAmC,6BAA6B,KAAK;AACrE,uCAAmC,8BAA8B,KAAK;AAEtE,QAAI,KAAK,0BAA0B,SAAS,GAAG;AAC3C,UAAI,gBAAgB,CAAC,GAAG,KAAK,0BAA0B,MAAM,GAAG,CAAC;AACjE,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,sBAAc,CAAC,IAAI,cAAc,CAAC,EAAE,KAAI;MAC5C;AACA,yCAAmC,yBAAyB,KAAK,GAAG,aAAa;IACrF;AAEA,QAAI,KAAK,0BAA0B,SAAS,GAAG;AAC3C,UAAI,gBAAgB,CAAC,GAAG,KAAK,0BAA0B,MAAM,GAAG,CAAC;AACjE,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,sBAAc,CAAC,IAAI,cAAc,CAAC,EAAE,KAAI;MAC5C;AACA,yCAAmC,yBAAyB,KAAK,GAAG,aAAa;IACrF;AAEA,uCAAmC,yCAAyC,KAAK;AACjF,uCAAmC,wCAAwC,KAAK;AAEhF,uCAAmC,iCAAiC,KAAK,mCAAmC,KAAK,6CAA6C,KAAK;AAEnK,uCAAmC,uBAAwB,KAAK,yBAAyB,IAAK,KAAK,wBAAwB,CAAA;AAC3H,uCAAmC,uBAAwB,KAAK,yBAAyB,IAAK,KAAK,wBAAwB,CAAA;AAE3H,SAAK,kCAAkC,IAAI,kCAAkC,kCAAkC;AAC/G,SAAK,gCAAgC,mBAAkB;AAEvD,QAAI,kDAAkD,IAAI,qDAAoD;AAC9G,oDAAgD,wBAAwB,KAAK;AAC7E,oDAAgD,aAAa,KAAK;AAElE,oDAAgD,uBAAuB,KAAK;AAC5E,oDAAgD,gBAAgB,CAAC,OAAO,SAAS,QAAQ,OAAO,EAAE,KAAK,cAAc;AACrH,oDAAgD,4BAA6B,KAAK,8BAA8B,IAAK,KAAK,6BAA6B;AACvJ,oDAAgD,oCAAqC,KAAK,sCAAsC,IAAK,KAAK,qCAAqC;AAC/K,oDAAgD,sDAAuD,KAAK,wDAAwD,IAAK,KAAK,uDAAuD;AACrO,oDAAgD,kBAAkB,KAAK;AACvE,oDAAgD,0BAA0B,KAAK;AAE/E,oDAAgD,iBAAiB,KAAK;AAEtE,oDAAgD,yBAAyB,KAAK;AAC9E,oDAAgD,iCAAiC,KAAK;AACtF,oDAAgD,2CAA2C,KAAK;AAChG,oDAAgD,mCAAmC,KAAK;AAExF,SAAK,+CAA+C,IAAI,+CAA+C,+CAA+C;EAC1J;;;;ACjKJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAG9B,IAAO,+CAAP,cAA4DC,YAAS;EACvE,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,MAAM,CAAG;IACjC,gBAAgBA,WAAS,KAAK,CAAC,OAAO,SAAS,QAAQ,OAAO,GAAG,OAAO;IACxE,uBAAuBA,WAAS,MAAM,CAAG;IACzC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,iBAAiBA,WAAS,KAAK,CAAC,QAAQ,eAAe,wBAAwB,wBAAwB,GAAG,aAAa;IACvH,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,iCAAiCA,WAAS,KAAK,KAAK;IACpD,2CAA2CA,WAAS,KAAK,KAAK;IAC9D,mCAAmCA,WAAS,KAAK,KAAK;IACtD,4BAA4BA,WAAS,IAAI,EAAE;IAC3C,oCAAoCA,WAAS,IAAI,CAAC;IAClD,sDAAsDA,WAAS,MAAM,EAAE;IACvE,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,wBAAwBA,WAAS,KAAK,KAAK;IAC3C,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,mCAAmCA,WAAS,KAAK,KAAK;;EAG1D,OAAI;AACA,SAAK,OAAO,gBAAgB,4CAA4C;MACpE,kBAAkB;MAClB,eAAe,KAAK;MACpB,aAAa;MACb,gBAAgB,KAAK;MACrB,uBAAuB,KAAK;MAC5B,kBAAkB,KAAK;MACvB,iBAAiB,KAAK;MACtB,4BAA4B,KAAK;MACjC,oCAAoC,KAAK;MACzC,sDAAsD,KAAK;MAC3D,yBAAyB,KAAK;MAC9B,iCAAiC,KAAK;MACtC,2CAA2C,KAAK;MAChD,mCAAmC,KAAK;MACxC,2BAA2B,KAAK;MAChC,2BAA2B,KAAK;MAChC,wBAAwB,KAAK;MAC7B,6BAA6B;MAC7B,8BAA8B;MAC9B,yCAAyC;MACzC,wCAAwC;MACxC,0BAA0B,KAAK;MAC/B,mCAAmC,KAAK;KAC3C;EACL;;;;AClDJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAG9B,IAAO,kDAAP,cAA+DC,YAAS;EAC1E,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,8BAA8BC,WAAS,KAAK,IAAI;IAChD,uCAAuCA,WAAS,KAAK,KAAK;IAC1D,eAAeA,WAAS,MAAM,CAAG;IACjC,gBAAgBA,WAAS,KAAK,CAAC,OAAO,SAAS,QAAQ,OAAO,GAAG,OAAO;IACxE,uBAAuBA,WAAS,MAAM,CAAG;IACzC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,iBAAiBA,WAAS,KAAK,CAAC,QAAQ,eAAe,wBAAwB,wBAAwB,GAAG,aAAa;IACvH,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,iCAAiCA,WAAS,KAAK,KAAK;IACpD,2CAA2CA,WAAS,KAAK,KAAK;IAC9D,mCAAmCA,WAAS,KAAK,KAAK;IACtD,4BAA4BA,WAAS,IAAI,EAAE;IAC3C,oCAAoCA,WAAS,IAAI,CAAC;IAClD,sDAAsDA,WAAS,MAAM,EAAE;IACvE,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,wBAAwBA,WAAS,KAAK,KAAK;IAC3C,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,mCAAmCA,WAAS,KAAK,KAAK;;EAG1D,OAAI;AACA,QAAI,gBAAgB;AACpB,QAAI,KAAK,8BAA8B;AACnC,sBAAgB;IACpB;AAEA,SAAK,OAAO,gBAAgB,4CAA4C;MACpE,kBAAkB;MAClB,eAAe,KAAK;MACpB,aAAa;MACb,gBAAgB,KAAK;MACrB,uBAAuB,KAAK;MAC5B,kBAAkB,KAAK;MACvB,iBAAiB,KAAK;MACtB,4BAA4B,KAAK;MACjC,oCAAoC,KAAK;MACzC,sDAAsD,KAAK;MAC3D,yBAAyB,KAAK;MAC9B,iCAAiC,KAAK;MACtC,2CAA2C,KAAK;MAChD,mCAAmC,KAAK;MACxC,2BAA2B,KAAK,6BAA6B,KAAK,0BAA0B,SAAS,KAAK,KAAK,wCAAwC,OAAO,OAAO,KAAK,wCAAwC,qFAAqF;MACvS,2BAA2B,KAAK;MAChC,wBAAwB,KAAK;MAC7B,6BAA6B;MAC7B,8BAA8B;MAC9B,0BAA0B,KAAK;MAC/B,mCAAmC,KAAK;KAC3C;EACL;;;;ACzDJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAU9B,IAAO,mDAAP,cAAgEC,YAAS;EAC3E,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,MAAM,CAAG;IACjC,gBAAgBA,WAAS,KAAK,CAAC,OAAO,SAAS,QAAQ,OAAO,GAAG,OAAO;IACxE,uBAAuBA,WAAS,MAAM,CAAG;IACzC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,iBAAiBA,WAAS,KAAK,CAAC,QAAQ,eAAe,wBAAwB,wBAAwB,GAAG,aAAa;IACvH,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,iCAAiCA,WAAS,KAAK,KAAK;IACpD,2CAA2CA,WAAS,KAAK,KAAK;IAC9D,mCAAmCA,WAAS,KAAK,KAAK;IACtD,4BAA4BA,WAAS,IAAI,EAAE;IAC3C,oCAAoCA,WAAS,IAAI,CAAC;IAClD,sDAAsDA,WAAS,MAAM,EAAE;IACvE,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,mCAAmCA,WAAS,KAAK,KAAK;;EAG1D,OAAI;AACA,SAAK,OAAO,gBAAgB,4CAA4C;MACpE,uBAAuB;QACnB,CAAC,WAAW,WAAW;QACvB,CAAC,WAAW,WAAW;QACvB,CAAC,WAAW,WAAW;QACvB,CAAC,WAAW,WAAW;QACvB,CAAC,YAAY,YAAY;QACzB,CAAC,WAAW,WAAW;QACvB,CAAC,WAAW,WAAW;;MAE3B,eAAe,KAAK;MACpB,aAAa;MACb,gBAAgB,KAAK;MACrB,uBAAuB,KAAK;MAC5B,kBAAkB,KAAK;MACvB,iBAAiB,KAAK;MACtB,4BAA4B,KAAK;MACjC,oCAAoC,KAAK;MACzC,sDAAsD,KAAK;MAC3D,yBAAyB,KAAK;MAC9B,iCAAiC,KAAK;MACtC,2CAA2C,KAAK;MAChD,mCAAmC,KAAK;MACxC,2BAA2B;MAC3B,wBAAwB;MACxB,6BAA6B;MAC7B,8BAA8B;MAC9B,0BAA0B,KAAK;MAC/B,mCAAmC,KAAK;KAC3C;EACL;;;;AC5DJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAG9B,IAAO,+CAAP,cAA4DC,YAAS;EACvE,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,MAAM,CAAG;IACjC,gBAAgBA,WAAS,KAAK,CAAC,OAAO,SAAS,QAAQ,OAAO,GAAG,OAAO;IACxE,uBAAuBA,WAAS,MAAM,CAAG;IACzC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,iBAAiBA,WAAS,KAAK,CAAC,QAAQ,eAAe,wBAAwB,wBAAwB,GAAG,aAAa;IACvH,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,iCAAiCA,WAAS,KAAK,KAAK;IACpD,2CAA2CA,WAAS,KAAK,KAAK;IAC9D,mCAAmCA,WAAS,KAAK,KAAK;IACtD,4BAA4BA,WAAS,IAAI,EAAE;IAC3C,oCAAoCA,WAAS,IAAI,CAAC;IAClD,sDAAsDA,WAAS,MAAM,EAAE;IACvE,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,wBAAwBA,WAAS,KAAK,KAAK;IAC3C,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,mCAAmCA,WAAS,KAAK,KAAK;;EAG1D,OAAI;AACA,SAAK,OAAO,gBAAgB,4CAA4C;MACpE,kBAAkB;MAClB,eAAe,KAAK;MACpB,aAAa;MACb,gBAAgB,KAAK;MACrB,uBAAuB,KAAK;MAC5B,kBAAkB,KAAK;MACvB,iBAAiB,KAAK;MACtB,4BAA4B,KAAK;MACjC,oCAAoC,KAAK;MACzC,sDAAsD,KAAK;MAC3D,yBAAyB,KAAK;MAC9B,iCAAiC,KAAK;MACtC,2CAA2C,KAAK;MAChD,mCAAmC,KAAK;MACxC,2BAA2B,KAAK;MAChC,2BAA2B,KAAK;MAChC,wBAAwB,KAAK;MAC7B,6BAA6B;MAC7B,8BAA8B;MAC9B,yCAAyC;MACzC,wCAAwC;MACxC,0BAA0B,KAAK;MAC/B,mCAAmC,KAAK;KAC3C;EACL;;;;ACnDJ,SAAS,sBAAAC,qBAAoB,sBAAAC,qBAAoB,aAAAC,aAAW,kBAAAC,iBAAgB,kBAAAC,iBAAgB,iBAAAC,gBAAe,kBAAAC,iBAAgB,YAAAC,YAAU,iBAAAC,gBAAe,iBAAAC,sBAAqB;AAKnK,IAAO,yDAAP,cAAsEC,YAAS;EACjF,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,0BAA0BC,WAAS,KAAK,IAAI;IAC5C,8BAA8BA,WAAS,KAAK,KAAK;IACjD,wBAAwBA,WAAS,KAAK,CAAC,aAAa,eAAe,yBAAyB,GAAG,yBAAyB;IACxH,eAAeA,WAAS,MAAM,CAAG;IACjC,gBAAgBA,WAAS,KAAK,CAAC,OAAO,SAAS,QAAQ,OAAO,GAAG,OAAO;IACxE,uBAAuBA,WAAS,MAAM,CAAG;IACzC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,iBAAiBA,WAAS,KAAK,CAAC,QAAQ,eAAe,wBAAwB,wBAAwB,GAAG,aAAa;IACvH,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,iCAAiCA,WAAS,KAAK,KAAK;IACpD,2CAA2CA,WAAS,KAAK,KAAK;IAC9D,mCAAmCA,WAAS,KAAK,KAAK;IACtD,4BAA4BA,WAAS,IAAI,EAAE;IAC3C,oCAAoCA,WAAS,IAAI,CAAC;IAClD,sDAAsDA,WAAS,MAAM,EAAE;IACvE,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,2BAA2BA,WAAS,OAAO,EAAE;IAC7C,wBAAwBA,WAAS,KAAK,KAAK;IAC3C,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,mCAAmCA,WAAS,KAAK,KAAK;;EAG1D,OAAI;AACA,SAAK,gBAAgB,IAAI,MAAM,KAAK,aAAa;AACjD,QAAI,KAAK,iBAAiB,GAAG;AACzB,WAAK,cAAc,IAAG;AACtB,WAAK,OAAM;IACf;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,cAAc,UAAS,GAAI;AAChC,WAAK,cAAc,OAAO,EAAE;AAC5B,UAAI,KAAK,cAAc,OAAM,GAAI;AAC7B,aAAK,OAAM;MACf;IACJ;EACJ;EAEA,SAAM;AAEF,QAAI,qBAAqB,CAAA;AACzB,QAAI,qBAAqB,CAAA;AAEzB,QAAI,KAAK,8BAA8B;AACnC,WAAK,gCAAgC,kBAAkB;IAC3D;AAEA,QAAI,KAAK,0BAA0B;AAC/B,WAAK,4BAA4B,kBAAkB;IACvD;AAEA,SAAK,uBAAuB,KAAK,OAAO,gBAAgB,4CAA4C;MAChG,uBAAuB;MACvB,uBAAuB;MACvB,eAAe;MACf,aAAa;MACb,gBAAgB,KAAK;MACrB,uBAAuB,KAAK;MAC5B,kBAAkB,KAAK;MACvB,iBAAiB,KAAK;MACtB,4BAA4B,KAAK;MACjC,oCAAoC,KAAK;MACzC,sDAAsD,KAAK;MAC3D,yBAAyB,KAAK;MAC9B,iCAAiC,KAAK;MACtC,2CAA2C,KAAK;MAChD,mCAAmC,KAAK;MACxC,2BAA2B,KAAK;MAChC,2BAA2B,KAAK;MAChC,wBAAwB,KAAK;MAC7B,6BAA6B;MAC7B,8BAA8B;MAC9B,wCAAwC;MACxC,0BAA0B,KAAK;MAC/B,mCAAmC,KAAK;KAC3C;EACL;EAEA,4BAA4B,oBAAkB;AAC1C,QAAI,yBAAyB;MACzBC;MACAC;MACAC;MACAC;MACAC;MACAC;MACAC;MACAC;;AAGJ,aAAS,wBAAwB,wBAAwB;AACrD,yBAAmB,KAAK,CAAC,qBAAqB,WAAW,OAAQ,qBAAqB,WAAW,IAAK,CAAC;IAC3G;AAEA,aAAS,kBAAkB,eAAe,qCAAqC,KAAK,MAAM,GAAG;AACzF,yBAAmB,KAAK,CAAC,eAAe,WAAW,OAAQ,eAAe,WAAW,IAAK,CAAC;IAC/F;EACJ;EAEA,gCAAgC,oBAAkB;AAG9C,aAAS,qBAAqB,eAAe,gCAAgC,KAAK,MAAM,GAAG;AACvF,UAAI,KAAK;AAET,cAAQ,KAAK,wBAAwB;QACjC,KAAK;AACD,eAAK,kBAAkB,OAAO,SAAQ;AACtC;QACJ,KAAK;AACD,eAAK,kBAAkB,OAAO,WAAU;AACxC;QACJ,KAAK;AACD,eAAK,kBAAkB,OAAO,SAAQ;AACtC,cAAI,kBAAkB,OAAO,WAAU,EAAG,SAAS,GAAG;AAClD,iBAAK,KAAK,QAAQ,kBAAkB,OAAO,WAAU;UACzD;AACA;MACR;AAEA,yBAAmB,KAAK;QAAC;QACrB,OAAQ,kBAAkB,OAAO,QAAS,KAAK;MAAG,CAAC;IAC3D;EACJ;;;;AClIE,IAAO,iCAAP,MAAqC;EAEvC,cAAA;AACI,SAAK,uBAAuB;AAC5B,SAAK,qBAAqB;AAE1B,SAAK,yBAAyB;AAC9B,SAAK,uBAAuB;AAE5B,SAAK,4BAA4B;AACjC,SAAK,0BAA0B;AAE/B,SAAK,2BAA2B;AAChC,SAAK,6BAA6B;AAClC,SAAK,yBAAyB;AAC9B,SAAK,2BAA2B;AAGhC,SAAK,+BAA+B;AACpC,SAAK,6BAA6B;AAClC,SAAK,6CAA6C;AAClD,SAAK,2CAA2C;AAEhD,SAAK,gCAAgC;AACrC,SAAK,8BAA8B;AAEnC,SAAK,8DAA8D;AACnE,SAAK,4DAA4D;EACrE;;AAGE,IAAO,2BAAP,MAA+B;EAEjC,YAAY,SAAS,IAAI,+BAA8B,GAAE;AACrD,SAAK,YAAY;AAEjB,SAAK,mBAAmB,KAAK,UAAU;AACvC,SAAK,iBAAiB,KAAK,UAAU;AAErC,SAAK,6BAA6B,YAAW;AAC7C,SAAK,kCAAkC;AAEvC,SAAK,0BAA0B,YAAW;AAC1C,SAAK,wBAAwB,YAAW;EAC5C;;;;EAKA,QAAQ,aAAa,qBAAqB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;AAC1F,WAAO,KAAK,iBAAiB,aAAa,qBAAqB,eAAe,cAAc;EAChG;EAEA,WAAQ;AACJ,WAAO,KAAK,oBAAoB,KAAK;EACzC;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,gBAAa;AACT,WAAO,KAAK;EAChB;EAEA,cAAW;AACP,SAAK,mBAAmB;AACxB,SAAK,iBAAiB;EAC1B;EAEA,qBAAkB;AACd,SAAK,mBAAmB;EAC5B;EAEA,mBAAgB;AACZ,SAAK,iBAAiB;EAC1B;EAEA,aAAU;AACN,SAAK,mBAAmB;AACxB,SAAK,iBAAiB;EAC1B;EAEA,oBAAiB;AACb,SAAK,mBAAmB;EAC5B;EAEA,kBAAe;AACX,SAAK,iBAAiB;EAC1B;EAEA,WAAQ;AACJ,SAAK,gBAAe;AACpB,SAAK,cAAa;EACtB;EAEA,kBAAe;AACX,QAAI,KAAK,UAAU,sBAAsB;AACrC,WAAK,mBAAkB;IAC3B,OAAO;AACH,WAAK,kBAAiB;IAC1B;EACJ;EAEA,gBAAa;AACT,QAAI,KAAK,UAAU,oBAAoB;AACnC,WAAK,iBAAgB;IACzB,OAAO;AACH,WAAK,gBAAe;IACxB;EACJ;EAEA,+BAA4B;AACxB,SAAK,wBAAwB,UAAS;AACtC,SAAK,sBAAsB,UAAS;EACxC;EAEA,4BAAyB;AACrB,SAAK,wBAAwB,UAAS;EAC1C;EAEA,0BAAuB;AACnB,SAAK,sBAAsB,UAAS;EACxC;EAEA,4BAAyB;AACrB,SAAK,kCAAkC;AACvC,SAAK,2BAA2B,cAAa;EACjD;;;;EAMA,eAAe,aAAa,mBAAmB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;EAEnG;;;;EAKA,iBAAiB,aAAa,qBAAqB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;AACnG,WAAO,KAAK,uBAAuB,aAAa,qBAAqB,eAAe,cAAc;EACtG;EAEA,uBAAuB,aAAa,2BAA2B,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;EAEnH;EAEA,qBAAqB,aAAa,yBAAyB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;EAE/G;EAEA,oBAAoB,aAAa,wBAAwB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;EAE7G;;AAGJ,yBAAyB,UAAU,iBAAiB,WAAA;AAChD,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,eAAe,aAAa,mBAAmB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;AAC/G,iBAAa,cAAa;AAC1B,iBAAa,gBAAgB,mBAAmB,aAAa;AAC7D,WAAO,KAAK,oBAAoB,aAAa,cAAc,eAAe,cAAc;EAC5F;AACJ,EAAC;AAED,yBAAyB,UAAU,yBAAyB,WAAA;AACxD,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,uBAAuB,aAAa,2BAA2B,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;AAC/H,mBAAe,0BAA0B,qBAAqB,YAAY;AAC1E,WAAO,KAAK,oBAAoB,aAAa,cAAc,eAAe,cAAc;EAC5F;AACJ,EAAC;AAED,yBAAyB,UAAU,uBAAuB,WAAA;AACtD,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,qBAAqB,aAAa,yBAAyB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;AAC3H,mBAAe,wBAAwB,sBAAsB,YAAY;AACzE,WAAO,KAAK,oBAAoB,aAAa,cAAc,eAAe,cAAc;EAC5F;AACJ,EAAC;AAED,yBAAyB,UAAU,sBAAsB,WAAA;AACrD,MAAI,UAAU,YAAW;AACzB,MAAI,QAAQ,YAAW;AACvB,MAAI,KAAK,YAAW;AACpB,MAAI,sBAAsB,YAAW;AACrC,MAAI,gBAAgB,YAAW;AAC/B,MAAI,cAAc,YAAW;AAC7B,MAAI,8BAA8B,YAAW;AAC7C,SAAO,SAAS,oBAAoB,aAAa,wBAAwB,gBAAgB,MAAM,iBAAiB,YAAW,GAAE;AACzH,mBAAe,UAAS;AAExB,QAAI,KAAK,UAAU,+DAA+D,KAAK,UAAU,2DAA2D;AACxJ,UAAI,iBAAiB,MAAM;AACvB,YAAI,KAAK,iCAAiC;AACtC,wCAA8B,KAAK,2BAA2B,oBAAoB,wBAAwB,2BAA2B,EACjI,4BAA4B,eAAe,2BAA2B;AAC1E,cAAI,KAAK,cAAc,4BAA4B,cAAa,GAAI,IAAI,IAAI,KAAK,oBAAoB;AACjG,gBAAI,KAAK,UAAU,6DAA6D;AAC5E,mBAAK,wBAAwB,gBAAgB,6BAA6B,KAAK,uBAAuB;YAC1G;AAEA,gBAAI,KAAK,UAAU,2DAA2D;AAC1E,mBAAK,sBAAsB,gBAAgB,6BAA6B,KAAK,qBAAqB;YACtG;UACJ;QACJ;MACJ;IACJ;AAEA,QAAI,YAAY,YAAW,GAAI;AAC3B,UAAI,kBAAkB,KAAK,UAAU,0BAA0B,KAAK,UAAU;AAC9E,UAAI,iBAAiB;AACjB,aAAK,gBAAe;MACxB;AAEA,UAAI,gBAAgB,KAAK,UAAU,wBAAwB,KAAK,UAAU;AAC1E,UAAI,eAAe;AACf,aAAK,cAAa;MACtB;IACJ,OAAO;AAEH,gBAAU,uBAAuB,gBAAgB,OAAO;AACxD,cAAQ,uBAAuB,cAAc,KAAK;AAClD,WAAK,uBAAuB,WAAW,EAAE;AAEzC,UAAI,iBAAiB,MAAM;AACvB,YAAI,aAAa,CAAC,cAAc,kBAAkB,EAAE;AAEpD,8BAAsB,cAAc,YAAY,mBAAmB;AAGnE,YAAI,KAAK,UAAU,wBAAwB;AACvC,cAAI,8BAA8B,QAAQ,WAAW,aAAa;AAClE,eAAK,mBAAmB,KAAK,qBACxB,8BAA8B,KAAK,KAAK,UAAU,4BAA4B,8BAA8B,KAAK,KAAK,UAAU;QACzI;AAEA,YAAI,KAAK,UAAU,sBAAsB;AACrC,cAAI,4BAA4B,MAAM,WAAW,aAAa;AAC9D,eAAK,iBAAiB,KAAK,mBACtB,4BAA4B,KAAK,KAAK,UAAU,0BAA0B,4BAA4B,KAAK,KAAK,UAAU;QACnI;AAGA,YAAI,CAAC,KAAK,kBAAkB;AAExB,cAAI,KAAK,UAAU,gCAAgC,CAAC,KAAK,wBAAwB,YAAY,KAAK,UAAU,MACvG,QAAQ,WAAW,aAAa,IAAI,KAAK,UAAU,8CAChD,QAAQ,WAAW,mBAAmB,IAAI,KAAK,UAAU,6CAA6C;AAC1G,oBAAQ,QAAQ,KAAK,uBAAuB;UAChD,WAAW,cAAc,KAAK,UAAU,+BAA+B;AACnE,oBAAQ,YAAY,OAAO;UAC/B;AAEA,oBAAU,QAAQ,8BAA8B,eAAe,OAAO;AACtE,kBAAQ,eAAe,OAAO;AAG9B,cAAI,QAAQ,YAAY,KAAK,UAAU,GAAG;AACtC,gBAAI,CAAC,KAAK,wBAAwB,YAAY,KAAK,UAAU,GAAG;AAC5D,sBAAQ,QAAQ,KAAK,uBAAuB;YAChD,OAAO;AACH,sBAAQ,SAAS,GAAG,GAAG,CAAC;YAC5B;UACJ;QACJ;AAEA,YAAI,CAAC,KAAK,gBAAgB;AAEtB,cAAI,KAAK,UAAU,8BAA8B,CAAC,KAAK,sBAAsB,YAAY,KAAK,UAAU,MACnG,MAAM,WAAW,aAAa,IAAI,KAAK,UAAU,4CAC9C,MAAM,WAAW,mBAAmB,IAAI,KAAK,UAAU,2CAA2C;AACtG,kBAAM,QAAQ,KAAK,qBAAqB;UAC5C,WAAW,cAAc,KAAK,UAAU,6BAA6B;AACjE,kBAAM,YAAY,KAAK;UAC3B;AAEA,kBAAQ,MAAM,8BAA8B,eAAe,KAAK;AAChE,gBAAM,eAAe,KAAK;AAE1B,cAAI,MAAM,YAAY,KAAK,UAAU,GAAG;AACpC,gBAAI,CAAC,KAAK,sBAAsB,YAAY,KAAK,UAAU,GAAG;AAC1D,oBAAM,QAAQ,KAAK,qBAAqB;YAC5C,OAAO;AACH,oBAAM,SAAS,IAAI,GAAG,CAAC;YAC3B;UACJ;QACJ;AAGA,YAAK,QAAQ,WAAW,aAAa,KAAK,KAAK,UAAU,8CAA8C,QAAQ,WAAW,mBAAmB,KAAK,KAAK,UAAU,8CAC5J,YAAY,CAAC,KAAK,KAAK,KAAK,wBAAwB,YAAY,KAAK,UAAU,GAAI;AACpF,eAAK,0BAA0B,QAAQ,8BAA8B,eAAe,KAAK,uBAAuB;AAChH,eAAK,wBAAwB,eAAe,KAAK,uBAAuB;QAC5E;AAEA,YAAK,MAAM,WAAW,aAAa,KAAK,KAAK,UAAU,4CAA4C,MAAM,WAAW,mBAAmB,KAAK,KAAK,UAAU,4CACtJ,YAAY,CAAC,KAAK,KAAK,KAAK,sBAAsB,YAAY,KAAK,UAAU,GAAI;AAClF,eAAK,wBAAwB,MAAM,8BAA8B,eAAe,KAAK,qBAAqB;AAC1G,eAAK,sBAAsB,eAAe,KAAK,qBAAqB;QACxE;MACJ;AAGA,uBAAiB,MAAM,WAAW,YAAY,CAAC,GAAG,WAAW,EAAE,SAAS,QAAQ,WAAW,YAAY,CAAC,GAAG,aAAa,GAAG,cAAc;AAEzI,UAAI,iBAAiB,QAAQ,CAAC,KAAK,oBAAoB,CAAC,KAAK,gBAAgB;AACzE,yBAAiB,eAAe,8BAA8B,eAAe,cAAc;MAC/F;AAEA,qBAAe,eAAe,cAAc;IAChD;AAEA,SAAK,2BAA2B,UAAU,sBAAsB;AAChE,SAAK,kCAAkC;AAEvC,WAAO;EACX;AACJ,EAAC;;;AC9TK,IAAO,mBAAP,MAAuB;EAEjB;EACA;EAEA;EACA;EAEA;EAEA;;EAER,YAAY,YAAoB,WAAmB,YAAY,aAAqB,GAAG,WAAmB,GAAG,iBAAiC,eAAe,QAAQ,mBAA4C,MAAI;AACjN,SAAK,gBAAgB;AACrB,SAAK,cAAc;AAEnB,SAAK,gBAAgB;AACrB,SAAK,cAAc;AAEnB,SAAK,oBAAoB;AAEzB,SAAK,sBAAsB;EAC/B;EAEA,IAAI,QAAc;AACd,UAAM,sBAAsB,KAAK,kBAAkB,KAAK,cAAc,QAAQ,KAAK,eAAe,KAAK,aAAa,GAAG,CAAC,CAAC;AACzH,QAAI,mBAAmB,KAAK,QAAQ,KAAK,eAAe,KAAK,aAAa,mBAAmB;AAE7F,QAAI,KAAK,uBAAuB,MAAM;AAClC,yBAAmB,KAAK,oBAAoB,kBAAkB,KAAK,eAAe,KAAK,WAAW;IACtG;AAEA,WAAO;EACX;EAEA,WAAW,QAAc;AACrB,WAAO,KAAK,IAAI,MAAM;EAC1B;EAEA,SAAS,QAAc;AACnB,UAAM,mBAAmB,KAAK,IAAI,MAAM;AACxC,WAAO,CAAC,kBAAkB,gBAAgB;EAC9C;EAEA,OAAO,QAAc;AACjB,WAAO,KAAK,IAAI,MAAM;EAC1B;EAEA,OAAO,QAAc;AACjB,WAAO,KAAK,IAAI,MAAM;EAC1B;EAEA,SAAS,QAAgB,QAAc;AACnC,UAAM,mBAAmB,KAAK,IAAI,MAAM;AAExC,WAAO,oBAAoB;EAC/B;EAEA,mBAAmB,QAAgB,QAAc;AAC7C,WAAO,KAAK,0BAA0B,QAAQ,MAAM;EACxD;EAEA,0BAA0B,QAAgB,QAAc;AACpD,UAAM,mBAAmB,KAAK,IAAI,MAAM;AAExC,UAAM,gBAAgB,KAAK,qBAAqB,MAAM;AACtD,UAAM,0BAA0B,KAAK,qBAAqB,gBAAgB;AAE1E,WAAO,iBAAiB;EAC5B;EAEA,0BAA0B,QAAgB,QAAc;AACpD,UAAM,mBAAmB,KAAK,IAAI,MAAM;AAExC,UAAM,gBAAgB,KAAK,qBAAqB,MAAM;AACtD,UAAM,0BAA0B,KAAK,qBAAqB,gBAAgB;AAE1E,WAAO,iBAAiB;EAC5B;;AAGE,IAAO,gBAAP,cAA6B,iBAAgB;EAE/C,YAAY,YAAoB,WAAmB,YAAY,aAAqB,GAAG,WAAmB,GAAG,iBAAiC,eAAe,QAAQ,mBAA4C,MAAI;AACjN,QAAI,oBAAoB,MAAM;AAC1B,yBAAmB,SAAU,eAAuBC,aAAoBC,WAAgB;AACpF,YAAI,gBAAgB;AAEpB,cAAM,WAAWD,eAAcC;AAC/B,YAAI,UAAU;AACV,0BAAgB,KAAK,MAAM,aAAa;QAC5C,OAAO;AACH,0BAAgB,KAAK,KAAK,aAAa;QAC3C;AAEA,eAAO;MACX;IACJ;AAEA,UAAM,YAAY,UAAU,YAAY,UAAU,gBAAgB,gBAAgB;EACtF;;AAIE,IAAO,wBAAP,MAA4B;EAEtB;EACA;EAEA;;EAER,YAAY,WAA6B,UAA4B,WAAW,aAAqB,GAAG,WAAmB,GAAG,iBAAiB,eAAe,QAAQ,mBAA4C,MAAI;AAElN,SAAK,0BAA0B,IAAI,iBAAiB,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,YAAY,UAAU,gBAAgB,gBAAgB;AACpI,SAAK,wBAAwB,IAAI,iBAAiB,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,YAAY,UAAU,gBAAgB,gBAAgB;AAElI,SAAK,sBAAsB;EAC/B;EAEA,IAAI,QAAc;AACd,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,QAAI,yBAAyB;AAE7B,QAAI,KAAK,qBAAqB;AAC1B,+BAAyB,KAAK,aAAa,YAAY,QAAQ;IACnE,OAAO;AACH,+BAAyB,KAAK,UAAU,YAAY,QAAQ;IAChE;AAEA,WAAO;EACX;EAEA,WAAW,QAAc;AACrB,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,QAAI,2BAA2B,aAAa,YAAY;AACxD,QAAI,KAAK,qBAAqB;AAC1B,gCAA0B,KAAK,oBAAoB,yBAAyB,YAAY,QAAQ;IACpG;AAEA,WAAO;EACX;EAEA,SAAS,QAAc;AACnB,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,WAAO,CAAC,YAAY,QAAQ;EAChC;EAEA,OAAO,QAAc;AACjB,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,WAAO,KAAK,IAAI,YAAY,QAAQ;EACxC;EAEA,OAAO,QAAc;AACjB,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,WAAO,KAAK,IAAI,YAAY,QAAQ;EACxC;EAEA,SAAS,QAAgB,QAAc;AACnC,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,UAAM,MAAM,KAAK,IAAI,YAAY,QAAQ;AACzC,UAAM,MAAM,KAAK,IAAI,YAAY,QAAQ;AAEzC,WAAO,UAAU,OAAO,UAAU;EACtC;EAEA,mBAAmB,QAAgB,QAAc;AAC7C,WAAO,KAAK,0BAA0B,QAAQ,MAAM;EACxD;EAEA,0BAA0B,QAAgB,QAAc;AACpD,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,WAAO,KAAK,6BAA6B,QAAQ,YAAY,QAAQ;EACzE;EAEA,0BAA0B,QAAgB,QAAc;AACpD,UAAM,aAAa,KAAK,wBAAwB,IAAI,MAAM;AAC1D,UAAM,WAAW,KAAK,sBAAsB,IAAI,MAAM;AAEtD,WAAO,KAAK,6BAA6B,QAAQ,YAAY,QAAQ;EACzE;;AAGE,IAAO,qBAAP,cAAkC,sBAAqB;EAEzD,YAAY,WAA6B,UAA4B,WAAW,aAAqB,GAAG,WAAmB,GAAG,iBAAiB,eAAe,QAAQ,mBAA4C,MAAI;AAClN,QAAI,oBAAoB,MAAM;AAC1B,yBAAmB,SAAU,eAAuB,YAAoB,UAAgB;AACpF,YAAI,gBAAgB;AAEpB,cAAM,WAAW,cAAc;AAC/B,YAAI,UAAU;AACV,0BAAgB,KAAK,MAAM,aAAa;QAC5C,OAAO;AACH,0BAAgB,KAAK,KAAK,aAAa;QAC3C;AAEA,eAAO;MACX;IACJ;AAEA,UAAM,WAAW,SAAS,YAAY,UAAU,gBAAgB,gBAAgB;EACpF;;;;AC5NJ,SAAS,aAAAC,aAAW,WAAAC,WAAS,kBAAAC,iBAAgB,YAAAC,kBAAgB;AAKvD,IAAO,qBAAP,cAAkCC,YAAS;EAC7C,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,kCAAkCC,WAAS,MAAM,CAAC;IAClD,mCAAmCA,WAAS,MAAM,CAAC;IACnD,4BAA4BA,WAAS,KAAK,CAAC,QAAQ,SAAS,KAAK,GAAG,OAAO;IAC3E,oBAAoBA,WAAS,KAAK,CAAC,SAAS,KAAK,GAAG,KAAK;;EAG7D,OAAI;AACA,SAAK,aAAa;AAElB,SAAK,aAAa;AAElB,SAAK,eAAe;AACpB,SAAK,WAAW;AAChB,SAAK,uBAAuB;AAE5B,SAAK,iBAAiB,IAAIC,UAAO;AACjC,SAAK,kBAAkB,IAAIA,UAAO;AAClC,SAAK,oBAAoB,IAAIA,UAAO;EACxC;EAEA,QAAK;AACD,SAAK,eAAe,KAAK,OAAO,aAAY;AAC5C,SAAK,WAAW,KAAK,OAAO,gBAAgBC,eAAc;EAC9D;EAEA,eAAY;AACR,SAAK,QAAO;EAChB;EAEA,KAAK,SAAO;AACR,QAAI,CAAC,KAAK,UAAS,GAAI;AACnB,WAAK,uBAAuB,KAAK,SAAS;IAC9C;AAEA,SAAK,QAAO;AAEZ,SAAK,SAAS,YAAY;AAE1B,SAAK,eAAe,KAAK,OAAO,aAAY;AAC5C,SAAK,OAAO,aAAa,OAAO;AAEhC,SAAK,aAAa;AAElB,SAAK,eAAe,OAAO,SAAS,IAAI;EAC5C;EAEA,MAAM,gBAAgB,iBAAe;AACjC,QAAI,KAAK,YAAY;AACjB,UAAI,UAAU,KAAK;AAEnB,WAAK,SAAQ;AAIb,WAAK,SAAS,iBAAiB,eAAe,WAAW,KAAK,gCAAgC;AAC9F,WAAK,SAAS,kBAAkB,gBAAgB,WAAW,KAAK,iCAAiC;AAGjG,WAAK,gBAAgB,OAAO,SAAS,IAAI;AACzC,WAAK,kBAAkB,OAAO,SAAS,MAAM,IAAI;IACrD;EACJ;EAEA,UAAO;AACH,QAAI,KAAK,YAAY;AACjB,UAAI,UAAU,KAAK;AAEnB,WAAK,SAAQ;AAEb,WAAK,kBAAkB,OAAO,SAAS,MAAM,KAAK;IACtD;EACJ;EAEA,oBAAiB;AACb,WAAO,KAAK,SAAS,eAAe,WAAU;EAClD;EAEA,qBAAkB;AACd,WAAO,KAAK,0BAAyB;EACzC;EAEA,4BAAyB;AACrB,QAAI,yBAAyB,YAAW;AAExC,SAAK,SAAS,gBAAgB,eAAe,sBAAsB;AAEnE,WAAO;EACX;EAEA,4BAAyB;AACrB,WAAO,KAAK,SAAS,gBAAgB,WAAU;EACnD;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,aAAU;AACN,WAAO,KAAK;EAChB;EAEA,0BAA0B,IAAI,UAAQ;AAClC,SAAK,eAAe,IAAI,UAAU,EAAE,GAAM,CAAE;EAChD;EAEA,4BAA4B,IAAE;AAC1B,SAAK,eAAe,OAAO,EAAE;EACjC;EAEA,2BAA2B,IAAI,UAAQ;AACnC,SAAK,gBAAgB,IAAI,UAAU,EAAE,GAAM,CAAE;EACjD;EAEA,6BAA6B,IAAE;AAC3B,SAAK,gBAAgB,OAAO,EAAE;EAClC;EAEA,6BAA6B,IAAI,UAAQ;AACrC,SAAK,kBAAkB,IAAI,UAAU,EAAE,GAAM,CAAE;EACnD;EAEA,+BAA+B,IAAE;AAC7B,SAAK,kBAAkB,OAAO,EAAE;EACpC;EAEA,WAAQ;AACJ,QAAI,KAAK,sBAAsB,GAAG;AAC9B,WAAK,OAAO,aAAa,QAAQ,gBAAgB,KAAK,MAAM,EAAE,UAAU;IAC5E,OAAO;AACH,WAAK,OAAO,aAAa,KAAK,YAAY;IAC9C;AAEA,SAAK,aAAa;AAClB,SAAK,aAAa;AAElB,QAAI,KAAK,8BAA8B,GAAG;AACtC,WAAK,SAAS,YAAY;IAC9B,WAAW,KAAK,8BAA8B,GAAG;AAC7C,WAAK,SAAS,YAAY;IAC9B,WAAW,KAAK,wBAAwB,MAAM;AAC1C,WAAK,SAAS,YAAY,KAAK;IACnC;AAEA,QAAI,KAAK,SAAS,WAAW;AACzB,WAAK,SAAS,iBAAiB,YAAW;AAC1C,WAAK,SAAS,kBAAkB,YAAW;IAC/C;EACJ;EAEA,SAAS,cAAY;AACjB,QAAI,kBAAkB,eAAe,aAAa,MAAM,YAAY;AAEpE,WAAO;EACX;EAEA,oBAAoB,iBAAe;AAC/B,oBAAgB,MAAK;EACzB;;;;ACrKJ,SAAS,aAAAC,aAAW,WAAAC,WAAS,kBAAAC,iBAAgB,YAAAC,kBAAgB;AAUvD,IAAO,uBAAP,cAAoCC,YAAS;EAC/C,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,eAAeA,WAAS,KAAK,CAAC,UAAU,WAAW,QAAQ,gBAAgB,GAAG,SAAS;;IACvF,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,uBAAuBA,WAAS,IAAI,CAAC;;;IAGrC,wBAAwBA,WAAS,KAAK,CAAC,QAAQ,WAAW,GAAG,MAAM;IACnE,kCAAkCA,WAAS,MAAM,CAAC;;IAClD,wBAAwBA,WAAS,MAAM,EAAE;IACzC,mCAAmCA,WAAS,MAAM,GAAG;IACrD,yBAAyBA,WAAS,MAAM,IAAI;;IAC5C,6BAA6BA,WAAS,MAAM,IAAI;;IAChD,8CAA8CA,WAAS,MAAM,GAAG;;IAChE,8CAA8CA,WAAS,MAAM,GAAG;;;EAGpE,OAAI;AACA,SAAK,gBAAgB,CAAA;AAErB,SAAK,aAAa;AAElB,SAAK,sBAAsB;AAE3B,SAAK,+BAA+B;AACpC,SAAK,uDAAuD;AAC5D,SAAK,2DAA2D;AAChE,SAAK,wDAAwD;AAE7D,SAAK,+BAA+B,IAAI,MAAM,KAAK,4BAA4B;AAC/E,SAAK,6BAA6B,KAAK,YAAW,CAAE;AAEpD,SAAK,gCAAgC;AACrC,SAAK,gCAAgC,IAAI,MAAM,KAAK,6BAA6B;AACjF,SAAK,8BAA8B,KAAK,YAAW,CAAE;AAErD,SAAK,iCAAiC,KAAK,aAAa,KAAK,uBAAuB;AAEpF,SAAK,iBAAiB,IAAIC,UAAO;AACjC,SAAK,kBAAkB,IAAIA,UAAO;AAElC,SAAK,kBAAkB;EAC3B;EAEA,QAAK;AACD,QAAI,KAAK,iBAAiB,gBAAgB,MAAM;AAC5C,WAAK,aAAa,QAAQ,eAAe,KAAK,MAAM;IACxD,OAAO;AACH,WAAK,aAAa,QAAQ,gBAAgB,KAAK,MAAM;IACzD;AAEA,SAAK,WAAW,KAAK,OAAO,gBAAgBC,eAAc;AAC1D,SAAK,yBAAyB,IAAI,0BAA0B,KAAK,UAAU,IAAI;EACnF;EAEA,OAAO,IAAE;AACL,SAAK,uBAAuB,OAAO,EAAE;AAErC,QAAI,KAAK,cAAc,SAAS,GAAG;AAC/B,WAAK,6BAA4B;AACjC,WAAK,8BAA6B;IACtC;EACJ;EAEA,KAAK,aAAa,MAAI;AAClB,SAAK,MAAM,UAAU;EACzB;EAEA,MAAM,cAAc,MAAI;AACpB,SAAK,OAAO,WAAW;EAC3B;EAEA,aAAU;AACN,WAAO,KAAK;EAChB;EAEA,gBAAa;AACT,WAAO,WAAW,qBAAqB,KAAK,aAAa;EAC7D;EAEA,0BAA0B,IAAI,UAAQ;AAClC,SAAK,eAAe,IAAI,UAAU,EAAE,GAAM,CAAE;EAChD;EAEA,4BAA4B,IAAE;AAC1B,SAAK,eAAe,OAAO,EAAE;EACjC;EAEA,2BAA2B,IAAI,UAAQ;AACnC,SAAK,gBAAgB,IAAI,UAAU,EAAE,GAAM,CAAE;EACjD;EAEA,6BAA6B,IAAE;AAC3B,SAAK,gBAAgB,OAAO,EAAE;EAClC;EAEA,aAAU;AACN,QAAI,KAAK,cAAc,MAAM;AACzB,UAAI,KAAK,iBAAiB,GAAG;AACzB,aAAK,WAAW,4BAA4B,gBAAgB,QAAQ,mBAAmB,aAAa,MAAM,KAAK,MAAM,KAAK,MAAM,gBAAgB,MAAM,CAAC;AACvJ,aAAK,WAAW,4BAA4B,gBAAgB,QAAQ,mBAAmB,WAAW,MAAM,KAAK,OAAO,KAAK,MAAM,gBAAgB,MAAM,CAAC;MAC1J,WAAW,KAAK,iBAAiB,GAAG;AAChC,aAAK,WAAW,4BAA4B,gBAAgB,SAAS,mBAAmB,aAAa,MAAM,KAAK,MAAM,KAAK,MAAM,gBAAgB,OAAO,CAAC;AACzJ,aAAK,WAAW,4BAA4B,gBAAgB,SAAS,mBAAmB,WAAW,MAAM,KAAK,OAAO,KAAK,MAAM,gBAAgB,OAAO,CAAC;MAC5J,OAAO;AACH,aAAK,WAAW,4BAA4B,gBAAgB,SAAS,mBAAmB,aAAa,MAAM,KAAK,MAAM,KAAK,MAAM,gBAAgB,OAAO,CAAC;AACzJ,aAAK,WAAW,4BAA4B,gBAAgB,SAAS,mBAAmB,WAAW,MAAM,KAAK,OAAO,KAAK,MAAM,gBAAgB,OAAO,CAAC;AAExJ,aAAK,WAAW,4BAA4B,gBAAgB,QAAQ,mBAAmB,aAAa,MAAM,KAAK,MAAM,KAAK,MAAM,gBAAgB,MAAM,CAAC;AACvJ,aAAK,WAAW,4BAA4B,gBAAgB,QAAQ,mBAAmB,WAAW,MAAM,KAAK,OAAO,KAAK,MAAM,gBAAgB,MAAM,CAAC;MAC1J;IACJ;EACJ;EAEA,eAAY;AACR,SAAK,MAAK;AAEV,QAAI,KAAK,cAAc,MAAM;AACzB,UAAI,KAAK,iBAAiB,GAAG;AACzB,aAAK,WAAW,8BAA8B,gBAAgB,QAAQ,mBAAmB,aAAa,IAAI;AAC1G,aAAK,WAAW,8BAA8B,gBAAgB,QAAQ,mBAAmB,WAAW,IAAI;MAC5G,WAAW,KAAK,iBAAiB,GAAG;AAChC,aAAK,WAAW,8BAA8B,gBAAgB,SAAS,mBAAmB,aAAa,IAAI;AAC3G,aAAK,WAAW,8BAA8B,gBAAgB,SAAS,mBAAmB,WAAW,IAAI;MAC7G,OAAO;AACH,aAAK,WAAW,8BAA8B,gBAAgB,SAAS,mBAAmB,aAAa,IAAI;AAC3G,aAAK,WAAW,8BAA8B,gBAAgB,SAAS,mBAAmB,WAAW,IAAI;AAEzG,aAAK,WAAW,8BAA8B,gBAAgB,QAAQ,mBAAmB,aAAa,IAAI;AAC1G,aAAK,WAAW,8BAA8B,gBAAgB,QAAQ,mBAAmB,WAAW,IAAI;MAC5G;IACJ;EACJ;EAEA,MAAM,YAAU;AACZ,QAAI,KAAK,cAAc,UAAU,KAAK,uBAAuB;AACzD;IACJ;AAEA,QAAI,KAAK,iBAAiB,KAAK,KAAK,uBAAuB,QAAQ,KAAK,uBAAuB,cAAc,cAAc,MAAM;AAC7H,UAAI,mBAAmB,CAAA;AAEvB,UAAI,aAAa,KAAK,uBAAuB,cAAa;AAC1D,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,YAAI,YAAY,WAAW,CAAC,EAAE,gBAAgB,kBAAkB;AAChE,YAAI,aAAa,UAAU,QAAQ;AAC/B,2BAAiB,KAAK,SAAS;QACnC;MACJ;AAEA,UAAI,kBAAkB,KAAK,OAAO,eAAc;AAChD,uBAAiB,KAAK,SAAUC,QAAO,QAAM;AACzC,YAAI,gBAAgBA,OAAM,OAAO,eAAc;AAC/C,YAAI,iBAAiB,OAAO,OAAO,eAAc;AAEjD,YAAI,gBAAgB,cAAc,cAAc,eAAe;AAC/D,YAAI,iBAAiB,eAAe,cAAc,eAAe;AAEjE,eAAO,KAAK,QAAQ,gBAAgB,gBAAgB,CAAC;MACzD,CAAC;AAED,eAAS,mBAAmB,kBAAkB;AAC1C,YAAI,CAAC,KAAK,kBAAkB,eAAe,GAAG;AAC1C,cAAI,gBAAgB,IAAI,mCAAmC,iBAAiB,KAAK,0BAA0B,GAAG,KAAK,8BAA8B,KAAK,6BAA6B;AACnL,eAAK,cAAc,KAAK,aAAa;AACrC,0BAAgB,KAAK,KAAK,MAAM;AAChC,0BAAgB,6BAA6B,MAAM,KAAK,WAAW,KAAK,IAAI,CAAC;AAE7E,cAAI,KAAK,0BAA0B;AAC/B,4BAAgB,OAAO,sBAAqB;UAChD;AAEA,eAAK,eAAe,OAAO,MAAM,eAAe;QACpD;AAEA,YAAI,KAAK,cAAc,UAAU,KAAK,uBAAuB;AACzD;QACJ;MACJ;AAEA,UAAI,KAAK,cAAc,SAAS,GAAG;AAC/B,YAAI,KAAK,uBAAuB,MAAM;AAClC,eAAK,sBAAsB;QAC/B;MACJ;IACJ;EACJ;EAEA,OAAO,aAAW;AACd,QAAI,KAAK,iBAAiB,KAAK,KAAK,uBAAuB,QAAQ,KAAK,uBAAuB,eAAe,eAAe,MAAM;AAC/H,UAAI,KAAK,cAAc,SAAS,GAAG;AAC/B,YAAI,iBAAiB;AACrB,YAAI,kBAAkB;AAEtB,YAAI,KAAK,0BAA0B,GAAG;AAClC,2BAAiB,KAAK,8BAA8B,KAAK,4BAA4B;AACrF,4BAAkB,KAAK,+BAA+B,KAAK,6BAA6B;QAC5F;AAEA,iBAAS,iBAAiB,KAAK,eAAe;AAC1C,cAAI,YAAY,cAAc,aAAY;AAE1C,oBAAU,+BAA+B,IAAI;AAE7C,cAAI,KAAK,0BAA0B,GAAG;AAClC,6BAAiB,KAAK,8BAA8B,cAAc,yBAAwB,CAAE;AAC5F,8BAAkB,KAAK,+BAA+B,cAAc,0BAAyB,CAAE;UACnG;AAEA,oBAAU,MAAM,gBAAgB,eAAe;AAE/C,eAAK,gBAAgB,OAAO,MAAM,SAAS;QAC/C;AAEA,aAAK,gBAAgB,CAAA;MACzB;AAEA,WAAK,sBAAsB;IAC/B;EACJ;EAEA,WAAW,SAAS,WAAS;AACzB,cAAU,+BAA+B,IAAI;AAC7C,SAAK,cAAc,UAAU,aAAW,QAAQ,aAAY,KAAM,SAAS;AAE3E,QAAI,KAAK,cAAc,UAAU,GAAG;AAChC,WAAK,sBAAsB;IAC/B;EACJ;EAEA,+BAA4B;AACxB,QAAI,WAAW,KAAK,WAAW,YAAW;AAC1C,SAAK,6BAA6B,QAAQ,SAAS,kBAAiB,CAAE;AACtE,SAAK,6BAA6B,IAAG;AAErC,aAAS,aAAa,KAAK,eAAe;AACtC,gBAAU,4BAA2B;IACzC;EACJ;EAEA,gCAA6B;AACzB,QAAI,WAAW,KAAK,WAAW,YAAW;AAC1C,SAAK,8BAA8B,QAAQ,SAAS,0BAAyB,CAAE;AAC/E,SAAK,8BAA8B,IAAG;AAEtC,aAAS,aAAa,KAAK,eAAe;AACtC,gBAAU,6BAA4B;IAC1C;EACJ;EAEA,8BAA8B,uBAAqB;AAE/C,QAAI,QAAQ,sBAAsB,CAAC,EAAE,YAAW;AAChD,aAAS,IAAI,GAAG,IAAI,KAAK,sDAAsD,KAAK;AAChF,eAAS,sBAAsB,CAAC,EAAE,YAAW;IACjD;AACA,aAAS,KAAK;AAId,QAAI,sBAAsB,KAAK,cAAc,OAAO,KAAK,8CAA8C,KAAK,8CAA8C,GAAG,CAAC;AAC9J,0BAAsB,eAAe,OAAO,mBAAmB;AAG/D,QAAI,aAAa,SAAS,sBAAsB,KAAK;AACrD,aAAS;AACT,aAAS,KAAK;AACd,YAAQ,KAAK,SAAS,OAAO,GAAG,KAAK,sBAAsB;AAE3D,QAAI,KAAK,mBAAmB,QAAQ,eAAe,KAAK,MAAM,GAAG;AAC7D,WAAK,qBAAqB,qBAAqB;IACnD;AAGA,QAAI,yBAAyB,KAAK;AAClC,QAAI,qBAAqB,KAAK,wDAAwD,KAAK;AAC3F,QAAI,YAAY,YAAW;AAC3B,aAAS,IAAI,KAAK,uDAAuD,IAAI,oBAAoB,KAAK;AAClG,UAAI,mBAAmB,sBAAsB,CAAC;AAC9C,uBAAiB,WAAW,wBAAwB,gBAAgB;AACpE,gBAAU,SAAS,kBAAkB,SAAS;AAE9C;IACJ;AACA,cAAU,eAAe,SAAS;AAElC,cAAU,WAAW,OAAO,SAAS;AAErC,WAAO;EACX;EAEA,+BAA+B,wBAAsB;AACjD,QAAI,kBAAkB,uBAAuB,CAAC;AAG9C,QAAI,QAAQ,gBAAgB,YAAW;AAEvC,YAAQ,KAAK,SAAS,QAAQ,KAAK,mCAAmC,GAAG,KAAK,8BAA8B;AAG5G,QAAI,YAAY;AAChB,cAAU,eAAe,SAAS;AAElC,cAAU,WAAW,OAAO,SAAS;AAErC,WAAO;EACX;EAEA,qBAAqB,uBAAqB;AACtC,aAAS,IAAI,KAAK,wDAAwD,KAAK,0DAA0D,IAAI,KAAK,uDAAuD,KAAK;AAE1M,UAAI,yBAAyB,IAAI,KAAK;AACtC,UAAI,qBAAqB,IAAI,KAAK;AAClC,UAAI,YAAY,YAAW;AAC3B,eAAS,IAAI,KAAK,uDAAuD,IAAI,oBAAoB,KAAK;AAClG,YAAI,mBAAmB,sBAAsB,CAAC,EAAE,SAAQ;AACxD,yBAAiB,WAAW,wBAAwB,gBAAgB;AACpE,kBAAU,SAAS,kBAAkB,SAAS;AAE9C;MACJ;AACA,gBAAU,eAAe,SAAS;AAElC,UAAI,QAAQ,IAAI;AAEhB,cAAQ,sBAAsB,KAAK,MAAM,EAAE,SAAS,GAAG,KAAK,OAAO,eAAc,GAAI,WAAW,KAAK,YAAY,OAAO,OAAO,OAAO,CAAC,CAAC;IAC5I;EACJ;EAEA,kBAAkB,WAAS;AACvB,QAAI,QAAQ,KAAK,cAAc,QAAQ,aAAW,QAAQ,aAAY,KAAM,SAAS;AACrF,WAAO,SAAS;EACpB;;AAGJ,IAAM,qCAAN,MAAwC;EAEpC,YAAY,WAAW,8BAA8B,2BAA2B,4BAA0B;AACtG,SAAK,eAAe;AACpB,SAAK,kCAAkC;AAEvC,QAAI,KAAK,iCAAiC;AACtC,WAAK,2BAA2B,IAAI,MAAM,yBAAyB;AACnE,WAAK,yBAAyB,KAAK,YAAW,CAAE;AAEhD,WAAK,4BAA4B,IAAI,MAAM,0BAA0B;AACrE,WAAK,0BAA0B,KAAK,YAAW,CAAE;IACrD;EACJ;EAEA,eAAY;AACR,WAAO,KAAK;EAChB;EAEA,2BAAwB;AACpB,WAAO,KAAK;EAChB;EAEA,4BAAyB;AACrB,WAAO,KAAK;EAChB;EAEA,8BAA2B;AACvB,QAAI,KAAK,iCAAiC;AACtC,WAAK,yBAAyB,QAAQ,KAAK,aAAa,kBAAiB,CAAE;AAC3E,WAAK,yBAAyB,IAAG;IACrC;EACJ;EAEA,+BAA4B;AACxB,QAAI,KAAK,iCAAiC;AACtC,WAAK,0BAA0B,QAAQ,KAAK,aAAa,0BAAyB,CAAE;AACpF,WAAK,0BAA0B,IAAG;IACtC;EACJ;EAEA,YAAS;AACL,SAAK,uBAAuB,QAAO;EACvC;;;;ACtYJ,IAAI,iBAAiB;AACrB,IAAI,gCAAgC;AACpC,IAAI,2BAA2B;AAExB,IAAI,UAAU;EACjB,MAAM;EACN,gBAAgB;EAChB,uBAAuB;EACvB,wBAAwB;EACxB,qBAAqB;EACrB,iBAAiB;EACjB,oBAAoB;EACpB,mBAAmB;;AAGjB,SAAU,8BAA8B,gBAAc;AACxD,kCAAgC;AACpC;AAEM,SAAU,yBAAyB,gBAAc;AACnD,6BAA2B;AAC/B;AAEM,SAAU,eAAe,aAAW;AACtC,mBAAiB;AACrB;AAEM,SAAU,+BAA4B;AACxC,SAAO;AACX;AAEM,SAAU,0BAAuB;AACnC,SAAO;AACX;AAEM,SAAU,iBAAc;AAC1B,SAAO;AACX;AAEM,SAAU,iBAAc;AAC1B,SAAO,OAAO,SAAS;AAC3B;AAEM,SAAU,SAAM;AAClB,SAAO,OAAO;AAClB;AAEM,SAAU,eAAe,eAAe,WAAW,cAAc,cAAc,iBAAiB,MAAM,kBAAkB,MAAM,yBAAyB,MAAI;AAC7J,MAAI,QAAQ,eAAc,GAAI;AAC1B,QAAI;AACA,sBAAgB,eAAe,WAAW,cAAc,YAAY,EAAE,KAAK,SAAU,QAAM;AACvF,YAAI,OAAO,eAAe,MAAM;AAC5B,cAAI,CAAC,cAAc;AACf,gBAAI,kBAAkB,MAAM;AACxB,6BAAe,OAAO,WAAW;YACrC;UACJ,OAAO;AACH,gBAAI,kBAAkB,OAAO;AAC7B,oBAAQ,QACJ,SAAU,MAAI;AACV,kBAAI,WAAW,KAAK;AACpB,kBAAI,YAAY;AAChB,uBAAS,wBAAwB,iBAAiB;AAC9C,oBAAI,qBAAqB,eAAe,UAAU;AAC9C,8BAAY;AACZ;gBACJ;cACJ;AACA,kBAAI,WAAW;AACX,oBAAI,kBAAkB,MAAM;AACxB,iCAAe,eAAe;gBAClC;cACJ,OAAO;AACH,oBAAI,kBAAkB,QAAQ,eAAe,kBAAkB,SAC1D,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,0BAAQ,oBAAoB,eAAe,WAAW,cAAc,cAAc,gBAAgB,iBAAiB,QAAQ,iBAAiB;gBAChJ,WAAW,mBAAmB,MAAM;AAChC,sBAAIC,SAAQ,CAAA;AACZ,kBAAAA,OAAM,SAAS;AACf,kBAAAA,OAAM,OAAO,QAAQ;AACrB,kCAAgBA,QAAO,IAAI;gBAC/B;cACJ;YACJ,GACA,SAAUA,QAAOC,SAAM;AACnB,kBAAI,kBAAkB,QAAQ,eAAe,kBAAkB,SAC1D,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,wBAAQ,oBAAoB,eAAe,WAAW,cAAc,cAAc,gBAAgB,iBAAiBD,OAAM,IAAI;cACjI,WAAW,mBAAmB,MAAM;AAChC,gCAAgBA,QAAOC,OAAM;cACjC;YACJ,GACA,KAAK;UACb;QACJ,OAAO;AACH,cAAI,kBAAkB,QAAQ,eAAe,kBAAkB,SAC1D,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,oBAAQ,oBAAoB,eAAe,WAAW,cAAc,cAAc,gBAAgB,iBAAiB,QAAQ,sBAAsB;UACrJ,WAAW,mBAAmB,MAAM;AAChC,gBAAID,SAAQ,CAAA;AACZ,YAAAA,OAAM,SAAS;AACf,YAAAA,OAAM,OAAO,QAAQ;AACrB,4BAAgBA,QAAO,MAAM;UACjC;QACJ;MACJ,CAAC,EAAE,MAAM,SAAU,QAAM;AACrB,YAAI,kBAAkB,QAAQ,eAAe,kBAAkB,SAC1D,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,kBAAQ,oBAAoB,eAAe,WAAW,cAAc,cAAc,gBAAgB,iBAAiB,QAAQ,sBAAsB;QACrJ,WAAW,mBAAmB,MAAM;AAChC,cAAIA,SAAQ,CAAA;AACZ,UAAAA,OAAM,SAAS;AACf,UAAAA,OAAM,OAAO,QAAQ;AACrB,0BAAgBA,QAAO,MAAM;QACjC;MACJ,CAAC;IACL,SAASA,QAAO;AACZ,UAAI,kBAAkB,QAAQ,eAAe,kBAAkB,SAC1D,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,gBAAQ,oBAAoB,eAAe,WAAW,cAAc,cAAc,gBAAgB,iBAAiB,QAAQ,sBAAsB;MACrJ,WAAW,mBAAmB,MAAM;AAChC,YAAIA,SAAQ,CAAA;AACZ,QAAAA,OAAM,SAAS;AACf,QAAAA,OAAM,OAAO,QAAQ;AACrB,wBAAgBA,QAAO,IAAI;MAC/B;IACJ;EACJ,OAAO;AACH,QAAI,kBAAkB,QAAQ,eAAe,kBAAkB,SAC1D,iCAAiC,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AACjI,cAAQ,oBAAoB,eAAe,WAAW,cAAc,cAAc,gBAAgB,iBAAiB,QAAQ,cAAc;IAC7I,WAAW,mBAAmB,MAAM;AAChC,UAAIA,SAAQ,CAAA;AACZ,MAAAA,OAAM,SAAS;AACf,MAAAA,OAAM,OAAO,QAAQ;AACrB,sBAAgBA,QAAO,IAAI;IAC/B;EACJ;AACJ;AAEM,SAAU,oBAAoB,eAAe,WAAW,cAAc,cAAc,iBAAiB,MAAM,kBAAkB,MAAM,UAAU,QAAQ,MAAI;AAC3J,MAAI,gBAAgB;AAChB,mBAAe,eAAe,eAAe,WAAW,cAAc,cAAc,gBAAgB,iBAAiB,OAAO;EAChI,OAAO;AACH,QAAI,mBAAmB,MAAM;AACzB,UAAIA,SAAQ,CAAA;AACZ,MAAAA,OAAM,SAAS;AACf,MAAAA,OAAM,OAAO,QAAQ;AACrB,sBAAgBA,QAAO,IAAI;IAC/B;EACJ;AACJ;AAEM,SAAU,YAAY,eAAe,eAAe,iBAAiB,MAAM,kBAAkB,MAAM,yBAAyB,MAAI;AAClI,MAAI,QAAQ,eAAc,GAAI;AAC1B,QAAI;AACA,mBAAa,eAAe,aAAa,EAAE,KAAK,SAAU,QAAM;AAC5D,YAAI,OAAO,gBAAgB;AACvB,cAAI,kBAAkB,MAAM;AACxB,2BAAc;UAClB;QACJ,WAAW,OAAO,kBAAkB,MAAM;AACtC,cAAI,kBAAkB,QAAQ,eAAe,eAAe,SACvD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,oBAAQ,iBAAiB,eAAe,eAAe,gBAAgB,iBAAiB,QAAQ,kBAAkB;UACtH,WAAW,mBAAmB,MAAM;AAChC,gBAAIA,SAAQ,CAAA;AACZ,YAAAA,OAAM,SAAS;AACf,YAAAA,OAAM,OAAO,QAAQ;AACrB,4BAAgBA,QAAO,MAAM;UACjC;QACJ,OAAO;AACH,cAAI,kBAAkB,QAAQ,eAAe,eAAe,SACvD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,oBAAQ,iBAAiB,eAAe,eAAe,gBAAgB,iBAAiB,QAAQ,mBAAmB;UACvH,WAAW,mBAAmB,MAAM;AAChC,gBAAIA,SAAQ,CAAA;AACZ,YAAAA,OAAM,SAAS;AACf,YAAAA,OAAM,OAAO,QAAQ;AACrB,4BAAgBA,QAAO,MAAM;UACjC;QACJ;MACJ,CAAC,EAAE,MAAM,SAAU,QAAM;AACrB,YAAI,kBAAkB,QAAQ,eAAe,eAAe,SACvD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,kBAAQ,iBAAiB,eAAe,eAAe,gBAAgB,iBAAiB,QAAQ,mBAAmB;QACvH,WAAW,mBAAmB,MAAM;AAChC,cAAIA,SAAQ,CAAA;AACZ,UAAAA,OAAM,SAAS;AACf,UAAAA,OAAM,OAAO,QAAQ;AACrB,0BAAgBA,QAAO,MAAM;QACjC;MACJ,CAAC;IACL,SAASA,QAAO;AACZ,UAAI,kBAAkB,QAAQ,eAAe,eAAe,SACvD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,gBAAQ,iBAAiB,eAAe,eAAe,gBAAgB,iBAAiB,QAAQ,mBAAmB;MACvH,WAAW,mBAAmB,MAAM;AAChC,YAAIA,SAAQ,CAAA;AACZ,QAAAA,OAAM,SAAS;AACf,QAAAA,OAAM,OAAO,QAAQ;AACrB,wBAAgBA,QAAO,IAAI;MAC/B;IACJ;EACJ,OAAO;AACH,QAAI,kBAAkB,QAAQ,eAAe,eAAe,SACvD,iCAAiC,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AACjI,cAAQ,iBAAiB,eAAe,eAAe,gBAAgB,iBAAiB,QAAQ,cAAc;IAClH,WAAW,mBAAmB,MAAM;AAChC,UAAIA,SAAQ,CAAA;AACZ,MAAAA,OAAM,SAAS;AACf,MAAAA,OAAM,OAAO,QAAQ;AACrB,sBAAgBA,QAAO,IAAI;IAC/B;EACJ;AACJ;AAEM,SAAU,iBAAiB,eAAe,eAAe,iBAAiB,MAAM,kBAAkB,MAAM,UAAU,QAAQ,MAAI;AAChI,MAAI,gBAAgB;AAChB,mBAAe,YAAY,eAAe,eAAe,gBAAgB,iBAAiB,OAAO;EACrG,OAAO;AACH,QAAI,mBAAmB,MAAM;AACzB,UAAIA,SAAQ,CAAA;AACZ,MAAAA,OAAM,SAAS;AACf,MAAAA,OAAM,OAAO,QAAQ;AACrB,sBAAgBA,QAAO,IAAI;IAC/B;EACJ;AACJ;AAEM,SAAU,QAAQ,iBAAiB,MAAM,kBAAkB,MAAM,yBAAyB,MAAI;AAChG,MAAI,QAAQ,eAAc,GAAI;AAC1B,QAAI;AACA,eAAQ,EAAG,KAAK,SAAU,QAAM;AAC5B,YAAI,OAAO,QAAQ,QAAQ,OAAO,KAAK,eAAe,MAAM;AACxD,cAAI,kBAAkB,MAAM;AACxB,2BAAe,OAAO,IAAI;UAC9B;QACJ,WAAW,OAAO,QAAQ,MAAM;AAC5B,cAAI,kBAAkB,QAAQ,eAAe,WAAW,SACnD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,oBAAQ,aAAa,gBAAgB,iBAAiB,QAAQ,kBAAkB;UACpF,WAAW,mBAAmB,MAAM;AAChC,gBAAIA,SAAQ,CAAA;AACZ,YAAAA,OAAM,SAAS;AACf,YAAAA,OAAM,OAAO,QAAQ;AACrB,4BAAgBA,QAAO,MAAM;UACjC;QACJ,OAAO;AACH,cAAI,kBAAkB,QAAQ,eAAe,WAAW,SACnD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,oBAAQ,aAAa,gBAAgB,iBAAiB,QAAQ,eAAe;UACjF,WAAW,mBAAmB,MAAM;AAChC,gBAAIA,SAAQ,CAAA;AACZ,YAAAA,OAAM,SAAS;AACf,YAAAA,OAAM,OAAO,QAAQ;AACrB,4BAAgBA,QAAO,MAAM;UACjC;QACJ;MACJ,CAAC,EAAE,MAAM,SAAU,QAAM;AACrB,YAAI,kBAAkB,QAAQ,eAAe,WAAW,SACnD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,kBAAQ,aAAa,gBAAgB,iBAAiB,QAAQ,eAAe;QACjF,WAAW,mBAAmB,MAAM;AAChC,cAAIA,SAAQ,CAAA;AACZ,UAAAA,OAAM,SAAS;AACf,UAAAA,OAAM,OAAO,QAAQ;AACrB,0BAAgBA,QAAO,MAAM;QACjC;MACJ,CAAC;IACL,SAASA,QAAO;AACZ,UAAI,kBAAkB,QAAQ,eAAe,WAAW,SACnD,4BAA4B,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AAC5H,gBAAQ,aAAa,gBAAgB,iBAAiB,QAAQ,eAAe;MACjF,WAAW,mBAAmB,MAAM;AAChC,YAAIA,SAAQ,CAAA;AACZ,QAAAA,OAAM,SAAS;AACf,QAAAA,OAAM,OAAO,QAAQ;AACrB,wBAAgBA,QAAO,IAAI;MAC/B;IACJ;EACJ,OAAO;AACH,QAAI,kBAAkB,QAAQ,eAAe,WAAW,SACnD,iCAAiC,0BAA0B,SAAU,0BAA0B,QAAQ,wBAAyB;AACjI,cAAQ,aAAa,gBAAgB,iBAAiB,QAAQ,cAAc;IAChF,WAAW,mBAAmB,MAAM;AAChC,UAAIA,SAAQ,CAAA;AACZ,MAAAA,OAAM,SAAS;AACf,MAAAA,OAAM,OAAO,QAAQ;AACrB,sBAAgBA,QAAO,IAAI;IAC/B;EACJ;AACJ;AAEM,SAAU,aAAa,iBAAiB,MAAM,kBAAkB,MAAM,UAAU,QAAQ,MAAI;AAC9F,MAAI,gBAAgB;AAChB,mBAAe,QAAQ,gBAAgB,iBAAiB,OAAO;EACnE,OAAO;AACH,QAAI,mBAAmB,MAAM;AACzB,UAAIA,SAAQ,CAAA;AACZ,MAAAA,OAAM,SAAS;AACf,MAAAA,OAAM,OAAO,QAAQ;AACrB,sBAAgBA,QAAO,IAAI;IAC/B;EACJ;AACJ;AAEO,IAAI,UAAU;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMJ,SAAS,gBAAgB,eAAe,WAAW,cAAc,cAAY;AACzE,MAAI,QAAQ,QAAQ,OAAM;AAE1B,MAAI,cAAc;AACd,WAAO,MAAM,YAAY,MAAM,eAAe,YAAY,EAAE,KAAK,SAAU,QAAM;AAC7E,UAAI,sBAAsB,CAAA;AAC1B,eAAS,oBAAoB,QAAQ;AACjC,4BAAoB,KAAK,EAAE,MAAM,iBAAiB,OAAO,GAAG,aAAa,iBAAiB,MAAM,OAAO,iBAAiB,MAAK,CAAE;MACnI;AACA,aAAO,EAAE,aAAa,oBAAmB;IAC7C,CAAC,EAAE,MAAM,SAAUA,QAAK;AACpB,UAAIA,UAAS,QAAQA,OAAM,UAAU,QAAQA,OAAM,OAAO,SAAS,uBAAuB;AACtF,eAAO,EAAE,aAAa,CAAA,EAAE;MAC5B,OAAO;AACH,eAAO,EAAE,aAAa,KAAI;MAC9B;IACJ,CAAC;EACL,OAAO;AACH,WAAO,MAAM,YAAY,IAAI,eAAe,YAAY,EAAE,KAAK,SAAU,QAAM;AAC3E,UAAI,sBAAsB,CAAA;AAC1B,eAAS,oBAAoB,QAAQ;AACjC,4BAAoB,KAAK,EAAE,MAAM,iBAAiB,OAAO,GAAG,aAAa,iBAAiB,MAAM,OAAO,iBAAiB,MAAK,CAAE;MACnI;AACA,aAAO,EAAE,aAAa,oBAAmB;IAC7C,CAAC,EAAE,MAAM,WAAA;AACL,aAAO,EAAE,aAAa,KAAI;IAC9B,CAAC;EACL;AACJ;AAEA,SAAS,aAAa,eAAe,eAAa;AAC9C,MAAI,QAAQ,QAAQ,OAAM;AAC1B,SAAO,MAAM,YAAY,UAAU,eAAe,aAAa,EAAE,KAAK,WAAA;AAClE,WAAO,EAAE,gBAAgB,KAAI;EACjC,CAAC,EAAE,MAAM,SAAUA,QAAK;AACpB,QAAIA,UAAS,QAAQA,OAAM,UAAU,QAAQA,OAAM,OAAO,SAAS,uBAAuB;AACtF,aAAO,EAAE,gBAAgB,MAAK;IAClC,OAAO;AACH,aAAO,EAAE,gBAAgB,KAAI;IACjC;EACJ,CAAC;AACL;AAEA,SAAS,WAAQ;AACb,MAAI,QAAQ,QAAQ,OAAM;AAC1B,SAAO,MAAM,KAAK,QAAO,EAAG,KAAK,YAAS;AACtC,WAAO,EAAE,MAAM,EAAE,aAAa,OAAM,EAAE;EAC1C,CAAC,EAAE,MAAM,SAAUA,QAAK;AACpB,QAAIA,UAAS,QAAQA,OAAM,UAAU,QAAQA,OAAM,OAAO,SAAS,uBAAuB;AACtF,aAAO,EAAE,MAAM,EAAE,aAAa,KAAI,EAAE;IACxC,OAAO;AACH,aAAO,EAAE,MAAM,KAAI;IACvB;EACJ,CAAC;AACL;;;AC3XM,IAAO,gBAAP,MAAoB;EAEtB,cAAA;EAEA;EAEA,eAAe,eAAe,WAAW,cAAc,cAAc,iBAAiB,MAAM,kBAAkB,MAAM,UAAU,QAAQ,MAAI;AACtI,QAAI,cAAc;AAElB,QAAI,WAAW,QAAQ,gBAAgB;AACnC,UAAI,iBAAiB,WAAW,QAAQ,sBAAsB,WAAW,QAAQ,oBAAoB;AACjG,sBAAc;UACV,EAAE,MAAM,GAAG,aAAa,WAAW,OAAO,EAAC;UAC3C,EAAE,MAAM,GAAG,aAAa,OAAO,OAAO,EAAC;UACvC,EAAE,MAAM,GAAG,aAAa,QAAQ,OAAO,EAAC;UACxC,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,SAAS,OAAO,EAAC;UACzC,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,UAAU,OAAO,EAAC;UAC1C,EAAE,MAAM,GAAG,aAAa,QAAQ,OAAO,EAAC;UACxC,EAAE,MAAM,GAAG,aAAa,OAAO,OAAO,EAAC;UACvC,EAAE,MAAM,GAAG,aAAa,SAAS,OAAO,EAAC;;MAEjD,OAAO;AACH,sBAAc;UACV,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,SAAS,OAAO,EAAC;UACzC,EAAE,MAAM,GAAG,aAAa,OAAO,OAAO,EAAC;UACvC,EAAE,MAAM,GAAG,aAAa,YAAY,OAAO,EAAC;UAC5C,EAAE,MAAM,GAAG,aAAa,SAAS,OAAO,EAAC;UACzC,EAAE,MAAM,GAAG,aAAa,UAAU,OAAO,EAAC;UAC1C,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,YAAY,OAAO,EAAC;UAC5C,EAAE,MAAM,GAAG,aAAa,OAAO,OAAO,EAAC;UACvC,EAAE,MAAM,GAAG,aAAa,eAAe,OAAO,EAAC;;MAEvD;IACJ,OAAO;AACH,UAAI,cAAc;AACd,sBAAc;UACV,EAAE,MAAM,GAAG,aAAa,WAAW,OAAO,EAAC;UAC3C,EAAE,MAAM,GAAG,aAAa,OAAO,OAAO,EAAC;UACvC,EAAE,MAAM,GAAG,aAAa,QAAQ,OAAO,EAAC;UACxC,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,SAAS,OAAO,EAAC;UACzC,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,UAAU,OAAO,EAAC;UAC1C,EAAE,MAAM,GAAG,aAAa,QAAQ,OAAO,EAAC;UACxC,EAAE,MAAM,GAAG,aAAa,OAAO,OAAO,EAAC;UACvC,EAAE,MAAM,GAAG,aAAa,SAAS,OAAO,EAAC;;MAEjD,OAAO;AACH,sBAAc;UACV,EAAE,MAAM,GAAG,aAAa,OAAO,OAAO,EAAC;UACvC,EAAE,MAAM,GAAG,aAAa,UAAU,OAAO,EAAC;UAC1C,EAAE,MAAM,GAAG,aAAa,eAAe,OAAO,EAAC;UAC/C,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,aAAa,OAAO,EAAC;UAC7C,EAAE,MAAM,GAAG,aAAa,QAAQ,OAAO,EAAC;UACxC,EAAE,MAAM,GAAG,aAAa,QAAQ,OAAO,EAAC;UACxC,EAAE,MAAM,GAAG,aAAa,WAAW,OAAO,EAAC;UAC3C,EAAE,MAAM,GAAG,aAAa,MAAM,OAAO,EAAC;UACtC,EAAE,MAAM,GAAG,aAAa,SAAS,OAAO,EAAC;;MAEjD;IACJ;AAEA,WAAO,YAAY,SAAS,cAAc;AACtC,kBAAY,IAAG;IACnB;AAEA,QAAI,kBAAkB,MAAM;AACxB,qBAAe,WAAW;IAC9B;EACJ;EAEA,YAAY,eAAe,eAAe,iBAAiB,MAAM,kBAAkB,MAAM,UAAU,QAAQ,MAAI;AAC3G,QAAI,kBAAkB,MAAM;AACxB,qBAAc;IAClB;EACJ;EAEA,QAAQ,iBAAiB,MAAM,kBAAkB,MAAM,UAAU,QAAQ,MAAI;AACzE,QAAI,OAAO,CAAA;AACX,SAAK,cAAc;AAEnB,QAAI,kBAAkB,MAAM;AACxB,qBAAe,IAAI;IACvB;EACJ;;;;AC3FJ,SAAS,aAAAE,aAAW,YAAAC,YAAU,iBAAAC,sBAAqB;AAK7C,IAAO,gCAAP,cAA6CC,YAAS;EACxD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,wBAAwBC,WAAS,OAAM;IACvC,qBAAqBA,WAAS,OAAM;IACpC,kBAAkBA,WAAS,OAAO,EAAE;IACpC,UAAUA,WAAS,KAAK,KAAK;IAC7B,cAAcA,WAAS,KAAK,KAAK;IACjC,iBAAiBA,WAAS,IAAI,EAAE;IAChC,gBAAgBA,WAAS,KAAK,CAAC,SAAS,yBAAyB,mBAAmB,WAAW,iBAAiB,SAAS,GAAG,OAAO;IACnI,iCAAiCA,WAAS,OAAO,KAAK;IACtD,+BAA+BA,WAAS,IAAI,CAAC;IAC7C,4BAA4BA,WAAS,KAAK,KAAK;;EAGnD,OAAI;AACA,SAAK,4BAA4B;AACjC,SAAK,yBAAyB;AAE9B,SAAK,aAAa;AAClB,SAAK,eAAe;EACxB;EAEA,QAAK;AACD,QAAI,KAAK,4BAA4B;AACjC,cAAQ,eAAe,IAAI,cAAa,CAAE;AAC1C,cAAQ,8BAA8B,IAAI;AAC1C,cAAQ,yBAAyB,IAAI;IACzC;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,CAAC,KAAK,YAAY;AAClB,WAAK,aAAa;AAElB,UAAI,KAAK,0BAA0B,MAAM;AACrC,aAAK,4BAA4B,KAAK,uBAAuB,gBAAgBC,cAAa;MAC9F;AAEA,UAAI,KAAK,uBAAuB,MAAM;AAClC,aAAK,yBAAyB,KAAK,oBAAoB,gBAAgBA,cAAa;MACxF;AAEA,WAAK,kBAAiB;IAC1B;EACJ;EAEA,oBAAiB;AACb,YAAQ,eAAe,KAAK,kBAAkB,KAAK,cAAc,KAAK,UAAU,KAAK,iBAAiB,KAAK,wBAAwB,KAAK,IAAI,CAAC;EACjJ;EAEA,wBAAwB,aAAW;AAC/B,QAAI,KAAK;AAAc;AAEvB,QAAI,YAAY;AAChB,QAAI,aAAa;AAEjB,QAAI,eAAe;AACnB,aAAS,SAAS,aAAa;AAC3B,UAAI,OAAO,MAAM,OAAO;AACxB,UAAI,KAAK,QAAQ,CAAC,EAAE,SAAS,cAAc;AACvC,uBAAe,KAAK,QAAQ,CAAC,EAAE;MACnC;IACJ;AAEA,aAAS,SAAS,aAAa;AAC3B,UAAI,OAAO,MAAM,OAAO;AACxB,UAAI,YAAY,KAAK,QAAQ,CAAC;AAC9B,aAAO,UAAU,SAAS,cAAc;AACpC,oBAAY,IAAI,OAAO,SAAS;MACpC;AAEA,UAAI,WAAW;AACf,eAAS,IAAI,GAAG,IAAI,KAAK,+BAA+B,KAAK;AACzD,mBAAW,WAAW;MAC1B;AAEA,kBAAY,UAAU,OAAO,WAAW,KAAK,iCAAiC,MAAM,aAAa,QAAQ;AAEzG,UAAI,iBAAiB,KAAK,aAAa,MAAM,KAAK;AAClD,mBAAa,WAAW,OAAO,gBAAgB,QAAQ;IAC3D;AAEA,QAAI,KAAK,6BAA6B,MAAM;AACxC,WAAK,0BAA0B,OAAO;IAC1C;AAEA,QAAI,KAAK,0BAA0B,MAAM;AACrC,WAAK,uBAAuB,OAAO;IACvC;EACJ;EAEA,aAAa,OAAK;AACd,QAAI,iBAAiB,MAAM,SAAQ;AAEnC,QAAI,KAAK,kBAAkB,GAAG;AAC1B,uBAAiB,KAAK,YAAY,OAAO,MAAM,MAAM,IAAI;IAC7D,WAAW,KAAK,kBAAkB,GAAG;AACjC,uBAAiB,KAAK,YAAY,OAAO,OAAO,MAAM,IAAI;IAC9D,WAAW,KAAK,kBAAkB,GAAG;AACjC,uBAAiB,KAAK,YAAY,OAAO,OAAO,OAAO,IAAI;IAC/D,WAAW,KAAK,kBAAkB,GAAG;AACjC,uBAAiB,KAAK,YAAY,OAAO,MAAM,MAAM,KAAK;IAC9D,WAAW,KAAK,kBAAkB,GAAG;AACjC,uBAAiB,KAAK,YAAY,OAAO,OAAO,MAAM,KAAK;IAC/D;AAEA,WAAO;EACX;EAEA,YAAY,OAAO,cAAc,gBAAgB,gBAAc;AAC3D,QAAI,OAAO,KAAK,MAAM,QAAQ,GAAI;AAElC,QAAI,QAAQ;AACZ,QAAI,cAAc;AACd,cAAQ,KAAK,MAAM,OAAO,IAAI;AAC9B,cAAQ,QAAQ;IACpB;AAEA,QAAI,UAAU;AACd,QAAI,gBAAgB;AAChB,gBAAU,KAAK,MAAM,OAAO,EAAE;AAC9B,cAAQ,UAAU;IACtB;AAEA,QAAI,UAAU;AACd,QAAI,gBAAgB;AAChB,gBAAU,KAAK,MAAM,IAAI;IAC7B;AAEA,QAAI,gBAAgB;AAEpB,QAAI,gBAAgB;AAChB,sBAAiB,QAAQ,QAAQ,CAAC,EAAE,SAAS,MAAM,kBAAkB,gBAAiB,IAAI,OAAO,QAAQ,QAAQ,CAAC,CAAC,IAAI,QAAQ,QAAQ,CAAC;IAC5I;AAEA,QAAI,gBAAgB;AAChB,uBAAkB,QAAQ,QAAQ,CAAC,EAAE,SAAS,MAAM,kBAAkB,gBAAiB,IAAI,OAAO,QAAQ,QAAQ,CAAC,CAAC,IAAI,QAAQ,QAAQ,CAAC,MAAM,iBAAiB,MAAM,gBAAgB;IAC1L;AAEA,QAAI,cAAc;AACd,uBAAkB,MAAM,QAAQ,CAAC,EAAE,SAAS,MAAM,kBAAkB,kBAAmB,IAAI,OAAO,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,QAAQ,CAAC,MAAM,iBAAiB,MAAM,gBAAgB;IACtL;AAEA,WAAO;EACX;EAEA,SAAS,cAAY;AACjB,QAAI,kBAAkB,eAAe,aAAa,MAAM,YAAY;AAEpE,WAAO;EACX;EAEA,YAAS;AACL,SAAK,eAAe;EACxB;;;;AC7JE,SAAU,4CAA4C,gBAAgD,oBAAoB,IAAI,qBAAoB,GAAE;AACtJ,oBAAkB,KAAK,cAAc;AAErC,oBAAkB,kBAAkB;AACpC,oBAAkB,wBAAwB,KAAK,MAAO,kBAAkB,kBAAkB,eAAe,kBAAmB,eAAe,qBAAqB;AAEhK,oBAAkB,uCAAuC;AACzD,oBAAkB,gCAAgC,YAAY,GAAG,GAAG,CAAC;AAErE,SAAO;AACX;AAEO,IAAM,sBAAsB;EAC/B;;;;ACbE,IAAO,yBAAP,MAA6B;EAE/B,cAAA;AACI,SAAK,WAAW;AAEhB,SAAK,0BAA0B,IAAI,uCAAsC;AACzE,SAAK,wBAAwB,IAAI,qCAAoC;AAErE,SAAK,oBAAoB,IAAI,iCAAgC;AAE7D,SAAK,iBAAiB,IAAI,+BAA8B;AACxD,SAAK,kBAAkB,IAAI,+BAA8B;AAEzD,SAAK,wBAAwB,IAAI,qCAAoC;AAErE,SAAK,qBAAqB,IAAI,kCAAiC;AAE/D,SAAK,gBAAgB,IAAI,6BAA4B;EACzD;EAEA,KAAK,OAAK;EAEV;;AAGG,IAAI,4DAA4D;EACnE,QAAQ;;EACR,UAAU;;EACV,MAAM;;;;;;;;;;;AAYJ,IAAO,yCAAP,MAA6C;EAE/C,cAAA;AACI,SAAK,8BAA8B;AACnC,SAAK,iCAAiC;AAEtC,SAAK,iCAAiC;AAEtC,SAAK,wCAAwC;AAC7C,SAAK,wCAAwC;AAI7C,SAAK,uCAAuC;AAC5C,SAAK,gCAAgC,YAAW;AAEhD,SAAK,mCAAmC;AAExC,SAAK,uCAAuC;AAE5C,SAAK,gDAAgD;AACrD,SAAK,iDAAiD;AACtD,SAAK,sDAAsD;AAC3D,SAAK,sDAAsD;AAE3D,SAAK,iDAAiD;AAItD,SAAK,mDAAmD;AACxD,SAAK,4DAA4D;AACjE,SAAK,2DAA2D;AAChE,SAAK,qDAAqD;AAC1D,SAAK,4DAA4D;AAEjE,SAAK,uCAAuC;AAC5C,SAAK,mDAAmD;AACxD,SAAK,iDAAiD;AAEtD,SAAK,gEAAgE;AACrE,SAAK,+DAA+D;AAEpE,SAAK,gEAAgE;AACrE,SAAK,kEAAkE;AACvE,SAAK,+DAA+D;AACpE,SAAK,iEAAiE;AAEtE,SAAK,mDAAmD;AACxD,SAAK,0DAA0D;AAC/D,SAAK,iEAAiE;AACtE,SAAK,wEAAwE;AAC7E,SAAK,mEAAmE;AACxE,SAAK,0EAA0E;AAE/E,SAAK,mCAAmC;AACxC,SAAK,0CAA0C;AAC/C,SAAK,mDAAmD;AACxD,SAAK,mDAAmD;AAExD,SAAK,uCAAuC;AAC5C,SAAK,mDAAmD;AACxD,SAAK,iDAAiD;AAEtD,SAAK,mDAAmD;AACxD,SAAK,0DAA0D;AAC/D,SAAK,gEAAgE;AACrE,SAAK,+DAA+D;AACpE,SAAK,gEAAgE;AACrE,SAAK,+DAA+D;AACpE,SAAK,sEAAsE;AAC3E,SAAK,qEAAqE;AAE1E,SAAK,kDAAkD;AAEvD,SAAK,+DAA+D;AACpE,SAAK,+FAA+F;AAKpG,SAAK,6DAA6D;AAClE,SAAK,6CAA6C,0DAA0D;AAE5G,SAAK,mCAAmC,IAAI,kBAAiB;AAC7D,SAAK,mCAAmC,CAAA;EAC5C;EAEA,KAAK,OAAK;EAEV;;AAGE,IAAO,uCAAP,MAA2C;EAE7C,cAAA;AACI,SAAK,qCAAqC;AAE1C,SAAK,qCAAqC;AAC1C,SAAK,kDAAkD;AACvD,SAAK,0CAA0C;AAC/C,SAAK,oDAAoD;AAEzD,SAAK,qCAAqC;AAC1C,SAAK,8BAA8B,YAAW;AAE9C,SAAK,iCAAiC;AACtC,SAAK,0CAA0C;AAC/C,SAAK,iDAAiD;AAEtD,SAAK,iCAAiC;AAEtC,SAAK,oDAAoD;AAIzD,SAAK,iCAAiC,IAAI,kBAAiB;AAC3D,SAAK,iCAAiC,CAAA;EAC1C;EAEA,KAAK,OAAK;EAEV;;AAGG,IAAI,8CAA8C;EACrD,MAAM;EACN,sBAAsB;;EACtB,kCAAkC;;EAClC,qEAAqE;;EACrE,QAAQ;;;AAGN,IAAO,mCAAP,MAAuC;EAEzC,cAAA;AACI,SAAK,qBAAqB;AAE1B,SAAK,yBAAyB;AAE9B,SAAK,iCAAiC;AAKtC,SAAK,mCAAmC,4CAA4C;AAEpF,SAAK,wDAAwD;AAI7D,SAAK,gDAAgD;AAKrD,SAAK,0CAA0C;EACnD;EAEA,KAAK,OAAK;EAEV;;AAGE,IAAO,iCAAP,MAAqC;EAEvC,cAAA;AACI,SAAK,uBAAuB;AAC5B,SAAK,2BAA2B;AAEhC,SAAK,yBAAyB;AAC9B,SAAK,6BAA6B;AAElC,SAAK,yBAAyB;AAE9B,SAAK,kDAAkD;AAIvD,SAAK,8DAA8D;AACnE,SAAK,8DAA8D;AAGnE,SAAK,oEAAoE;AAIzE,SAAK,uBAAuB;AAE5B,SAAK,gCAAgC;AACrC,SAAK,+BAA+B;AAEpC,SAAK,oCAAoC;AACzC,SAAK,mCAAmC;AAExC,SAAK,2CAA2C;AAChD,SAAK,0CAA0C;AAE/C,SAAK,0CAA0C;AAC/C,SAAK,yCAAyC;AAE9C,SAAK,8CAA8C;AACnD,SAAK,6CAA6C;AAElD,SAAK,8EAA8E;AACnF,SAAK,4EAA4E;AAEjF,SAAK,6FAA6F;AAClG,SAAK,2FAA2F;AAChG,SAAK,sGAAsG;AAC3G,SAAK,oGAAoG;AAGzG,SAAK,qEAAqE;AAE1E,SAAK,oFAAoF;AAGzF,SAAK,8BAA8B;AACnC,SAAK,yCAAyC;AAC9C,SAAK,oDAAoD;AACzD,SAAK,2CAA2C;AAEhD,SAAK,4BAA4B;AACjC,SAAK,0CAA0C;AAC/C,SAAK,iCAAiC;AAEtC,SAAK,kCAAkC;AACvC,SAAK,gDAAgD;AACrD,SAAK,uCAAuC;AAE5C,SAAK,6CAA6C;AAGlD,SAAK,8EAA8E;EAGvF;EAEA,KAAK,OAAK;EAEV;;AAGE,IAAO,uCAAP,MAA2C;EAE7C,cAAA;AACI,SAAK,yBAAyB;AAE9B,SAAK,0BAA0B;AAC/B,SAAK,+BAA+B;AACpC,SAAK,+BAA+B;AAEpC,SAAK,gDAAgD;AACrD,SAAK,8CAA8C;AAQnD,SAAK,2CAA2C;EACpD;EAEA,KAAK,OAAK;EAEV;;AAGE,IAAO,oCAAP,MAAwC;EAE1C,cAAA;AACI,SAAK,wBAAwB,YAAW;AACxC,SAAK,4BAA4B,YAAW;EAShD;EAEA,KAAK,OAAK;EAEV;;AAGE,IAAO,+BAAP,MAAmC;EAErC,cAAA;AACI,SAAK,uBAAuB;AAE5B,SAAK,+BAA+B;AAEpC,SAAK,8CAA8C;AACnD,SAAK,8CAA8C;AAEnD,SAAK,4CAA4C;AACjD,SAAK,4CAA4C;AAEjD,SAAK,4BAA4B;AAEjC,SAAK,iCAAiC;AACtC,SAAK,kCAAkC;AAEvC,SAAK,8BAA8B;EACvC;EAEA,KAAK,OAAK;EAEV;;AAOJ,uBAAuB,UAAU,OAAO,SAASC,OAAK,OAAK;AACvD,OAAK,WAAW,MAAM;AAEtB,OAAK,wBAAwB,KAAK,MAAM,uBAAuB;AAC/D,OAAK,sBAAsB,KAAK,MAAM,qBAAqB;AAE3D,OAAK,kBAAkB,KAAK,MAAM,iBAAiB;AAEnD,OAAK,eAAe,KAAK,MAAM,cAAc;AAC7C,OAAK,gBAAgB,KAAK,MAAM,eAAe;AAE/C,OAAK,sBAAsB,KAAK,MAAM,qBAAqB;AAE3D,OAAK,mBAAmB,KAAK,MAAM,kBAAkB;AAErD,OAAK,cAAc,KAAK,MAAM,aAAa;AAC/C;AAEA,uCAAuC,UAAU,OAAO,SAASA,OAAK,OAAK;AACvE,OAAK,8BAA8B,MAAM;AACzC,OAAK,iCAAiC,MAAM;AAE5C,OAAK,iCAAiC,MAAM;AAE5C,OAAK,wCAAwC,MAAM;AACnD,OAAK,wCAAwC,MAAM;AAEnD,OAAK,uCAAuC,MAAM;AAClD,OAAK,8BAA8B,UAAU,MAAM,6BAA6B;AAEhF,OAAK,mCAAmC,MAAM;AAE9C,OAAK,uCAAuC,MAAM;AAElD,OAAK,gDAAgD,MAAM;AAC3D,OAAK,iDAAiD,MAAM;AAC5D,OAAK,sDAAsD,MAAM;AACjE,OAAK,sDAAsD,MAAM;AAEjE,OAAK,iDAAiD,MAAM;AAE5D,OAAK,mDAAmD,MAAM;AAC9D,OAAK,4DAA4D,MAAM;AACvE,OAAK,2DAA2D,MAAM;AACtE,OAAK,qDAAqD,MAAM;AAChE,OAAK,4DAA4D,MAAM;AAEvE,OAAK,uCAAuC,MAAM;AAClD,OAAK,iDAAiD,MAAM;AAC5D,OAAK,mDAAmD,MAAM;AAE9D,OAAK,gEAAgE,MAAM;AAC3E,OAAK,+DAA+D,MAAM;AAE1E,OAAK,gEAAgE,MAAM;AAC3E,OAAK,kEAAkE,MAAM;AAC7E,OAAK,+DAA+D,MAAM;AAC1E,OAAK,iEAAiE,MAAM;AAE5E,OAAK,mDAAmD,MAAM;AAC9D,OAAK,0DAA0D,MAAM;AACrE,OAAK,iEAAiE,MAAM;AAC5E,OAAK,wEAAwE,MAAM;AACnF,OAAK,mEAAmE,MAAM;AAC9E,OAAK,0EAA0E,MAAM;AAErF,OAAK,mCAAmC,MAAM;AAC9C,OAAK,0CAA0C,MAAM;AACrD,OAAK,mDAAmD,MAAM;AAC9D,OAAK,mDAAmD,MAAM;AAE9D,OAAK,uCAAuC,MAAM;AAClD,OAAK,mDAAmD,MAAM;AAC9D,OAAK,iDAAiD,MAAM;AAE5D,OAAK,mDAAmD,MAAM;AAC9D,OAAK,0DAA0D,MAAM;AACrE,OAAK,gEAAgE,MAAM;AAC3E,OAAK,+DAA+D,MAAM;AAC1E,OAAK,gEAAgE,MAAM;AAC3E,OAAK,+DAA+D,MAAM;AAC1E,OAAK,sEAAsE,MAAM;AACjF,OAAK,qEAAqE,MAAM;AAEhF,OAAK,kDAAkD,MAAM;AAE7D,OAAK,+DAA+D,MAAM;AAC1E,OAAK,+FAA+F,MAAM;AAE1G,OAAK,6DAA6D,MAAM;AACxE,OAAK,6CAA6C,MAAM;AAExD,OAAK,iCAAiC,QAAQ,MAAM,iCAAiC,QAAO,CAAE;AAC9F,OAAK,iCAAiC,QAAQ,MAAM,gCAAgC;AACxF;AAEA,qCAAqC,UAAU,OAAO,SAASA,OAAK,OAAK;AACrE,OAAK,qCAAqC,MAAM;AAEhD,OAAK,qCAAqC,MAAM;AAChD,OAAK,kDAAkD,MAAM;AAC7D,OAAK,0CAA0C,MAAM;AACrD,OAAK,oDAAoD,MAAM;AAE/D,OAAK,qCAAqC,MAAM;AAChD,OAAK,4BAA4B,UAAU,MAAM,2BAA2B;AAE5E,OAAK,iCAAiC,MAAM;AAC5C,OAAK,0CAA0C,MAAM;AACrD,OAAK,iDAAiD,MAAM;AAE5D,OAAK,iCAAiC,MAAM;AAE5C,OAAK,oDAAoD,MAAM;AAE/D,OAAK,+BAA+B,QAAQ,MAAM,+BAA+B,QAAO,CAAE;AAC1F,OAAK,+BAA+B,QAAQ,MAAM,8BAA8B;AACpF;AAEA,iCAAiC,UAAU,OAAO,SAASA,OAAK,OAAK;AACjE,OAAK,qBAAqB,MAAM;AAEhC,OAAK,yBAAyB,MAAM;AAEpC,OAAK,iCAAiC,MAAM;AAE5C,OAAK,mCAAmC,MAAM;AAE9C,OAAK,wDAAwD,MAAM;AAEnE,OAAK,gDAAgD,MAAM;AAE3D,OAAK,0CAA0C,MAAM;AACzD;AAEA,+BAA+B,UAAU,OAAO,SAASA,OAAK,OAAK;AAC/D,OAAK,uBAAuB,MAAM;AAClC,OAAK,2BAA2B,MAAM;AAEtC,OAAK,yBAAyB,MAAM;AACpC,OAAK,6BAA6B,MAAM;AAExC,OAAK,yBAAyB,MAAM;AACpC,OAAK,kDAAkD,MAAM;AAE7D,OAAK,8DAA8D,MAAM;AACzE,OAAK,8DAA8D,MAAM;AAEzE,OAAK,oEAAoE,MAAM;AAE/E,OAAK,uBAAuB,MAAM;AAElC,OAAK,gCAAgC,MAAM;AAC3C,OAAK,+BAA+B,MAAM;AAE1C,OAAK,oCAAoC,MAAM;AAC/C,OAAK,mCAAmC,MAAM;AAE9C,OAAK,2CAA2C,MAAM;AACtD,OAAK,0CAA0C,MAAM;AAErD,OAAK,0CAA0C,MAAM;AACrD,OAAK,yCAAyC,MAAM;AAEpD,OAAK,8CAA8C,MAAM;AACzD,OAAK,6CAA6C,MAAM;AAExD,OAAK,8EAA8E,MAAM;AACzF,OAAK,4EAA4E,MAAM;AACvF,OAAK,6FAA6F,MAAM;AACxG,OAAK,2FAA2F,MAAM;AACtG,OAAK,sGAAsG,MAAM;AACjH,OAAK,oGAAoG,MAAM;AAE/G,OAAK,qEAAqE,MAAM;AAChF,OAAK,oFAAoF,MAAM;AAE/F,OAAK,8BAA8B,MAAM;AACzC,OAAK,yCAAyC,MAAM;AACpD,OAAK,oDAAoD,MAAM;AAC/D,OAAK,2CAA2C,MAAM;AAEtD,OAAK,4BAA4B,MAAM;AACvC,OAAK,0CAA0C,MAAM;AACrD,OAAK,iCAAiC,MAAM;AAE5C,OAAK,kCAAkC,MAAM;AAC7C,OAAK,gDAAgD,MAAM;AAC3D,OAAK,uCAAuC,MAAM;AAElD,OAAK,6CAA6C,MAAM;AAExD,OAAK,8EAA8E,MAAM;AAC7F;AAEA,qCAAqC,UAAU,OAAO,SAASA,OAAK,OAAK;AACrE,OAAK,yBAAyB,MAAM;AAEpC,OAAK,0BAA0B,MAAM;AACrC,OAAK,+BAA+B,MAAM;AAC1C,OAAK,+BAA+B,MAAM;AAE1C,OAAK,gDAAgD,MAAM;AAC3D,OAAK,8CAA8C,MAAM;AAMzD,OAAK,2CAA2C,MAAM;AAC1D;AAEA,kCAAkC,UAAU,OAAO,SAASA,OAAK,OAAK;AAClE,OAAK,sBAAsB,UAAU,MAAM,qBAAqB;AAChE,OAAK,0BAA0B,UAAU,MAAM,yBAAyB;AAO5E;AAEA,6BAA6B,UAAU,OAAO,SAASA,OAAK,OAAK;AAC7D,OAAK,uBAAuB,MAAM;AAElC,OAAK,+BAA+B,MAAM;AAE1C,OAAK,8CAA8C,MAAM;AACzD,OAAK,8CAA8C,MAAM;AAEzD,OAAK,4CAA4C,MAAM;AACvD,OAAK,4CAA4C,MAAM;AAEvD,OAAK,4BAA4B,MAAM;AAEvC,OAAK,iCAAiC,MAAM;AAC5C,OAAK,kCAAkC,MAAM;AAE7C,OAAK,8BAA8B,MAAM;AAC7C;;;ACxlBM,SAAU,4BAA4B,eAAe,WAAW,IAAE;AACpE,SAAO,KAAK,6BAA6B,eAAe,WAAW,IAAI,IAAI;AAC/E;AAEM,SAAU,6BAA6B,eAAe,WAAW,IAAE;AACrE,SAAO,KAAK,6BAA6B,eAAe,WAAW,IAAI,KAAK;AAChF;AAEO,IAAI,+BAA+B,WAAA;AACtC,MAAI,qBAAqB,YAAW;AACpC,MAAI,oBAAoB,YAAW;AACnC,SAAO,SAASC,8BAA6B,eAAe,WAAW,IAAI,QAAM;AAC7E,QAAI,wBAAwB;AAE5B,sBAAkB,UAAU,EAAE;AAC9B,QAAI,CAAC,QAAQ;AACT,wBAAkB,YAAY,iBAAiB;IACnD;AAEA,QAAI,eAAe,cAAc,WAAW,iBAAiB;AAC7D,QAAI,gBAAgB,KAAK,oBAAoB;AACzC,qBAAe;IACnB,WAAW,gBAAgB,MAAM,KAAK,oBAAoB;AACtD,qBAAe;IACnB;AAEA,yBAAqB,UAAU,6BAA6B,eAAe,IAAI,kBAAkB;AACjG,4BAAwB,mBAAmB,WAAW,SAAS;AAE/D,QAAI,cAAc,mBAAmB,wBAAwB,WAAW,EAAE;AAC1E,QAAK,CAAC,eAAe,UAAY,eAAe,CAAC,QAAS;AACtD,+BAAyB;IAC7B;AAEA,QAAI,KAAK,IAAI,qBAAqB,KAAK,cAAc;AACjD,UAAI,gBAAgB,KAAK,gBAAgB,KAAK;AAC1C,gCAAwB,eAAe,KAAK,QAAQ,qBAAqB;MAC7E,OAAO;AACH,gCAAwB;MAC5B;IACJ;AAEA,WAAO;EACX;AACJ,EAAC;AAEM,IAAI,2BAA2B;EAClC;EACA;EACA;;;;AChDG,IAAI,wDAAwD;EAC/D,UAAU;EACV,KAAK;EACL,QAAQ;EACR,MAAM;EACN,WAAW;;AAGT,IAAO,iDAAP,MAAqD;EAEvD,cAAA;AACI,SAAK,WAAW;AAChB,SAAK,WAAW;AAEhB,SAAK,kBAAkB,sDAAsD;AAE7E,SAAK,aAAa;AAElB,SAAK,kBAAkB;AAEvB,SAAK,aAAa;AAClB,SAAK,eAAe;AAEpB,SAAK,WAAW;AAEhB,SAAK,yBAAyB;AAE9B,SAAK,sBAAsB;AAC3B,SAAK,uBAAuB;AAC5B,SAAK,8BAA8B;AACnC,SAAK,2BAA2B;AAChC,SAAK,gCAAgC;AACrC,SAAK,2BAA2B;AAEhC,SAAK,mCAAmC,IAAI,kBAAiB;AAC7D,SAAK,mCAAmC,CAAA;AAExC,SAAK,iCAAiC,IAAI,kBAAiB;AAC3D,SAAK,iCAAiC,CAAA;AAEtC,SAAK,gCAAgC;AACrC,SAAK,8BAA8B;EACvC;;AAGE,SAAU,iBAAiB,0BAA0B,4BAA4B,IAAI,uBAAsB,GAAE;AAC/G,4BAA0B,WAAW,yBAAyB;AAC9D,4BAA0B,wBAAwB,8BAA8B,yBAAyB;AACzG,4BAA0B,sBAAsB,qCAAqC,yBAAyB,WAAW;AAEzH,4BAA0B,sBAAsB,qCAAqC;AACrF,4BAA0B,sBAAsB,4BAA4B,SAAS,GAAG,GAAG,CAAC;AAE5F,MAAI,CAAC,yBAAyB,mBAAmB,yBAAyB,UAAU;AAChF,8BAA0B,wBAAwB,iCAAiC;AACnF,8BAA0B,sBAAsB,iCAAiC;EACrF;AAEA,4BAA0B,kBAAkB,qBAAqB,yBAAyB;AAE1F,4BAA0B,wBAAwB,wCAAwC,yBAAyB;AAInH,4BAA0B,eAAe,2BAA2B,yBAAyB;AAC7F,4BAA0B,eAAe,6BAA6B,yBAAyB,8BAA8B,IACzH,yBAAyB,8BAA+B,yBAAyB,WAAW,MAAO,MAAM;AAC7G,4BAA0B,eAAe,6BAA6B,KAAK,IAAI,0BAA0B,eAAe,4BAA4B,0BAA0B,wBAAwB,qCAAqC;AAC3O,4BAA0B,eAAe,oEAAoE,yBAAyB,WAAW;AAEjJ,4BAA0B,eAAe,uBAAuB,yBAAyB,uBAAuB,yBAAyB,2BAA2B;AACpK,4BAA0B,eAAe,uBAAuB,yBAAyB;AACzF,4BAA0B,eAAe,yBAAyB;AAClE,4BAA0B,eAAe,yBAAyB,yBAAyB;AAC3F,4BAA0B,eAAe,sEAAsE;AAE/G,4BAA0B,eAAe,gCAAgC;AACzE,4BAA0B,eAAe,+BAA+B;AAExE,4BAA0B,eAAe,2CAA4C,yBAAyB,WAAW,MAAO,MAAM;AACtI,4BAA0B,eAAe,0CAA0C,0BAA0B,eAAe;AAC5H,4BAA0B,eAAe,0CAA0C,0BAA0B,eAAe;AAC5H,4BAA0B,eAAe,yCAAyC,0BAA0B,eAAe;AAC3H,4BAA0B,eAAe,8CAA8C,0BAA0B,eAAe;AAChI,4BAA0B,eAAe,6CAA6C,0BAA0B,eAAe;AAE/H,4BAA0B,eAAe,8EAA8E;AACvH,4BAA0B,eAAe,4EAA4E;AAErH,MAAI,yBAAyB,UAAU;AACnC,8BAA0B,wBAAwB,wCAAwC,0BAA0B,wBAAwB;AAE5I,8BAA0B,gBAAgB,uBAAuB,0BAA0B,eAAe;AAC1G,8BAA0B,gBAAgB,yBAAyB,0BAA0B,eAAe;AAC5G,8BAA0B,gBAAgB,yBAAyB,0BAA0B,eAAe;AAE5G,8BAA0B,gBAAgB,2BAA2B,0BAA0B,eAAe;AAC9G,8BAA0B,gBAAgB,6BAA6B,0BAA0B,eAAe;AAChH,8BAA0B,gBAAgB,oEAAoE,0BAA0B,eAAe;AACvJ,8BAA0B,gBAAgB,sEAAsE,0BAA0B,eAAe;AAEzJ,8BAA0B,gBAAgB,gCAAgC,0BAA0B,eAAe;AACnH,8BAA0B,gBAAgB,+BAA+B,0BAA0B,eAAe;AAElH,8BAA0B,gBAAgB,2CAA2C,0BAA0B,eAAe;AAC9H,8BAA0B,gBAAgB,0CAA0C,0BAA0B,eAAe;AAC7H,8BAA0B,gBAAgB,0CAA0C,0BAA0B,eAAe;AAC7H,8BAA0B,gBAAgB,yCAAyC,0BAA0B,eAAe;AAC5H,8BAA0B,gBAAgB,8CAA8C,0BAA0B,eAAe;AACjI,8BAA0B,gBAAgB,6CAA6C,0BAA0B,eAAe;AAEhI,8BAA0B,gBAAgB,8EAA8E,0BAA0B,eAAe;AACjK,8BAA0B,gBAAgB,4EAA4E,0BAA0B,eAAe;EACnK;AAEA,MAAI,yBAAyB,0BAA0B;AACnD,8BAA0B,eAAe,8BAA8B;AACvE,8BAA0B,eAAe,2CAA2C,KAAK,IAAI,IAAI,0BAA0B,eAAe,sBAAsB;EACpK;AAIA,4BAA0B,wBAAwB,iCAAiC,KAAK,yBAAyB,gCAAgC;AACjJ,4BAA0B,wBAAwB,iCAAiC,QAAQ,yBAAyB,gCAAgC;AAEpJ,4BAA0B,sBAAsB,+BAA+B,KAAK,yBAAyB,8BAA8B;AAC3I,4BAA0B,sBAAsB,+BAA+B,QAAQ,yBAAyB,8BAA8B;AAI9I,MAAI,yBAAyB,+BAA+B;AACxD,8BAA0B,cAAc,uBAAuB;AAC/D,8BAA0B,cAAc,8CAA8C;AACtF,8BAA0B,cAAc,8CAA8C;EAC1F;AAEA,MAAI,yBAAyB,6BAA6B;AACtD,8BAA0B,cAAc,uBAAuB;AAC/D,8BAA0B,cAAc,4CAA4C;AACpF,8BAA0B,cAAc,4CAA4C;EACxF;AAMA,MAAI,yBAAyB,mBAAmB,sDAAsD,UAAU;AAC5G,8BAA0B,wBAAwB,iCAAiC;AAEnF,8BAA0B,wBAAwB,iDAAiD;AACnG,8BAA0B,wBAAwB,iDAAiD;AAGnG,8BAA0B,wBAAwB,mCAAmC;AAErF,8BAA0B,wBAAwB,mCAAmC;AACrF,8BAA0B,wBAAwB,0CAA0C;AAC5F,8BAA0B,wBAAwB,uCAAuC;AACzF,8BAA0B,wBAAwB,mDAAmD;AACrG,8BAA0B,wBAAwB,mDAAmD;AAIrG,8BAA0B,sBAAsB,qCAAqC;AACrF,8BAA0B,sBAAsB,kDAAkD;AAClG,8BAA0B,sBAAsB,0CAA0C;AAE1F,8BAA0B,sBAAsB,iCAAiC;AACjF,8BAA0B,sBAAsB,0CAA0C;AAE1F,8BAA0B,sBAAsB,oDAAoD;AAEpG,QAAI,yBAAyB,YAAY;AACrC,gCAA0B,kBAAkB,yBAAyB;AACrE,gCAA0B,kBAAkB,0CAA0C;IAC1F;EACJ;AAEA,MAAI,yBAAyB,mBAAmB,sDAAsD,KAAK;AACvG,8BAA0B,wBAAwB,mCAAmC;AACrF,8BAA0B,wBAAwB,uCAAuC;AACzF,8BAA0B,wBAAwB,uCAAuC;AACzF,8BAA0B,wBAAwB,4DAA4D;AAC9G,8BAA0B,wBAAwB,wEAAwE;AAI1H,8BAA0B,sBAAsB,0CAA0C;AAC1F,8BAA0B,sBAAsB,oDAAoD,MAAM,0BAA0B,sBAAsB;AAI1J,8BAA0B,kBAAkB,yBAAyB;AACrE,8BAA0B,kBAAkB,iCAAiC;AAC7E,8BAA0B,kBAAkB,mCAAmC,4CAA4C;AAC3H,8BAA0B,kBAAkB,wDAAwD;AACpG,8BAA0B,kBAAkB,gDAAgD;AAC5F,8BAA0B,kBAAkB,0CAA0C;EAC1F;AAEA,MAAI,yBAAyB,mBAAmB,sDAAsD,QAAQ;AAC1G,8BAA0B,wBAAwB,mDAAmD;AACrG,8BAA0B,wBAAwB,4DAA4D;AAC9G,8BAA0B,wBAAwB,gEAAgE;AAElH,8BAA0B,wBAAwB,0CAA0C;AAC5F,8BAA0B,wBAAwB,mDAAmD;AACrG,8BAA0B,wBAAwB,mDAAmD;AAIrG,8BAA0B,sBAAsB,iDAAiD;AAEjG,8BAA0B,sBAAsB,qCAAqC;AACrF,8BAA0B,sBAAsB,0CAA0C;AAC1F,8BAA0B,sBAAsB,oDAAoD,MAAM,0BAA0B,sBAAsB;AAI1J,8BAA0B,kBAAkB,yBAAyB;AACrE,8BAA0B,kBAAkB,0CAA0C;AAEtF,QAAI,yBAAyB,YAAY;AACrC,gCAA0B,kBAAkB,mCAAmC,4CAA4C;AAC3H,gCAA0B,kBAAkB,wDAAwD;AACpG,gCAA0B,kBAAkB,gDAAgD;IAChG;EACJ;AAEA,MAAI,yBAAyB,mBAAmB,sDAAsD,MAAM;AACxG,QAAI,0BAA0B,kBAAkB,oBAAoB;AAChE,gCAA0B,wBAAwB,iDAAiD;AAEnG,gCAA0B,wBAAwB,+DAA+D;AACjH,gCAA0B,wBAAwB,+FAA+F;IACrJ;AAEA,8BAA0B,wBAAwB,2DAA2D;AAC7G,8BAA0B,wBAAwB,qDAAqD;AACvG,8BAA0B,wBAAwB,4DAA4D;AAE9G,8BAA0B,wBAAwB,+DAA+D;AACjH,8BAA0B,wBAAwB,iEAAiE;AACnH,8BAA0B,wBAAwB,wEAAwE;AAI1H,8BAA0B,sBAAsB,qCAAqC;AACrF,8BAA0B,sBAAsB,0CAA0C;AAC1F,8BAA0B,sBAAsB,oDAAoD,MAAM,0BAA0B,sBAAsB;AAI1J,8BAA0B,kBAAkB,yBAAyB;AAErE,QAAI,yBAAyB,YAAY;AACrC,gCAA0B,kBAAkB,iCAAiC;IACjF;AAIA,8BAA0B,eAAe,oCAAoC;AAC7E,8BAA0B,gBAAgB,oCAAoC;AAI9E,QAAI,aAAa,yBAAyB,WAAW;AACrD,QAAI,yBAAyB,aAAa,yBAAyB,eAAe,YAAY;AAC1F,gCAA0B,sBAAsB,yBAAyB;AAEzE,gCAA0B,sBAAsB,0BAA0B,KAAK,KAAM,yBAAyB,aAAa,yBAAyB,eAAgB,UAAU;AAC9K,gCAA0B,sBAAsB,+BAA+B;AAC/E,gCAA0B,sBAAsB,+BAA+B;IACnF;EACJ;AAEA,MAAI,yBAAyB,mBAAmB,sDAAsD,WAAW;AAC7G,8BAA0B,wBAAwB,uCAAuC;AAEzF,8BAA0B,wBAAwB,mDAAmD;AACrG,8BAA0B,wBAAwB,kEAAkE;AACpH,8BAA0B,wBAAwB,iEAAiE;AAEnH,8BAA0B,wBAAwB,mDAAmD;AACrG,8BAA0B,wBAAwB,0DAA0D;AAC5G,8BAA0B,wBAAwB,mEAAmE;AACrH,8BAA0B,wBAAwB,0EAA0E;AAE5H,8BAA0B,wBAAwB,uCAAuC;AAEzF,8BAA0B,wBAAwB,gEAAgE;AAClH,8BAA0B,wBAAwB,gEAAgE;AAElH,8BAA0B,wBAAwB,+DAA+D;AACjH,8BAA0B,wBAAwB,+FAA+F;AAIjJ,8BAA0B,eAAe,6CAA6C;AACtF,8BAA0B,gBAAgB,6CAA6C,0BAA0B,eAAe;EACpI;AAEA,SAAO;AACX;AAEM,SAAU,qDAAqD,uBAAuB,2BAA2B,IAAI,uBAAsB,GAAE;AAC/I,2BAAyB,KAAK,qBAAqB;AAEnD,2BAAyB,wBAAwB,iCAAiC;AAClF,2BAAyB,wBAAwB,0CAC7C,KAAK,MAAO,yBAAyB,wBAAwB,iCAAiC,sBAAsB,wBAAwB,iCACtI,sBAAsB,wBAAwB,uCAAuC;AAE/F,2BAAyB,wBAAwB,uCAAuC;AACxF,2BAAyB,wBAAwB,8BAA8B,SAAS,GAAG,GAAG,CAAC;AAE/F,SAAO;AACX;AAEO,IAAI,8BAA8B;EACrC;EACA;;;;AC9TG,IAAI,0BAA0B;EACjC,UAAU;EACV,OAAO;EACP,uBAAuB;EACvB,oBAAoB;;AAGlB,IAAO,0BAAP,MAA8B;EAEhC,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,+BAA+B;AAEpC,SAAK,yBAAyB;AAC9B,SAAK,0BAA0B;AAE/B,SAAK,qCAAqC;AAE1C,SAAK,iCAAiC;AACtC,SAAK,6BAA6B;AAElC,SAAK,4BAA4B;AACjC,SAAK,mCAAmC;AACxC,SAAK,+BAA+B;AACpC,SAAK,sCAAsC;AAC3C,SAAK,gCAAgC;AACrC,SAAK,wCAAwC;AAE7C,SAAK,wBAAwB,wBAAwB;AAErD,SAAK,qBAAqB;AAE1B,SAAK,uBAAuB;AAC5B,SAAK,gCAAgC;AACrC,SAAK,6BAA6B;AAClC,SAAK,wBAAwB;AAI7B,SAAK,WAAW;AAEhB,SAAK,iBAAiB;EAC1B;;AAIE,IAAO,oBAAP,MAAwB;EAE1B,YAAY,SAAS,IAAI,wBAAuB,GAAE;AAC9C,SAAK,YAAY;AAEjB,SAAK,iBAAiB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE;AAExE,SAAK,sCAAsC;AAC3C,SAAK,8BAA8B;AACnC,SAAK,mCAAmC,aAAY;AAEpD,SAAK,qCAAqC;AAC1C,SAAK,+BAA+B;AACpC,SAAK,6BAA6B,IAAI,MAAM,GAAG,KAAK;AACpD,SAAK,sBAAsB;AAE3B,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAEzB,SAAK,0BAA0B;AAE/B,SAAK,wBAAwB;AAC7B,SAAK,4BAA4B;AAEjC,SAAK,iBAAiB;AACtB,SAAK,+BAA+B;AACpC,SAAK,0BAA0B;AAC/B,SAAK,uBAAuB;AAC5B,SAAK,2BAA2B;AAChC,SAAK,8BAA8B;AACnC,SAAK,0CAA0C;AAC/C,SAAK,6CAA6C;AAClD,SAAK,6CAA6C;AAElD,SAAK,oCAAoC;AAEzC,SAAK,YAAY;AACjB,SAAK,eAAe;AAIpB,SAAK,yBAAyB;AAC9B,SAAK,gCAAgC;EACzC;EAEA,QAAK;AACD,SAAK,oBAAoB,KAAK,UAAU,oBAAoB;AAC5D,SAAK,6BAA6B,KAAK,UAAU,6BAA6B;AAC9E,SAAK,0BAA0B,KAAK,UAAU,0BAA0B;AAExE,SAAK,oBAAmB;AAExB,SAAK,sBAAsB,KAAK,cAAc;AAE9C,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,MAAM,MAAM,KAAK,UAAU,QAAQ;EAC/J;EAEA,UAAU,QAAM;AACZ,SAAK,YAAY;EACrB;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,YAAS;AACL,WAAO,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE;EAC7D;EAEA,UAAO;AACH,WAAO,KAAK;EAChB;EAEA,gBAAa;AACT,WAAO,KAAK,cAAa,IAAK,KAAK,UAAU;EACjD;EAEA,gBAAa;EAEb;EAEA,qBAAqB,uBAAuB,aAAY,GAAE;EAE1D;EAEA,qBAAqB,uBAAuB,aAAY,GAAE;AACtD,WAAO,KAAK,QAAO,EAAG,oBAAoB,oBAAoB;EAClE;EAEA,gBAAgB,kBAAkB,YAAW,GAAE;EAE/C;EAEA,gBAAgB,kBAAkB,YAAW,GAAE;AAC3C,WAAO,KAAK,eAAe,eAAe,eAAe;EAC7D;EAEA,oBAAoB,sBAAsB,YAAW,GAAE;EAEvD;EAEA,oBAAoB,sBAAsB,YAAW,GAAE;AACnD,WAAO,KAAK,QAAO,EAAG,mBAAmB,mBAAmB;EAChE;EAEA,WAAQ;AACJ,WAAO,KAAK,2BAA2B,KAAK,KAAK,sCAAsC,KAAK,KAAK,8CAA8C,KAAK,KAAK,gCAAgC,KAAK,CAAC,KAAK,2BAA2B,UAAS,KAAM,CAAC,KAAK;EACxP;EAEA,cAAc,QAAQ,sBAAsB,MAAI;AAC5C,SAAK,eAAe,QAAQ,QAAQ,QAAQ,mBAAmB;EACnE;EAEA,yBAAyB,wBAAwB,MAAI;AACjD,SAAK,eAAe,KAAK,gBAAgB,KAAK,yBAAyB,KAAK,sBAAsB,qBAAqB;EAC3H;EAEA,mBAAmB,QAAM;AACrB,SAAK,oBAAoB,MAAM;AAE/B,QAAI,CAAC,KAAK,kBAAkB;AACxB,WAAK,oBAAmB;AACxB,WAAK,sBAAsB,KAAK,cAAc;IAClD;EACJ;EAEA,4BAA4B,QAAM;AAC9B,SAAK,6BAA6B,MAAM;AAExC,QAAI,KAAK,kBAAkB;AACvB,WAAK,oBAAmB;IAC5B;EACJ;EAEA,6BAA0B;AACtB,SAAK,yBAAyB,IAAI;EACtC;EAEA,yBAAyB,SAAS,MAAI;AAClC,SAAK,0BAA0B,MAAM;AAErC,QAAI,KAAK,kBAAkB;AACvB,WAAK,oBAAmB;IAC5B;EACJ;EAEA,4BAAyB;AACrB,WAAO,KAAK;EAChB;EAEA,qCAAkC;AAC9B,WAAO,KAAK;EAChB;EAEA,kCAA+B;AAC3B,WAAO,KAAK;EAChB;EAEA,SAAS,UAAQ;EAEjB;EAEA,SAAS,UAAQ;AACb,SAAK,SAAS,QAAQ;EAC1B;EAEA,qBAAqB,kBAAgB;EAErC;EAEA,qBAAqB,kBAAgB;EAErC;EAEA,kCAAkC,mBAAiB;EAEnD;EAEA,eAAe,cAAc,iBAAiB,MAAI;EAElD;EAEA,eAAe,cAAY;EAG3B;EAEA,gBAAa;AACT,WAAO;EACX;EAEA,gBAAa;AACT,WAAO,CAAC,KAAK;EACjB;EAEA,oBAAoB,cAAc,iBAAiB,MAAI;EAEvD;EAEA,sBAAmB;EAEnB;EAEA,WAAW,UAAU,KAAK,MAAM,iBAAiB,MAAI;EAErD;EAEA,WAAW,WAAW,KAAK,MAAM,iBAAiB,MAAI;EAEtD;EAEA,WAAW,UAAU,KAAK,MAAI;EAC9B;EAEA,WAAW,WAAW,KAAK,MAAI;EAC/B;EAEA,mBAAgB;AACZ,YAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,cAAc,uBAAsB;AACtF,SAAK,sBAAsB,KAAK,cAAc;EAClD;EAEA,OAAO,IAAE;AACL,SAAK,wBAAwB;AAE7B,QAAI,KAAK,2BAA2B,GAAG;AACnC,WAAK;AACL,WAAK,0BAA0B,KAAK,IAAI,GAAG,KAAK,uBAAuB;IAC3E;AAEA,QAAI,KAAK,qCAAqC,GAAG;AAC7C,WAAK;AACL,UAAI,KAAK,sCAAsC,GAAG;AAC9C,aAAK,qBAAoB;AACzB,aAAK,0BAA0B,KAAK;MACxC;IACJ;AAEA,QAAI,KAAK,+BAA+B,KAAK,CAAC,KAAK,2BAA2B,UAAS,GAAI;AACvF,WAAK;AACL,UAAI,KAAK,gCAAgC,GAAG;AACxC,aAAK,eAAc;AACnB,aAAK,0BAA0B,KAAK;MACxC;IACJ;AAGA,QAAI,KAAK,2BAA2B,UAAS,GAAI;AAC7C,UAAI,KAAK,+BAA+B,GAAG;AACvC,aAAK;MACT,OAAO;AACH,aAAK,2BAA2B,OAAO,EAAE;AACzC,YAAI,KAAK,2BAA2B,OAAM,GAAI;AAC1C,eAAK,eAAc;AACnB,eAAK,0BAA0B,KAAK;QACxC;MACJ;IACJ;AAEA,QAAI,KAAK,6CAA6C,GAAG;AACrD,WAAK;AACL,UAAI,KAAK,8CAA8C,GAAG;AACtD,YAAI,KAAK,kBAAkB;AACvB,cAAI,UAAU,QAAQ,2BAA2B,KAAK,UAAU,QAAQ;AACxE,cAAI,WAAW,KAAK,yCAAyC;AACzD,gBAAI,sBAAsB,KAAK,eAAe,eAAc;AAE5D,gBAAI,cAAc,KAAK,uBAAuB,KAAK,UAAU;AAC7D,gBAAI,oBAAoB,KAAK,uBAAuB,mBAAmB;AAEvE,iBAAK,2BAA2B,KAAK,4BAA4B,cAAc;AAE/E,iBAAK,oBAAmB;AAExB,iBAAK,0CAA0C;UACnD,WAAW,CAAC,WAAW,KAAK,4CAA4C;AACpE,gBAAI,sBAAsB,KAAK,eAAe,eAAc;AAE5D,gBAAI,cAAc,KAAK,0BAA0B,KAAK,UAAU;AAChE,gBAAI,oBAAoB,KAAK,uBAAuB,mBAAmB;AAEvE,iBAAK,8BAA8B,KAAK,+BAA+B,cAAc;AAErF,iBAAK,oBAAmB;AAExB,iBAAK,6CAA6C;UACtD;QACJ;MACJ;IACJ;AAEA,QAAI,KAAK,SAAQ,GAAI;AACjB,WAAK,eAAe,yBAAyB,KAAK,gCAAgC;IACtF;AAEA,QAAI,KAAK,UAAU,kBAAkB,QAAQ,eAAe,KAAK,UAAU,QAAQ,GAAG;AAClF,WAAK,aAAa,EAAE;IACxB;EACJ;EAEA,eAAe,aAAa,sBAAsB,mBAAmB,sBAAsB,MAAI;AAC3F,QAAI,CAAC,uBAAuB,CAAC,KAAK,kBAAkB;AAChD,WAAK,oBAAoB,WAAW;IACxC;AAEA,QAAI,CAAC,uBAAuB,KAAK,kBAAkB;AAC/C,WAAK,6BAA6B,oBAAoB;AACtD,WAAK,0BAA0B,iBAAiB;IACpD;AAEA,SAAK,oBAAmB;AAExB,QAAI,CAAC,KAAK,kBAAkB;AACxB,WAAK,sBAAsB,KAAK,cAAc;IAClD;EACJ;EAEA,oBAAoB,QAAM;AACtB,SAAK,iBAAiB;AACtB,SAAK,+BAA+B;EACxC;EAEA,6BAA6B,oBAAkB;AAC3C,QAAI,sBAAsB,MAAM;AAC5B,WAAK,0BAA0B;AAC/B,WAAK,6CAA6C;AAElD,UAAI,KAAK,kBAAkB;AACvB,aAAK,8BAA8B,KAAK,+BAA+B,qBAAqB,KAAK,cAAa;MAClH,OAAO;AACH,aAAK,6CAA6C;MACtD;IACJ,OAAO;AACH,WAAK,0BAA0B;AAC/B,WAAK,8BAA8B;IACvC;EACJ;EAEA,0BAA0B,iBAAe;AACrC,QAAI,mBAAmB,MAAM;AACzB,WAAK,uBAAuB;AAC5B,WAAK,0CAA0C;AAE/C,UAAI,KAAK,kBAAkB;AACvB,aAAK,2BAA2B,KAAK,4BAA4B,kBAAkB,KAAK,cAAa;MACzG,OAAO;AACH,aAAK,0CAA0C;MACnD;IACJ,OAAO;AACH,WAAK,uBAAuB;AAC5B,WAAK,2BAA2B;IACpC;EACJ;EAEA,6BAA0B;AACtB,WAAQ,KAAK,qCAAqC,QAAQ,KAAK,UAAU,yBAAyB,wBAAwB,sBACrH,KAAK,qCAAqC,QAAQ,KAAK,sCACnD,KAAK,UAAU,yBAAyB,wBAAwB,yBAAyB,KAAK,UAAU,yBAAyB,wBAAwB;EACtK;EAEA,gCAA6B;AACzB,WAAQ,KAAK,qCAAqC,QAAQ,KAAK,UAAU,yBAAyB,wBAAwB,yBACrH,KAAK,qCAAqC,QAAQ,CAAC,KAAK,sCACpD,KAAK,UAAU,yBAAyB,wBAAwB,yBAAyB,KAAK,UAAU,yBAAyB,wBAAwB;EACtK;EAEA,sBAAsB,QAAM;EAE5B;EAEA,aAAa,IAAE;AACX,YAAQ,sBAAsB,KAAK,UAAU,QAAQ,EAAE,YAAY,GAAG,KAAK,gBAAe,GAAI,KAAK,gBAAe,GAAI,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AAEnJ,YAAQ,MAAM,KAAK,cAAa,CAAE;EACtC;EAEA,uBAAuB,UAAQ;EAE/B;EAEA,kBAAkB,YAAY,SAAO;EAErC;EAEA,gBAAgB,SAAO;EAEvB;EAEA,sBAAsB,SAAO;EAE7B;EAEA,oBAAoB,SAAO;EAE3B;EAEA,eAAY;EAEZ;EAEA,iBAAc;EAEd;EAEA,uBAAoB;EAEpB;EAEA,+BAA+B,QAAQ,gBAAc;EAErD;EAEA,sBAAmB;EAEnB;EAEA,2BAA2B,gBAAc;EAEzC;EAEA,2BAA2B,oBAAkB;EAE7C;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,YAAQ,kBAAkB,KAAK,UAAU,QAAQ,GAAG,sBAAsB,SAAS,KAAK,yBAAyB;AACjH,YAAQ,WAAW,KAAK,UAAU,QAAQ,GAAG,oBAAoB,oBAAoB,KAAK,gCAAgC;AAC1H,YAAQ,wCAAwC,MAAM,KAAK,UAAU,QAAQ;EACjF;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAOJ,kBAAkB,UAAU,gBAAgB,WAAA;AACxC,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,gBAAa;AACzB,mBAAe,KAAK,eAAe,eAAe,YAAY;AAC9D,QAAI,aAAa,KAAK,uBAAuB,YAAY;AAEzD,WAAO;EACX;AACJ,EAAC;AAED,kBAAkB,UAAU,uBAAuB,WAAA;AAC/C,MAAI,eAAe,YAAW;AAC9B,MAAI,mBAAmB,YAAW;AAClC,SAAO,SAAS,qBAAqB,uBAAuB,aAAY,GAAE;AACtE,yBAAqB,8BAA8B,KAAK,gBAAgB,YAAY,GAAG,KAAK,oBAAoB,gBAAgB,CAAC;AACjI,WAAO;EACX;AACJ,EAAC;AAED,kBAAkB,UAAU,sBAAsB,WAAA;AAC9C,MAAI,WAAW,YAAW;AAC1B,MAAI,cAAc,YAAW;AAC7B,SAAO,SAAS,oBAAoB,sBAAsB,YAAW,GAAE;AACnE,eAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AACvF,kBAAc,KAAK,eAAe,cAAc,WAAW;AAG3D,QAAI,cAAc,YAAY,WAAW,QAAQ;AACjD,QAAI,YAAY;AAChB,QAAI,cAAc,WAAW;AACzB,oBAAc,KAAK,eAAe,WAAW,WAAW;IAC5D,WAAW,cAAc,MAAM,WAAW;AACtC,oBAAc,KAAK,eAAe,SAAS,WAAW;IAC1D;AAEA,kBAAc,YAAY,8BAA8B,UAAU,WAAW;AAC7E,gBAAY,eAAe,WAAW;AAEtC,wBAAoB,WAAW,UAAU,WAAW;AACpD,WAAO;EACX;AACJ,EAAC;AAED,kBAAkB,UAAU,kBAAkB,WAAA;AAC1C,MAAI,eAAe,YAAW;AAC9B,MAAI,WAAW,YAAW;AAC1B,SAAO,SAAS,gBAAgB,kBAAkB,YAAW,GAAE;AAC3D,mBAAe,KAAK,eAAe,eAAe,YAAY;AAC9D,QAAI,aAAa,KAAK,uBAAuB,YAAY;AAEzD,eAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AACvF,sBAAkB,aAAa,SAAS,SAAS,WAAW,YAAY,eAAe,GAAG,eAAe;AAEzG,WAAO;EACX;AACJ,EAAC;AAED,kBAAkB,UAAU,WAAW,SAAS,SAAS,UAAQ;AAC7D,UAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,aAAa,QAAQ;AACpF;AAEA,kBAAkB,UAAU,iBAAiB,WAAA;AACzC,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,MAAI,sBAAsB,YAAW;AACrC,MAAI,sBAAsB,YAAW;AACrC,MAAI,kBAAkB,YAAW;AACjC,MAAI,uBAAuB,YAAW;AACtC,MAAI,iBAAiB,YAAW;AAChC,MAAI,gBAAgB,YAAW;AAC/B,MAAI,kBAAkB,YAAW;AACjC,MAAI,yBAAyB,YAAW;AACxC,SAAO,SAAS,eAAe,cAAc,iBAAiB,MAAI;AAC9D,QAAIC,SAAQ,aAAa,qBAAoB;AAC7C,QAAIA,UAAS,MAAS;AAClB;IACJ;AAEA,0BAAsB,KAAK,eAAe,eAAe,mBAAmB;AAC5E,eAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AACvF,mBAAe,aAAa,aAAa,YAAY;AAErD,QAAI,CAAC,aAAa,cAAc,QAAQ,MAClC,kBAAkB,QAAQ,KAAK,UAAU,wBAA0B,iBAAkB;AACvF,4BAAsB,KAAK,oBAAoB,mBAAmB;AAElE,wBAAkB,oBAAoB,gBAAgB,cAAc,eAAe;AACnF,uBAAiB,gBAAgB,gBAAgB,cAAc;AAE/D,2BAAqB,UAAU,eAAe;AAC9C,2BAAqB,WAAW,UAAU,cAAc;AAExD,sBAAgB,oBAAoB,oBAAoB,sBAAsB,aAAa;IAC/F,OAAO;AACH,oBAAc,UAAU,YAAY;IACxC;AAEA,YAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,oBAAoB,eAAe,mBAAmB;AAEjH,sBAAkB,KAAK,eAAe,eAAe,eAAe;AAEpE,6BAAyB,oBAAoB,SAAS,iBAAiB,sBAAsB;AAC7F,QAAI,uBAAuB,YAAW,IAAK,MAAS;AAChD,WAAK,SAAS,sBAAsB;IACxC;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,iBAAiB,WAAA;AACzC,MAAI,kBAAkB,YAAW;AACjC,MAAI,YAAY,YAAW;AAC3B,SAAO,SAAS,eAAe,cAAY;AACvC,QAAI,KAAK,cAAa,GAAI;AACtB,WAAK,eAAe,cAAc,YAAY;AAC9C,wBAAkB,KAAK,eAAe,mBAAmB,eAAe;AAExE,cAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,OAAO,mBAAmB,eAAe;AAE3F,UAAI,CAAC,KAAK,kBAAkB;AACxB,0BAAkB,gBAAgB,uBAAuB,KAAK,IAAI,gBAAgB,WAAW,SAAS,GAAG,eAAe;AACxH,gBAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,cAAc,mBAAmB,eAAe;MACtG;IACJ;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,sBAAsB,WAAA;AAC9C,MAAI,sBAAsB,YAAW;AACrC,MAAI,uBAAuB,YAAW;AACtC,SAAO,SAAS,oBAAoB,cAAc,iBAAiB,MAAI;AACnE,0BAAsB,KAAK,oBAAoB,mBAAmB;AAClE,2BAAuB,oBAAoB,oBAAoB,cAAc,oBAAoB;AACjG,SAAK,eAAe,sBAAsB,cAAc;EAC5D;AACJ,EAAC;AAED,kBAAkB,UAAU,sBAAsB,WAAA;AAC9C,MAAI,sBAAsB,YAAW;AACrC,MAAI,uBAAuB,YAAW;AACtC,SAAO,SAAS,oBAAoB,cAAY;AAC5C,0BAAsB,KAAK,oBAAoB,mBAAmB;AAClE,2BAAuB,oBAAoB,oBAAoB,cAAc,oBAAoB;AACjG,SAAK,eAAe,oBAAoB;EAC5C;AACJ,EAAC;AAED,kBAAkB,UAAU,uBAAuB,WAAA;AAC/C,MAAI,sBAAsB,YAAW;AACrC,MAAI,4BAA4B,YAAW;AAC3C,SAAO,SAAS,qBAAqB,kBAAgB;AACjD,0BAAsB,KAAK,eAAe,eAAe,mBAAmB;AAC5E,gCAA4B,iBAAiB,SAAS,qBAAqB,yBAAyB;AACpG,SAAK,SAAS,yBAAyB;EAC3C;AACJ,EAAC;AAED,kBAAkB,UAAU,uBAAuB,WAAA;AAC/C,MAAI,sBAAsB,YAAW;AACrC,MAAI,4BAA4B,YAAW;AAC3C,SAAO,SAAS,qBAAqB,kBAAgB;AACjD,0BAAsB,KAAK,gBAAgB,mBAAmB;AAC9D,gCAA4B,iBAAiB,SAAS,qBAAqB,yBAAyB;AACpG,SAAK,SAAS,yBAAyB;EAC3C;AACJ,EAAC;AAED,kBAAkB,UAAU,oCAAoC,WAAA;AAC5D,MAAI,eAAe,YAAW;AAC9B,MAAI,WAAW,YAAW;AAC1B,MAAI,4BAA4B,YAAW;AAC3C,MAAI,wBAAwB,YAAW;AACvC,MAAI,mBAAmB,YAAW;AAClC,MAAI,gBAAgB,YAAW;AAC/B,MAAI,cAAc,YAAW;AAC7B,MAAI,wBAAwB,YAAW;AACvC,MAAI,+BAA+B,YAAW;AAC9C,MAAI,oBAAoB,YAAW;AACnC,SAAO,SAAS,kCAAkC,mBAAiB;AAC/D,mBAAe,kBAAkB,kBAAkB,YAAY;AAE/D,eAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AACvF,gCAA4B,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,eAAe,yBAAyB,EAAE,8BAA8B,UAAU,yBAAyB;AAClM,4BAAwB,aAAa,8BAA8B,UAAU,qBAAqB;AAElG,uBAAmB,sBAAsB,SAAS,2BAA2B,gBAAgB;AAC7F,YAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,aAAa,gBAAgB;AAExF,oBAAgB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,cAAc,aAAa;AACtG,kBAAc,kBAAkB,iBAAiB,WAAW;AAE5D,wBAAoB,cAAc,2BAA2B,aAAa,UAAU,iBAAiB;AAErG,YAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,cAAc,iBAAiB;AAK1F,oBAAgB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,cAAc,aAAa;AAEtG,4BAAwB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,iBAAiB,cAAc,qBAAqB;AAC9H,mCAA+B,sBAAsB,YAAY,4BAA4B;AAE7F,wBAAoB,6BAA6B,2BAA2B,eAAe,UAAU,iBAAiB;AAEtH,YAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,cAAc,iBAAiB;EAC9F;AACJ,EAAC;AAED,kBAAkB,UAAU,aAAa,WAAA;AACrC,MAAI,YAAY,YAAW;AAC3B,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,WAAW,UAAU,KAAK,MAAM,iBAAiB,MAAI;AACjE,mBAAe,KAAK,gBAAgB,YAAY;AAChD,gBAAY,SAAS,SAAS,cAAc,SAAS,EAAE,eAAe,SAAS;AAE/E,SAAK,WAAW,WAAW,IAAI,cAAc;EACjD;AACJ,EAAC;AAED,kBAAkB,UAAU,aAAa,WAAA;AACrC,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,WAAW,WAAW,KAAK,MAAM,iBAAiB,MAAI;AAClE,mBAAe,KAAK,oBAAoB,YAAY;AACpD,iBAAa,gBAAgB,WAAW,EAAE;AAC1C,SAAK,oBAAoB,cAAc,cAAc;EACzD;AACJ,EAAC;AAED,kBAAkB,UAAU,aAAa,WAAA;AACrC,MAAI,YAAY,YAAW;AAC3B,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,WAAW,UAAU,KAAK,MAAI;AAC1C,mBAAe,KAAK,gBAAgB,YAAY;AAChD,gBAAY,SAAS,SAAS,cAAc,SAAS,EAAE,eAAe,SAAS;AAE/E,SAAK,WAAW,WAAW,EAAE;EACjC;AACJ,EAAC;AAED,kBAAkB,UAAU,aAAa,WAAA;AACrC,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,WAAW,WAAW,KAAK,MAAI;AAC3C,mBAAe,KAAK,oBAAoB,YAAY;AACpD,iBAAa,gBAAgB,WAAW,EAAE;AAC1C,SAAK,oBAAoB,YAAY;EACzC;AACJ,EAAC;AAED,kBAAkB,UAAU,yBAAyB,WAAA;AACjD,MAAI,iBAAiB,YAAW;AAChC,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,uBAAuB,UAAQ;AAC3C,qBAAiB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,eAAe,cAAc;AACzG,eAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AAEvF,mBAAe,SAAS,SAAS,gBAAgB,YAAY,EAAE,wBAAwB,UAAU,YAAY;AAC7G,QAAI,SAAS,aAAa,YAAW;AACrC,QAAI,CAAC,SAAS,kBAAkB,YAAY,GAAG;AAC3C,eAAS,CAAC;IACd;AAEA,WAAO;EACX;AACJ,EAAC;AAGD,kBAAkB,UAAU,oBAAoB,WAAA;AAC5C,SAAO,SAAS,kBAAkB,YAAY,SAAO;AACjD,QAAI,yBAAyB,KAAK,uBAAuB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,cAAc,eAAc,CAAE;AACzI,SAAK,+BAA+B,yBAAyB,KAAK,UAAU;AAE5E,SAAK,8BAA8B;AACnC,SAAK,sBAAsB;AAE3B,SAAK,qCAAqC;AAC1C,SAAK,+BAA+B;AACpC,SAAK,2BAA2B,MAAK;AACrC,SAAK,6CAA6C;AAElD,QAAI,iBAAiB,QAAQ,kBAAkB,KAAK,UAAU,QAAQ;AAEtE,QAAI,eAAe,oBAAoB,MAAM;AACzC,WAAK,4BAA4B,KAAK,aAAa,KAAK,IAAI;AAC5D,qBAAe,iBAAiB,SAAS,KAAK,yBAAyB;IAC3E;AAEA,SAAK,oCAAoC,QAAQ,2BAA2B,KAAK,UAAU,QAAQ;AAEnG,SAAK,mCAAmC,SAAU,OAAK;AACnD,UAAI,MAAM,QAAQ,mBAAmB,WAAW;AAC5C,YAAI,CAAC,KAAK,mBAAmB;AACzB,eAAK,sBAAsB,MAAM,OAAO;QAC5C;AAEA,aAAK,sBAAsB,QAAQ,mBAAmB;MAC1D,OAAO;AACH,YAAI,KAAK,mBAAmB;AACxB,eAAK,oBAAoB,MAAM,OAAO;QAC1C;AAEA,aAAK,sBAAsB;MAC/B;IACJ,EAAE,KAAK,IAAI;AAEX,YAAQ,iBAAiB,oBAAoB,KAAK,gCAAgC;AAElF,QAAI,KAAK,UAAU,gCAAgC,CAAC,cAAc,KAAK,WAAW;AAC9E,UAAI,KAAK,sCAAsC,GAAG;AAC9C,aAAK,sCAAsC,KAAK,2BAA2B,KAAK,gCAAgC;MACpH;AAEA,WAAK,qCAAqC,KAAK;IACnD,OAAO;AACH,WAAK,qCAAqC;AAC1C,WAAK,sCAAsC;IAC/C;AAEA,QAAI,KAAK,2CAA2C,KAAK,4CAA4C;AACjG,WAAK,6CAA6C,KAAK;IAC3D;AAEA,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAEzB,QAAI,KAAK,WAAW;AAChB,WAAK,oBAAmB;IAC5B;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,kBAAkB,WAAA;AAC1C,SAAO,SAAS,gBAAgB,SAAO;AACnC,QAAI,KAAK,UAAU,gCAAgC,KAAK,WAAW;AAC/D,UAAI,KAAK,sCAAsC,GAAG;AAC9C,YAAI,wBAAwB,KAAK,2BAA2B,KAAK,gCAAgC;AAEjG,YAAI,KAAK,+BAA+B,MAAM;AAC1C,kCAAwB,KAAK;QACjC;AAEA,aAAK,sCAAsC;MAC/C;AAEA,WAAK,qCAAqC,KAAK;IACnD,OAAO;AACH,WAAK,qCAAqC;AAC1C,WAAK,sCAAsC;IAC/C;AAEA,SAAK,6CAA6C;AAElD,SAAK,mCAAmC;AACxC,SAAK,4BAA4B;AAEjC,SAAK,8BAA8B;AACnC,SAAK,sBAAsB;AAE3B,SAAK,+BAA+B;AACpC,SAAK,2BAA2B,MAAK;AAErC,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAEzB,QAAI,KAAK,WAAW;AAChB,WAAK,oBAAmB;AAExB,UAAI,KAAK,UAAU,uCAAuC;AACtD,aAAK,iBAAgB;MACzB,OAAO;AACH,aAAK,sBAAsB,KAAK,4BAA4B;MAChE;IACJ;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,wBAAwB,WAAA;AAChD,SAAO,SAAS,sBAAsB,SAAO;AACzC,QAAI,KAAK,WAAW;AAChB,UAAI,KAAK,UAAU,0BAA0B,KAAK,+BAA+B,QAAQ,KAAK,kBAAkB;AAC5G,YAAI,KAAK,qCAAqC,GAAG;AAC7C,eAAK,8BAA8B,KAAK;QAC5C,OAAO;AACH,eAAK,8BAA8B,KAAK,2BAA2B,KAAK,gCAAgC;QAC5G;MACJ,WAAW,CAAC,KAAK,oBAAoB,CAAC,KAAK,UAAU,wBAAwB;AACzE,aAAK,8BAA8B;MACvC;IACJ;AAEA,SAAK,+BAA+B;AAEpC,SAAK,oBAAoB;EAC7B;AACJ,EAAC;AAED,kBAAkB,UAAU,sBAAsB,WAAA;AAC9C,SAAO,SAAS,oBAAoB,SAAO;AACvC,QAAI,KAAK,WAAW;AAChB,UAAI,KAAK,sCAAsC,GAAG;AAC9C,YAAI,KAAK,UAAU,0BAA0B,KAAK,+BAA+B,QAAQ,KAAK,kBAAkB;AAC5G,eAAK,+BAA+B,KAAK;AACzC,cAAI,KAAK,qBAAqB;UAM9B;QACJ,OAAO;AACH,eAAK,8BAA8B;AACnC,eAAK,+BAA+B;QACxC;MACJ,OAAO;AACH,aAAK,qCAAqC,KAAK;AAC/C,aAAK,8BAA8B;MACvC;IACJ;AAEA,SAAK,oBAAoB;EAC7B;AACJ,EAAC;AAED,kBAAkB,UAAU,eAAe,WAAA;AACvC,MAAI,wBAAwB,WAAW,SAAS,aAAY,CAAE;AAC9D,MAAI,mBAAmB,YAAW;AAClC,MAAI,oBAAoB,YAAW;AACnC,SAAO,SAAS,eAAY;AACxB,QAAI,KAAK,WAAW;AAChB,UAAI,CAAC,KAAK,yBAAyB,KAAK,UAAU,sCAAsC,KAAK,oBAAoB,KAAK,SAAQ,GAAI;AAC9H,aAAK,wBAAwB;AAC7B,YAAI,4BAA4B,KAAK,2BAA2B,KAAK,gCAAgC;AACrG,aAAK,kCAAkC,yBAAyB;AAEhE,YAAI,UAAU,QAAQ,2BAA2B,KAAK,UAAU,QAAQ;AACxE,YAAI,CAAC,SAAS;AACV,cAAI,yBAAyB,KAAK,2BAA2B,qBAAqB;AAClF,cAAI,iBAAiB,KAAK,uBAAuB,0BAA0B,kBAAkB,gBAAgB,CAAC;AAC9G,cAAI,oBAAoB,KAAK,uBAAuB,uBAAuB,kBAAkB,iBAAiB,CAAC;AAC/G,eAAK,8BAA8B,KAAK,+BAA+B,iBAAiB;AACxF,eAAK,oBAAmB;QAC5B;MACJ;IACJ;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,iBAAiB,WAAA;AACzC,MAAI,WAAW,YAAW;AAC1B,MAAI,sBAAsB,YAAW;AACrC,MAAI,sBAAsB,YAAW;AACrC,MAAI,0BAA0B,YAAW;AACzC,MAAI,0BAA0B,YAAW;AACzC,MAAI,kBAAkB,YAAW;AACjC,MAAI,qBAAqB,YAAW;AACpC,MAAI,qBAAqB,YAAW;AACpC,MAAI,oBAAoB,YAAW;AACnC,SAAO,SAAS,iBAAc;AAC1B,QAAI,KAAK,+BAA+B,MAAM;AAC1C,UAAI,KAAK,uCAAuC,MAAM;AAClD,aAAK,8BAA8B;AACnC,aAAK,qBAAoB;MAC7B,OAAO;AACH,mBAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AAEvF,8BAAsB,KAAK,eAAe,eAAe,mBAAmB;AAC5E,8BAAsB,KAAK,4BAA4B,kBAAkB,mBAAmB;AAE5F,kCAA0B,oBAAoB,8BAA8B,UAAU,uBAAuB;AAC7G,kCAA0B,oBAAoB,8BAA8B,UAAU,uBAAuB;AAE7G,0BAAkB,wBAAwB,SAAS,yBAAyB,eAAe;AAC3F,aAAK,SAAS,eAAe;AAE7B,6BAAqB,KAAK,4BAA4B,iBAAiB,kBAAkB;AACzF,6BAAqB,KAAK,eAAe,cAAc,kBAAkB;AACzE,4BAAoB,mBAAmB,2BAA2B,oBAAoB,UAAU,iBAAiB;AAEjH,YAAI,KAAK,UAAU,yBAAyB;AACxC,eAAK,eAAe,iBAAiB;QACzC;AAEA,aAAK,8BAA8B;MACvC;IACJ;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,uBAAuB,WAAA;AAC/C,MAAI,sBAAsB,YAAW;AACrC,MAAI,qBAAqB,YAAW;AACpC,MAAI,qBAAqB,YAAW;AACpC,MAAI,WAAW,YAAW;AAC1B,MAAI,0BAA0B,YAAW;AACzC,MAAI,yBAAyB,YAAW;AACxC,MAAI,iBAAiB,YAAW;AAChC,MAAI,oBAAoB,YAAW;AACnC,MAAI,eAAe,YAAW;AAC9B,MAAI,kBAAkB,YAAW;AACjC,MAAI,iBAAiB,YAAW;AAChC,MAAI,oBAAoB,YAAW;AACnC,MAAI,iBAAiB,YAAW;AAChC,MAAI,gBAAgB,YAAW;AAC/B,MAAI,cAAc,YAAW;AAC7B,MAAI,mBAAmB,YAAW;AAClC,MAAI,oBAAoB,YAAW;AACnC,SAAO,SAAS,uBAAoB;AAChC,QAAI,KAAK,+BAA+B,QAAQ,KAAK,uCAAuC,MAAM;AAC9F,UAAI,KAAK,kBAAkB;AACvB,8BAAsB,KAAK,eAAe,eAAe,mBAAmB;AAC5E,6BAAqB,KAAK,oCAAoC,kBAAkB,kBAAkB;AAClG,6BAAqB,KAAK,oCAAoC,sBAAsB,kBAAkB;AAEtG,mBAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AAEvF,kCAA0B,oBAAoB,8BAA8B,UAAU,uBAAuB;AAC7G,iCAAyB,mBAAmB,8BAA8B,UAAU,sBAAsB;AAE1G,yBAAiB,uBAAuB,SAAS,yBAAyB,cAAc;AACxF,aAAK,SAAS,cAAc;AAE5B,YAAI,KAAK,UAAU,8BAA8B,KAAK,UAAU,gCAAgC;AAC5F,eAAK,UAAU,iCAAiC;AAChD,cAAI,mBAAmB,KAAK,uBAAuB,kBAAkB;AACrE,cAAI,oBAAoB,KAAK,uBAAuB,mBAAmB;AAEvE,eAAK,0BAA0B,mBAAmB,KAAK,UAAU;AACjE,eAAK,uBAAuB,mBAAmB,KAAK,UAAU;AAC9D,eAAK,2BAA2B,KAAK,4BAA4B,mBAAmB;AACpF,eAAK,8BAA8B,KAAK,+BAA+B,mBAAmB;AAE1F,eAAK,oBAAmB;AAExB,eAAK,0CAA0C;AAC/C,eAAK,6CAA6C;QACtD;AAEA,aAAK,2BAA2B,kBAAkB;MACtD,OAAO;AACH,mBAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AAEvF,6BAAqB,KAAK,oCAAoC,kBAAkB,kBAAkB;AAClG,iCAAyB,mBAAmB,8BAA8B,UAAU,sBAAsB;AAE1G,yBAAiB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,eAAe,cAAc;AACzG,4BAAoB,uBAAuB,SAAS,eAAe,wBAAwB,UAAU,iBAAiB,GAAG,iBAAiB;AAE1I,gBAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,eAAe,iBAAiB;AAC3F,gBAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,cAAc,sBAAqB;AAErF,YAAI,KAAK,UAAU,2BAA2B;AAC1C,cAAI,mBAAmB,KAAK,uBAAuB,kBAAkB;AACrE,eAAK,iBAAiB,mBAAmB,KAAK,UAAU;QAC5D;AAEA,aAAK,oBAAmB;AAExB,YAAI,KAAK,UAAU,6BAA6B,KAAK,UAAU,uCAAuC;AAClG,eAAK,sBAAsB,KAAK,cAAc;QAClD,OAAO;AACH,eAAK,sBAAsB,KAAK,4BAA4B;QAChE;AAEA,6BAAqB,KAAK,oCAAoC,sBAAsB,kBAAkB;AAEtG,YAAI,KAAK,UAAU,gCACf,KAAK,UAAU,uCAAuC,CAAC,KAAK,UAAU,kCAAkC;AACxG,8BAAoB,mBAAmB,gBAAgB,iBAAiB;AACxE,yBAAe,mBAAmB,WAAW,YAAY;AAEzD,2BAAiB,kBAAkB,WAAW,UAAU,cAAc;AACtE,yBAAe,eAAe,cAAc;AAE5C,cAAI,CAAC,aAAa,kBAAkB,QAAQ,GAAG;AAC3C,gBAAI,iBAAiB,kBAAkB,WAAW,QAAQ;AAC1D,gBAAI,cAAc;AAClB,gBAAI,iBAAkB,MAAM,eAAgB,iBAAiB,aAAa;AAItE,6BAAe,YAAY,cAAc;YAC7C;UACJ;AAEA,cAAI,eAAe,YAAY,IAAQ,GAAG;AACtC,6BAAiB,mBAAmB,cAAc,cAAc;UACpE;AAEA,wBAAc,eAAe,WAAW,mBAAmB,WAAW;AACtE,sBAAY,eAAe,WAAW;AACtC,6BAAmB,YAAY,WAAW,gBAAgB,gBAAgB;AAC1E,2BAAiB,eAAe,gBAAgB;AAEhD,4BAAkB,cAAc,eAAe,YAAY,aAAa,GAAG,aAAa,gBAAgB;AACxG,6BAAmB,UAAU,iBAAiB;QAClD;AAEA,YAAI,KAAK,UAAU,uCAAuC,CAAC,KAAK,UAAU,kCAAkC;AACxG,yBAAe,mBAAmB,WAAW,YAAY;AACzD,4BAAkB,mBAAmB,cAAc,eAAe;AAElE,cAAI,mBAAmB,KAAK,IAAI,GAAG,KAAK,UAAU,gCAAgC,IAAM;AACxF,cAAI,CAAC,KAAK,UAAU,kCAAkC;AAClD,+BAAmB;UACvB;AAEA,cAAI,cAAc,KAAK,cAAc,aAAa,iBAAiB,UAAU,eAAe,CAAC;AAC7F,cAAI,KAAK,IAAI,WAAW,IAAI,kBAAkB;AAC1C,gBAAI,YAAY,KAAK,IAAI,WAAW,IAAI,oBAAoB,KAAK,QAAQ,WAAW;AACpF,iCAAqB,mBAAmB,gBAAgB,UAAU,iBAAiB,kBAAkB;UACzG;QACJ;AAEA,aAAK,oBAAoB,kBAAkB;MAC/C;AAEA,WAAK,sCAAsC;IAC/C;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,6BAA6B,WAAA;AACrD,MAAI,WAAW,YAAW;AAC1B,MAAI,oBAAoB,YAAW;AACnC,MAAI,eAAe,YAAW;AAC9B,MAAI,0BAA0B,YAAW;AACzC,SAAO,SAAS,2BAA2B,oBAAkB;AACzD,eAAW,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAS,QAAQ;AACvF,wBAAoB,mBAAmB,gBAAgB,iBAAiB;AACxE,mBAAe,mBAAmB,WAAW,YAAY;AACzD,4BAAwB,UAAU,kBAAkB;AACpD,4BAAwB,WAAW,UAAU,iBAAiB;AAE9D,QAAI,CAAC,aAAa,kBAAkB,QAAQ,GAAG;AAE3C,8BAAwB,gBAAgB,KAAK,UAAU,uBAAuB;IAClF;AAEA,SAAK,oBAAoB,uBAAuB;AAChD;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,wBAAwB,WAAA;AAChD,MAAI,sBAAsB,YAAW;AACrC,MAAI,mCAAmC,YAAW;AAClD,MAAI,8BAA8B,YAAW;AAC7C,MAAI,iBAAiB,YAAW;AAChC,SAAO,SAAS,sBAAsB,QAAM;AACxC,QAAI,YAAY,SAAS,KAAK,UAAU;AACxC,0BAAsB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,cAAc,eAAe,mBAAmB;AACxH,uCAAmC,oBAAoB,4BAA4B,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,gBAAgB,cAAc,GAAG,gCAAgC;AAC/M,qCAAiC,SAAS,iCAAiC,CAAC,GAAG,WAAW,iCAAiC,CAAC,CAAC;AAC7H,kCAA8B,iCAAiC,4BAA4B,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,gBAAgB,cAAc,GAAG,2BAA2B;AAClN,YAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,cAAc,eAAe,2BAA2B;EAC9G;AACJ,EAAC;AAED,kBAAkB,UAAU,sBAAsB,WAAA;AAC9C,SAAO,SAAS,sBAAmB;AAC/B,QAAI,KAAK,kBAAkB;AACvB,UAAI,QAAQ,2BAA2B,KAAK,UAAU,QAAQ,GAAG;AAC7D,aAAK,+BAA+B,KAAK,0BAA0B,CAAC;MACxE,OAAO;AACH,aAAK,+BAA+B,KAAK,6BAA6B,CAAC;MAC3E;IACJ,OAAO;AACH,UAAI,KAAK,2BAA0B,GAAI;AACnC,aAAK,+BAA+B,KAAK,0BAA0B,CAAC;MACxE,WAAW,KAAK,8BAA6B,GAAI;AAC7C,aAAK,+BAA+B,KAAK,6BAA6B,CAAC;MAC3E,WAAW,KAAK,UAAU,yBAAyB,wBAAwB,OAAO;AAC9E,aAAK,+BAA+B,GAAG,CAAC;MAC5C,OAAO;AACH,aAAK,+BAA+B,KAAK,gBAAgB,KAAK,UAAU,qBAAqB;MACjG;IACJ;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,iCAAiC,WAAA;AACzD,MAAI,yBAAyB,YAAW;AACxC,MAAI,sCAAsC,YAAW;AACrD,MAAI,iCAAiC,YAAW;AAChD,MAAI,iBAAiB,YAAW;AAChC,SAAO,SAAS,+BAA+B,QAAQ,gBAAc;AACjE,QAAI,UAAU,MAAM;AAChB,+BAAyB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,iBAAiB,eAAe,sBAAsB;AACjI,4CAAsC,uBAAuB,4BAA4B,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,gBAAgB,cAAc,GAAG,mCAAmC;AACxN,0CAAoC,SAAS,oCAAoC,CAAC,GAAG,SAAS,gBAAgB,oCAAoC,CAAC,CAAC;AACpJ,uCAAiC,oCAAoC,4BAA4B,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,gBAAgB,cAAc,GAAG,8BAA8B;AAC3N,cAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,iBAAiB,eAAe,8BAA8B;IACpH;EACJ;AACJ,EAAC;AAED,kBAAkB,UAAU,6BAA6B,WAAA;AACrD,SAAO,SAAS,2BAA2B,gBAAc;AACrD,WAAO,KAAK,eAAe,oCAAoC,cAAc;EACjF;AACJ,EAAC;;;AChqCM,IAAI,iCAAiC;EACxC,gBAAgB;EAChB,gBAAgB;EAChB,KAAK;EACL,UAAU;;AAGR,IAAO,+BAAP,MAAmC;EAErC,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,sBAAsB;AAE3B,SAAK,iCAAiC;AACtC,SAAK,iCAAiC;AACtC,SAAK,iDAAiD;AACtD,SAAK,yCAAyC;AAE9C,SAAK,+BAA+B;AACpC,SAAK,mCAAmC;AAGxC,SAAK,uBAAuB,oBAAI,IAAG;AACnC,SAAK,qBAAqB,IAAI,+BAA+B,gBAAgB,IAAI;AACjF,SAAK,qBAAqB,IAAI,+BAA+B,gBAAgB,IAAI;AACjF,SAAK,qBAAqB,IAAI,+BAA+B,KAAK,IAAI;AACtE,SAAK,qBAAqB,IAAI,+BAA+B,UAAU,IAAI;AAE3E,SAAK,wBAAwB,oBAAI,IAAG;AACpC,SAAK,sBAAsB,IAAI,+BAA+B,gBAAgB,IAAI;AAClF,SAAK,sBAAsB,IAAI,+BAA+B,gBAAgB,KAAK;AACnF,SAAK,sBAAsB,IAAI,+BAA+B,KAAK,IAAI;AACvE,SAAK,sBAAsB,IAAI,+BAA+B,UAAU,IAAI;AAE5E,SAAK,4BAA4B,oBAAI,IAAG;AACxC,SAAK,0BAA0B,IAAI,+BAA+B,gBAAgB,KAAK;AACvF,SAAK,0BAA0B,IAAI,+BAA+B,gBAAgB,IAAI;AACtF,SAAK,0BAA0B,IAAI,+BAA+B,KAAK,KAAK;AAC5E,SAAK,0BAA0B,IAAI,+BAA+B,UAAU,KAAK;AAEjF,SAAK,wBAAwB,oBAAI,IAAG;AACpC,SAAK,sBAAsB,IAAI,+BAA+B,gBAAgB,KAAK;AACnF,SAAK,sBAAsB,IAAI,+BAA+B,gBAAgB,KAAK;AACnF,SAAK,sBAAsB,IAAI,+BAA+B,KAAK,KAAK;AACxE,SAAK,sBAAsB,IAAI,+BAA+B,UAAU,KAAK;AAE7E,SAAK,sBAAsB,oBAAI,IAAG;AAClC,SAAK,oBAAoB,IAAI,+BAA+B,gBAAgB,KAAK;AACjF,SAAK,oBAAoB,IAAI,+BAA+B,gBAAgB,KAAK;AACjF,SAAK,oBAAoB,IAAI,+BAA+B,KAAK,KAAK;AACtE,SAAK,oBAAoB,IAAI,+BAA+B,UAAU,KAAK;AAE3E,SAAK,gCAAgC;AACrC,SAAK,yBAAyB;AAG9B,SAAK,sCAAsC;AAC3C,SAAK,qDAAqD;AAC1D,SAAK,kCAAkC;AACvC,SAAK,iCAAiC;AACtC,SAAK,oDAAoD;AAEzD,SAAK,8BAA8B;AACnC,SAAK,gCAAgC;AACrC,SAAK,gCAAgC;AACrC,SAAK,+BAA+B;AACpC,SAAK,sCAAsC;AAC3C,SAAK,+CAA+C;AAEpD,SAAK,qCAAqC;AAC1C,SAAK,8BAA8B;AAGnC,SAAK,eAAe;AACpB,SAAK,iCAAiC,IAAI,kBAAiB;AAC3D,SAAK,iCAAiC,CAAA;AAItC,SAAK,+CAA+C;AAEpD,SAAK,uBAAuB;AAC5B,SAAK,sCAAsC;AAQ3C,SAAK,iCAAiC;AAItC,SAAK,uDAAuD;AAE5D,SAAK,kCAAkC;AAIvC,SAAK,4BAA4B;AACjC,SAAK,4CAA4C;AAEjD,SAAK,+BAA+B;AAMpC,SAAK,yCAAyC;AAO9C,SAAK,wBAAwB;AAC7B,SAAK,4BAA4B;AACjC,SAAK,4BAA4B;AACjC,SAAK,gCAAgC;AAErC,SAAK,cAAc;AACnB,SAAK,cAAc;AAOnB,SAAK,wCAAwC;AAC7C,SAAK,wCAAwC;AAE7C,SAAK,sCAAsC;AAC3C,SAAK,gCAAgC;AACrC,SAAK,gCAAgC;AACrC,SAAK,4BAA4B;AAEjC,SAAK,+BAA+B;AACpC,SAAK,8BAA8B;AAEnC,SAAK,iCAAiC;AACtC,SAAK,iCAAiC;AACtC,SAAK,+BAA+B;AAEpC,SAAK,8BAA8B;AACnC,SAAK,8BAA8B;AACnC,SAAK,4BAA4B;AAEjC,SAAK,gCAAgC;AACrC,SAAK,gCAAgC;AACrC,SAAK,8BAA8B;AAEnC,SAAK,sCAAsC;AAE3C,SAAK,6BAA6B;AAClC,SAAK,6BAA6B;AAClC,SAAK,2BAA2B;AAEhC,SAAK,oBAAoB;AACzB,SAAK,wBAAwB;AAE7B,SAAK,yBAAyB;AAE9B,SAAK,WAAW;AAEhB,SAAK,iBAAiB;EAC1B;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,YAAQ,wCAAwC,MAAM,KAAK,UAAU,QAAQ;EACjF;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAGE,IAAO,yBAAP,MAA6B;EAE/B,YAAY,QAAM;AACd,SAAK,YAAY;AAEjB,SAAK,sCAAsC;AAC3C,SAAK,8CAA6C;AAElD,SAAK,4BAA4B,IAAI,uBAAsB;AAC3D,SAAK,gCAAgC,IAAI,uBAAsB;AAE/D,QAAI,KAAK,UAAU,gDAAgD;AAC/D,WAAK,0CAAyC;IAClD;AAEA,SAAK,8BAA8B;AACnC,SAAK,+BAA8B;AAEnC,SAAK,mBAAmB,YAAW;AACnC,SAAK,uBAAuB,YAAW;AACvC,SAAK,iBAAiB;AACtB,SAAK,uBAAuB,YAAW;AACvC,SAAK,2CAA2C,YAAW;AAE3D,SAAK,qBAAqB;AAC1B,SAAK,qBAAqB;AAC1B,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,WAAW;AAEhB,SAAK,gCAAgC,YAAW;AAChD,SAAK,qBAAqB;AAC1B,SAAK,yBAAyB;AAC9B,SAAK,yBAAyB;AAC9B,SAAK,4BAA4B;AAEjC,SAAK,2BAA2B;AAEhC,SAAK,4CAA4C;AAEjD,SAAK,YAAY;AACjB,SAAK,eAAe;EACxB;EAEA,QAAK;AACD,SAAK,YAAY,IAAI;AAErB,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,MAAM,MAAM,KAAK,UAAU,QAAQ;EAC/J;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,UAAU,QAAM;AACZ,SAAK,YAAY;EACrB;;;;;;;;EASA,OAAO,IAAE;EAET;EAEA,KAAK,UAAU,4BAA4B,MAAM,YAAY,OAAK;EAWlE;EAEA,iBAAiB,UAAU,4BAA4B,MAAM,gBAAgB,OAAK;EAKlF;EAEA,6BAA6B,UAAU,cAAc,4BAA4B,MAAM,gBAAgB,OAAK;EAI5G;EAEA,sBAAsBC,gBAAe,4BAA4B,MAAM,gBAAgB,OAAK;EAI5F;;EAGA,sBAAsB,UAAU,cAAY;AACxC,SAAK,6BAA6B,UAAU,cAAc,MAAM,IAAI;AAEpE,SAAK,0BAA0B,UAAU,MAAM,MAAM,QAAW,QAAW,QAAW,IAAI;EAC9F;EAEA,WAAW,cAAY;EAEvB;EAEA,gBAAgB,cAAY;EAE5B;EAEA,UAAU,QAAQ,WAAW,OAAK;EAElC;EAEA,YAAS;AACL,WAAO,KAAK,UAAU,oBAAoB,UAAS;EACvD;EAEA,UAAO;AACH,WAAO,KAAK,UAAU,oBAAoB,QAAO;EACrD;EAEA,iBAAiB,mBAAmB,aAAY,GAAE;AAC9C,WAAO,iBAAiB,8BAA8B,KAAK,YAAY,KAAK,gBAAgB,GAAG,KAAK,gBAAgB,KAAK,oBAAoB,CAAC;EAClJ;EAEA,YAAY,cAAc,YAAW,GAAE;AACnC,WAAO,YAAY,UAAU,KAAK,gBAAgB;EACtD;EAEA,gBAAgB,cAAc,YAAW,GAAE;AACvC,WAAO,YAAY,UAAU,KAAK,oBAAoB;EAC1D;EAEA,gBAAgB,cAAc,YAAW,GAAE;AACvC,WAAO,YAAY,UAAU,KAAK,oBAAoB;EAC1D;EAEA,qBAAqB,mBAAmB,aAAY,GAAE;AAClD,WAAO,iBAAiB,8BAA8B,KAAK,gBAAgB,KAAK,oBAAoB,GAAG,KAAK,gBAAgB,KAAK,oBAAoB,CAAC;EAC1J;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,qBAAqB,mBAAmB,aAAY,GAAE;AAClD,WAAO,KAAK,qBAAoB,EAAG,qBAAqB,gBAAgB;EAC5E;EAEA,yBAAyB,mBAAmB,aAAY,GAAE;AACtD,WAAO,KAAK,qBAAoB,EAAG,qBAAqB,gBAAgB;EAC5E;EAEA,gBAAgB,cAAc,YAAW,GAAE;AACvC,WAAO,KAAK,qBAAoB,EAAG,gBAAgB,WAAW;EAClE;EAEA,oBAAoB,cAAc,YAAW,GAAE;AAC3C,WAAO,KAAK,qBAAoB,EAAG,gBAAgB,WAAW;EAClE;EAEA,oBAAoB,cAAc,YAAW,GAAE;AAC3C,WAAO,KAAK,qBAAoB,EAAG,oBAAoB,WAAW;EACtE;EAEA,gBAAa;AACT,WAAO,KAAK,UAAU,oBAAoB,cAAa;EAC3D;EAEA,SAAS,cAAc,MAAI;AACvB,QAAI,kBAAkB,KAAK,gBAAe,MAAO,eAAe,QAAQ,YAAY,IAAI,+BAA+B,cAAc;AACrI,QAAI,kBAAkB,KAAK,gBAAe,MAAO,eAAe,QAAQ,YAAY,IAAI,+BAA+B,cAAc;AACrI,QAAI,QAAQ,KAAK,MAAK,MAAO,eAAe,QAAQ,YAAY,IAAI,+BAA+B,GAAG;AACtG,QAAI,aAAa,KAAK,WAAU,MAAO,eAAe,QAAQ,YAAY,IAAI,+BAA+B,QAAQ;AACrH,WAAO,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,CAAC;EAC9D;EAEA,UAAUC,iBAAgB,MAAMC,iBAAgB,OAAO,cAAc,OAAO,kBAAkB,MAAM,oBAAoB,OAAO,6BAA6B,OAAK;EAEjK;EAEA,oBAAiB;AACb,SAAK,mBAAmB,CAAC;EAC7B;EAEA,4BAAyB;AACrB,SAAK,2BAA2B,CAAC;EACrC;EAEA,oCAAiC;AAC7B,QAAI,KAAK,yBAAyB;AAC9B,WAAK,2BAA2B,CAAC;IACrC;EACJ;EAEA,YAAY,6BAA6B,OAAO,oBAAoB,OAAK;AACrE,QAAI,4BAA4B;AAC5B,WAAK,mBAAmB,KAAK,qBAAoB,EAAG,UAAS,EAAG,eAAe,KAAK,gBAAgB;IACxG,OAAO;AACH,WAAK,mBAAmB,KAAK,gBAAgB,KAAK,gBAAgB;IACtE;AAEA,QAAI,CAAC,KAAK,UAAU,8BAA8B;AAC9C,WAAK,uBAAuB,KAAK,oBAAoB,KAAK,oBAAoB;AAC9E,WAAK,yCAAyC,UAAU,KAAK,oBAAoB;AAEjF,WAAK,4CAA4C;AACjD,WAAK,0BAA0B;IACnC;AAEA,QAAI,4BAA4B;AAC5B,WAAK,uBAAuB,KAAK,qBAAoB,EAAG,UAAS,EAAG,mBAAmB,KAAK,oBAAoB;IACpH,OAAO;AACH,WAAK,uBAAuB,KAAK,oBAAoB,KAAK,oBAAoB;IAClF;AAEA,SAAK,iBAAiB,KAAK,SAAS,KAAK,cAAa,GAAI,KAAK,UAAU,aAAa,KAAK,UAAU,WAAW;AAEhH,QAAI,mBAAmB;AACnB,WAAK,mBAAmB,CAAC;IAC7B;EACJ;EAEA,kBAAe;AACX,QAAI,CAAC,KAAK,UAAU,8BAA8B;AAC9C,WAAK,uBAAuB,KAAK,oBAAoB,KAAK,oBAAoB;AAC9E,WAAK,yCAAyC,UAAU,KAAK,oBAAoB;AAEjF,WAAK,4CAA4C;AACjD,WAAK,0BAA0B;IACnC;EACJ;EAEA,kBAAe;EAEf;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,aAAU;AACN,WAAO,KAAK,UAAS,KAAM,KAAK,UAAS;EAC7C;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,QAAK;AACD,WAAO,KAAK;EAChB;EAEA,oBAAiB;EAEjB;EAEA,wBAAqB;EAErB;EAEA,uBAAoB;AAChB,WAAO,KAAK,UAAU;EAC1B;EAEA,kCAA+B;AAC3B,WAAO,KAAK,UAAU;EAC1B;EAEA,kCAA+B;AAC3B,WAAO,KAAK,UAAU;EAC1B;EAEA,8BAA2B;AACvB,QAAI,KAAK,UAAU,gDAAgD;AAC/D,WAAK,0CAAyC;IAClD;AAEA,SAAK,8CAA6C;EACtD;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,sBAAmB;AACf,WAAO,KAAK;EAChB;EAEA,sBAAmB;AACf,WAAO,KAAK;EAChB;EAEA,0BAAuB;AACnB,WAAO,KAAK;EAChB;EAEA,4BAAyB;AACrB,WAAO,KAAK;EAChB;EAEA,gCAA6B;AACzB,WAAO,KAAK;EAChB;EAEA,yBAAsB;AAClB,QAAI,cAAc,KAAK,UAAS;AAChC,QAAI,aAAa,KAAK,SAAS,KAAK,cAAa,GAAI,KAAK,UAAU,aAAa,KAAK,UAAU,WAAW;AAE3G,SAAK,UAAU,+BAA+B,WAAW;AACzD,SAAK,UAAU,+BAA+B,WAAW;AAEzD,SAAK,oCAAoC,WAAW;EACxD;EAEA,iCAA8B;AAC1B,SAAK,8BAA8B,IAAI,qBAAoB;AAC3D,QAAI,SAAS,KAAK;AAElB,WAAO,WAAW,KAAK,UAAU;AACjC,WAAO,6BAA6B;AACpC,WAAO,6BAA6B;AAEpC,WAAO,yBAAyB;AAChC,WAAO,kCAAkC;AACzC,WAAO,2BAA2B,OAAO,WAAW;AACpD,WAAO,kCAAkC;AACzC,WAAO,2BAA2B,OAAO;AACzC,WAAO,iCAAiC;AACxC,WAAO,0BAA0B;AACjC,WAAO,oDAAoD;AAC3D,WAAO,kDAAkD;AAEzD,WAAO,mCAAmC;AAC1C,WAAO,uCAAuC;AAC9C,WAAO,2CAA2C;AAClD,WAAO,0CAA0C;AACjD,WAAO,yDAAyD;AAChE,WAAO,wDAAwD;AAE/D,WAAO,mCAAmC;AAC1C,WAAO,kBAAkB;AACzB,WAAO,wBAAwB;AAC/B,WAAO,oBAAoB;AAC3B,WAAO,iBAAiB;AACxB,WAAO,6DAA6D;AACpE,WAAO,iDAAiD;AAExD,WAAO,WAAW,OAAO;AACzB,WAAO,sBAAsB,SAAS,GAAG,CAAC,OAAO,WAAW,GAAG,CAAC;AAEhE,WAAO,gBAAgB;AACvB,WAAO,gCAAgC;AACvC,WAAO,gCAAgC;AACvC,WAAO,kCAAkC;AACzC,WAAO,kCAAkC;AACzC,WAAO,2BAA2B;AAClC,WAAO,2BAA2B;AAClC,WAAO,0BAA0B;AAEjC,WAAO,qCAAqC;AAC5C,WAAO,8BAA8B,YAAY,GAAG,GAAG,CAAC;AAExD,WAAO,uCAAuC;AAC9C,WAAO,gCAAgC,YAAY,GAAG,GAAG,CAAC;AAE1D,WAAO,iCAAiC;AACxC,WAAO,iCAAiC;AAExC,WAAO,iCAAiC;AACxC,WAAO,mCAAmC;AAC1C,WAAO,kCAAkC;AACzC,WAAO,uCAAuC;AAC9C,WAAO,eAAe,OAAO;AAE7B,WAAO,4BAA4B,KAAK,KAAK,UAAU,8BAA8B;AACrF,WAAO,4BAA4B,QAAQ,KAAK,UAAU,8BAA8B;AACxF,WAAO,0BAA0B,KAAK,KAAK,UAAU,8BAA8B;AACnF,WAAO,0BAA0B,QAAQ,KAAK,UAAU,8BAA8B;AAEtF,WAAO,iBAAiB;AAExB,WAAO,mCAAmC;AAC1C,WAAO,mCAAmC;AAC1C,WAAO,iCAAiC;AACxC,WAAO,iCAAiC;AACxC,WAAO,wBAAwB;AAC/B,WAAO,2BAA2B;AAClC,WAAO,4BAA4B;AACnC,WAAO,8BAA8B;AACrC,WAAO,yBAAyB;EACpC;EAEA,4CAAyC;AACrC,QAAI,KAAK,UAAU,kCAAkC,MAAM;AACvD,WAAK,UAAU,iCAAiC,IAAI,qBAAoB;IAC5E;AAEA,QAAI,KAAK,UAAU,wCAAwC;AACvD,WAAK,UAAU,iCAAiC,oBAAoB,4CAA4C,KAAK,UAAU,gCAAgC,KAAK,UAAU,8BAA8B;IAChN,OAAO;AACH,WAAK,UAAU,+BAA+B,KAAK,KAAK,UAAU,8BAA8B;IACpG;EACJ;EAEA,gDAA6C;AACzC,QAAI,KAAK,uCAAuC,MAAM;AAClD,WAAK,sCAAsC,IAAI,qBAAoB;IACvE;AAEA,QAAI,SAAS,KAAK;AAClB,WAAO,KAAK,KAAK,UAAU,8BAA8B;AAEzD,WAAO,yBAAyB;AAChC,WAAO,kCAAkC;AACzC,WAAO,2BAA2B,OAAO,WAAW;AACpD,WAAO,kCAAkC;AACzC,WAAO,2BAA2B,OAAO;AACzC,WAAO,iCAAiC;AACxC,WAAO,0BAA0B;AACjC,WAAO,oDAAoD;AAC3D,WAAO,kDAAkD;AAEzD,WAAO,mBAAmB;AAE1B,QAAI,CAAC,KAAK,UAAU,wCAAwC;AACxD,aAAO,wBAAwB;AAC/B,aAAO,yBAAyB;AAChC,aAAO,wBAAwB;AAC/B,aAAO,yBAAyB;AAChC,aAAO,kDAAkD;AACzD,aAAO,gDAAgD;AACvD,aAAO,mDAAmD;AAC1D,aAAO,iDAAiD;AACxD,aAAO,oDAAoD;AAC3D,aAAO,qDAAqD;AAC5D,aAAO,kCAAkC;IAC7C;AAKA,WAAO,0BAA0B;AAEjC,WAAO,iBAAiB;AAExB,WAAO,mCAAmC;AAC1C,WAAO,mCAAmC;AAC1C,WAAO,iCAAiC;AACxC,WAAO,iCAAiC;AACxC,WAAO,wBAAwB;AAC/B,WAAO,2BAA2B;AAClC,WAAO,4BAA4B;AACnC,WAAO,8BAA8B;AACrC,WAAO,yBAAyB;EACpC;EAEA,kBAAkB,YAAY,SAAO;AACjC,QAAI,CAAC,YAAY;AACb,UAAI,KAAK,WAAW;AAChB,YAAI,KAAK,UAAU,8BAA8B;AAC7C,eAAK,2BAA2B;QACpC;MACJ;IACJ;EACJ;EAEA,kBAAe;AACX,QAAI,KAAK,WAAW;AAChB,UAAI,KAAK,UAAU,6BAA6B;AAC5C,aAAK,2BAA2B;MACpC;IACJ;EACJ;EAEA,sBAAsB,IAAE;EAExB;EAEA,mBAAmB,IAAE;EAErB;EAEA,6BAA0B;EAE1B;EAEA,aAAa,IAAE;AACX,YAAQ,sBAAsB,KAAK,UAAU,QAAQ,EAAE,UAAU,GAAG,KAAK,kBAAkB,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AACxH,YAAQ,sBAAsB,KAAK,UAAU,QAAQ,EAAE,YAAY,GAAG,KAAK,kBAAkB,KAAK,gBAAe,GAAI,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AAClJ,YAAQ,sBAAsB,KAAK,UAAU,QAAQ,EAAE,SAAS,GAAG,KAAK,kBAAkB,KAAK,qBAAqB,gBAAe,GAAI,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK;AAE3K,YAAQ,sBAAsB,KAAK,UAAU,QAAQ,EAAE,UAAU,GAAG,KAAK,sBAAsB,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;EAChI;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,YAAQ,wCAAwC,MAAM,KAAK,UAAU,QAAQ;EACjF;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAOJ,uBAAuB,UAAU,oBAAoB,WAAA;AACjD,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,oBAAiB;AAC7B,mBAAe,KAAK,gBAAgB,YAAY;AAChD,WAAO,aAAa,cAAc,KAAK,YAAY,QAAQ,CAAC;EAChE;AACJ,EAAC;AAED,uBAAuB,UAAU,wBAAwB,WAAA;AACrD,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,wBAAqB;AACjC,mBAAe,KAAK,oBAAoB,YAAY;AACpD,WAAO,aAAa,cAAc,KAAK,gBAAgB,QAAQ,CAAC;EACpE;AACJ,EAAC;AAED,uBAAuB,UAAU,YAAY,WAAA;AACzC,MAAI,SAAS,YAAW;AACxB,MAAI,UAAU,YAAW;AACzB,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAE9B,MAAI,mBAAmB,YAAW;AAClC,MAAI,qBAAqB,YAAW;AACpC,MAAI,wCAAwC,YAAW;AACvD,SAAO,SAAS,UAAUD,iBAAgB,MAAMC,iBAAgB,OAAO,cAAc,OAAO,kBAAkB,MAAM,oBAAoB,OAAO,6BAA6B,OAAK;AAC7K,QAAI,oBAAoB,KAAK,qBAAoB;AAEjD,QAAID,gBAAe;AACf,wBAAkB,qBAAqB,KAAK,YAAY,QAAQ,CAAC;IACrE;AAEA,aAAS,KAAK,qBAAoB,EAAG,oBAAoB,YAAY,EAAE,WAAW,MAAM;AACxF,cAAU,KAAK,gBAAgB,YAAY,EAAE,WAAW,OAAO;AAE/D,QAAIC,kBAAkB,OAAO,WAAW,OAAO,IAAI,KAAK,sBAAsB,KAAK,UAAU,qCAAsC;AAC/H,wBAAkB,oBAAoB,KAAK,gBAAgB,YAAY,GAAG,KAAK;IACnF;AAEA,QAAI,aAAa;AACb,wBAAkB,cAAc,KAAK,UAAS,GAAI,IAAI;IAC1D;AAEA,QAAI,mBAAmB;AACnB,WAAK,mBAAmB,CAAC;IAC7B;AAEA,QAAI,iBAAiB;AACjB,yBAAmB,KAAK,oBAAoB,gBAAgB;AAC5D,2BAAqB,KAAK,qBAAqB,cAAc,gBAAgB;AAC7E,UAAI,8BAA8B,sBAAsB,KAAK,UAAU,8BAA8B;AACjG,YAAI,KAAK,UAAU,sDAAsD;AACrE,eAAK,4CAA4C;AACjD,gDAAsC,UAAU,KAAK,oBAAoB;AACzE,eAAK,gBAAe;AACpB,eAAK,yCAAyC,UAAU,qCAAqC;QACjG,WAAW,KAAK,UAAU,gCAAgC;AACtD,eAAK,gBAAe;QACxB,OAAO;AACH,eAAK,gBAAe;QACxB;MACJ;IACJ;EACJ;AACJ,EAAC;AAED,uBAAuB,UAAU,SAAS,WAAA;AACtC,SAAO,SAAS,OAAO,IAAE;AAGrB,QAAI,KAAK,0BAA0B;AAC/B,UAAI,KAAK,qBAAoB,EAAG,SAAQ,GAAI;AACxC,aAAK,2BAA2B;AAChC,YAAI,QAAQ,gBAAgB,KAAK,UAAU,QAAQ,GAAG;AAClD,eAAK,UACD,CAAC,KAAK,UAAU,4BAChB,CAAC,KAAK,UAAU,4BAChB,CAAC,KAAK,UAAU,0BAChB,MACA,IAAI;QACZ,OAAO;AACH,eAAK,UACD,CAAC,KAAK,UAAU,+BAChB,CAAC,KAAK,UAAU,+BAChB,CAAC,KAAK,UAAU,+BAA+B,KAAK,UAAU,qCAC9D,MACA,IAAI;QACZ;MACJ;IACJ;AAEA,SAAK,mBAAmB,EAAE;AAC1B,SAAK,sBAAsB,EAAE;AAE7B,QAAI,KAAK,UAAU,kBAAkB,QAAQ,eAAe,KAAK,UAAU,QAAQ,GAAG;AAClF,WAAK,aAAa,EAAE;IACxB;EACJ;AACJ,EAAC;AAED,uBAAuB,UAAU,qBAAqB,WAAA;AAClD,MAAI,kBAAkB,YAAW;AACjC,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,MAAIF,iBAAgB,aAAY;AAChC,MAAI,yBAAyB,IAAI,uBAAsB;AAEvD,MAAI,cAAc,YAAW;AAC7B,MAAI,eAAe,YAAW;AAC9B,MAAI,sBAAsB,YAAW;AACrC,MAAI,cAAc,YAAW;AAC7B,MAAI,mBAAmB,YAAW;AAClC,MAAI,kBAAkB,YAAW;AACjC,MAAI,kBAAkB,YAAW;AACjC,MAAI,wBAAwB,aAAY;AACxC,SAAO,SAAS,mBAAmB,IAAE;AAGjC,QAAI,KAAK,qBAAoB,EAAG,SAAQ,GAAI;AACxC,WAAK,uBAAsB;AAE3B,WAAK,qBAAqB;AAC1B,WAAK,qBAAqB;AAC1B,WAAK,eAAe;AACpB,WAAK,eAAe;AACpB,WAAK,WAAW;AAEhB,wBAAkB,KAAK,gBAAgB,YAAY,EAAE,SAAS,KAAK,YAAY,QAAQ,GAAG,eAAe;AACzG,UAAI,gBAAgB,YAAW,IAAK,MAAQ;AACxC,aAAK,gCAAgC,gBAAgB,eAAe,KAAK,6BAA6B;MAC1G;AAGA,UAAI,KAAK,UAAU,qBAAqB,IAAI,+BAA+B,GAAG,GAAG;AAC7E,YAAI,KAAK,UAAU,sCAAsC,gBAAgB,YAAW,IAAK,KAAK,UAAU,6BAA6B;AACjI,eAAK,WAAW;QACpB,WAAW,KAAK,UAAU,6BAA6B,QAAQ,KAAK,UAAU,0BAA0B,IAAI,GAAG;AAC3G,eAAK,WAAW;QACpB;MACJ;AAGA,6BAAuB,KAAK,KAAK,yBAAyB;AAC1D,6BAAuB,eAAe;AACtC,MAAAA,iBAAgB,KAAK,iBAAiBA,cAAa;AACnD,kBAAY,UAAU,KAAK,gBAAgB;AAC3C,UAAI,KAAK,UAAU,qBAAqB,IAAI,+BAA+B,cAAc,GAAG;AACxF,6BAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,KAAK,iBAAiBA,gBAAe,KAAK,qCAAqC,sBAAsB;AAErK,YAAI,CAAC,uBAAuB,gCAAgC,CAAC,uBAAuB,4BAA4B;AAC5G,cAAI,KAAK,SAAS,KAAK,oCAAoC,UAAU,KAAK,UAAU,uCAChF,KAAK,UAAU,qCAAqC,KAAK,KAAK,oCAAoC,UAAU;AAC5G,iBAAK,qBAAqB;UAC9B,OAAO;AACH,gBAAI,KAAK,UAAU,uCAAuC,QAAQ,KAAK,UAAU,oCAAoC,IAAI,GAAG;AACxH,mBAAK,qBAAqB;YAC9B,OAAO;AACH,mBAAK,qBAAqB;AAC1B,0BAAY,UAAU,uBAAuB,aAAa;YAC9D;UACJ;QACJ,OAAO;AACH,eAAK,qBAAqB;QAC9B;MACJ;AAEA,UAAI,KAAK,UAAU,8BAA8B;AAC7C,oBAAY,UAAU,YAAY;MACtC;AAGA,UAAI,KAAK,UAAU,qBAAqB,IAAI,+BAA+B,QAAQ,GAAG;AAElF,YAAI,CAAC,KAAK,oBAAoB;AAC1B,4BAAkB,YAAY,SAAS,UAAU,eAAe;QACpE,OAAO;AACH,4BAAkB,aAAa,SAAS,UAAU,eAAe;QACrE;AAEA,+BAAuB,KAAK,KAAK,yBAAyB;AAC1D,8BAAsB,8BAA8B,KAAK,kBAAkB,KAAK,oBAAoB;AACpG,6BAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,kBAAkB,uBAAuB,KAAK,qCAAqC,sBAAsB;AAGzK,YAAI,uBAAuB,cAAc;AACrC,wBAAcA,eAAc,YAAY,WAAW;AACnD,6BAAmB,gBAAgB,wBAAwB,aAAa,gBAAgB;AACxF,cAAI,aAAa,CAAC,iBAAiB,YAAY,IAAO;AACtD,cAAI,CAAC,cAAc,CAAC,KAAK,UAAU,qCAAqC;AACpE,gBAAI,qBAAqB;AACzB,yBAAa,UAAU,eAAe;AACtC,gBAAI,CAAC,gBAAgB,YAAY,IAAO,KAAK,KAAK,UAAU,6BAA6B;AACrF,kBAAI,YAAY,KAAK,UAAU;AAC/B,kBAAI,YAAY,KAAK,UAAU;AAC/B,kBAAI,WAAW,KAAK,UAAU,gCAAgC,OAAO,KAAK,UAAU,+BAA+B;AAEnH,kBAAI,iBAAiB,gBAAgB,YAAW;AAChD,kBAAI,kBAAkB,iBAAiB;AAEvC,kBAAI,aAAa,KAAK,SAAS,iBAAiB,WAAW,SAAS;AACpE,kBAAI,cAAc,iBAAiB;AAC/B,qCAAqB,KAAK,KAAK,iBAAiB,UAAU;AAC1D,+BAAe,aAAa,eAAe,YAAY,EAAE,WAAW,YAAY,YAAY;AAE5F,oBAAI,KAAK,UAAU,gCAAgC,MAAM;AACrD,uCAAqB,KAAK,IAAI,oBAAoB,QAAQ;gBAC9D;cACJ,OAAO;AACH,qCAAqB;AACrB,+BAAe,aAAa,eAAe,YAAY,EAAE,WAAW,iBAAiB,YAAY;cACrG;AAEA,mCAAqB,KAAK,IAAI,GAAG,kBAAkB;AAEnD,kBAAI,sBAAsB,GAAG;AACzB,6BAAa,UAAU,eAAe;cAC1C;YACJ;AAEA,gBAAI,uBAAuB,uBAAuB,iBAAiB,KAAK,oCAAoC,wBAAwB;AAEpI,4BAAgB,UAAS;AACzB,4BAAgB,UAAU,KAAK,gBAAgB;AAC/C,mCAAuB,KAAK,KAAK,yBAAyB;AAE1D,gBAAI,wBAAwB;AAC5B,gBAAI,+BAA+B;AACnC,gBAAI,iBAAiB;AACrB,gBAAI,qBAAqB;AAEzB,qBAAS,IAAI,GAAG,IAAI,oBAAoB,KAAK;AACzC,kBAAI,sBAAsB,KAAK,KAAK,qBAAqB,GAAG;AACxD,oCAAoB,UAAU,YAAY;cAC9C,OAAO;AACH,sCAAsB,gBAAgB,SAAS,iBAAiB,mBAAmB;cACvF;AAEA,gCAAkB,gBAAgB,SAAS,qBAAqB,eAAe;AAC/E,oCAAsB,8BAA8B,iBAAiB,KAAK,oBAAoB;AAC9F,qCAAuB,KAAK,KAAK,yBAAyB;AAC1D,mCAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,kBAAkB,uBAAuB,KAAK,qCAAqC,sBAAsB;AACzK,gCAAkB,gBAAgB,SAAS,qBAAqB,eAAe;AAE/E,kBAAI,CAAC,uBAAuB,cAAc;AACtC,wCAAwB;cAC5B,OAAO;AACH,oBAAI,uBAAuB,gBAAgB,KAAK,oCAAoC,wBAAwB,MAAQ;AAChH,uCAAqB;gBACzB;AAEA,oBAAI,uBAAuB;AACvB,iDAA+B;gBACnC;AAEA,oBAAI,KAAK,qBAAqB,GAAG;AAC7B,mCAAiB;gBACrB;cACJ;YACJ;AAEA,gBAAI,8BAA8B,sBAAsB,wBACpD,CAAC,KAAK,UAAU,mCAAmC,CAAC,cAAc,CAAC,KAAK,UAAU;AACtF,gBAAI,yBAAyB,6BAA6B;AACtD,kBAAI,8BAA8B;AAC9B,qBAAK,eAAe;cACxB,OAAO;AACH,qBAAK,eAAe;cACxB;YACJ,OAAO;AACH,mBAAK,eAAe;AACpB,mBAAK,eAAe;AAEpB,kBAAI,KAAK,UAAU,iCAAiC,QAAQ,KAAK,UAAU,8BAA8B,IAAI,GAAG;AAC5G,qBAAK,eAAe;cACxB,WAAW,KAAK,UAAU,iCAAiC,QAAQ,KAAK,UAAU,8BAA8B,IAAI,GAAG;AACnH,qBAAK,eAAe;cACxB;YACJ;AAEA,gBAAI,KAAK,cAAc;AACnB,kBAAIG,YAAW,gBAAgB,YAAW;AAC1C,kBAAI,KAAK,UAAU,iCAAiCA,YAAW,KAAK,UAAU,wBAAwB;AAClG,qBAAK,eAAe;cACxB;YACJ;AAEA,gBAAI,KAAK,gBAAgB,KAAK,cAAc;AACxC,kBAAI,kBAAkB,KAAK,UAAU,iCAAiC;AAClE,qBAAK,eAAe;AACpB,qBAAK,eAAe;cACxB,WAAW,kBAAkB,cAAc,KAAK,UAAU,oDAAoD;AAC1G,qBAAK,eAAe;AACpB,qBAAK,eAAe;cACxB;YACJ;UACJ;QACJ;MACJ;AAEA,WAAK,KAAK,SAAS,KAAK,UAAU,qBAAqB,KAAK,KAAK,UAAU,iCAAiC,CAAC,KAAK,UAAU,wBAAwB;AAChJ,aAAK,iBAAiB,UAAU,WAAW;MAE/C;AAEA,UAAI,KAAK,SAAS,KAAK,UAAU,qBAAqB,GAAG;AACrD,aAAK,uBAAuB,KAAK,oBAAoB,KAAK,oBAAoB;MAClF;AAEA,UAAI,KAAK,SAAS,KAAK,UAAU,mBAAmB,GAAG;AACnD,aAAK,iBAAiB,KAAK,oCAAoC;AAC/D,aAAK,uBAAsB;MAC/B;AAEA,WAAK,2BAA2B,EAAE;IACtC;EACJ;AACJ,EAAC;AAED,uBAAuB,UAAU,6BAA6B,WAAA;AAC1D,MAAI,kBAAkB,YAAW;AACjC,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,MAAIH,iBAAgB,aAAY;AAChC,MAAI,yBAAyB,IAAI,uBAAsB;AAEvD,MAAI,kBAAkB,YAAW;AAEjC,MAAI,kCAAkC,IAAI,kBAAiB;AAC3D,MAAI,gCAAgC,IAAI,kBAAiB;AACzD,SAAO,SAAS,2BAA2B,IAAE;AACzC,QAAI,KAAK,qBAAoB,EAAG,SAAQ,GAAI;AACxC,WAAK,qBAAqB;AAE1B,sCAAgC,KAAK,KAAK,4BAA4B,2BAA2B;AACjG,oCAA8B,KAAK,KAAK,4BAA4B,yBAAyB;AAE7F,UAAI,sCAAsC,KAAK,4BAA4B;AAE3E,UAAI,4BAA4B,KAAK,4BAA4B;AACjE,UAAI,8CAA8C,KAAK,4BAA4B;AACnF,UAAI,kDAAkD,KAAK,4BAA4B;AACvF,UAAI,kDAAkD,KAAK,4BAA4B;AACvF,UAAI,2DAA2D,KAAK,4BAA4B;AAEhG,UAAI,4CAA4C;AAGhD,UAAI,8BAA8B;AAClC,SAAG;AACC,YAAI,+BAA+B,KAAK,2CAA2C;AAC/E,eAAK,4CAA4C;AACjD,eAAK,gBAAe;QACxB;AAEA,YAAI,KAAK,2CAA2C;AAChD,eAAK,qBAAqB,UAAU,KAAK,wCAAwC;AACjF,eAAK,0BAA0B;QACnC;AAEA,YAAI,KAAK,yBAAyB;AAC9B,cAAI,KAAK,UAAU,gDAAgD,MAAM;AACrE,iBAAK,4BAA4B,4BAA4B,KAAK,KAAK,UAAU,4CAA4C;AAC7H,iBAAK,4BAA4B,0BAA0B,KAAK,KAAK,UAAU,4CAA4C;UAC/H;AAEA,cAAI,KAAK,UAAU,iCAAiC;AAChD,iBAAK,4BAA4B,kCAAkC;UACvE;AAEA,cAAI,KAAK,UAAU,2CAA2C;AAC1D,iBAAK,4BAA4B,wBAAwB,KAAK,UAAU,+BAA+B;AACvG,iBAAK,4BAA4B,0CAA0C,KAAK,UAAU,+BAA+B;AAEzH,iBAAK,4BAA4B,8CAA8C,KAAK,UAAU,+BAA+B;AAC7H,iBAAK,4BAA4B,8CAA8C,KAAK,UAAU,+BAA+B;AAE7H,iBAAK,4BAA4B,uDAAuD,KAAK,UAAU,+BAA+B;UAC1I;AAEA,eAAK,0BAA0B;QACnC,OAAO;AACH,eAAK,4BAA4B,4BAA4B,KAAK,+BAA+B;AACjG,eAAK,4BAA4B,0BAA0B,KAAK,6BAA6B;AAC7F,eAAK,4BAA4B,kCAAkC;AAEnE,eAAK,4BAA4B,wBAAwB;AACzD,eAAK,4BAA4B,0CAA0C;AAC3E,eAAK,4BAA4B,8CAA8C;AAC/E,eAAK,4BAA4B,8CAA8C;AAC/E,eAAK,4BAA4B,uDAAuD;QAC5F;AAEA,0BAAkB,KAAK,oBAAoB,YAAY,EAAE,SAAS,KAAK,gBAAgB,QAAQ,GAAG,eAAe;AACjH,+BAAuB,MAAK;AAC5B,QAAAA,iBAAgB,KAAK,qBAAqBA,cAAa;AACvD,wBAAgB,UAAU,KAAK,oBAAoB;AACnD,YAAI,KAAK,UAAU,qBAAqB,IAAI,+BAA+B,cAAc,GAAG;AACxF,+BAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,KAAK,iBAAiBA,gBAAe,KAAK,6BAA6B,sBAAsB;AAE7J,cAAI,CAAC,uBAAuB,gCAAgC,CAAC,uBAAuB,4BAA4B;AAC5G,gBAAI,CAAC,uCAAuC,uBAAuB,8BAA8B;AAC7F,mBAAK,qBAAqB;AAC1B,0DAA4C;YAChD,OAAO;AACH,mBAAK,qBAAqB;YAC9B;AAEA,4BAAgB,UAAU,uBAAuB,aAAa;UAClE,OAAO;AACH,iBAAK,qBAAqB;UAC9B;QACJ;AAEA,sCAA8B;MAClC,SAAS,KAAK,sBAAsB,KAAK;AAEzC;AACI,aAAK,4BAA4B,4BAA4B,KAAK,+BAA+B;AACjG,aAAK,4BAA4B,0BAA0B,KAAK,6BAA6B;AAC7F,aAAK,4BAA4B,kCAAkC;AAEnE,aAAK,4BAA4B,wBAAwB;AACzD,aAAK,4BAA4B,0CAA0C;AAC3E,aAAK,4BAA4B,8CAA8C;AAC/E,aAAK,4BAA4B,8CAA8C;AAC/E,aAAK,4BAA4B,uDAAuD;MAC5F;AAEA,WAAK,4CAA4C;AACjD,WAAK,0BAA0B;AAE/B,UAAI,KAAK,UAAU,kCAAkC;AACjD,wBAAgB,UAAU,YAAY;MAC1C;AAEA,UAAI,wBAAwB,KAAK;AACjC,UAAI,2CAA2C;AAE3C,aAAK,qBAAqB;MAC9B;AAEA,UAAI,KAAK,SAAS,KAAK,UAAU,yBAAyB,KAAK,KAAK,UAAU,oCACtE,KAAK,SAAS,KAAK,UAAU,qBAAqB,KAAK,KAAK,UAAU,8BAA+B;AACzG,aAAK,qBAAqB,UAAU,eAAe;AACnD,aAAK,yCAAyC,UAAU,KAAK,oBAAoB;MACrF;AAEA,UAAI,2CAA2C;AAE3C,aAAK,qBAAqB;MAC9B;IACJ;EACJ;AACJ,EAAC;AAED,uBAAuB,UAAU,wBAAwB,WAAA;AACrD,MAAIA,iBAAgB,aAAY;AAChC,MAAI,yBAAyB,IAAI,uBAAsB;AACvD,MAAI,6BAA6B,IAAI,uBAAsB;AAC3D,MAAI,cAAc,YAAW;AAC7B,MAAI,sBAAsB,YAAW;AACrC,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,sBAAsB,IAAE;AACpC,QAAI,KAAK,UAAU,uBAAuB;AACtC,MAAAA,iBAAgB,KAAK,iBAAiBA,cAAa;AACnD,oBAAcA,eAAc,YAAY,WAAW;AACnD,qBAAeA,eAAc,sBAAsB,YAAY;AAC/D,4BAAsB,KAAK,8BAA8B,8BAA8B,aAAa,mBAAmB;AACvH,UAAI,CAAC,oBAAoB,YAAY,IAAO,GAAG;AAC3C,4BAAoB,eAAe,mBAAmB;AACtD,qBAAa,gBAAgB,mBAAmB;AAChD,QAAAA,eAAc,sBAAsB,YAAY;MACpD;AACA,UAAI,cAAc,KAAK,UAAU,+BAA+B;AAChE,WAAK,UAAU,+BAA+B,iBAAiB;AAC/D,2BAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,cAAc,MAAMA,gBAAe,KAAK,UAAU,gCAAgC,sBAAsB;AACxK,WAAK,UAAU,+BAA+B,iBAAiB;AAC/D,WAAK,qBAAqB,uBAAuB;IACrD,OAAO;AACH,WAAK,qBAAqB;IAC9B;AAEA,QAAI,KAAK,UAAU,2BAA2B;AAC1C,MAAAA,iBAAgB,KAAK,qBAAqBA,cAAa;AACvD,UAAI,cAAc,KAAK,4BAA4B;AACnD,WAAK,4BAA4B,iBAAiB;AAClD,2BAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,cAAc,MAAMA,gBAAe,KAAK,6BAA6B,0BAA0B;AAC/J,WAAK,4BAA4B,iBAAiB;AAClD,WAAK,yBAAyB,2BAA2B;IAC7D,OAAO;AACH,WAAK,yBAAyB;IAClC;AAEA,QAAI,KAAK,UAAU,2BAA2B;AAC1C,MAAAA,iBAAgB,KAAK,qBAAqBA,cAAa;AACvD,oBAAcA,eAAc,YAAY,WAAW;AACnD,qBAAeA,eAAc,sBAAsB,YAAY;AAC/D,4BAAsB,KAAK,8BAA8B,8BAA8B,aAAa,mBAAmB;AACvH,UAAI,CAAC,oBAAoB,YAAY,IAAO,GAAG;AAC3C,4BAAoB,eAAe,mBAAmB;AACtD,qBAAa,gBAAgB,mBAAmB;AAChD,QAAAA,eAAc,sBAAsB,YAAY;MACpD;AAEA,UAAI,cAAc,KAAK,UAAU,+BAA+B;AAChE,WAAK,UAAU,+BAA+B,iBAAiB;AAC/D,2BAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,cAAc,MAAMA,gBAAe,KAAK,UAAU,gCAAgC,KAAK,6BAA6B;AACpL,WAAK,yBAAyB,KAAK,8BAA8B;AACjE,WAAK,UAAU,+BAA+B,iBAAiB;IACnE,OAAO;AACH,WAAK,yBAAyB;IAClC;AAEA,QAAI,KAAK,UAAU,+BAA+B;AAC9C,MAAAA,iBAAgB,KAAK,yBAAyBA,cAAa;AAC3D,UAAI,cAAc,KAAK,4BAA4B;AACnD,WAAK,4BAA4B,iBAAiB;AAClD,2BAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,cAAc,MAAMA,gBAAe,KAAK,6BAA6B,0BAA0B;AAC/J,WAAK,4BAA4B,iBAAiB;AAClD,WAAK,6BAA6B,2BAA2B;IACjE,OAAO;AACH,WAAK,6BAA6B;IACtC;EACJ;AACJ,EAAC;AAED,uBAAuB,UAAU,OAAO,WAAA;AACpC,MAAIA,iBAAgB,aAAY;AAChC,MAAI,gBAAgB,YAAW;AAC/B,SAAO,SAAS,KAAK,UAAU,4BAA4B,MAAM,YAAY,OAAK;AAC9E,IAAAA,iBAAgB,KAAK,iBAAiBA,cAAa;AAEnD,yBAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAUA,gBAAe,KAAK,UAAU,gCAAgC,KAAK,yBAAyB;AAC3K,QAAI,6BAA6B,MAAM;AACnC,gCAA0B,KAAK,KAAK,yBAAyB;IACjE;AAEA,QAAI,CAAC,WAAW;AACZ,oBAAc,UAAU,KAAK,0BAA0B,eAAe;IAC1E,OAAO;AACH,oBAAc,UAAU,QAAQ;IACpC;AAEA,QAAI,CAAC,cAAc,YAAY,IAAO,GAAG;AACrC,WAAK,iBAAiB,SAAS,eAAe,KAAK,gBAAgB;AACnE,WAAK,qBAAoB,EAAG,SAAS,aAAa;IACtD;AAGA,QAAI,KAAK,UAAU,mBAAmB;AAClC,UAAI,CAAC,KAAK,SAAQ,GAAI;AAClB,YAAI,QAAQ,gBAAgB,KAAK,UAAU,QAAQ,GAAG;AAClD,eAAK,UACD,CAAC,KAAK,UAAU,4BAChB,CAAC,KAAK,UAAU,4BAChB,CAAC,KAAK,UAAU,0BAChB,IAAI;QACZ,OAAO;AACH,eAAK,UACD,CAAC,KAAK,UAAU,+BAChB,CAAC,KAAK,UAAU,+BAChB,CAAC,KAAK,UAAU,6BAChB,IAAI;QACZ;MACJ;IACJ;EAGJ;AACJ,EAAC;AAED,uBAAuB,UAAU,mBAAmB,WAAA;AAChD,MAAI,wBAAwB,aAAY;AACxC,SAAO,SAAS,iBAAiB,kBAAkB,4BAA4B,MAAM,gBAAgB,OAAK;AACtG,4BAAwB,KAAK,iBAAiB,qBAAqB;AACnE,0BAAsB,kBAAkB,gBAAgB;AACxD,SAAK,sBAAsB,uBAAuB,2BAA2B,aAAa;EAC9F;AACJ,EAAC;AAED,uBAAuB,UAAU,+BAA+B,WAAA;AAC5D,MAAI,wBAAwB,aAAY;AACxC,SAAO,SAAS,6BAA6B,kBAAkB,sBAAsB,4BAA4B,MAAM,gBAAgB,OAAK;AACxI,4BAAwB,KAAK,iBAAiB,qBAAqB;AACnE,0BAAsB,8BAA8B,kBAAkB,oBAAoB;AAC1F,SAAK,sBAAsB,uBAAuB,2BAA2B,aAAa;EAC9F;AACJ,EAAC;AAED,uBAAuB,UAAU,wBAAwB,WAAA;AACrD,MAAI,kBAAkB,YAAW;AACjC,MAAI,sBAAsB,YAAW;AACrC,MAAI,mBAAmB,YAAW;AAClC,MAAI,uBAAuB,aAAY;AACvC,MAAI,gBAAgB,YAAW;AAC/B,SAAO,SAAS,sBAAsB,uBAAuB,4BAA4B,MAAM,gBAAgB,OAAK;AAChH,sBAAkB,KAAK,YAAY,eAAe;AAClD,0BAAsB,sBAAsB,kBAAkB,mBAAmB;AACjF,uBAAmB,sBAAsB,sBAAsB,gBAAgB;AAE/E,yBAAqB,8BAA8B,iBAAiB,gBAAgB;AAEpF,yBAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,SAAS,qBAAqB,sBAAsB,KAAK,UAAU,gCAAgC,KAAK,yBAAyB;AACjM,QAAI,6BAA6B,MAAM;AACnC,gCAA0B,KAAK,KAAK,yBAAyB;IACjE;AAEA,kBAAc,UAAS;AACvB,QAAI,CAAC,eAAe;AAChB,UAAI,CAAC,KAAK,0BAA0B,oBAAoB;AACpD,wBAAgB,KAAK,0BAA0B,wBAAwB,SAAS,iBAAiB,aAAa;MAClH;IACJ,OAAO;AACH,sBAAgB,oBAAoB,SAAS,iBAAiB,aAAa;IAC/E;AAEA,QAAI,CAAC,KAAK,0BAA0B,sBAAsB,eAAe;AACrE,WAAK,qBAAqB,UAAU,gBAAgB;AACpD,WAAK,qBAAoB,EAAG,oBAAoB,gBAAgB;IACpE;AAEA,QAAI,CAAC,cAAc,YAAY,IAAO,GAAG;AACrC,WAAK,iBAAiB,SAAS,eAAe,KAAK,gBAAgB;AACnE,WAAK,qBAAoB,EAAG,SAAS,aAAa;IACtD;AAEA,QAAI,KAAK,UAAU,uBAAuB;AACtC,UAAI,CAAC,KAAK,SAAQ,GAAI;AAClB,YAAI,QAAQ,gBAAgB,KAAK,UAAU,QAAQ,GAAG;AAClD,eAAK,UACD,CAAC,KAAK,UAAU,4BAChB,CAAC,KAAK,UAAU,4BAChB,CAAC,KAAK,UAAU,0BAChB,IAAI;QACZ,OAAO;AACH,eAAK,UACD,CAAC,KAAK,UAAU,+BAChB,CAAC,KAAK,UAAU,+BAChB,CAAC,KAAK,UAAU,6BAChB,IAAI;QACZ;MACJ;IACJ;EAGJ;AACJ,EAAC;AAED,uBAAuB,UAAU,aAAa,WAAA;AAC1C,SAAO,SAASI,YAAW,cAAY;AACnC,SAAK,qBAAqB,gBAAgB,cAAc,KAAK,oBAAoB;AACjF,SAAK,qBAAoB,EAAG,eAAe,YAAY;EAC3D;AACJ,EAAC;AAED,uBAAuB,UAAU,kBAAkB,WAAA;AAC/C,MAAI,oBAAoB,YAAW;AACnC,SAAO,SAASC,iBAAgB,cAAY;AACxC,wBAAoB,KAAK,qBAAqB,oBAAoB,cAAc,iBAAiB;AACjG,SAAK,WAAW,iBAAiB;EACrC;AACJ,EAAC;AAED,uBAAuB,UAAU,YAAY,WAAA;AACzC,MAAIL,iBAAgB,aAAY;AAChC,SAAO,SAAS,UAAU,QAAQ,WAAW,OAAK;AAC9C,QAAI,cAAc,KAAK,SAAS,QAAQ,KAAK,UAAU,aAAa,KAAK,UAAU,WAAW;AAC9F,QAAI,iBAAiB,KAAK,UAAS;AAEnC,SAAK,iBAAiB;AACtB,SAAK,uBAAsB;AAE3B,IAAAA,iBAAgB,KAAK,iBAAiBA,cAAa;AAEnD,yBAAqB,kBAAkB,KAAK,UAAU,QAAQ,EAAE,cAAc,MAAMA,gBAAe,KAAK,UAAU,gCAAgC,KAAK,yBAAyB;AAEhL,QAAI,KAAK,0BAA0B,kBAAkB,UAAU;AAC3D,WAAK,qBAAoB,EAAG,cAAc,KAAK,UAAS,GAAI,IAAI;IACpE,OAAO;AACH,WAAK,iBAAiB;IAC1B;AAEA,SAAK,uBAAsB;EAC/B;AACJ,EAAC;AAED,uBAAuB,UAAU,kBAAkB,WAAA;AAC/C,MAAIA,iBAAgB,aAAY;AAChC,MAAI,SAAS,YAAW;AACxB,SAAO,SAAS,kBAAe;AAC3B,SAAK,uBAAuB,KAAK,YAAY,KAAK,oBAAoB;AAEtE,IAAAA,iBAAgB,KAAK,qBAAqBA,cAAa;AACvD,aAASA,eAAc,YAAY,MAAM;AACzC,SAAK,qBAAqB,SAAS,OAAO,WAAW,KAAK,4BAA4B,WAAW,IAAI,OAAU,KAAK,UAAU,2BAA2B,MAAM,GAAG,KAAK,oBAAoB;AAC3L,SAAK,yCAAyC,UAAU,KAAK,oBAAoB;AAEjF,SAAK,0BAA0B;EACnC;AACJ,EAAC;;;AC93CK,IAAO,+BAAP,MAAmC;EAErC,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,sBAAsB;AAE3B,SAAK,8BAA8B;AACnC,SAAK,4BAA4B;AAEjC,SAAK,qBAAqB;AAC1B,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAExB,SAAK,sBAAsB;AAC3B,SAAK,2BAA2B;AAEhC,SAAK,uCAAuC;AAC5C,SAAK,8BAA8B;AACnC,SAAK,2BAA2B;AAEhC,SAAK,uBAAuB;AAC5B,SAAK,qBAAqB;AAE1B,SAAK,eAAe,WAAW;AAE/B,SAAK,WAAW;EACpB;;AAGE,IAAO,yBAAP,MAA6B;EAE/B,YAAY,QAAM;AACd,SAAK,YAAY;AAEjB,SAAK,gBAAgB;AAErB,SAAK,iCAAiC;AACtC,SAAK,wCAAwC;AAE7C,SAAK,+BAA+B;AACpC,SAAK,sCAAsC;EAG/C;EAEA,QAAK;EAEL;EAEA,OAAI;AACA,SAAK,iCAAiC;AACtC,SAAK,wCAAwC;AAE7C,SAAK,+BAA+B;AACpC,SAAK,sCAAsC;EAC/C;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,OAAO,IAAE;AAGL,QAAI,KAAK,UAAU,6BAA6B;AAC5C,WAAK,wBAAwB,EAAE;IACnC;AAEA,QAAI,KAAK,UAAU,6BAA6B,KAAK,UAAU,oBAAoB,cAAa,GAAI;AAChG,WAAK,sBAAsB,EAAE;IACjC;EACJ;EAEA,wBAAwB,IAAE;EAE1B;EAEA,sBAAsB,IAAE;EAExB;;AAOJ,uBAAuB,UAAU,0BAA0B,WAAA;AACvD,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,wBAAwB,IAAE;AACtC,eAAW,KAAK,UAAU,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAE3E,iBAAa,cAAa;AAE1B,QAAI,OAAO,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,YAAY,cAAc,UAAU,EAAE,QAAO;AAElI,QAAI,CAAC,KAAK,UAAU,gBAAiB,KAAK,UAAU,oBAAoB,CAAC,QAAQ,gBAAgB,KAAK,UAAU,QAAQ,GAAI;AACxH,UAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,sCAAsC;AACzE,YAAI,oBAAoB,CAAC,KAAK,CAAC;AAC/B,YAAI,QAAQ,KAAK,QAAQ,GAAG,KAAK,UAAU,oBAAoB,KAAK,IAAI,iBAAiB,CAAC,IAAI,KAAK,QAAQ,iBAAiB;AAE5H,qBAAa,cAAc,QAAQ,IAAI,QAAQ;MACnD;IACJ,OAAO;AACH,UAAI,CAAC,KAAK,eAAe;AACrB,YAAI,KAAK,IAAI,KAAK,YAAW,CAAE,IAAI,KAAK,UAAU,0BAA0B;AACxE,eAAK,gBAAgB;QACzB;MACJ,WAAW,CAAC,KAAK,gCAAgC;AAC7C,YAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,6BAA6B;AAChE,cAAI,gBAAgB,CAAC,KAAK,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU;AAE5D,cAAI,CAAC,KAAK,UAAU,qBAAqB;AACrC,yBAAa,cAAc,eAAe,QAAQ;UACtD,OAAO;AACH,iBAAK,iCAAiC;AACtC,iBAAK,wCAAwC;UACjD;AAEA,eAAK,gBAAgB;QACzB;MACJ;IACJ;AAEA,QAAI,KAAK,gCAAgC;AACrC,UAAI,gBAAgB,KAAK,QAAQ,KAAK,qCAAqC,KAAK,KAAK,UAAU,2BAA2B;AAC1H,UAAI,KAAK,IAAI,aAAa,IAAI,KAAK,IAAI,KAAK,qCAAqC,IAAI,KAAK,YAAY;AAClG,wBAAgB,KAAK;MACzB;AAEA,mBAAa,cAAc,eAAe,QAAQ;AAClD,WAAK,yCAAyC;AAE9C,UAAI,KAAK,IAAI,KAAK,qCAAqC,IAAI,KAAK,YAAY;AACxE,aAAK,iCAAiC;AACtC,aAAK,wCAAwC;MACjD;IACJ;AAEA,QAAI,aAAa,cAAa,IAAK,KAAK,oBAAoB;AACxD,WAAK,UAAU,yBAAyB,WAAW,YAAY;IACnE;EACJ;AACJ,EAAC;AAED,uBAAuB,UAAU,wBAAwB,WAAA;AACrD,MAAI,cAAc,YAAW;AAC7B,MAAI,SAAS,YAAW;AACxB,MAAI,cAAc,YAAW;AAC7B,MAAI,oBAAoB,YAAW;AACnC,MAAI,iBAAiB,YAAW;AAChC,MAAI,QAAQ,YAAW;AACvB,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,sBAAsB,IAAE;AACpC,QAAI,OAAO,KAAK,UAAU,oBAAoB,QAAO;AAErD,kBAAc,KAAK,cAAc,WAAW;AAC5C,aAAS,KAAK,SAAS,MAAM;AAE7B,kBAAc,KAAK,UAAU,oBAAoB,UAAS,EAAG,SAAS,WAAW;AACjF,wBAAoB,YAAY,YAAY,iBAAiB;AAC7D,qBAAiB,YAAY,WAAW,aAAa,cAAc;AAEnE,QAAI,WAAW;AACf,QAAI,YAAY,WAAW,WAAW,IAAI,UAAU;AAChD,uBAAiB,OAAO,YAAY,cAAc,EAAE,WAAW,aAAa,cAAc;IAC9F,WAAW,YAAY,WAAW,iBAAiB,IAAI,UAAU;AAC7D,uBAAiB,OAAO,WAAW,aAAa,cAAc;IAClE,WAAW,CAAC,OAAO,kBAAkB,WAAW,GAAG;AAC/C,qBAAe,YAAY,cAAc;IAC7C;AAEA,mBAAe,eAAe,cAAc;AAE5C,QAAI,OAAO,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,YAAY,cAAc,UAAU,EAAE,QAAO;AAClI,QAAI,gBAAgB;AAEpB,QAAI,CAAC,KAAK,UAAU,gBAAiB,KAAK,UAAU,oBAAoB,CAAC,QAAQ,gBAAgB,KAAK,UAAU,QAAQ,GAAI;AACxH,UAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,sCAAsC;AACzE,YAAI,oBAAoB,KAAK,CAAC;AAC9B,wBAAgB,KAAK,QAAQ,GAAG,KAAK,UAAU,oBAAoB,KAAK,IAAI,iBAAiB,CAAC,IAAI,KAAK,QAAQ,iBAAiB,IAAI;MACxI;IACJ,OAAO;AACH,UAAI,CAAC,KAAK,eAAe;AACrB,YAAI,KAAK,IAAI,KAAK,YAAW,CAAE,IAAI,KAAK,UAAU,0BAA0B;AACxE,eAAK,gBAAgB;QACzB;MACJ,WAAW,CAAC,KAAK,8BAA8B;AAC3C,YAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,6BAA6B;AAChE,0BAAgB,KAAK,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU;AAIvD,cAAI,cAAc,KAAK,cAAc,OAAO,iBAAiB,aAAa,cAAc,CAAC;AACzF,cAAI,WAAW,KAAK,MAAM,cAAc,KAAK,UAAU,eAAe;AAEtE,cAAI,YAAY,KAAK,cAAc,WAAW,KAAK,UAAU,eAAe;AAC5E,cAAI,eAAe,CAAC,KAAK,uBAAuB,aAAa,SAAS;AAEtE,cAAI,KAAK,IAAI,YAAY,IAAI,GAAG;AAC5B,gBAAI,KAAK,QAAQ,aAAa,KAAK,KAAK,QAAQ,YAAY,GAAG;AAC3D,8BAAgB;YACpB,OAAO;AACH,8BAAiB,CAAC,KAAK,QAAQ,YAAY,IAAI,KAAK,UAAU,kBAAmB;YACrF;UACJ,WAAW,KAAK,IAAI,YAAY,IAAI,KAAK,oBAAoB;AACzD,6BAAiB;UACrB;AAEA,cAAI,KAAK,UAAU,qBAAqB;AACpC,iBAAK,+BAA+B;AACpC,iBAAK,sCAAsC;UAC/C;AAEA,eAAK,gBAAgB;QACzB;MACJ;IACJ;AAEA,QAAI,KAAK,8BAA8B;AACnC,sBAAgB,KAAK,QAAQ,KAAK,mCAAmC,KAAK,KAAK,UAAU,2BAA2B;AACpH,UAAI,KAAK,IAAI,aAAa,IAAI,KAAK,IAAI,KAAK,mCAAmC,IAAI,KAAK,YAAY;AAChG,wBAAgB,KAAK;MACzB;AAEA,WAAK,uCAAuC;AAE5C,UAAI,KAAK,IAAI,KAAK,mCAAmC,IAAI,KAAK,YAAY;AACtE,aAAK,+BAA+B;AACpC,aAAK,sCAAsC;MAC/C;IACJ;AAEA,QAAI,iBAAiB,GAAG;AACpB,mBAAa,cAAc,eAAe,cAAc;AACxD,WAAK,UAAU,oBAAoB,eAAe,YAAY;AAE9D,UAAI,KAAK,UAAU,sBAAsB;AACrC,YAAI,mBAAmB,KAAK,IAAI,GAAG,KAAK,UAAU,qBAAqB,IAAM;AAC7E,gBAAQ,KAAK,SAAS,KAAK;AAC3B,YAAI,cAAc,KAAK,cAAc,MAAM,iBAAiB,aAAa,cAAc,CAAC;AACxF,YAAI,KAAK,IAAI,WAAW,IAAI,kBAAkB;AAC1C,cAAI,YAAY,KAAK,IAAI,WAAW,IAAI,oBAAoB,KAAK,QAAQ,WAAW;AACpF,uBAAa,cAAc,UAAU,cAAc;AACnD,eAAK,UAAU,oBAAoB,eAAe,YAAY;QAClE;MACJ;IACJ;EACJ;AACJ,EAAC;;;AC9PK,IAAO,wCAAP,MAA4C;EAE9C,cAAA;AACI,SAAK,aAAa;AAClB,SAAK,iBAAiB;AACtB,SAAK,2BAA2B;AAEhC,SAAK,wBAAwB;AAC7B,SAAK,kBAAkB;AACvB,SAAK,0BAA0B;EACnC;;AAGE,IAAO,2BAAP,MAA+B;EAEjC,YAAY,yBAAuB;AAC/B,SAAK,6BAA6B;EACtC;EAEA,mBAAgB;AACZ,WAAO,KAAK;EAChB;EAEA,QAAK;EAEL;EAEA,OAAI;EAEJ;EAEA,UAAO;AACH,WAAO;EACX;;;;ACjCJ,SAAS,WAAAM,WAAS,kBAAAC,uBAAsB;;;ACExC,IAAI,+BAA+B;AACnC,IAAI,+BAA+B;AAE7B,SAAU,6BAA6B,2BAAyB;AAClE,iCAA+B;AACnC;AAEM,SAAU,6BAA6B,2BAAyB;AAClE,iCAA+B;AACnC;AAEM,SAAU,+BAA4B;AACxC,SAAO;AACX;AAEM,SAAU,+BAA4B;AACxC,SAAO;AACX;AAMM,SAAU,yBAAyB,sBAAoB;AACzD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,6BAA6B;AACjC,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,OAAO,aAAa,kBAAkB,GAAG;AACzC,qCAA6B;AAC7B;MACJ;IACJ;AAEA,QAAI,4BAA4B;AAC5B;IACJ;EACJ;AAEA,SAAO;AACX;AAKM,SAAU,wBAAwB,sBAAoB;AACxD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,2BAA2B;AAC/B,MAAI,6BAA6B;AACjC,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,EAAE,OAAO,cAAc,sBAAsB,QAAQ,OAAO,6BAA6B,uBAAuB,OAAO,gBAAgB,+BAA+B;AACtK,mCAA2B;AAC3B;MACJ;AAEA,UAAI,OAAO,aAAa,kBAAkB,GAAG;AACzC,qCAA6B;MACjC;IACJ;AAEA,QAAI,CAAC,0BAA0B;AAC3B;IACJ;EACJ;AAEA,SAAO,4BAA4B;AACvC;AAEM,SAAU,uBAAuB,sBAAoB;AACvD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,2BAA2B;AAC/B,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,OAAO,WAAW,kBAAkB,GAAG;AACvC,mCAA2B;AAC3B;MACJ;IACJ;AAEA,QAAI,0BAA0B;AAC1B;IACJ;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,sBAAsB,sBAAoB;AACtD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,8BAA8B;AAClC,MAAI,2BAA2B;AAC/B,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,EAAE,CAAC,OAAO,cAAc,sBAAsB,QAAQ,OAAO,2BAA2B,uBAAuB,OAAO,mBAAmB,+BAA+B;AACxK,sCAA8B;AAC9B;MACJ;AAEA,UAAI,OAAO,WAAW,kBAAkB,GAAG;AACvC,mCAA2B;MAC/B;IACJ;AAEA,QAAI,CAAC,6BAA6B;AAC9B;IACJ;EACJ;AAEA,SAAO,+BAA+B;AAC1C;AAEM,SAAU,yBAAyB,sBAAoB;AACzD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,6BAA6B;AACjC,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,OAAO,aAAa,kBAAkB,GAAG;AACzC,qCAA6B;AAC7B;MACJ;IACJ;AAEA,QAAI,4BAA4B;AAC5B;IACJ;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,wBAAwB,sBAAoB;AACxD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,2BAA2B;AAC/B,MAAI,6BAA6B;AACjC,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,EAAE,OAAO,cAAc,sBAAsB,QAAQ,OAAO,6BAA6B,uBAAuB,OAAO,gBAAgB,+BAA+B;AACtK,mCAA2B;AAC3B;MACJ;AAEA,UAAI,OAAO,aAAa,kBAAkB,GAAG;AACzC,qCAA6B;MACjC;IACJ;AAEA,QAAI,CAAC,0BAA0B;AAC3B;IACJ;EACJ;AAEA,SAAO,4BAA4B;AACvC;AAEM,SAAU,uBAAuB,sBAAoB;AACvD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,2BAA2B;AAC/B,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,OAAO,WAAW,kBAAkB,GAAG;AACvC,mCAA2B;AAC3B;MACJ;IACJ;AAEA,QAAI,0BAA0B;AAC1B;IACJ;EACJ;AAEA,SAAO;AACX;AAEM,SAAU,sBAAsB,sBAAoB;AACtD,MAAI,qBAAqB;AACzB,MAAI,2BAA2B;AAC/B,MAAI,CAAC,MAAM,qBAAqB,CAAC,CAAC,GAAG;AACjC,yBAAqB,qBAAqB,CAAC;AAC3C,+BAA2B,qBAAqB,MAAM,CAAC;EAC3D;AAEA,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,iBAAiB,UAAU,GAAG;AAC9B,eAAS,OAAO,iBAAiB;AAC7B,yBAAiB,KAAK,gBAAgB,GAAG,CAAC;MAC9C;IACJ;EACJ;AAEA,MAAI,8BAA8B;AAClC,MAAI,2BAA2B;AAC/B,WAAS,oBAAoB,0BAA0B;AACnD,QAAI,UAAU,iBAAiB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9C,UAAI,WAAW,iBAAiB,CAAC;AACjC,UAAI,SAAS,QAAQ,cAAc,QAAQ;AAE3C,UAAI,EAAE,CAAC,OAAO,cAAc,sBAAsB,QAAQ,OAAO,2BAA2B,uBAAuB,OAAO,mBAAmB,+BAA+B;AACxK,sCAA8B;AAC9B;MACJ;AAEA,UAAI,OAAO,WAAW,kBAAkB,GAAG;AACvC,mCAA2B;MAC/B;IACJ;AAEA,QAAI,CAAC,6BAA6B;AAC9B;IACJ;EACJ;AAEA,SAAO,+BAA+B;AAC1C;AAEO,IAAI,eAAe;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;ACxVE,IAAO,6BAAP,MAAiC;EAEnC,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,2BAA2B;AAChC,SAAK,6BAA6B;AAElC,SAAK,YAAY;AAEjB,SAAK,kBAAkB;AACvB,SAAK,oBAAoB;AACzB,SAAK,kBAAkB;AAEvB,SAAK,0BAA0B;AAC/B,SAAK,yBAAyB;AAE9B,SAAK,8BAA8B,eAAe;AAElD,SAAK,4CAA4C;AACjD,SAAK,4CAA4C;AACjD,SAAK,uCAAuC;AAC5C,SAAK,kCAAkC;AAEvC,SAAK,kDAAkD;AACvD,SAAK,kDAAkD;AACvD,SAAK,6CAA6C;AAClD,SAAK,wCAAwC;AAE7C,SAAK,+CAA+C,eAAe;AAEnE,SAAK,mCAAmC;AACxC,SAAK,2CAA2C;AAEhD,SAAK,WAAW;EACpB;;AAGE,IAAO,uBAAP,MAA2B;EAE7B,YAAY,QAAM;AACd,SAAK,YAAY;AAEjB,SAAK,qBAAqB;AAC1B,SAAK,yBAAyB;AAE9B,SAAK,yBAAyB;AAC9B,SAAK,wBAAwB;AAC7B,SAAK,4BAA4B;AACjC,SAAK,oBAAoB;AAEzB,SAAK,+BAA+B;AAEpC,SAAK,eAAe,IAAI,MAAM,GAAG,KAAK;AAEtC,SAAK,yCAAyC;AAC9C,QAAI,KAAK,UAAU,4CAA4C,MAAM;AACjE,WAAK,yCAAyC,IAAI,MAAM,KAAK,UAAU,wCAAwC;IACnH,OAAO;AACH,WAAK,yCAAyC,IAAI,MAAM,GAAG,KAAK;IACpE;AAEA,SAAK,SAAS,IAAI,IAAG;AAGrB,SAAK,OAAO,SAAS,MAAM;AAE3B,SAAK,OAAO,SAAS,UAAU;AAC/B,SAAK,OAAO,SAAS,QAAQ,KAAK,YAAY,KAAK,IAAI,CAAC;AACxD,SAAK,OAAO,SAAS,UAAU,KAAK,cAAc,KAAK,IAAI,CAAC;AAE5D,SAAK,OAAO,cAAc,QAAQ,YAAY,OAAO,KAAK,iBAAiB,KAAK,MAAM,CAAC,CAAC;AAExF,SAAK,OAAO,cAAc,YAAY,QAAQ,OAAO;AAErD,SAAK,OAAO,cAAc,QAAQ,UAAU,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC;AAChF,SAAK,OAAO,cAAc,UAAU,QAAQ,QAAQ,KAAK,YAAY,KAAK,IAAI,CAAC;AAE/E,SAAK,OAAO,cAAc,YAAY,YAAY,QAAQ,KAAK,iBAAiB,KAAK,MAAM,CAAC,CAAC;AAC7F,SAAK,OAAO,cAAc,QAAQ,YAAY,QAAQ,KAAK,iBAAiB,KAAK,MAAM,CAAC,CAAC;AACzF,SAAK,OAAO,cAAc,UAAU,YAAY,QAAQ,KAAK,iBAAiB,KAAK,MAAM,CAAC,CAAC;AAE3F,SAAK,OAAO,KAAK,MAAM;AAEvB,SAAK,cAAa;AAElB,SAAK,OAAO,QAAQ,KAAK;AAEzB,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,OAAO,OAAO,KAAK,UAAU,QAAQ;AAE7J,SAAK,eAAe;EACxB;EAEA,QAAK;AACD,SAAK,OAAO,QAAQ,OAAO;EAC/B;EAEA,OAAI;AACA,SAAK,OAAO,QAAQ,MAAM;EAC9B;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,OAAO,IAAE;AACL,QAAI,CAAC,KAAK,UAAU,2BAA2B,cAAa,GAAI;AAC5D,UAAI,KAAK,UAAU,4CAA4C,MAAM;AACjE,aAAK,uCAAuC,MAAK;MACrD,OAAO;AACH,aAAK,uCAAuC,MAAK;MACrD;IACJ,OAAO;AACH,WAAK,uCAAuC,OAAO,EAAE;IACzD;AAEA,SAAK,uBAAuB,uBAAsB;AAElD,SAAK,gBAAe;AAEpB,SAAK,OAAO,OAAO,EAAE;AAErB,SAAK,mBAAmB,KAAK,WAAU,CAAE;AAEzC,QAAI,KAAK,+BAA+B,GAAG;AACvC,WAAK;IACT;EACJ;EAEA,YAAS;AACL,WAAO,CAAC,KAAK,OAAO,UAAU,UAAU;EAC5C;EAEA,aAAU;AACN,WAAO,KAAK,yBAAyB;EACzC;EAEA,WAAQ;AACJ,WAAO,KAAK,OAAO,UAAU,QAAQ;EACzC;EAEA,aAAU;AACN,WAAO,KAAK,SAAQ,KAAM,KAAK,yBAAyB,KAAK;EACjE;EAEA,cAAW;AACP,WAAO,KAAK,SAAQ,KAAM,KAAK,0BAA0B,KAAK;EAClE;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,wBAAqB;AACjB,WAAO,KAAK;EAChB;EAEA,yBAAsB;AAClB,SAAK;EACT;EAEA,qBAAqB,cAAc,cAAc,OAAK;AAClD,SAAK,0BAA0B;AAE/B,QAAI,eAAe,KAAK,UAAS,GAAI;AACjC,WAAK,iBAAiB,YAAY;IACtC;EACJ;EAEA,4BAAyB;AACrB,SAAK,0BAA0B;EACnC;EAEA,YAAY,IAAE;AACV,QAAI,KAAK,IAAI,KAAK,wBAAwB,KAAK,sBAAsB,IAAI,KAAK,YAAY;AACtF,UAAI,KAAK,+BAA+B,GAAG;AACvC,aAAK,iBAAiB,KAAK,qBAAqB;AAChD,aAAK,yBAAyB,KAAK;MACvC,OAAO;AACH,aAAK,OAAO,QAAQ,MAAM;MAC9B;IACJ;EACJ;EAEA,cAAc,IAAE;AACZ,QAAI,KAAK,IAAI,KAAK,wBAAwB,KAAK,sBAAsB,KAAK,KAAK,YAAY;AACvF,WAAK,OAAO,QAAQ,MAAM;AAC1B;IACJ;AAEA,QAAI,KAAK,6BAA6B,KAAK,uBAAuB;AAC9D,WAAK,kBAAiB;AACtB,WAAK,4BAA4B,KAAK;IAC1C;AAEA,SAAK,aAAa,OAAO,EAAE;AAE3B,QAAI,KAAK,+BAA+B,GAAG;AACvC,WAAK,aAAa,IAAG;IACzB;AAEA,QAAI,kBAAkB,KAAK,UAAU,4BAA4B,KAAK,aAAa,cAAa,CAAE;AAElG,QAAI,aAAa,KAAK,yBAAyB,KAAK;AACpD,QAAI,CAAC,YAAY;AACb,wBAAkB,KAAK,IAAI,iBAAiB,KAAK,qBAAqB;IAC1E,OAAO;AACH,wBAAkB,KAAK,SAAS,IAAI,iBAAiB,GAAG,CAAC;AACzD,wBAAkB,KAAK,IAAI,iBAAiB,KAAK,qBAAqB;IAC1E;AAEA,SAAK,iBAAiB,eAAe;AACrC,SAAK,yBAAyB;AAE9B,QAAI,KAAK,IAAI,KAAK,wBAAwB,KAAK,sBAAsB,KAAK,KAAK,cAAc,KAAK,aAAa,OAAM,GAAI;AACrH,WAAK,OAAO,QAAQ,MAAM;IAC9B;EACJ;EAEA,eAAY;AACR,SAAK,4BAA4B;AACjC,SAAK,oBAAoB;EAC7B;EAEA,cAAW;AACP,SAAK,iBAAiB,KAAK,qBAAqB;EACpD;EAEA,oBAAiB;AACb,QAAI,aAAa,KAAK,yBAAyB,KAAK;AAEpD,QAAI,KAAK,qBAAqB,YAAY;AACtC,WAAK,4BAA4B,UAAU;IAC/C;AAEA,SAAK,oBAAoB;EAC7B;EAEA,4BAA4B,YAAU;AAClC,QAAI,aAAa;AACjB,QAAI,oBAAoB;AACxB,QAAI,QAAQ;AACZ,QAAI,YAAY,IAAI;AAEpB,WAAO,aAAa,GAAG;AACnB,UAAI,KAAK,IAAI,KAAK,UAAU,4BAA4B,UAAU,IAAI,KAAK,sBAAsB,IAC7F,KAAK,IAAI,KAAK,UAAU,4BAA4B,iBAAiB,IAAI,KAAK,sBAAsB,GAAG;AACvG,4BAAoB;MACxB;AAEA,oBAAc;IAClB;AAEA,QAAI,KAAK,IAAI,KAAK,UAAU,4BAA4B,CAAC,IAAI,KAAK,sBAAsB,IACpF,KAAK,IAAI,KAAK,UAAU,4BAA4B,iBAAiB,IAAI,KAAK,sBAAsB,GAAG;AACvG,0BAAoB;IACxB;AAEA,QAAI,YAAY;AACZ,WAAK,aAAa,MAAM,KAAK,UAAU,sBAAsB;AAC7D,WAAK,aAAa,cAAc,KAAK,SAAS,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC9E,OAAO;AACH,WAAK,aAAa,MAAM,KAAK,UAAU,uBAAuB;AAC9D,WAAK,aAAa,cAAc,KAAK,SAAS,mBAAmB,GAAG,CAAC,CAAC;IAC1E;EACJ;EAEA,iBAAiB,cAAY;AACzB,SAAK,wBAAwB;AAC7B,SAAK,yBAAyB;AAC9B,SAAK,iBAAiB,YAAY;AAClC,SAAK,mBAAmB,KAAK,WAAU,CAAE;EAC7C;EAEA,iBAAiB,OAAK;AAClB,QAAI,KAAK,UAAU,mBAAmB,MAAM;AACxC,oBAAc,SAAS,KAAK,oBAAoB,KAAK;IACzD,OAAO;AACH,oBAAc,eAAe,KAAK,UAAU,iBAAiB,KAAK;IACtE;EACJ;EAEA,kBAAe;AACX,SAAK,wBAAwB;AAE7B,QAAI,KAAK,UAAU,WAAW;AAC1B,UAAI,KAAK,2BAA2B,MAAM;AACtC,aAAK,wBAAwB,KAAK;MACtC,WAAW,CAAC,KAAK,UAAU,2BAA2B,cAAa,KAAM,CAAC,KAAK,UAAU,oCAAoC,KAAK,uCAAuC,OAAM,GAAI;AAM/K,YAAI,KAAK,UAAU,yBAAyB,gBAAe,KAAM,CAAC,KAAK,UAAU,yBAAyB,oBAAmB,GAAI;AAC7H,cAAIC,YAAW,KAAK,UAAU,yBAAyB,sBAAqB;AAC5E,cAAI,mBAAmBA,YAAW,KAAK,UAAU;AACjD,cAAI,oBAAoB,GAAG;AACvB,gBAAI,6BAA6B,KAAK,SAAS,mBAAmB,KAAK,UAAU,iDAAiD,GAAG,CAAC;AACtI,gBAAI,MAAM,0BAA0B,KAAK,CAAC,KAAK,UAAU,yBAAyB,oBAAmB,GAAI;AACrG,2CAA6B;YACjC;AACA,gBAAI,qBAAqB,KAAK,UAAU,6CAA6C,0BAA0B;AAC/G,iBAAK,wBAAwB,KAAK,IAAI,KAAK,uBAAuB,kBAAkB;UACxF;QACJ;AAEA,YAAI,KAAK,UAAU,yBAAyB,gBAAe,GAAI;AAC3D,cAAIA,YAAW,KAAK,UAAU,yBAAyB,kBAAiB;AACxE,cAAI,mBAAmBA,YAAW,KAAK,UAAU;AACjD,cAAI,oBAAoB,GAAG;AACvB,gBAAI,6BAA6B,KAAK,SAAS,mBAAmB,KAAK,UAAU,iDAAiD,GAAG,CAAC;AACtI,gBAAI,MAAM,0BAA0B,GAAG;AACnC,2CAA6B;YACjC;AACA,gBAAI,qBAAqB,KAAK,UAAU,6CAA6C,0BAA0B;AAC/G,iBAAK,wBAAwB,KAAK,IAAI,KAAK,uBAAuB,kBAAkB;UACxF;QACJ;AAEA,YAAI,KAAK,UAAU,yBAAyB,WAAU,GAAI;AACtD,cAAIA,YAAW,KAAK,UAAU,yBAAyB,kBAAiB;AACxE,cAAI,mBAAmBA,YAAW,KAAK,UAAU;AACjD,cAAI,oBAAoB,GAAG;AACvB,gBAAI,6BAA6B,KAAK,SAAS,mBAAmB,KAAK,UAAU,4CAA4C,GAAG,CAAC;AACjI,gBAAI,MAAM,0BAA0B,GAAG;AACnC,2CAA6B;YACjC;AACA,gBAAI,qBAAqB,KAAK,UAAU,6CAA6C,0BAA0B;AAC/G,iBAAK,wBAAwB,KAAK,IAAI,KAAK,uBAAuB,kBAAkB;UACxF;QACJ;AAEA,YAAI,KAAK,UAAU,yBAAyB,MAAK,GAAI;AACjD,cAAIA,YAAW,KAAK,UAAU,yBAAyB,kBAAiB;AACxE,cAAI,mBAAmBA,YAAW,KAAK,UAAU;AACjD,cAAI,oBAAoB,GAAG;AACvB,gBAAI,6BAA6B,KAAK,SAAS,mBAAmB,KAAK,UAAU,uCAAuC,GAAG,CAAC;AAC5H,gBAAI,MAAM,0BAA0B,GAAG;AACnC,2CAA6B;YACjC;AACA,gBAAI,qBAAqB,KAAK,UAAU,6CAA6C,0BAA0B;AAC/G,iBAAK,wBAAwB,KAAK,IAAI,KAAK,uBAAuB,kBAAkB;UACxF;QACJ;MACJ;IACJ;EACJ;EAEA,gBAAa;AACT,SAAK,qBAAqB;AAC1B,QAAI,KAAK,UAAU,qBAAqB,MAAM;AAC1C,WAAK,qBAAqB,KAAK,UAAU;IAC7C,OAAO;AACH,WAAK,qBAAqB,QAAQ,oBAAoB,KAAK,UAAU,QAAQ,EAAE,yBAAyB,MAAK;AAC7G,WAAK,mBAAmB,QAAQ,YAAY,GAAG,GAAG,GAAG,CAAC;IAC1D;AAEA,SAAK,yBAAyB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,WAAW,aAAY;AAEvG,QAAI,sBAAsB,IAAI,iBAAiB,KAAK,UAAU,QAAQ;AACtE,wBAAoB,SAAS,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE;AAC/E,wBAAoB,aAAc,KAAK,UAAU,qBAAqB,OAAQ,KAAK,UAAU,oBAAoB,KAAK;AACtH,wBAAoB,WAAW,KAAK;AACpC,wBAAoB,UAAU;AAC9B,wBAAoB,YAAY,cAAc,YAAY,KAAK,UAAU,iBAAiB,KAAK,UAAU,iBAAiB,KAAK,UAAU,eAAe,CAAC;AACzJ,SAAK,mBAAmB,IAAI,WAAW,mBAAmB;AAE1D,QAAI,KAAK,UAAU,mBAAmB,MAAM;AACxC,WAAK,UAAU,gBAAgB,aAAa,KAAK,wBAAwB,KAAK;AAC9E,WAAK,UAAU,gBAAgB,uBAAsB;IACzD;AAEA,SAAK,mBAAmB,KAAK;EACjC;EAEA,mBAAmB,SAAO;AACtB,QAAI,KAAK,UAAU,mBAAmB,MAAM;AACxC,WAAK,iBAAiB,WAAW,OAAO;IAC5C,OAAO;AACH,WAAK,iBAAiB,WAAW,KAAK;AACtC,WAAK,UAAU,gBAAgB,aAAa,OAAO;IACvD;AAEA,QAAI,SAAS;AACT,WAAK,uBAAuB,aAAa,KAAK,UAAU,yBAAyB,QAAO,GAAI,KAAK;IACrG,OAAO;AACH,WAAK,uBAAuB,aAAa,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,GAAG,YAAY,KAAK;IACjH;EACJ;EAEA,oBAAiB;AACb,SAAK,+BAA+B;EACxC;EAEA,kBAAe;AACX,SAAK,+BAA+B;EACxC;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,SAAK,iBAAiB,QAAO;EACjC;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AC1ZE,IAAO,oDAAP,MAAwD;EAE1D,cAAA;AACI,SAAK,0BAA0B;AAC/B,SAAK,4BAA4B;AAEjC,SAAK,2BAA2B;AAChC,SAAK,yCAAyC;AAE9C,SAAK,iCAAiC;AACtC,SAAK,yDAAyD;AAC9D,SAAK,6CAA6C;AAElD,SAAK,oCAAoC;AAEzC,SAAK,gDAAgD;AAErD,SAAK,sCAAsC;AAC3C,SAAK,qCAAqC;AAC1C,SAAK,iDAAiD;AACtD,SAAK,4CAA4C;AACjD,SAAK,4CAA4C;AAEjD,SAAK,uDAAuD;AAC5D,SAAK,0CAA0C;AAE/C,SAAK,sDAAsD;AAC3D,SAAK,iDAAiD;AACtD,SAAK,iDAAiD;EAC1D;;AAGE,IAAO,8CAAP,MAAkD;EAEpD,YAAY,gBAAgB,uBAAuB,wBAAsB;AACrE,SAAK,4BAA4B;AAEjC,SAAK,oBAAoB;AACzB,SAAK,2BAA2B;AAEhC,SAAK,sCAAsC;AAC3C,SAAK,iCAAiC,aAAY;AAClD,SAAK,4CAA4C;AACjD,SAAK,4CAA4C;AAOjD,SAAK,cAAa;AAElB,SAAK,eAAe;EACxB;EAEA,QAAK;EAEL;EAEA,MAAG;AACC,SAAK,sCAAsC;AAC3C,SAAK,4CAA4C;AACjD,SAAK,4CAA4C;AAEjD,SAAK,sBAAqB;EAC9B;EAEA,OAAO,IAAE;AAML,QAAI,KAAK,0BAA0B,0BAA0B;AACzD,WAAK,sBAAsB,EAAE;IACjC,OAAO;AACH,WAAK,sCAAsC;AAC3C,WAAK,4CAA4C;AACjD,WAAK,4CAA4C;AACjD,WAAK,sBAAqB;IAC9B;EACJ;EAEA,sBAAsB,IAAE;AACpB,SAAK,qBAAqB,EAAE;EAChC;EAEA,wBAAqB;AACjB,aAAS,cAAc,KAAK,qBAAqB;AAC7C,iBAAW,WAAW,KAAK;IAC/B;AAEA,aAAS,cAAc,KAAK,uBAAuB;AAC/C,iBAAW,WAAW,KAAK;IAC/B;AAEA,SAAK,oBAAoB,WAAW,KAAK;AACzC,SAAK,sBAAsB,WAAW,KAAK;AAE3C,SAAK,4BAA4B,WAAW,KAAK;AAEjD,SAAK,oCAAoC,WAAW,KAAK;AACzD,SAAK,yCAAyC,WAAW,KAAK;AAE9D,QAAI,KAAK,kBAAkB,mBAAmB,4BAA4B,MAAM;AAC5E,WAAK,kBAAkB,mBAAmB,yBAAyB,aAAa,KAAK;IACzF;EACJ;EAEA,gBAAgB,QAAM;AAClB,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B;AACI,YAAI,eAAe,IAAI,iBAAiB,KAAK,kBAAkB,QAAQ;AAEvE,YAAI,KAAK,kBAAkB,mBAAmB,2BAA2B,MAAM;AAC3E,uBAAa,aAAa,KAAK,kBAAkB,mBAAmB;QACxE,OAAO;AACH,uBAAa,aAAa,KAAK;QACnC;AAEA,aAAK,oBAAoB,KAAK,IAAI,WAAW,YAAY,CAAC;MAC9D;AAEA;AACI,YAAI,eAAe,IAAI,iBAAiB,KAAK,kBAAkB,QAAQ;AAEvE,YAAI,KAAK,kBAAkB,mBAAmB,2BAA2B,MAAM;AAC3E,uBAAa,aAAa,KAAK,kBAAkB,mBAAmB;QACxE,OAAO;AACH,uBAAa,aAAa,KAAK;QACnC;AAEA,aAAK,sBAAsB,KAAK,IAAI,WAAW,YAAY,CAAC;MAChE;IACJ;EACJ;EAEA,6BAA6B,IAAE;EAE/B;EAEA,qBAAqB,IAAE;EAEvB;EAEA,gBAAa;EAEb;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,aAAS,UAAU,KAAK,qBAAqB;AACzC,aAAO,QAAO;IAClB;AAEA,aAAS,UAAU,KAAK,uBAAuB;AAC3C,aAAO,QAAO;IAClB;AAEA,SAAK,oBAAoB,QAAO;AAChC,SAAK,sBAAsB,QAAO;AAElC,SAAK,4BAA4B,QAAO;AACxC,SAAK,oCAAoC,QAAO;AAChD,SAAK,yCAAyC,QAAO;EACzD;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAOJ,4CAA4C,UAAU,gBAAgB,WAAA;AAClE,MAAI,qBAAqB,YAAW;AACpC,SAAO,SAAS,gBAAa;AACzB,SAAK,2BAA2B,QAAQ,oBAAoB,KAAK,kBAAkB,QAAQ,EAAE,aAAa,MAAK;AAC/G,SAAK,yBAAyB,QAAQ,YAAY,GAAG,KAAK,GAAG,CAAC;AAC9D,SAAK,6BAA6B,QAAQ,oBAAoB,KAAK,kBAAkB,QAAQ,EAAE,aAAa,MAAK;AACjH,SAAK,2BAA2B,QAAQ,YAAY,MAAM,MAAM,GAAG,CAAC;AAEpE,SAAK,sBAAsB,CAAA;AAC3B,SAAK,wBAAwB,CAAA;AAC7B,SAAK,gBAAgB,EAAE;AAEvB;AACI,UAAI,eAAe,IAAI,kBAAkB,KAAK,kBAAkB,QAAQ;AAExE,UAAI,KAAK,kBAAkB,mBAAmB,2BAA2B,MAAM;AAC3E,qBAAa,aAAa,KAAK,kBAAkB,mBAAmB;MACxE,OAAO;AACH,qBAAa,aAAa,KAAK;MACnC;AAEA,WAAK,sBAAsB,IAAI,YAAY,YAAY;IAC3D;AAEA;AACI,UAAI,eAAe,IAAI,kBAAkB,KAAK,kBAAkB,QAAQ;AAExE,UAAI,KAAK,kBAAkB,mBAAmB,6BAA6B,MAAM;AAC7E,qBAAa,aAAa,KAAK,kBAAkB,mBAAmB;MACxE,OAAO;AACH,qBAAa,aAAa,KAAK;MACnC;AAEA,WAAK,wBAAwB,IAAI,YAAY,YAAY;IAC7D;AAEA;AACI,UAAI,eAAe,IAAI,kBAAkB,KAAK,kBAAkB,QAAQ;AAExE,UAAI,KAAK,kBAAkB,mBAAmB,2BAA2B,MAAM;AAC3E,qBAAa,aAAa,KAAK,kBAAkB,mBAAmB;MACxE,OAAO;AACH,qBAAa,aAAa,KAAK;MACnC;AAEA,WAAK,8BAA8B,IAAI,YAAY,YAAY;IACnE;AAEA,SAAK,kCAAkC,QAAQ,iBAAiB,KAAK,kBAAkB,QAAQ,EAAE,WAAW,aAAY;AAQxH;AACI,UAAI,eAAe,IAAI,kBAAkB,KAAK,kBAAkB,QAAQ;AACxE,mBAAa,WAAW;AACxB,mBAAa,mBAAmB;AAChC,mBAAa,qBAAqB;AAMlC,UAAI,KAAK,kBAAkB,mBAAmB,2BAA2B,MAAM;AAC3E,qBAAa,aAAa,KAAK,kBAAkB,mBAAmB;MACxE,OAAO;AACH,qBAAa,aAAa,KAAK;MACnC;AAEA,mBAAa,WAAW,KAAK;AAC7B,mBAAa,UAAU;AAEvB,WAAK,sCAAsC,IAAI,YAAY,YAAY;IAC3E;AAEA;AACI,UAAI,eAAe,IAAI,kBAAkB,KAAK,kBAAkB,QAAQ;AACxE,mBAAa,WAAW;AACxB,mBAAa,mBAAmB;AAChC,mBAAa,qBAAqB;AAMlC,UAAI,KAAK,kBAAkB,mBAAmB,2BAA2B,MAAM;AAC3E,qBAAa,aAAa,KAAK,kBAAkB,mBAAmB;MACxE,OAAO;AACH,qBAAa,aAAa,KAAK;MACnC;AAEA,mBAAa,WAAW,KAAK;AAC7B,mBAAa,UAAU;AAEvB,UAAI,oBAAoB,KAAK,oCAAoC,UAAS;AAE1E,UAAI,oBAAoB,kBAAkB,WAAY,kBAAkB,qBAAqB,KAAM;AACnG,yBAAmB,SAAS,GAAG,GAAG,gBAAgB;AAElD,mBAAa,YAAY,iBAAiB,kBAAkB;AAE5D,WAAK,2CAA2C,IAAI,YAAY,YAAY;IAChF;AAEA,QAAI,KAAK,kBAAkB,mBAAmB,4BAA4B,MAAM;AAC5E,WAAK,kBAAkB,mBAAmB,yBAAyB,aAAa,KAAK,+BAA+B;AACpH,WAAK,kBAAkB,mBAAmB,yBAAyB,uBAAsB;AACzF,WAAK,kBAAkB,mBAAmB,yBAAyB,aAAa,KAAK;IACzF;AAEA,SAAK,sBAAqB;EAC9B;AACJ,EAAC;AAED,4CAA4C,UAAU,uBAAuB,WAAA;AACzE,MAAI,kBAAkB,YAAW;AACjC,MAAI,eAAe,YAAW;AAE9B,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,qBAAqB,IAAE;AACnC,QAAI,sBAAsB,KAAK,IAAI,KAAK,0BAA0B,oBAAoB,KAAK,kBAAkB,mBAAmB,8BAA8B;AAC9J,QAAI,mBAAmB,KAAK,0BAA0B,UAAU,2BAA2B,mBAAmB;AAC9G,QAAI,2BAA2B,KAAK,0BAA0B,UAAU,YAAY,gBAAgB;AAEpG,QAAI,mBAAmB,IAAI,KAAK,oBAAoB,QAAQ;AACxD,WAAK,gBAAgB,mBAAmB,GAAG,KAAK,oBAAoB,MAAM;IAC9E;AAEA,UAAM,kBAAkB,CAAA;AACxB,aAAS,IAAI,GAAG,KAAK,kBAAkB,KAAK;AACxC,wBAAkB,KAAK,0BAA0B,UAAU,YAAY,GAAG,eAAe;AACzF,qBAAe,KAAK,0BAA0B,UAAU,YAAY,IAAI,GAAG,YAAY;AAEvF,UAAI,YAAa,KAAK,0BAA0B,0BAA2B,KAAK,oBAAoB,CAAC,IAAI,KAAK,sBAAsB,CAAC;AACrI,sBAAgB,KAAK,SAAS;AAE9B,UAAI,0BAA0B,UAAU,UAAS;AAEjD,UAAI,KAAK,kBAAkB;AACvB,YAAI,aAAa,KAAK,IAAI,GAAG,sBAAsB,wBAAwB;AAC3E,uBAAe,aAAa,SAAS,iBAAiB,YAAY,EAAE,eAAe,YAAY;AAC/F,uBAAe,gBAAgB,SAAS,aAAa,WAAW,YAAY,YAAY,GAAG,YAAY;MAC3G;AAEA,8BAAwB,YAAY,iBAAiB,YAAY;AACjE,8BAAwB,cAAc;AAEtC,gBAAU,cAAa;AACvB,gBAAU,WAAW,IAAI;AAEzB,UAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,sBAAsB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AAC/I,gBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,UAAU,GAAG,iBAAiB,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;MAC9H;IACJ;AAEA,aAAS,cAAc,KAAK,qBAAqB;AAC7C,UAAI,gBAAgB,QAAQ,UAAU,KAAK,IAAI;AAC3C,mBAAW,WAAW,KAAK;MAC/B;IACJ;AAEA,aAAS,cAAc,KAAK,uBAAuB;AAC/C,UAAI,gBAAgB,QAAQ,UAAU,KAAK,IAAI;AAC3C,mBAAW,WAAW,KAAK;MAC/B;IACJ;AAEA,QAAI,cAAe,KAAK,0BAA0B,0BAA2B,KAAK,sBAAsB,KAAK;AAC7G,QAAI,oBAAoB,YAAY,UAAS;AAC7C,sBAAkB,WAAW,UAAU,YAAY;AACnD,sBAAkB,WAAW;AAC7B,gBAAY,cAAa;AACzB,gBAAY,WAAW,IAAI;AAE3B,QAAI,oBAAqB,KAAK,0BAA0B,0BAA2B,KAAK,wBAAwB,KAAK;AACrH,sBAAkB,WAAW,KAAK;AAElC,QAAI,KAAK,0BAA0B,yBAAyB;AACxD,iBAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAEnF,qBAAe,aAAa,SAAS,KAAK,yBAAyB,oBAAoB,YAAY,EAAE,wBAAwB,UAAU,YAAY;AACnJ,UAAI,aAAa,aAAa,YAAW;AACzC,UAAI,cAAc,KAAK,kBAAkB,mBAAmB,wDAAwD;AAChH,YAAI,aAAa,KAAK,IAAI,aAAa,KAAK,kBAAkB,mBAAmB,wDAAwD,KAAK,kBAAkB,mBAAmB,0CAA0C;AAE7N,YAAI,oBAAoB,KAAK,4BAA4B,UAAS;AAElE,0BAAkB,QAAQ,UAAU,YAAY;AAChD,0BAAkB,cAAc,SAAS,YAAY,kBAAkB,WAAW;AAClF,0BAAkB,WAAW;AAC7B,0BAAkB,cAAc;AAEhC,0BAAkB,mBAAmB,kBAAkB;AACvD,0BAAkB,gBAAgB,kBAAkB,mBAAmB,MAAM;AAE7E,aAAK,4BAA4B,cAAa;AAC9C,aAAK,4BAA4B,WAAW,IAAI;MACpD,OAAO;AACH,aAAK,4BAA4B,WAAW,KAAK;MACrD;AAEA,WAAK,6BAA6B,EAAE;IACxC,OAAO;AACH,WAAK,oCAAoC,WAAW,KAAK;AACzD,WAAK,yCAAyC,WAAW,KAAK;AAE9D,WAAK,4BAA4B,WAAW,KAAK;AAEjD,UAAI,KAAK,kBAAkB,mBAAmB,4BAA4B,MAAM;AAC5E,aAAK,kBAAkB,mBAAmB,yBAAyB,aAAa,KAAK;MACzF;AAEA,WAAK,sCAAsC;AAC3C,WAAK,4CAA4C;AACjD,WAAK,4CAA4C;IACrD;EACJ;AACJ,EAAC;AAED,4CAA4C,UAAU,+BAA+B,WAAA;AACjF,MAAI,WAAW,YAAW;AAC1B,MAAI,oBAAoB,aAAY;AACpC,MAAI,mBAAmB,YAAW;AAElC,MAAI,uBAAuB,YAAW;AACtC,MAAI,wBAAwB,YAAW;AACvC,MAAI,mBAAmB,YAAW;AAElC,MAAI,iBAAiB,YAAW;AAChC,MAAI,gBAAgB,YAAW;AAC/B,MAAI,qBAAqB,YAAW;AAEpC,MAAI,qCAAqC,aAAY;AACrD,MAAI,gCAAgC,YAAW;AAC/C,MAAI,oCAAoC,YAAW;AACnD,MAAI,yBAAyB,YAAW;AAExC,SAAO,SAAS,6BAA6B,IAAE;AAC3C,eAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AACnF,wBAAoB,KAAK,kBAAkB,oBAAoB,qBAAqB,iBAAiB;AACrG,uBAAmB,kBAAkB,sBAAsB,gBAAgB;AAC3E,uBAAmB,iBAAiB,gBAAgB,KAAK,yBAAyB,wBAAwB,UAAU,gBAAgB;AAEpI,qBAAiB,KAAK,yBAAyB,mBAAmB,SAAS,SAAS,WAAW,KAAK,kBAAkB,mBAAmB,mCAAmC,cAAc,GAAG,cAAc;AAE3M,oBAAgB,iBAAiB,gBAAgB,aAAa;AAE9D,QAAI,CAAC,KAAK,kBAAkB,mBAAmB,wCAAwC;AACnF,6BAAuB,KAAK,0BAA0B,UAAU,YAAY,GAAG,oBAAoB;AACnG,8BAAwB,KAAK,0BAA0B,UAAU,YAAY,GAAG,qBAAqB;AACrG,yBAAmB,sBAAsB,SAAS,sBAAsB,gBAAgB,EAAE,8BAA8B,UAAU,gBAAgB;AAClJ,UAAI,iBAAiB,YAAW,IAAK,KAAK,YAAY;AAClD,wBAAgB,iBAAiB,eAAe,aAAa;MACjE;IACJ;AAEA,QAAI,KAAK,kBAAkB,mBAAmB,+CAA+C;AACzF,yBAAmB,WAAW,KAAK,0BAA0B,yBAAyB,aAAa;IACvG,OAAO;AACH,yBAAmB,WAAW,UAAU,aAAa;IACzD;AAEA,SAAK,+BAA+B,8BAA8B,gBAAgB,kBAAkB;AAEpG,QAAI,KAAK,uCAAuC,CAAC,KAAK,kBAAkB,mBAAmB,qCAAqC;AAC5H,WAAK,gCAAgC,oBAAoB,KAAK,8BAA8B;AAC5F,WAAK,sCAAsC;IAC/C,OAAO;AACH,2CAAqC,KAAK,gCAAgC,oBAAoB,kCAAkC;AAChI,sCAAgC,mCAAmC,kBAAkB,6BAA6B;AAClH,0CAAoC,mCAAmC,sBAAsB,iCAAiC;AAC9H,wCAAkC,oBAAoB,oBAAoB,sBAAsB;AAEhG,UAAI,mBAAmB,8BAA8B,cAAc,cAAc;AACjF,UAAI,wBAAwB,uBAAuB,cAAa;AAEhE,WAAK,CAAC,KAAK,6CAA6C,mBAAmB,KAAK,kBAAkB,mBAAmB,oDAChH,mBAAmB,KAAK,kBAAkB,mBAAmB,6CAC1D,mBAAmB,KAAK,kBAAkB,mBAAmB,4CAA4C;AAC7G,aAAK,4CAA4C;AACjD,sCAA8B,UAAU,cAAc;MAC1D,OAAO;AACH,aAAK,4CAA4C;AAEjD,YAAI,sBAAsB,KAAK,kBAAkB,mBAAmB,qCAAqC;AACzG,YAAI,mBAAmB,KAAK,kBAAkB,mBAAmB,sDAAsD;AACnH,gCAAsB,KAAK,kBAAkB,mBAAmB,0CAA0C;QAC9G;AACA,sCAA8B,UAAU,gBAAgB,qBAAqB,6BAA6B;MAC9G;AAEA,WAAK,CAAC,KAAK,6CAA6C,wBAAwB,KAAK,kBAAkB,mBAAmB,yDACrH,wBAAwB,KAAK,kBAAkB,mBAAmB,kDAC/D,mBAAmB,KAAK,kBAAkB,mBAAmB,iDAAiD;AAClH,aAAK,4CAA4C;AACjD,0CAAkC,UAAU,kBAAkB;MAClE,OAAO;AACH,YAAI,sBAAsB,KAAK,kBAAkB,mBAAmB,qCAAqC;AAEzG,aAAK,4CAA4C;AACjD,0CAAkC,WAAW,oBAAoB,qBAAqB,iCAAiC;MAC3H;AAEA,yCAAmC,8BAA8B,+BAA+B,iCAAiC;AACjI,WAAK,gCAAgC,oBAAoB,kCAAkC;IAC/F;AAEA;AACI,UAAI,eAAe,KAAK,oCAAoC,UAAS;AACrE,mBAAa,WAAW;AACxB,mBAAa,mBAAmB;AAChC,mBAAa,qBAAqB;AAMlC,WAAK,oCAAoC,cAAa;IAC1D;AAEA;AACI,UAAI,eAAe,KAAK,yCAAyC,UAAS;AAC1E,mBAAa,WAAW;AACxB,mBAAa,mBAAmB;AAChC,mBAAa,qBAAqB;AAMlC,WAAK,yCAAyC,cAAa;IAC/D;AAEA,QAAI,KAAK,kBAAkB,mBAAmB,4BAA4B,MAAM;AAC5E,WAAK,oCAAoC,WAAW,IAAI;AACxD,WAAK,yCAAyC,WAAW,IAAI;IACjE,OAAO;AACH,WAAK,oCAAoC,WAAW,KAAK;AACzD,WAAK,yCAAyC,WAAW,KAAK;AAC9D,WAAK,kBAAkB,mBAAmB,yBAAyB,aAAa,IAAI;IACxF;AAEA,QAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,sBAAsB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AAC/I,cAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,UAAU,GAAG,KAAK,yBAAyB,oBAAoB,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;IAC/J;EACJ;AACJ,EAAC;;;ACphBK,IAAO,kCAAP,MAAsC;EAExC,cAAA;AACI,SAAK,mBAAmB,YAAW;AAEnC,SAAK,aAAa,YAAW;AAC7B,SAAK,QAAQ,YAAW;AAExB,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,gBAAgB;EACzB;EAEA,iBAAiB,eAAa;AAC1B,SAAK,iBAAiB,UAAU,aAAa;EACjD;EAEA,WAAW,SAAO;AACd,SAAK,WAAW,UAAU,OAAO;EACrC;EAEA,MAAM,IAAE;AACJ,SAAK,MAAM,UAAU,EAAE;EAC3B;EAEA,SAAS,OAAK;AACV,SAAK,WAAW;EACpB;EAEA,WAAW,SAAO;AACd,SAAK,aAAa;EACtB;EAEA,cAAc,YAAU;AACpB,SAAK,gBAAgB;EACzB;EAEA,YAAY,eAAe,cAAc,YAAW,GAAE;EAEtD;EAEA,YAAY,eAAa;EAEzB;EAEA,2BAA2BC,WAAQ;EAEnC;EAEA,sBAAsBA,WAAU,cAAc,YAAW,GAAE;EAE3D;EAEA,4BAA4B,cAAc,oBAAkB;EAE5D;EAEA,4BAA4BA,WAAQ;EAEpC;;AAOJ,gCAAgC,UAAU,cAAc,WAAA;AACpD,MAAI,kBAAkB,YAAW;AACjC,MAAI,aAAa,YAAW;AAC5B,SAAO,SAASC,aAAY,eAAe,cAAc,YAAW,GAAE;AAClE,QAAI,mBAAmB,KAAK,gBAAgB,KAAK;AAEjD,QAAI,cAAc,mBAAmB;AAErC,sBAAkB,KAAK,WAAW,WAAW,KAAK,WAAW,aAAa,eAAe;AACzF,sBAAkB,gBAAgB,SAAS,KAAK,kBAAkB,eAAe;AAEjF,iBAAa,KAAK,MAAM,WAAW,KAAK,aAAa,cAAc,cAAc,GAAG,UAAU;AAE9F,kBAAc,gBAAgB,SAAS,YAAY,WAAW;AAE9D,WAAO;EACX;AACJ,EAAC;AAED,gCAAgC,UAAU,cAAc,WAAA;AACpD,MAAI,kBAAkB,YAAW;AACjC,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,YAAY,eAAa;AACrC,QAAID,YAAW;AACf,iBAAa,UAAU,KAAK,gBAAgB;AAE5C,aAAS,IAAI,GAAG,KAAK,eAAe,KAAK;AACrC,wBAAkB,KAAK,YAAY,GAAG,eAAe;AACrD,MAAAA,aAAY,gBAAgB,cAAc,YAAY;AAEtD,mBAAa,UAAU,eAAe;IAC1C;AAEA,WAAOA;EACX;AACJ,EAAC;AAED,gCAAgC,UAAU,6BAA6B,WAAA;AACnE,MAAI,kBAAkB,YAAW;AACjC,MAAI,eAAe,YAAW;AAC9B,SAAO,SAAS,2BAA2BA,WAAQ;AAC/C,QAAI,kBAAkB;AACtB,QAAI,eAAe;AACnB,mBAAe,KAAK,YAAY,cAAc,YAAY;AAE1D,WAAO,kBAAkBA,WAAU;AAC/B,wBAAkB,KAAK,YAAY,eAAe,GAAG,eAAe;AACpE,yBAAmB,gBAAgB,cAAc,YAAY;AAC7D;AAEA,mBAAa,UAAU,eAAe;IAC1C;AAEA,WAAO,KAAK,IAAI,GAAG,eAAe,CAAC;EACvC;AACJ,EAAC;AAED,gCAAgC,UAAU,wBAAwB,WAAA;AAC9D,MAAI,kBAAkB,YAAW;AACjC,MAAI,eAAe,YAAW;AAC9B,MAAI,gBAAgB,YAAW;AAC/B,SAAO,SAAS,sBAAsBA,WAAU,cAAc,YAAW,GAAE;AACvE,QAAI,kBAAkB;AACtB,QAAI,eAAe;AACnB,QAAI,QAAQ;AAEZ,mBAAe,KAAK,YAAY,cAAc,YAAY;AAC1D,WAAO,CAAC,OAAO;AACX,wBAAkB,KAAK,YAAY,eAAe,GAAG,eAAe;AACpE,yBAAmB,gBAAgB,cAAc,YAAY;AAC7D;AAEA,UAAI,kBAAkBA,WAAU;AAC5B,YAAI,iBAAiB,kBAAkBA;AACvC,wBAAgB,gBAAgB,SAAS,cAAc,aAAa;AACpE,YAAI,cAAc,cAAc,YAAW,IAAK;AAChD,sBAAc,eAAe,aAAa;AAE1C,sBAAc,aAAa,SAAS,cAAc,WAAW,aAAa,WAAW,GAAG,WAAW;AACnG,gBAAQ;MACZ;AACA,mBAAa,UAAU,eAAe;IAC1C;AAEA,WAAO;EACX;AACJ,EAAC;AAED,gCAAgC,UAAU,8BAA8B,WAAA;AACpE,MAAI,kBAAkB,YAAW;AACjC,MAAI,sBAAsB,YAAW;AACrC,MAAI,oBAAoB,YAAW;AACnC,MAAI,eAAe,YAAW;AAC9B,MAAI,gBAAgB,YAAW;AAC/B,MAAI,qBAAqB,YAAW;AACpC,SAAO,SAAS,4BAA4B,cAAc,oBAAkB;AACxE,QAAI,eAAe,MAAS;AACxB,aAAO;IACX;AAEA,QAAI,kBAAkB;AACtB,QAAI,eAAe;AACnB,wBAAoB,KAAK,iBAAiB,8BAA8B,KAAK,OAAO,iBAAiB;AACrG,mBAAe,KAAK,YAAY,cAAc,YAAY;AAE1D,QAAI,2BAA2B;AAE/B,WAAO,mBAAmB,oBAAoB;AAC1C,wBAAkB,KAAK,YAAY,eAAe,GAAG,eAAe;AACpE,yBAAmB,gBAAgB,cAAc,YAAY;AAC7D;AAEA,4BAAsB,gBAAgB,8BAA8B,KAAK,OAAO,mBAAmB;AACnG,2BAAqB,oBAAoB,SAAS,mBAAmB,kBAAkB;AACvF,UAAI,sBAAsB,mBAAmB,YAAW;AACxD,UAAI,uBAAuB,cAAc;AACrC,YAAI,iBAAiB,sBAAsB;AAC3C,wBAAgB,gBAAgB,SAAS,cAAc,aAAa;AACpE,YAAI,gBAAgB,cAAc,kBAAkB,kBAAkB;AACtE,YAAI,MAAM,KAAK,IAAI,aAAa;AAChC,YAAI,iBAAiB,cAAc,YAAW;AAC9C,YAAI,OAAO,GAAG;AACV,2BAAiB,iBAAiB,KAAK,IAAI,aAAa;QAC5D;AAEA,mCAA2B,kBAAkB;AAC7C;MAEJ,OAAO;AACH,mCAA2B;MAC/B;AAEA,mBAAa,UAAU,eAAe;IAC1C;AAEA,WAAO,KAAK,IAAI,oBAAoB,wBAAwB;EAChE;AACJ,EAAC;AAED,gCAAgC,UAAU,8BAA8B,WAAA;AACpE,MAAI,qBAAqB,YAAW;AACpC,MAAI,yBAAyB,YAAW;AACxC,MAAI,oBAAoB,YAAW;AACnC,SAAO,SAAS,4BAA4BA,WAAQ;AAChD,yBAAqB,KAAK,sBAAsBA,WAAU,kBAAkB;AAE5E,6BAAyB,mBAAmB,8BAA8B,KAAK,OAAO,sBAAsB;AAC5G,wBAAoB,KAAK,iBAAiB,8BAA8B,KAAK,OAAO,iBAAiB;AAErG,WAAO,kBAAkB,cAAc,sBAAsB;EACjE;AACJ,EAAC;;;ACnNK,IAAO,gCAAP,cAA6C,MAAK;EAEpD,YAAY,gBAAgB,uBAAuB,yBAAuB;AACtE,UAAK;AAEL,SAAK,6BAA6B;AAElC,SAAK,oBAAoB;AACzB,SAAK,2BAA2B;AAEhC,SAAK,8BAA8B;EACvC;EAEA,eAAe,kBAAkB,mBAAmB,wBAAwB,sCAAsC,MAAI;EAEtH;EAEA,yBAAyB,kBAAkB,mBAAmB,wBAAwB,qCAAmC;EAEzH;EAEA,oBAAoB,kBAAkB,cAAc,wBAAwB,gBAAgB,OAAK;EAEjG;;AAOJ,8BAA8B,UAAU,iBAAiB,WAAA;AACrD,SAAO,SAAS,eAAe,kBAAkB,mBAAmB,wBAAwB,sCAAsC,MAAI;AAClI,yBAAqB,kBAAkB,KAAK,kBAAkB,QAAQ,EAAE,SAAS,kBAAkB,mBAAmB,KAAK,kBAAkB,wBAAwB,sBAAsB;AAC3L,QAAI,uCAAuC,MAAM;AAC7C,0CAAoC,KAAK,sBAAsB;IACnE;EACJ;AACJ,EAAC;AAED,8BAA8B,UAAU,2BAA2B,WAAA;AAC/D,MAAI,8CAA8C,IAAI,uBAAsB;AAC5E,MAAI,mBAAmB,YAAW;AAClC,MAAI,eAAe,YAAW;AAC9B,MAAI,SAAS,YAAW;AACxB,MAAI,sBAAsB,YAAW;AACrC,MAAI,2BAA2B,YAAW;AAC1C,MAAI,4BAA4B,aAAY;AAE5C,MAAI,sBAAsB,YAAW;AACrC,MAAI,wBAAwB,YAAW;AAEvC,MAAI,mBAAmB,YAAW;AAClC,MAAI,wBAAwB,YAAW;AACvC,MAAI,6BAA6B,YAAW;AAC5C,MAAI,4BAA4B,aAAY;AAC5C,SAAO,SAAS,yBAAyB,kBAAkB,mBAAmB,wBAAwB,qCAAmC;AACrI,mBAAe,kBAAkB,kBAAkB,YAAY;AAC/D,uBAAmB,kBAAkB,sBAAsB,gBAAgB;AAG3E,aAAS,iBAAiB,WAAW,MAAM;AAC3C,0BAAsB,iBAAiB,SAAS,cAAc,mBAAmB,EAAE,8BAA8B,QAAQ,mBAAmB;AAC5I,wBAAoB,eAAe,mBAAmB;AACtD,QAAI,oBAAoB,YAAY,IAAO,GAAG;AAC1C,4BAAsB,iBAAiB,gBAAgB,mBAAmB;IAC9E;AAEA,6BAAyB,WAAW,QAAQ,mBAAmB;AAC/D,8BAA0B,8BAA8B,cAAc,wBAAwB;AAE9F,SAAK,eAAe,kBAAkB,2BAA2B,wBAAwB,mCAAmC;AAG5H,QAAI,CAAC,uBAAuB,oBAAoB;AAC5C,UAAI,wBAAwB;AAE5B,kDAA4C,KAAK,sBAAsB;AACvE,4BAAsB,UAAU,uBAAuB,aAAa;AACpE,0BAAoB,UAAU,YAAY;AAC1C,eAAS,IAAI,GAAG,IAAI,KAAK,kBAAkB,8BAA8B,KAAK;AAC1E,2BAAmB,sBAAsB,SAAS,qBAAqB,gBAAgB;AAEvF,YAAI,KAAK,kBAAkB,4CAA4C;AACnE,6BAAmB,iBAAiB,8BAA8B,QAAQ,gBAAgB;QAC9F;AAEA,YAAI,KAAK,kBAAkB,qDAAqD,GAAG;AAC/E,cAAI,SAAS,iBAAiB,YAAW;AACzC,cAAI,6BAA6B,SAAS,KAAK,kBAAkB;AACjE,kCAAwB,OAAO,WAAW,4BAA4B,qBAAqB;AAC3F,6BAAmB,iBAAiB,SAAS,uBAAuB,gBAAgB;QACxF;AAEA,kCAA0B,8BAA8B,qBAAqB,gBAAgB;AAC7F,6BAAqB,kBAAkB,KAAK,kBAAkB,QAAQ,EAAE,KAAK,kBAAkB,2BAA2B,KAAK,kBAAkB,wBAAwB,2CAA2C;AAEpN,YAAI,CAAC,4CAA4C,gCAAgC,CAAC,4CAA4C,4BAA4B;AACtJ,uCAA6B,sBAAsB,SAAS,4CAA4C,eAAe,0BAA0B;AAEjJ,cAAI,2BAA2B,YAAW,IAAK,KAAK,kBAAkB,sDAAsD,MAAS;AACjI,oCAAwB;AACxB;UACJ,OAAO;AACH,6BAAiB,UAAU,0BAA0B;AACrD,gCAAoB,UAAU,4CAA4C,aAAa;UAC3F;QACJ,OAAO;AACH;QACJ;MACJ;AAEA,UAAI,CAAC,uBAAuB;AACxB,+BAAuB,qBAAqB;MAChD;AAEA,WAAK,8BAA8B,CAAC;IACxC;EACJ;AACJ,EAAC;AAED,8BAA8B,UAAU,sBAAsB,WAAA;AAC1D,MAAI,WAAW,YAAW;AAC1B,MAAI,oBAAoB,aAAY;AACpC,MAAI,uBAAuB,aAAY;AACvC,MAAI,sBAAsB,YAAW;AACrC,MAAI,mBAAmB,YAAW;AAClC,SAAO,SAAS,oBAAoB,kBAAkB,cAAc,wBAAwB,gBAAgB,OAAK;AAC7G,SAAK,8BAA8B;AAEnC,eAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAEnF,wBAAoB,KAAK,kBAAkB,oBAAoB,qBAAqB,iBAAiB;AACrG,0BAAsB,kBAAkB,sBAAsB,mBAAmB;AACjF,QAAI,gBAAgB,GAAG;AACnB,4BAAsB,oBAAoB,gBAAgB,cAAc,UAAU,mBAAmB;IACzG;AAEA,yBAAqB,8BAA8B,kBAAkB,mBAAmB;AAExF,QAAI,QAAQ,YAAY,KAAK,kBAAkB,QAAQ,EAAE,WAAW,sBAAsB,KAAK,kBAAkB,YAAY,CAAC,EAAE,cAAc,gBAAgB,aAAa,EAAE,UAAS,GAAI;AACtL,2BAAqB,kBAAkB,KAAK,kBAAkB,QAAQ,EAAE,cAAc,MAAM,sBAAsB,KAAK,kBAAkB,wBAAwB,sBAAsB;AAEvL,WAAK,kBAAkB,oBAAoB,qBAAqB,gBAAgB;AAChF,UAAI,gBAAgB,GAAG;AACnB,yBAAiB,cAAc,cAAc,QAAQ;AACrD,aAAK,kBAAkB,oBAAoB,eAAe,gBAAgB;MAC9E;IACJ,OAAO;AAEH,WAAK,kBAAkB,yBAAyB,sBAAsB,sBAAsB,wBAAwB,aAAa;IACrI;EACJ;AACJ,EAAC;;;ACnJK,IAAO,0CAAP,MAA8C;EAEhD,cAAA;AACI,SAAK,gBAAgB;AACrB,SAAK,wBAAwB;AAC7B,SAAK,8BAA8B;AAInC,SAAK,mBAAmB;AAExB,SAAK,4BAA4B,IAAI,kBAAiB;AACtD,SAAK,4BAA4B,IAAI,kBAAiB;AAEtD,SAAK,sCAAsC;AAC3C,SAAK,wCAAwC;AAE7C,SAAK,wCAAwC;AAG7C,SAAK,uCAAuC,YAAY,GAAG,OAAO,IAAI;AACtE,SAAK,uCAAuC,YAAY,IAAI,GAAG,CAAC;AAEhE,SAAK,yBAAyB;AAC9B,SAAK,2BAA2B;AAChC,SAAK,8BAA8B;AAEnC,SAAK,kCAAkC;AACvC,SAAK,wBAAwB;AAE7B,SAAK,sCAAsC;AAC3C,SAAK,sCAAsC;AAC3C,SAAK,4CAA4C;AAEjD,SAAK,0BAA0B;AAC/B,SAAK,8CAA8C;AACnD,SAAK,4CAA4C;AACjD,SAAK,4CAA4C;AACjD,SAAK,2CAA2C;AAChD,SAAK,gDAAgD;AACrD,SAAK,8BAA8B,IAAI,kBAAiB;EAC5D;;AAGE,IAAO,iDAAP,MAAqD;EAEvD,cAAA;AACI,SAAK,2BAA2B;AAChC,SAAK,0BAA0B;AAC/B,SAAK,0BAA0B,YAAW;AAE1C,SAAK,YAAY,IAAI,gCAA+B;EACxD;;AAGE,IAAO,yCAAP,cAAsD,8BAA6B;EAErF,YAAY,gBAAgB,uBAAuB,yBAAuB;AACtE,UAAM,gBAAgB,uBAAuB,uBAAuB;AAEpE,SAAK,4BAA4B,IAAI,+CAA8C;AAEnF,SAAK,gBAAgB,IAAI,4CAA4C,KAAK,mBAAmB,KAAK,0BAA0B,KAAK,yBAAyB;AAE1J,SAAK,8BAA8B;AAOnC,SAAK,eAAe;EACxB;EAEA,QAAK;AACD,SAAK,2BAA2B,wBAAwB;AACxD,SAAK,yBAAyB,yBAAyB;AACvD,SAAK,8BAA8B;AAEnC,SAAK,0BAA0B,UAAU,SAAS,KAAK,kBAAkB,kBAAkB,sBAAsB;AACjH,SAAK,0BAA0B,UAAU,WAAW,KAAK,kBAAkB,kBAAkB,wBAAwB;AACrH,SAAK,0BAA0B,UAAU,cAAc,KAAK,kBAAkB,kBAAkB,2BAA2B;AAE3H,SAAK,kBAAkB,yBAAyB,UAAS;AAEzD,SAAK,cAAc,MAAK;EAC5B;EAEA,MAAG;AACC,SAAK,2BAA2B,wBAAwB;AACxD,SAAK,cAAc,IAAG;EAC1B;EAEA,OAAO,IAAI,KAAG;AACV,SAAK,wBAAuB;AAE5B,SAAK,cAAc,OAAO,EAAE;AAE5B,QAAI,KAAK,iBAAgB,GAAI;AACzB,UAAI,KAAK,0BAA0B,yBAAyB;AACxD,YAAI,QAAQ,UAAU;MAC1B,OAAO;AACH,YAAI,QAAQ,QAAQ;MACxB;IACJ,WAAW,KAAK,gBAAe,GAAI;AAC/B,UAAI,QAAQ,QAAQ;IACxB;EACJ;EAEA,mBAAgB;AACZ,QAAI,kBAAkB;AAEtB,QAAI,CAAC,QAAQ,gBAAgB,KAAK,kBAAkB,QAAQ,GAAG;AAC3D,UAAI,QAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,aAAY,GAAI;AAClE,0BAAkB,QAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,iBAAiB,cAAc,MAAM;MAC7G;IACJ,OAAO;AACH,UAAI,OAAO,QAAQ,YAAY,KAAK,kBAAkB,QAAQ,EAAE,KAAK,kBAAkB,YAAY,EAAE,YAAY,cAAc,UAAU,EAAE,QAAO;AAClJ,UAAI,KAAK,YAAW,KAAM,KAAK,kBAAkB,sBAAsB;AACnE,0BAAkB;MACtB;IACJ;AAEA,WAAO;EACX;EAEA,kBAAe;AACX,QAAI,iBAAiB;AAErB,QAAI,CAAC,QAAQ,gBAAgB,KAAK,kBAAkB,QAAQ,GAAG;AAC3D,uBAAiB,QAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,iBAAiB,cAAc,KAAK,KAAK,CAAC,QAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,aAAY;IAC/K,OAAO;AACH,uBAAiB,QAAQ,YAAY,KAAK,kBAAkB,QAAQ,EAAE,KAAK,kBAAkB,YAAY,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS;IAClK;AAEA,WAAO;EACX;EAEA,0BAAuB;AAMnB,QAAI,QAAQ,gBAAgB,KAAK,kBAAkB,QAAQ,GAAG;AAC1D,WAAK,0BAAyB;AAC9B,WAAK,0BAAyB;IAClC,OAAO;AACH,WAAK,yBAAyB,yBAAyB;AACvD,WAAK,8BAA8B;AACnC,WAAK,6BAA4B;IACrC;EACJ;EAEA,yBAAyB,kBAAkB,cAAc,qCAAmC;EAE5F;EAEA,oBAAoB,KAAK,cAAc,qCAAmC;EAE1E;EAEA,0BAA0B,IAAE;EAE5B;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,SAAK,cAAc,QAAO;EAC9B;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAOJ,uCAAuC,UAAU,+BAA+B,WAAA;AAC5E,MAAI,gBAAgB,YAAW;AAC/B,MAAI,iBAAiB,YAAW;AAEhC,MAAI,WAAW,YAAW;AAC1B,SAAO,SAAS,6BAA6B,IAAE;AAC3C,SAAK,0BAA0B,0BAA0B;AACzD,SAAK,0BAA0B,2BAA2B;AAE1D,eAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAEnF,YAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,eAAe,aAAa;AAC9E,YAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,kBAAkB,cAAc;AAElF,SAAK,+BAA+B,eAAe,gBAAgB,QAAQ;EAC/E;AACJ,EAAC;AAED,uCAAuC,UAAU,4BAA4B,WAAA;AACzE,MAAI,8BAA8B,aAAY;AAC9C,MAAI,8BAA8B,aAAY;AAE9C,MAAI,wBAAwB,YAAW;AACvC,MAAI,oBAAoB,YAAW;AAEnC,MAAI,WAAW,YAAW;AAC1B,MAAI,iBAAiB,YAAW;AAChC,SAAO,SAAS,0BAA0B,IAAE;AACxC,SAAK,0BAA0B,0BAA0B;AACzD,SAAK,0BAA0B,2BAA2B;AAE1D,QAAI,KAAK,kBAAkB,kBAAkB,yCAAyC,MAAM;AACxF,UAAI,kBAAkB,QAAQ,iBAAiB,KAAK,kBAAkB,QAAQ,EAAE,QAAQ,KAAK,kBAAkB,YAAY;AAE3H,kCAA4B,iCAAiC,KAAK,kBAAkB,kBAAkB,sCAAsC,KAAK,kBAAkB,kBAAkB,oCAAoC;AACzN,oCAA8B,gBAAgB,qCAAqC,6BAA6B,2BAA2B;IAC/I,OAAO;AACH,UAAI,kBAAkB,KAAK,kBAAkB,kBAAkB;AAE/D,sBAAgB,oBAAoB,2BAA2B;IACnE;AAEA,4BAAwB,4BAA4B,kBAAkB,qBAAqB;AAC3F,wBAAoB,4BAA4B,iBAAiB,iBAAiB;AAElF,eAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AACnF,qBAAiB,SAAS,YAAY,cAAc;AAEpD,QAAI,kBAAkB,WAAW,QAAQ,KAAK,KAAK,kBAAkB,kBAAkB,uCACnF,kBAAkB,WAAW,cAAc,KAAK,KAAK,kBAAkB,kBAAkB,uCAC3F;AACE,WAAK,0BAA0B,2BAA2B;IAC9D;AAEA,QAAI,KAAK,0BAA0B,0BAA0B;AACzD,WAAK,+BAA+B,uBAAuB,mBAAmB,QAAQ;IAC1F;EACJ;AACJ,EAAC;AAED,uCAAuC,UAAU,iCAAiC,WAAA;AAC9E,MAAI,kBAAkB,YAAW;AACjC,MAAI,sBAAsB,YAAW;AACrC,MAAI,uBAAuB,YAAW;AAEtC,MAAI,gBAAgB,IAAI,cAAa;AACrC,MAAI,gBAAgB,IAAI,eAAc;AAEtC,MAAI,qBAAqB,YAAW;AACpC,MAAI,mBAAmB,YAAW;AAElC,MAAI,oBAAoB,YAAW;AACnC,MAAI,uBAAuB,YAAW;AAEtC,MAAI,kCAAkC,YAAW;AACjD,MAAI,uBAAuB,YAAW;AACtC,MAAI,6BAA6B,YAAW;AAE5C,MAAI,iCAAiC,IAAI,uBAAsB;AAE/D,MAAI,uBAAuB,CAACE,QAAO,WAAWA,OAAM,UAAU,MAAM;AACpE,SAAO,SAAS,+BAA+B,eAAe,WAAW,IAAE;AACvE,SAAK,0BAA0B,UAAU,iBAAiB,aAAa;AACvE,SAAK,0BAA0B,UAAU,WAAW,SAAS;AAC7D,SAAK,0BAA0B,UAAU,MAAM,EAAE;AAEjD,QAAI,uBAAuB;AAC3B,QAAI,uBAAuB;AAC3B,QAAI,0BAA0B;AAC9B,0BAAsB,KAAK,0BAA0B,UAAU,YAAY,uBAAuB,GAAG,mBAAmB;AAExH,kBAAc,8BAA8B;AAC5C,kBAAc,kBAAkB,QAAQ,KAAK,kBAAkB,kBAAkB,0BAA0B,QAAO,CAAE;AACpH,kBAAc,YAAY,QAAQ,WAAW,KAAK,kBAAkB,QAAQ;AAE5E,kBAAc,kBAAkB,QAAQ,KAAK,kBAAkB,uBAAuB,2BAA2B;AACjH,aAAS,kBAAkB,KAAK,kBAAkB,uBAAuB,2BAA2B;AAChG,oBAAc,kBAAkB,cAAc,gBAAgB,oBAAoB;IACtF;AAEA,QAAI,qBAAqB,KAAK,kBAAkB,kBAAkB,gBAAgB;AAElF,OAAG;AACC,wBAAkB,KAAK,0BAA0B,UAAU,YAAY,sBAAsB,eAAe;AAE5G,oBAAc,SAAS,UAAU,mBAAmB;AACpD,oBAAc,cAAc,gBAAgB,SAAS,qBAAqB,cAAc,WAAW;AACnG,oBAAc,aAAa,cAAc,YAAY,YAAW;AAChE,oBAAc,YAAY,eAAe,cAAc,WAAW;AAElE,sBAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,UAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,gBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;MAC/F;AAEA,0BAAoB,UAAU,eAAe;AAC7C,6BAAuB,gBAAgB,SAAS,eAAe,eAAe,EAAE,8BAA8B,IAAI,eAAe,EAAE,YAAW;AAC9I,gCAA0B,KAAK,0BAA0B,UAAU,YAAY,oBAAoB;AAEnG;IACJ,SACI,wBAAwB,KAAK,kBAAkB,kBAAkB,iBACjE,2BAA2B,sBAC3B,CAAC,cAAc,YAAW;AAE9B,QAAI,qCAAqC,KAAK,0BAA0B,UAAU,4BAA4B,KAAK,kBAAkB,kBAAkB,eAAe,kBAAkB;AAExL,QAAI,+BAA+B;AACnC,QAAI,0BAA0B,sCAAsC,0BAA0B,oBAAoB;AAC9G,qCAA+B,KAAK,IAAI,oCAAoC,kBAAkB;IAClG;AAEA,SAAK,0BAA0B,oBAAoB;AAEnD,QAAI,oBAAoB;AAExB,QAAI,uBAAuB;AAE3B,QAAI,cAAc,YAAW,GAAI;AAC7B,UAAI,MAAM,cAAc,OAAO,SAAQ;AAEvC,UAAI,qBAAqB,2BAA2B,cAAc,aAAa,IAAI;AAEnF,UAAI,sBAAsB,8BAA8B;AACpD,4BAAoB;AAEpB,aAAK,0BAA0B,oBAAoB;AAEnD,uCAA+B,MAAK;AACpC,aAAK,0BAA0B,0BAA0B,KAAK,oBAAoB,KAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,aAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,aAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;AAE9G,2BAAmB,UAAU,IAAI,UAAU;AAC3C,yBAAiB,UAAU,IAAI,QAAQ;AAEvC,YAAI,CAAC,KAAK,0BAA0B,2BAA2B,CAAC,KAAK,6BAA6B;AAC9F,8BAAoB,IAAI,WAAW,SAAS,IAAI,SAAS,WAAW,MAAM,iBAAiB,GAAG,iBAAiB;AAC/G,iCAAuB,GAAG,YAAY,oBAAoB;AAE1D,wBAAc,SAAS,UAAU,iBAAiB;AAClD,wBAAc,YAAY,UAAU,oBAAoB;AACxD,wBAAc,aAAa;AAE3B,0BAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,cAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,oBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;UAC/F;AAEA,cAAI,cAAc,YAAW,GAAI;AAC7B,gBAAIC,OAAM,cAAc,OAAO,SAAQ;AAEvC,2CAA+B,MAAK;AACpC,iBAAK,0BAA0B,0BAA0B,KAAK,oBAAoBA,MAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,iBAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,iBAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;AAE9G,gBAAI,CAAC,KAAK,0BAA0B,2BAChC,CAAC,KAAK,+BACN,+BAA+B,sBAC/B,+BAA+B,2BAA2B;AAC1D,gDAAkC,+BAA+B,yBAAyB,SAAS,8BAA8B,IAAI,+BAA+B;AAEpK,kBAAI,CAAC,gCAAgC,YAAY,IAAO,GAAG;AACvD,gDAAgC,eAAe,+BAA+B;AAE9E,oBAAI,eAAe,KAAK,kBAAkB,uBAAuB,WAAW;AAC5E,8BAAc,WAAW,kBAAkB,SAAS,gCAAgC,WAAW,cAAc,cAAc,QAAQ,GAAG,cAAc,QAAQ;AAC5J,8BAAc,YAAY,UAAU,oBAAoB;AACxD,8BAAc,aAAa;AAE3B,gCAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,oBAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,0BAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,UAAU,GAAG,cAAc,UAAU,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AACjI,0BAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;gBAC/F;AAEA,oBAAI,cAAc,YAAW,GAAI;AAC7B,sBAAIA,OAAM,cAAc,OAAO,SAAQ;AAEvC,iDAA+B,MAAK;AACpC,uBAAK,0BAA0B,0BAA0B,KAAK,oBAAoBA,MAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,uBAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,uBAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;gBAClH;cACJ;YACJ,OAAO;YAEP;AAEA,gBAAI,CAAC,KAAK,0BAA0B,2BAA2B,CAAC,KAAK,6BAA6B;AAC9F,qCAAuB,iBAAiB,8BAA8B,IAAI,oBAAoB;AAC9F,kBAAI,CAAC,qBAAqB,YAAY,IAAO,GAAG;AAC5C,qCAAqB,eAAe,oBAAoB;AAExD,oBAAI,eAAe,KAAK,kBAAkB,uBAAuB,WAAW;AAC5E,8BAAc,WAAW,kBAAkB,SAAS,qBAAqB,WAAW,cAAc,cAAc,QAAQ,GAAG,cAAc,QAAQ;AACjJ,8BAAc,YAAY,UAAU,oBAAoB;AACxD,8BAAc,aAAa;AAE3B,gCAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,oBAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,0BAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,UAAU,GAAG,cAAc,UAAU,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AACjI,0BAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;gBAC/F;AAEA,oBAAI,cAAc,YAAW,GAAI;AAC7B,sBAAIA,OAAM,cAAc,OAAO,SAAQ;AAEvC,iDAA+B,MAAK;AACpC,uBAAK,0BAA0B,0BAA0B,KAAK,oBAAoBA,MAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,uBAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,uBAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;gBAClH;cACJ;YACJ,OAAO;YAEP;AAEA,gBAAI,CAAC,KAAK,0BAA0B,2BAA2B,CAAC,KAAK,6BAA6B;AAC9F,2CAA6B,UAAU,YAAY,0BAA0B,EAAE,8BAA8B,IAAI,0BAA0B,EAAE,eAAe,0BAA0B;AAEtL,kBAAI,CAAC,2BAA2B,YAAY,IAAO,GAAG;AAClD,2CAA2B,eAAe,0BAA0B;AAEpE,oBAAI,eAAe,KAAK,kBAAkB,uBAAuB,WAAW;AAC5E,8BAAc,WAAW,kBAAkB,SAAS,2BAA2B,WAAW,cAAc,cAAc,QAAQ,GAAG,cAAc,QAAQ;AACvJ,8BAAc,YAAY,UAAU,oBAAoB;AACxD,8BAAc,aAAa;AAE3B,gCAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,oBAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,0BAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,UAAU,GAAG,cAAc,UAAU,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AACjI,0BAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;gBAC/F;AAEA,oBAAI,cAAc,YAAW,GAAI;AAC7B,sBAAIA,OAAM,cAAc,OAAO,SAAQ;AAEvC,iDAA+B,MAAK;AACpC,uBAAK,0BAA0B,0BAA0B,KAAK,oBAAoBA,MAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,uBAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,uBAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;gBAClH;cACJ;YACJ,OAAO;YAEP;UACJ;QACJ,OAAO;QAEP;MACJ;IACJ;AAIA,QAAI,CAAC,mBAAmB;AACpB,6BAAuB,KAAK,0BAA0B,UAAU,sBAAsB,KAAK,0BAA0B,mBAAmB,oBAAoB;AAE5J,wBAAkB,UAAU,oBAAoB;AAChD,6BAAuB,GAAG,YAAY,oBAAoB;AAE1D,oBAAc,SAAS,UAAU,iBAAiB;AAClD,oBAAc,YAAY,UAAU,oBAAoB;AACxD,oBAAc,aAAa;AAE3B,sBAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,UAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,gBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;MAC/F;AAEA,UAAI,cAAc,YAAW,GAAI;AAC7B,YAAI,MAAM,cAAc,OAAO,SAAQ;AAEvC,uCAA+B,MAAK;AACpC,aAAK,0BAA0B,0BAA0B,KAAK,oBAAoB,KAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,aAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,aAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;AAE9G,YAAI,CAAC,KAAK,0BAA0B,2BAChC,CAAC,KAAK,+BACN,+BAA+B,sBAC/B,+BAA+B,2BAA2B;AAC1D,4CAAkC,+BAA+B,yBAAyB,SAAS,8BAA8B,IAAI,+BAA+B;AAEpK,cAAI,CAAC,gCAAgC,YAAY,IAAO,GAAG;AACvD,4CAAgC,eAAe,+BAA+B;AAE9E,gBAAI,eAAe,KAAK,kBAAkB,uBAAuB,WAAW;AAC5E,0BAAc,WAAW,kBAAkB,SAAS,gCAAgC,WAAW,cAAc,cAAc,QAAQ,GAAG,cAAc,QAAQ;AAC5J,0BAAc,YAAY,UAAU,oBAAoB;AACxD,0BAAc,aAAa;AAE3B,4BAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,gBAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,sBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,UAAU,GAAG,cAAc,UAAU,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AACjI,sBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;YAC/F;AAEA,gBAAI,cAAc,YAAW,GAAI;AAC7B,kBAAIA,OAAM,cAAc,OAAO,SAAQ;AAEvC,6CAA+B,MAAK;AACpC,mBAAK,0BAA0B,0BAA0B,KAAK,oBAAoBA,MAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,mBAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,mBAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;YAClH;UACJ;QACJ;AAEA,YAAI,CAAC,KAAK,0BAA0B,2BAA2B,CAAC,KAAK,6BAA6B;AAC9F,uCAA6B,UAAU,YAAY,0BAA0B,EAAE,8BAA8B,IAAI,0BAA0B,EAAE,eAAe,0BAA0B;AAEtL,cAAI,CAAC,2BAA2B,YAAY,IAAO,GAAG;AAClD,uCAA2B,eAAe,0BAA0B;AAEpE,gBAAI,eAAe,KAAK,kBAAkB,uBAAuB,WAAW;AAC5E,0BAAc,WAAW,kBAAkB,SAAS,2BAA2B,WAAW,cAAc,cAAc,QAAQ,GAAG,cAAc,QAAQ;AACvJ,0BAAc,YAAY,UAAU,oBAAoB;AACxD,0BAAc,aAAa;AAE3B,4BAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,gBAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,wBAAwB,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACjJ,sBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,UAAU,GAAG,cAAc,UAAU,YAAY,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;AACjI,sBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;YAC/F;AAEA,gBAAI,cAAc,YAAW,GAAI;AAC7B,kBAAIA,OAAM,cAAc,OAAO,SAAQ;AAEvC,6CAA+B,MAAK;AACpC,mBAAK,0BAA0B,0BAA0B,KAAK,oBAAoBA,MAAK,KAAK,yBAAyB,wBAAwB,8BAA8B;AAE3K,mBAAK,yBAAyB,mBAAmB,UAAU,+BAA+B,aAAa;AACvG,mBAAK,0BAA0B,wBAAwB,UAAU,+BAA+B,cAAc;YAClH;UACJ;QACJ;MACJ;IACJ;EACJ;AACJ,EAAC;AAED,uCAAuC,UAAU,4BAA4B,WAAA;AACzE,MAAI,WAAW,YAAW;AAC1B,MAAI,cAAc,YAAY,GAAG,GAAG,CAAC;AACrC,MAAI,SAAS,YAAY,GAAG,GAAG,CAAC;AAChC,SAAO,SAAS,0BAA0B,IAAE;AACxC,QAAI,OAAO,QAAQ,YAAY,KAAK,kBAAkB,QAAQ,EAAE,KAAK,kBAAkB,YAAY,EAAE,YAAY,cAAc,UAAU,EAAE,QAAO;AAElJ,QAAI,KAAK,YAAW,IAAK,KAAK,kBAAkB,kBAAkB,iCAAiC;AAC/F,WAAK,yBAAyB,yBAAyB,KAAK;AAE5D,eAAS,SAAS,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AACrC,WAAK,8BAA8B,SAAS,iBAAiB,aAAa,MAAM;IACpF;AAEA,QAAI,CAAC,KAAK,kBAAkB,kBAAkB,uBAAuB;AACjE,WAAK,yBAAyB,yBAAyB;AACvD,WAAK,8BAA8B;IACvC;EACJ;AACJ,EAAC;AAED,uCAAuC,UAAU,sBAAsB,WAAA;AACnE,MAAI,gBAAgB,IAAI,cAAa;AACrC,MAAI,gBAAgB,IAAI,eAAc;AAEtC,MAAI,WAAW,YAAW;AAC1B,MAAI,uBAAuB,CAACD,QAAO,WAAWA,OAAM,UAAU,MAAM;AACpE,SAAO,SAAS,oBAAoB,KAAK,cAAc,qCAAmC;AACtF,QAAI,UAAU;AAEd,SAAK,8BAA8B;AAEnC,QAAI,IAAI,QAAO,KAAM,CAAC,IAAI,mBAAmB;AACzC,iBAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAGnF,UAAI,gCAAgC;AACpC,UAAI,IAAI,SAAS,kBAAkB,QAAQ,KAAK,+BAA+B;AAG3E,sBAAc,8BAA8B;AAC5C,sBAAc,kBAAkB,QAAQ,KAAK,kBAAkB,kBAAkB,0BAA0B,QAAO,CAAE;AACpH,sBAAc,YAAY,QAAQ,WAAW,KAAK,kBAAkB,QAAQ;AAE5E,sBAAc,kBAAkB,QAAQ,KAAK,kBAAkB,uBAAuB,2BAA2B;AACjH,iBAAS,kBAAkB,KAAK,kBAAkB,uBAAuB,2BAA2B;AAChG,wBAAc,kBAAkB,cAAc,gBAAgB,oBAAoB;QACtF;AAEA,YAAI,kBAAkB;AACtB,sBAAc,WAAW,IAAI,WAAW,SAAS,IAAI,SAAS,WAAW,iBAAiB,cAAc,QAAQ,GAAG,cAAc,QAAQ;AACzI,sBAAc,cAAc,IAAI,SAAS,YAAY,cAAc,WAAW;AAC9E,sBAAc,aAAa,kBAAkB;AAC7C,sBAAc,YAAY,eAAe,cAAc,WAAW;AAElE,wBAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,YAAI,cAAc,YAAW,GAAI;AAC7B,cAAI,WAAW,cAAc,OAAO,SAAQ;AAC5C,cAAI,SAAS,SAAS,UAAU,IAAI,QAAQ,GAAG;AAC3C,sBAAU,KAAK,yBAAyB,IAAI,YAAY,cAAc,mCAAmC;UAC7G;QACJ;MACJ;IACJ;AAEA,WAAO;EACX;AACJ,EAAC;AAED,uCAAuC,UAAU,2BAA2B,WAAA;AACxE,MAAI,WAAW,YAAW;AAC1B,MAAI,oBAAoB,aAAY;AACpC,MAAI,mBAAmB,YAAW;AAClC,MAAI,eAAe,YAAW;AAC9B,MAAI,uBAAuB,YAAW;AACtC,MAAI,sCAAsC,IAAI,uBAAsB;AACpE,SAAO,SAAS,yBAAyB,kBAAkB,cAAc,qCAAmC;AACxG,QAAI,UAAU;AAEd,QAAI,kBAAkB,KAAK,2BAA2B,gBAAgB;AAEtE,QAAI,iBAAiB;AACjB,iBAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAEnF,0BAAoB,KAAK,kBAAkB,oBAAoB,qBAAqB,iBAAiB;AACrG,qBAAe,kBAAkB,kBAAkB,YAAY;AAC/D,UAAI,gBAAgB,GAAG;AACnB,2BAAmB,kBAAkB,sBAAsB,gBAAgB;AAC3E,2BAAmB,iBAAiB,gBAAgB,cAAc,UAAU,gBAAgB;AAC5F,0BAAkB,8BAA8B,cAAc,gBAAgB;MAClF;AAEA,UAAI,iBAAiB,iBAAiB,SAAS,cAAc,oBAAoB,EAAE,wBAAwB,UAAU,oBAAoB,EAAE,YAAW;AAEtJ,UAAI,iBAAiB,KAAK,kBAAkB,kBAAkB,wBAAwB,MAAS;AAC3F,YAAI,qBAAqB;AACzB,4CAAoC,KAAK,KAAK,2BAA2B,wBAAwB;AAEjG,YAAI,CAAC,KAAK,kBAAkB,6BAA6B;AACrD,eAAK,eAAe,kBAAkB,mBAAmB,qCAAqC,mCAAmC;QACrI,OAAO;AACH,eAAK,yBAAyB,kBAAkB,mBAAmB,qCAAqC,mCAAmC;QAC/I;AAEA,YAAI,CAAC,oCAAoC,oBAAoB;AACzD,+BAAqB;QACzB;AAEA,YAAI,uBAAuB,CAAC,KAAK,kBAAkB,kBAAkB,oBAAoB,oCAAoC,eAAe;AAExI,cAAI,mBAAmB;AACvB,cAAI,sBAAsB,oCAAoC,cAAc,wBAAwB,cAAc,QAAQ;AAC1H,cAAI,qBAAqB;AACrB,+BAAmB,oCAAoC,gBAAgB,KAAK,kBAAkB,kBAAkB,8BAA8B;UAClJ;AAEA,cAAI,kBAAkB;AAClB,sBAAU;UACd;QACJ;MACJ;IACJ;AAEA,WAAO;EACX;AACJ,EAAC;AAED,uCAAuC,UAAU,6BAA6B,WAAA;AAC1E,MAAI,WAAW,YAAW;AAE1B,MAAI,6BAA6B,YAAW;AAC5C,MAAI,uBAAuB,YAAW;AACtC,SAAO,SAAS,2BAA2B,kBAAgB;AACvD,QAAI,YAAY;AAEhB,QAAI,KAAK,kBAAkB,kBAAkB,uCACzC,KAAK,kBAAkB,kBAAkB,uCACzC,KAAK,kBAAkB,kBAAkB,2CAA2C;AAEpF,iBAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AACnF,UAAI,gBAAgB;AACpB,UAAI,gBAAgB;AAEpB,UAAI,KAAK,kBAAkB,kBAAkB,6CACzC,KAAK,kBAAkB,kBAAkB,qCAAqC;AAC9E,YAAI,aAAa,KAAK,kBAAkB,oBAAoB,cAAa;AACzE,+BAAuB,iBAAiB,SAAS,SAAS,WAAW,YAAY,oBAAoB,GAAG,oBAAoB;AAC5H,wBAAgB,KAAK,mBAAmB,oBAAoB;MAChE,OAAO;AACH,wBAAgB;MACpB;AAEA,UAAI,KAAK,kBAAkB,kBAAkB,6CAA6C,eAAe;AACrG,wBAAgB;MACpB,OAAO;AACH,YAAI,KAAK,kBAAkB,kBAAkB,6CACxC,KAAK,kBAAkB,kBAAkB,uCAAuC,eAAgB;AACjG,uCAA6B,iBAAiB,SAAS,SAAS,WAAW,KAAK,kBAAkB,kBAAkB,6CAA6C,0BAA0B,GAAG,0BAA0B;AACxN,0BAAgB,KAAK,mBAAmB,0BAA0B;QACtE,OAAO;AACH,0BAAgB;QACpB;MACJ;AAEA,kBAAY,iBAAiB;IACjC;AAEA,WAAO;EACX;AACJ,EAAC;AAED,uCAAuC,UAAU,qBAAqB,WAAA;AAClE,MAAI,WAAW,YAAW;AAC1B,MAAI,aAAa,YAAY,GAAG,GAAG,CAAC;AACpC,MAAI,oBAAoB,YAAY,GAAG,IAAI,CAAC;AAC5C,MAAI,kBAAkB,YAAY,GAAG,GAAG,CAAC;AACzC,MAAI,cAAc,YAAW;AAC7B,MAAI,eAAe,YAAW;AAC9B,MAAI,YAAY,YAAW;AAC3B,MAAI,aAAa,YAAW;AAC5B,MAAI,eAAe,YAAW;AAC9B,MAAI,UAAU,YAAW;AACzB,MAAI,qBAAqB,YAAW;AAEpC,MAAI,gBAAgB,IAAI,cAAa;AACrC,MAAI,gBAAgB,IAAI,eAAc;AAEtC,MAAI,uBAAuB,CAACA,QAAO,WAAWA,OAAM,UAAU,MAAM;AACpE,SAAO,SAAS,mBAAmB,UAAQ;AACvC,QAAI,YAAY;AAEhB,eAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAEnF,QAAI,cAAc,KAAK,kBAAkB,oBAAoB,QAAO;AACpE,mBAAe,YAAY,eAAe,YAAY;AACtD,gBAAY,SAAS,SAAS,cAAc,SAAS,EAAE,eAAe,SAAS;AAE/E,gBAAY,UAAU,UAAU;AAChC,QAAI,UAAU,WAAW,UAAU,IAAI,QAAU,UAAU,WAAW,iBAAiB,IAAI,MAAQ;AAC/F,kBAAY,UAAU,eAAe;IACzC;AAEA,iBAAa,UAAU,WAAW,aAAa,UAAU;AACzD,cAAU,WAAW,WAAW,WAAW,OAAO;AAClD,iBAAa,UAAU,SAAS;AAEhC,YAAQ,eAAe,OAAO;AAC9B,iBAAa,eAAe,YAAY;AAExC,QAAI,iBAAiB,KAAK,6BAA6B,cAAc,SAAS,YAAY;AAE1F,QAAIE,YAAW,aAAa,cAAc,QAAQ;AAElD,aAAS,iBAAiB,gBAAgB;AACtC,oBAAc,SAAS,UAAU,aAAa;AAC9C,oBAAc,YAAY,UAAU,YAAY;AAChD,oBAAc,aAAaA;AAC3B,oBAAc,YAAY,QAAQ,WAAW,KAAK,kBAAkB,QAAQ;AAE5E,oBAAc,kBAAkB,QAAQ,KAAK,kBAAkB,kBAAkB,4BAA4B,QAAO,CAAE;AAEtH,oBAAc,kBAAkB,QAAQ,KAAK,kBAAkB,uBAAuB,2BAA2B;AACjH,eAAS,kBAAkB,KAAK,kBAAkB,uBAAuB,2BAA2B;AAChG,sBAAc,kBAAkB,cAAc,gBAAgB,oBAAoB;MACtF;AAEA,oBAAc,8BAA8B;AAE5C,sBAAgB,aAAa,QAAQ,eAAe,aAAa;AAEjE,UAAI,KAAK,kBAAkB,kBAAkB,KAAK,kBAAkB,4BAA4B,QAAQ,eAAe,KAAK,kBAAkB,QAAQ,GAAG;AACrJ,gBAAQ,sBAAsB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,GAAG,aAAa;MAC/F;AAEA,UAAI,cAAc,YAAW,GAAI;AAC7B,6BAAqB,cAAc,SAAS,aAAa,WAAWA,WAAU,kBAAkB,GAAG,kBAAkB;AACrH,YAAI,MAAM,cAAc,OAAO,SAAQ;AAEvC,YAAI,KAAK,kBAAkB,kBAAkB,6CAA6C,KAAK,IAAI,WAAW,cAAc,kBAAkB,IAAI,KAAK,kBAAkB,kBAAkB,4CAA4C,MAAS;AAC5O,sBAAY;AACZ;QACJ;MACJ;IACJ;AAEA,WAAO;EACX;AACJ,EAAC;AAED,uCAAuC,UAAU,+BAA+B,WAAA;AAC5E,MAAI,iBAAiB,CAAA;AACrB,MAAI,uBAAuB,CAAA;AAC3B,MAAI,kCAAkC;AACtC,MAAI,+BAA+B,WAAA;AAC/B,QAAI,OAAO;AACX,WAAO,qBAAqB,UAAU,iCAAiC;AACnE,2BAAqB,KAAK,YAAW,CAAE;IAC3C;AAEA,WAAO,qBAAqB,+BAA+B;AAC3D;AACA,WAAO;EACX;AAEA,MAAI,mBAAmB,YAAW;AAClC,SAAO,SAAS,6BAA6B,UAAU,IAAI,SAAO;AAC9D,mBAAe,SAAS;AACxB,sCAAkC;AAElC;AACI,UAAI,oBAAoB,6BAA4B;AACpD,wBAAkB,UAAU,QAAQ;AACpC,qBAAe,KAAK,iBAAiB;IACzC;AAEA,QAAI,aAAa,KAAK,kBAAkB,kBAAkB,0BAA0B,KAAK,kBAAkB,kBAAkB;AAC7H,QAAI,aAAa,MAAM,KAAK,kBAAkB,kBAAkB;AAChE,QAAI,sBAAsB;AAC1B,aAAS,IAAI,GAAG,IAAI,KAAK,kBAAkB,kBAAkB,0CAA0C,KAAK;AACxG,UAAI,gBAAgB,cAAc,IAAI;AAEtC,yBAAmB,GAAG,gBAAgB,qBAAqB,SAAS,gBAAgB;AACpF,eAAS,IAAI,GAAG,IAAI,KAAK,kBAAkB,kBAAkB,2CAA2C,KAAK;AACzG,YAAI,oBAAoB,6BAA4B;AACpD,YAAI,iBAAiB,iBAAiB,gBAAgB,aAAa,GAAG,SAAS,iBAAiB;AAChG,uBAAe,KAAK,SAAS,SAAS,eAAe,WAAW,eAAe,cAAc,GAAG,cAAc,CAAC;MACnH;AAEA,6BAAuB,KAAK,kBAAkB,kBAAkB;IACpE;AAEA,WAAO;EACX;AACJ,EAAC;;;ACn2BD,SAAS,iBAAAC,uBAAqB;AASxB,IAAO,6CAAP,cAA0D,8BAA6B;EAEzF,YAAY,gBAAgB,uBAAuB,yBAAuB;AACtE,UAAM,gBAAgB,uBAAuB,uBAAuB;AAEpE,SAAK,iBAAiB,QAAQ,iBAAiB,KAAK,kBAAkB,QAAQ,EAAE,WAAW,aAAY;AACvG,SAAK,8BAA8B,KAAK,eAAe,gBAAgBC,eAAa;AACpF,SAAK,4BAA4B,OAAO,QAAQ,iBAAiB,KAAK,kBAAkB,QAAQ,EAAE;AAClG,SAAK,4BAA4B,WAAW,QAAQ,oBAAoB,KAAK,kBAAkB,QAAQ,EAAE,yBAAyB,MAAK;AACvI,SAAK,8BAA8B,YAC/B,KAAK,kBAAkB,iBAAiB,mBAAmB,CAAC,IAAI,KAChE,KAAK,kBAAkB,iBAAiB,mBAAmB,CAAC,IAAI,KAChE,KAAK,kBAAkB,iBAAiB,mBAAmB,CAAC,IAAI,KAChE,CAAC;AAEL,SAAK,4BAA4B,SAAS,QAAQ,KAAK;AAEvD,SAAK,eAAe,uBAAsB;AAC1C,SAAK,eAAe,iBAAiB,KAAK,kBAAkB,iBAAiB,kBAAkB;AAC/F,SAAK,eAAe,aAAa,KAAK;AAEtC,SAAK,SAAS,IAAI,IAAG;AAGrB,SAAK,OAAO,SAAS,MAAM;AAC3B,SAAK,OAAO,SAAS,MAAM;AAE3B,SAAK,OAAO,SAAS,YAAY,KAAK,eAAe,KAAK,IAAI,CAAC;AAC/D,SAAK,OAAO,SAAS,QAAQ,IAAI,WAAW,KAAK,kBAAkB,iBAAiB,oBAAoB,MAAM,CAAC;AAC/G,SAAK,OAAO,SAAS,WAAW,KAAK,cAAc,KAAK,IAAI,CAAC;AAE7D,SAAK,OAAO,cAAc,QAAQ,QAAQ,OAAO;AAEjD,SAAK,OAAO,cAAc,QAAQ,YAAY,YAAY,KAAK,cAAc,KAAK,IAAI,CAAC;AACvF,SAAK,OAAO,cAAc,YAAY,QAAQ,QAAQ,KAAK,UAAU,KAAK,IAAI,CAAC;AAC/E,SAAK,OAAO,cAAc,QAAQ,WAAW,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC;AACjF,SAAK,OAAO,cAAc,WAAW,QAAQ,QAAQ,KAAK,cAAc,KAAK,IAAI,CAAC;AAElF,SAAK,OAAO,cAAc,QAAQ,QAAQ,MAAM;AAChD,SAAK,OAAO,cAAc,YAAY,QAAQ,QAAQ,KAAK,MAAM,KAAK,MAAM,IAAI,CAAC;AACjF,SAAK,OAAO,cAAc,QAAQ,QAAQ,QAAQ,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAC9E,SAAK,OAAO,cAAc,WAAW,QAAQ,QAAQ,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAEjF,SAAK,OAAO,KAAK,MAAM;AACvB,SAAK,OAAO,QAAQ,OAAO;AAE3B,SAAK,iBAAiB,IAAI,MAAM,KAAK,kBAAkB,iBAAiB,oBAAoB;AAC5F,SAAK,kBAAkB,IAAI,MAAM,KAAK,kBAAkB,iBAAiB,qBAAqB;AAC9F,SAAK,0BAA0B,IAAI,iBAAiB,GAAG,GAAG,GAAG,CAAC;AAC9D,SAAK,yBAAyB,IAAI,iBAAiB,GAAG,GAAG,GAAG,CAAC;EACjE;EAEA,MAAM,KAAG;AACL,SAAK,eAAe;AAEpB,SAAK,OAAO,QAAQ,UAAU;EAClC;EAEA,MAAG;AACC,SAAK,eAAe,aAAa,KAAK;AACtC,SAAK,eAAe,aAAa,QAAQ,iBAAiB,KAAK,kBAAkB,QAAQ,EAAE,YAAY,KAAK;AAC5G,SAAK,OAAO,QAAQ,MAAM;EAC9B;EAEA,OAAO,IAAI,KAAG;AACV,SAAK,eAAe,aAAa,KAAK,kBAAkB,oBAAoB,QAAO,GAAI,KAAK;AAC5F,SAAK,eAAe,uBAAsB;AAE1C,SAAK,OAAO,OAAO,EAAE;EACzB;EAEA,gBAAa;AACT,SAAK,gBAAgB,MAAK;AAC1B,SAAK,4BAA4B,CAAC,IAAI;AACtC,SAAK,4BAA4B,SAAS,QAAQ,KAAK;AACvD,SAAK,eAAe,aAAa,IAAI;AAErC,SAAK,2BAA2B,kBAAkB;EACtD;EAEA,eAAY;AACR,SAAK,eAAe,MAAK;EAC7B;EAEA,eAAe,IAAI,KAAG;AAClB,SAAK,gBAAgB,OAAO,EAAE;AAE9B,QAAI,QAAQ,KAAK,wBAAwB,IAAI,KAAK,gBAAgB,cAAa,CAAE;AACjF,SAAK,4BAA4B,CAAC,IAAI;AACtC,SAAK,4BAA4B,SAAS,QAAQ,KAAK;AAEvD,QAAI,KAAK,gBAAgB,OAAM,GAAI;AAC/B,UAAI,QAAQ,MAAM;IACtB;EACJ;EAEA,cAAc,IAAI,KAAG;AACjB,SAAK,eAAe,OAAO,EAAE;AAE7B,QAAI,QAAQ,KAAK,uBAAuB,IAAI,KAAK,eAAe,cAAa,CAAE;AAC/E,SAAK,4BAA4B,CAAC,IAAI;AACtC,SAAK,4BAA4B,SAAS,QAAQ,KAAK;AAEvD,QAAI,KAAK,eAAe,OAAM,GAAI;AAC9B,UAAI,QAAQ,MAAM;IACtB;EACJ;EAEA,gBAAa;AACT,SAAK,eAAe,aAAa,KAAK;AAEtC,SAAK,aAAa,eAAe,MAAM;EAC3C;EAEA,MAAM,UAAQ;AACV,SAAK,eAAe,aAAa,KAAK;AAEtC,QAAI,UAAU;AACV,WAAK,UAAS;IAClB;EACJ;EAEA,YAAS;AACL,SAAK,2BAA2B,kBAAkB;AAClD,SAAK,2BAA2B,0BAA0B;AAC1D,SAAK,oBAAoB,KAAK,yBAAyB,oBAAoB,KAAK,yBAAyB,wBAAwB,KAAK,2BAA2B,wBAAwB;EAC7L;;;;AClIE,IAAO,6CAAP,cAA0D,8BAA6B;EAEzF,YAAY,gBAAgB,uBAAuB,yBAAuB;AACtE,UAAM,gBAAgB,uBAAuB,uBAAuB;AAEpE,SAAK,SAAS,IAAI,IAAG;AAGrB,SAAK,OAAO,SAAS,MAAM;AAC3B,SAAK,OAAO,SAAS,MAAM;AAE3B,SAAK,OAAO,SAAS,YAAY,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAEhE,SAAK,OAAO,cAAc,QAAQ,QAAQ,OAAO;AAEjD,SAAK,OAAO,cAAc,QAAQ,YAAY,YAAY,KAAK,eAAe,KAAK,IAAI,CAAC;AACxF,SAAK,OAAO,cAAc,YAAY,QAAQ,QAAQ,KAAK,cAAc,KAAK,IAAI,CAAC;AAEnF,SAAK,OAAO,cAAc,QAAQ,QAAQ,MAAM;AAChD,SAAK,OAAO,cAAc,YAAY,QAAQ,QAAQ,KAAK,MAAM,KAAK,IAAI,CAAC;AAE3E,SAAK,OAAO,KAAK,MAAM;AACvB,SAAK,OAAO,QAAQ,OAAO;AAE3B,SAAK,wBAAwB,IAAI,MAAM,KAAK,kBAAkB,iBAAiB,sBAAsB;AACrG,SAAK,sBAAsB,IAAI,MAAM,KAAK,kBAAkB,iBAAiB,sBAAsB,KAAK;AAExG,SAAK,uBAAuB,YAAW;AAEvC,SAAK,yBAAyB;AAC9B,SAAK,uBAAuB;EAKhC;EAEA,MAAM,KAAG;AACL,SAAK,eAAe;AAEpB,SAAK,OAAO,QAAQ,UAAU;EAClC;EAEA,MAAG;AACC,SAAK,OAAO,QAAQ,MAAM;EAC9B;EAEA,OAAO,IAAI,KAAG;AAKV,SAAK,OAAO,OAAO,EAAE;EACzB;EAEA,iBAAc;AACV,SAAK,kBAAkB,yBAAyB,UAAS,EAAG,yBAAyB;AAErF,SAAK,2BAA2B,kBAAkB;AAClD,SAAK,uBAAuB,KAAK,kBAAkB,oBAAoB,gBAAgB,KAAK,oBAAoB;AAEhH,SAAK,sBAAsB,MAAM,KAAK,kBAAkB,iBAAiB,sBAAsB;AAE/F,QAAI,KAAK,kBAAkB,iBAAiB,sDAAsD;AAC9F,UAAIC,YAAW,KAAK,yBAAyB,mBAAmB,cAAc,KAAK,oBAAoB;AACvG,UAAI,aAAa,KAAK,kBAAkB,iBAAiB,qDAAqDA,SAAQ;AACtH,WAAK,sBAAsB,MAAM,KAAK,kBAAkB,iBAAiB,yBAAyB,UAAU;IAChH;AAEA,SAAK,oBAAoB,MAAM,KAAK,kBAAkB,iBAAiB,oBAAoB;AAC3F,QAAI,KAAK,kBAAkB,iBAAiB,iDAAiD;AACzF,UAAI,aAAa,KAAK,kBAAkB,iBAAiB,gDAAgD,KAAK,IAAI,KAAK,yBAAyB,sBAAsB,CAAC;AACvK,WAAK,oBAAoB,MAAM,KAAK,kBAAkB,iBAAiB,uBAAuB,UAAU;IAC5G;AAEA,SAAK,uBAAuB,KAAK,yBAAyB;AAC1D,SAAK,yBAAyB;EAClC;EAEA,QAAK;AACD,SAAK,UAAS;EAClB;EAEA,gBAAa;AACT,SAAK,UAAS;AACd,SAAK,aAAa,eAAe,MAAM;EAC3C;EAEA,YAAS;AACL,SAAK,kBAAkB,yBAAyB,UAAS,EAAG,yBAAyB;AACrF,SAAK,2BAA2B,kBAAkB;AAClD,SAAK,2BAA2B,0BAA0B;AAC1D,SAAK,oBAAoB,KAAK,yBAAyB,oBAAoB,KAAK,uBAAuB,KAAK,wBAAwB,KAAK,2BAA2B,wBAAwB;EAChM;EAEA,gBAAgB,IAAI,KAAG;EAEvB;;AAOJ,2CAA2C,UAAU,kBAAkB,WAAA;AACnE,MAAI,yBAAyB,YAAW;AACxC,MAAI,kBAAkB,YAAW;AACjC,SAAO,SAAS,gBAAgB,IAAI,KAAG;AACnC,SAAK,sBAAsB,OAAO,EAAE;AACpC,SAAK,oBAAoB,OAAO,EAAE;AAElC,QAAI,KAAK,oBAAoB,OAAM,KAAM,KAAK,sBAAsB,OAAM,GAAI;AAC1E,UAAI,QAAQ,MAAM;IACtB,OAAO;AACH,sBAAgB,UAAU,KAAK,yBAAyB,kBAAkB;AAE1E,UAAI,KAAK,sBAAsB,UAAS,KAAM,KAAK,sBAAsB,WAAU,GAAI;AAEnF,YAAI,sBAAsB,KAAK,kBAAkB,iBAAiB,8BAA8B,KAAK,sBAAsB,cAAa,CAAE;AAE1I,YAAI,uBAAuB,KAAK,kBAAkB,iBAAiB,6CAA6C,CAAC,KAAK,oBAAoB,UAAS,GAAI;AACnJ,eAAK,oBAAoB,MAAK;AAC9B,eAAK,oBAAoB,OAAO,EAAE;QACtC;AAEA,iCAAyB,KAAK,yBAAyB,mBAAmB,SAAS,KAAK,sBAAsB,sBAAsB;AACpI,+BAAuB,WAAW,qBAAqB,sBAAsB;AAC7E,0BAAkB,KAAK,qBAAqB,SAAS,wBAAwB,eAAe;MAChG;AAEA,UAAI,eAAe;AACnB,UAAI,KAAK,oBAAoB,UAAS,KAAM,KAAK,oBAAoB,WAAU,GAAI;AAC/E,YAAI,sBAAsB,KAAK,kBAAkB,iBAAiB,4BAA4B,KAAK,oBAAoB,cAAa,CAAE;AAEtI,YAAI,yBAAyB,KAAK,uBAAuB;AACzD,uBAAe,yBAAyB,KAAK;AAE7C,aAAK,yBAAyB;MAClC;AAEA,WAAK,oBAAoB,iBAAiB,cAAc,KAAK,2BAA2B,0BAA0B,IAAI;IAC1H;EACJ;AACJ,EAAC;;;AC7IM,IAAI,uCAAuC;EAC9C,SAAS;EACT,OAAO;EACP,OAAO;;AAGL,IAAO,yCAAP,MAA6C;EAE/C,cAAA;AACI,SAAK,iBAAiB,qCAAqC;AAE3D,SAAK,wBAAwB;AAC7B,SAAK,uBAAuB;AAC5B,SAAK,qBAAqB;AAC1B,SAAK,qBAAqB,YAAW;AACrC,SAAK,qBAAqB;AAE1B,SAAK,yBAAyB;AAC9B,SAAK,uDAAuD;AAC5D,SAAK,gCAAgC,eAAe;AAEpD,SAAK,uBAAuB;AAC5B,SAAK,kDAAkD;AACvD,SAAK,8BAA8B,eAAe;AAClD,SAAK,4CAA4C;AAEjD,SAAK,kDAAkD,SAAUC,QAAK;AAClE,aAAO,eAAe,QAAQA,SAAQ,GAAG;IAC7C;EACJ;;AAGE,IAAO,wCAAP,cAAqD,8BAA6B;EAEpF,YAAY,gBAAgB,uBAAuB,yBAAuB;AACtE,UAAM,gBAAgB,uBAAuB,uBAAuB;AAEpE,SAAK,SAAS,IAAI,IAAG;AAGrB,SAAK,OAAO,SAAS,MAAM;AAC3B,SAAK,OAAO,SAAS,MAAM;AAE3B,SAAK,gBAAgB,IAAI,2CAA2C,gBAAgB,uBAAuB,uBAAuB;AAClI,SAAK,gBAAgB,IAAI,2CAA2C,gBAAgB,uBAAuB,uBAAuB;AAElI,SAAK,OAAO,SAAS,oBAAoB,KAAK,eAAe,KAAK,IAAI,CAAC;AACvE,SAAK,OAAO,SAAS,kBAAkB,KAAK,aAAa;AACzD,SAAK,OAAO,SAAS,kBAAkB,KAAK,aAAa;AAEzD,SAAK,OAAO,cAAc,QAAQ,QAAQ,OAAO;AAEjD,SAAK,OAAO,cAAc,QAAQ,oBAAoB,eAAe;AACrE,SAAK,OAAO,cAAc,QAAQ,kBAAkB,aAAa;AACjE,SAAK,OAAO,cAAc,QAAQ,kBAAkB,aAAa;AAEjE,SAAK,OAAO,cAAc,oBAAoB,QAAQ,QAAQ,KAAK,cAAc,KAAK,IAAI,CAAC;AAC3F,SAAK,OAAO,cAAc,kBAAkB,QAAQ,QAAQ,KAAK,cAAc,KAAK,IAAI,CAAC;AACzF,SAAK,OAAO,cAAc,kBAAkB,QAAQ,QAAQ,KAAK,cAAc,KAAK,IAAI,CAAC;AAEzF,SAAK,OAAO,cAAc,QAAQ,QAAQ,MAAM;AAChD,SAAK,OAAO,cAAc,oBAAoB,QAAQ,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC;AAC1F,SAAK,OAAO,cAAc,kBAAkB,QAAQ,MAAM;AAC1D,SAAK,OAAO,cAAc,kBAAkB,QAAQ,MAAM;AAE1D,SAAK,OAAO,KAAK,MAAM;AACvB,SAAK,OAAO,QAAQ,OAAO;EAC/B;EAEA,MAAM,KAAG;AACL,SAAK,eAAe;AAEpB,YAAQ,KAAK,kBAAkB,iBAAiB,gBAAgB;MAC5D,KAAK,qCAAqC;AACtC,aAAK,OAAO,QAAQ,eAAe;AACnC;MACJ,KAAK,qCAAqC;AACtC,aAAK,OAAO,QAAQ,aAAa;AACjC;MACJ,KAAK,qCAAqC;AACtC,aAAK,OAAO,QAAQ,aAAa;AACjC;MACJ;AACI,aAAK,OAAO,QAAQ,eAAe;IAC3C;EACJ;EAEA,MAAG;EACH;EAEA,OAAO,IAAI,KAAG;AACV,SAAK,OAAO,OAAO,EAAE;EACzB;EAEA,mBAAgB;AACZ,SAAK,OAAO,QAAQ,MAAM;AAC1B,SAAK,oBAAoB,KAAK,yBAAyB,oBAAoB,KAAK,yBAAyB,wBAAwB,KAAK,2BAA2B,wBAAwB;EAC7L;EAEA,eAAe,IAAI,KAAG;AAClB,SAAK,oBAAoB,KAAK,yBAAyB,oBAAoB,KAAK,yBAAyB,wBAAwB,KAAK,2BAA2B,wBAAwB;AACzL,SAAK,2BAA2B,0BAA0B;AAC1D,QAAI,QAAQ,MAAM;EACtB;EAEA,aAAa,KAAG;AACZ,SAAK,eAAe,GAAG,GAAG;EAC9B;EAEA,gBAAa;AACT,SAAK,kBAAkB,yBAAyB,UAAS;AAEzD,SAAK,aAAa,eAAe,MAAM;EAC3C;;;;AC3GE,IAAO,iCAAP,MAAqC;EAEvC,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,sBAAsB;AAE3B,SAAK,yBAAyB;AAE9B,SAAK,oBAAoB,IAAI,wCAAuC;AACpE,SAAK,qBAAqB,IAAI,kDAAiD;AAC/E,SAAK,mBAAmB,IAAI,uCAAsC;AAElE,SAAK,eAAe,WAAW;AAE/B,SAAK,8BAA8B;AACnC,SAAK,sDAAsD;AAC3D,SAAK,+BAA+B;AAIpC,SAAK,6CAA6C;AAGlD,SAAK,oDAAoD;AAEzD,SAAK,uBAAuB;AAE5B,SAAK,6BAA6B;AAClC,SAAK,wBAAwB;AAC7B,SAAK,oBAAoB;AAEzB,SAAK,WAAW;AAEhB,SAAK,iBAAiB;AACtB,SAAK,uBAAuB;AAC5B,SAAK,qBAAqB;AAC1B,SAAK,2BAA2B;EACpC;;AAGE,IAAO,wCAAP,MAA4C;EAE9C,cAAA;AACI,SAAK,qBAAqB,YAAW;AACrC,SAAK,yBAAyB;EAClC;;AAGE,IAAO,2BAAP,cAAwC,yBAAwB;EAElE,YAAY,gBAAgB,yBAAuB;AAC/C,UAAM,uBAAuB;AAE7B,SAAK,oBAAoB;AACzB,SAAK,2BAA2B,IAAI,sCAAqC;AAEzE,SAAK,qBAAqB;AAE1B,SAAK,oBAAoB,IAAI,uCAAuC,KAAK,mBAAmB,KAAK,0BAA0B,KAAK,0BAA0B;AAC1J,SAAK,mBAAmB,IAAI,sCAAsC,KAAK,mBAAmB,KAAK,0BAA0B,KAAK,0BAA0B;AAExJ,SAAK,SAAS,IAAI,IAAG;AAGrB,SAAK,OAAO,SAAS,MAAM;AAC3B,SAAK,OAAO,SAAS,QAAQ,KAAK,YAAY,KAAK,IAAI,CAAC;AACxD,SAAK,OAAO,SAAS,UAAU,KAAK,iBAAiB;AACrD,SAAK,OAAO,SAAS,YAAY,KAAK,gBAAgB;AAEtD,SAAK,OAAO,cAAc,QAAQ,QAAQ,OAAO;AAEjD,SAAK,OAAO,cAAc,QAAQ,UAAU,QAAQ;AACpD,SAAK,OAAO,cAAc,UAAU,YAAY,UAAU;AAC1D,SAAK,OAAO,cAAc,UAAU,QAAQ,QAAQ;AACpD,SAAK,OAAO,cAAc,YAAY,QAAQ,MAAM;AAEpD,SAAK,OAAO,cAAc,QAAQ,QAAQ,MAAM;AAChD,SAAK,OAAO,cAAc,UAAU,QAAQ,MAAM;AAClD,SAAK,OAAO,cAAc,YAAY,QAAQ,QAAQ,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAEvF,SAAK,OAAO,KAAK,MAAM;AACvB,SAAK,OAAO,QAAQ,OAAO;AAE3B,SAAK,eAAe;EACxB;EAEA,QAAK;EACL;EAEA,OAAI;AACA,SAAK,OAAO,QAAQ,MAAM;EAC9B;EAEA,UAAO;AACH,WAAO,KAAK,OAAO,UAAU,MAAM;EACvC;EAEA,gBAAa;AACT,WAAO,KAAK,OAAO,UAAU,UAAU;EAC3C;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,2BAAwB;AACpB,WAAO,KAAK;EAChB;EAEA,OAAO,IAAE;AACL,SAAK,2BAA2B,0BAA0B;AAE1D,SAAK,OAAO,OAAO,EAAE;AAErB,QAAI,CAAC,KAAK,2BAA2B,oBAAoB,KAAK,kBAAkB,8BAA8B,KAAK,kBAAkB,yBAAyB,IAAI;AAC9J,WAAK,cAAc,EAAE;IACzB;AAEA,QAAI,KAAK,2BAA2B,yBAAyB,cAAc;AACvE,WAAK,2BAA2B,aAAa;IACjD;EACJ;EAEA,YAAY,IAAE;AACV,QAAI,KAAK,gBAAe,GAAI;AACxB,WAAK,OAAO,QAAQ,QAAQ;IAChC;EACJ;EAEA,kBAAe;AACX,QAAI,iBAAiB;AAErB,QAAI,CAAC,QAAQ,gBAAgB,KAAK,kBAAkB,QAAQ,GAAG;AAC3D,uBAAiB,QAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,mBAAmB,cAAc,MAAM,KACtG,QAAQ,SAAS,KAAK,kBAAkB,QAAQ,EAAE,wBAAuB;IACjF,OAAO;AACH,UAAI,OAAO,QAAQ,YAAY,KAAK,kBAAkB,QAAQ,EAAE,KAAK,kBAAkB,YAAY,EAAE,YAAY,cAAc,UAAU,EAAE,QAAO;AAElJ,UAAI,KAAK,YAAW,KAAM,KAAK,kBAAkB,sBAAsB;AACnE,aAAK,qBAAqB;MAC9B;AAEA,UAAI,KAAK,sBAAsB,KAAK,CAAC,KAAK,MAAM;AAC5C,aAAK,qBAAqB;AAC1B,yBAAiB;MACrB;IACJ;AAEA,WAAO;EACX;EAEA,oBAAiB;AACb,SAAK,iBAAiB,iBAAgB;EAC1C;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,SAAK,kBAAkB,QAAO;EAElC;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAOJ,yBAAyB,UAAU,gBAAgB,WAAA;AAC/C,MAAI,WAAW,YAAW;AAC1B,MAAI,kBAAkB,YAAW;AACjC,MAAI,oBAAoB,aAAY;AACpC,SAAO,SAAS,cAAc,IAAE;AAG5B,eAAW,KAAK,kBAAkB,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAEnF,oBAAgB,UAAS;AACzB,QAAI,CAAC,KAAK,2BAA2B,cAAc,CAAC,KAAK,2BAA2B,iBAAiB;AACjG,WAAK,2BAA2B,kBAAkB,KAAK,kBAAkB,wBAAwB;AAEjG,UAAI,KAAK,IAAI,KAAK,2BAA2B,cAAc,IAAI,KAAK,IAAI,KAAK,kBAAkB,iBAAiB,GAAG;AAC/G,aAAK,2BAA2B,iBAAiB,KAAK,QAAQ,KAAK,kBAAkB,qBAAqB,IAAI,KAAK,IAAI,KAAK,kBAAkB,iBAAiB;MACnK;AAEA,wBAAkB,SAAS,WAAW,KAAK,2BAA2B,iBAAiB,IAAI,eAAe;IAC9G,OAAO;AACH,WAAK,2BAA2B,iBAAiB;IACrD;AAEA,wBAAoB,KAAK,kBAAkB,oBAAoB,qBAAqB,iBAAiB;AACrG,yBAAqB,kBAAkB,KAAK,kBAAkB,QAAQ,EAAE,KAAK,iBAAiB,mBAAmB,KAAK,kBAAkB,wBAAwB,KAAK,2BAA2B,wBAAwB;AACxN,QAAI,CAAC,KAAK,2BAA2B,yBAAyB,4BAA4B;AACtF,WAAK,kBAAkB,oBAAoB,qBAAqB,KAAK,2BAA2B,yBAAyB,aAAa;IAC1I;AAEA,QAAI,KAAK,2BAA2B,iBAAiB,KAAK,KAAK,2BAA2B,yBAAyB,iBAC/G,KAAK,2BAA2B,iBAAiB,KAAK,KAAK,2BAA2B,yBAAyB,cAAc;AAC7H,WAAK,2BAA2B,iBAAiB;IACrD;EACJ;AACJ,EAAC;;;AVhMM,IAAI,yCAAyC;EAChD,MAAM;EACN,MAAM;EACN,eAAe;;AAGZ,IAAI,uBAAuB;EAC9B,QAAQ;EACR,UAAU;;AAGR,IAAO,yBAAP,MAA6B;EAE/B,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,0BAA0B,qBAAqB;AACpD,SAAK,yBAAyB;AAC9B,SAAK,wCAAwC;AAE7C,SAAK,kBAAkB;AAEvB,SAAK,aAAa;AAClB,SAAK,qBAAqB;AAE1B,SAAK,wBAAwB;AAC7B,SAAK,oBAAoB;AAEzB,SAAK,oBAAoB;AAEzB,SAAK,sCAAsC;AAE3C,SAAK,eAAe;AACpB,SAAK,mBAAmB;AACxB,SAAK,kBAAkB;AACvB,SAAK,yBAAyB;AAE9B,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,0BAA0B;AAC/B,SAAK,4BAA4B;AACjC,SAAK,yBAAyB;AAC9B,SAAK,2BAA2B;AAChC,SAAK,sBAAsB;AAC3B,SAAK,wBAAwB;AAC7B,SAAK,uBAAuB;AAE5B,SAAK,aAAa,WAAW;AAE7B,SAAK,yCAAyC;AAC9C,SAAK,6BAA6B,uCAAuC;AACzE,SAAK,+BAA+B;AAEpC,SAAK,wBAAwB;AAE7B,SAAK,iBAAiB,qCAAqC;AAC3D,SAAK,wBAAwB;AAC7B,SAAK,gCAAgC;AACrC,SAAK,gCAAgC;AACrC,SAAK,0BAA0B;AAC/B,SAAK,4BAA4B;AACjC,SAAK,2BAA2B;AAChC,SAAK,yCAAyC;AAC9C,SAAK,wCAAwC;AAE7C,SAAK,qBAAqB;AAY1B,SAAK,iCAAiC;AAItC,SAAK,iCAAiC;AACtC,SAAK,+BAA+B;AAGpC,SAAK,yCAAyC;AAC9C,SAAK,oCAAoC;AAEzC,SAAK,uCAAuC;AAC5C,SAAK,8CAA8C;AAEnD,SAAK,kDAAkD;AAEvD,SAAK,qBAAqB;AAC1B,SAAK,0BAA0B;AAC/B,SAAK,2BAA2B;AAChC,SAAK,mCAAmC;AACxC,SAAK,yBAAyB;AAC9B,SAAK,sCAAsC;AAC3C,SAAK,wCAAwC;AAC7C,SAAK,oCAAoC;AAEzC,SAAK,4BAA4B;AACjC,SAAK,+BAA+B;AACpC,SAAK,wCAAwC;AAC7C,SAAK,4BAA4B;AACjC,SAAK,+BAA+B;AAEpC,SAAK,2BAA2B;AAChC,SAAK,yBAAyB;AAE9B,SAAK,2BAA2B;AAEhC,SAAK,2BAA2B,IAAI,kBAAiB;AAErD,SAAK,WAAW;EACpB;;AAME,IAAO,mBAAP,MAAuB;EAEzB,YAAY,QAAM;AACd,SAAK,YAAY;AAEjB,SAAK,kCAAkC,IAAI,qBAAoB;AAC/D,SAAK,mCAAkC;AACvC,SAAK,kCAAkC;AACvC,SAAK,mCAAkC;AAEvC,SAAK,4BAA4B,IAAI,uBAAsB;AAC3D,SAAK,2BAA2B,IAAI,sCAAqC;AACzE,SAAK,yBAAyB,aAAa,KAAK,UAAU;AAC1D,SAAK,yBAAyB,2BAA2B,KAAK;AAE9D;AACI,UAAIC,UAAS,IAAI,wBAAwB,KAAK,UAAU,QAAQ;AAEhE,MAAAA,QAAO,+BAA+B;AAEtC,MAAAA,QAAO,yBAAyB;AAChC,MAAAA,QAAO,0BAA0B;AAEjC,MAAAA,QAAO,6BAA6B;AACpC,MAAAA,QAAO,4BAA4B,KAAK,UAAU;AAClD,MAAAA,QAAO,mCAAmC,KAAK,UAAU;AACzD,MAAAA,QAAO,+BAA+B;AACtC,MAAAA,QAAO,sCAAsC;AAC7C,MAAAA,QAAO,gCAAgC;AAEvC,MAAAA,QAAO,wBAAwB,wBAAwB;AAEvD,MAAAA,QAAO,uBAAuB,KAAK,UAAU;AAC7C,MAAAA,QAAO,gCAAgC,KAAK,UAAU;AACtD,MAAAA,QAAO,wBAAwB,KAAK,UAAU;AAE9C,MAAAA,QAAO,uBAAuB;AAE9B,MAAAA,QAAO,iBAAiB;AAExB,WAAK,uBAAuB,IAAI,kBAAkBA,OAAM;IAC5D;AAEA;AACI,UAAIA,UAAS,IAAI,6BAA6B,KAAK,UAAU,QAAQ;AAErE,MAAAA,QAAO,sBAAsB,KAAK;AAElC,MAAAA,QAAO,iCAAiC,KAAK;AAC7C,MAAAA,QAAO,iCAAiC;AACxC,MAAAA,QAAO,iDAAiD;AACxD,MAAAA,QAAO,yCAAyC;AAEhD,MAAAA,QAAO,+BAA+B,KAAKA,QAAO,+BAA+B,2BAA2B;AAC5G,MAAAA,QAAO,+BAA+B,IAAIA,QAAO,+BAA+B,yBAAyB;AACzG,MAAAA,QAAO,+BAA+B,QAAQA,QAAO,+BAA+B,2BAA2B;AAC/G,UAAI,uBAAuB,CAACC,QAAO,WAAWA,OAAM,UAAU,MAAM;AACpE,eAAS,kBAAkBD,QAAO,+BAA+B,2BAA2B;AACxF,QAAAA,QAAO,+BAA+B,cAAc,gBAAgB,oBAAoB;MAC5F;AAEA,MAAAA,QAAO,2BAA2B,KAAK;AAEvC,MAAAA,QAAO,eAAe;AAEtB,MAAAA,QAAO,+BAA+B,CAAC,KAAK,UAAU;AACtD,MAAAA,QAAO,mCAAmC;AAE1C,UAAI,CAAC,KAAK,UAAU,qCAAqC,CAAC,KAAK,UAAU,wCAAwC;AAC7G,QAAAA,QAAO,qBAAqB,IAAI,+BAA+B,gBAAgB,KAAK;AACpF,QAAAA,QAAO,qBAAqB,IAAI,+BAA+B,gBAAgB,KAAK;AACpF,QAAAA,QAAO,qBAAqB,IAAI,+BAA+B,KAAK,KAAK;AACzE,QAAAA,QAAO,qBAAqB,IAAI,+BAA+B,UAAU,KAAK;AAE9E,QAAAA,QAAO,mCAAmC,CAAC,KAAK,UAAU;MAC9D;AAEA,MAAAA,QAAO,qCAAqC;AAC5C,MAAAA,QAAO,8BAA8B;AAErC,MAAAA,QAAO,sCAAsC;AAC7C,MAAAA,QAAO,qDAAqD;AAC5D,MAAAA,QAAO,iCAAiC;AACxC,MAAAA,QAAO,oDAAoD;AAC3D,MAAAA,QAAO,kCAAkC;AACzC,MAAAA,QAAO,8BAA8B;AACrC,MAAAA,QAAO,gCAAgC,KAAK,gCAAgC,eAAe;AAC3F,MAAAA,QAAO,gCAAgC,KAAK,gCAAgC,eAAe;AAC3F,MAAAA,QAAO,+BAA+B;AACtC,MAAAA,QAAO,yCAAyC;AAEhD,MAAAA,QAAO,4BAA4B;AACnC,MAAAA,QAAO,wBAAwB;AAE/B,MAAAA,QAAO,wCAAwC;AAC/C,MAAAA,QAAO,wCAAwC;AAE/C,MAAAA,QAAO,+BAA+B;AACtC,MAAAA,QAAO,8BAA8B;AAErC,MAAAA,QAAO,iCAAiC;AACxC,MAAAA,QAAO,iCAAiC;AACxC,MAAAA,QAAO,+BAA+B;AAEtC,MAAAA,QAAO,8BAA8B;AACrC,MAAAA,QAAO,8BAA8B;AACrC,MAAAA,QAAO,4BAA4B;AAEnC,MAAAA,QAAO,gCAAgC;AACvC,MAAAA,QAAO,gCAAgC;AACvC,MAAAA,QAAO,8BAA8B;AAErC,MAAAA,QAAO,sCAAsC,KAAK,UAAU;AAE5D,MAAAA,QAAO,uDAAuD,KAAK,UAAU;AAC7E,MAAAA,QAAO,+BAA+B,KAAK,UAAU;AAErD,MAAAA,QAAO,6BAA6B;AACpC,MAAAA,QAAO,6BAA6B;AACpC,MAAAA,QAAO,2BAA2B;AAElC,MAAAA,QAAO,iBAAiB;AAExB,WAAK,4BAA4B,IAAI,uBAAuBA,OAAM;IACtE;AAEA;AACI,UAAIA,UAAS,IAAI,6BAA6B,KAAK,UAAU,QAAQ;AAErE,MAAAA,QAAO,sBAAsB,KAAK;AAClC,MAAAA,QAAO,2BAA2B,KAAK;AAEvC,MAAAA,QAAO,qBAAqB,KAAK,UAAU;AAC3C,MAAAA,QAAO,eAAe,KAAK,UAAU;AACrC,MAAAA,QAAO,mBAAmB,KAAK,UAAU;AACzC,MAAAA,QAAO,kBAAkB,KAAK,UAAU;AAExC,UAAI,KAAK,UAAU,yBAAyB,KAAK,YAAY;AACzD,QAAAA,QAAO,sBAAsB;AAC7B,QAAAA,QAAO,2BAA2B,KAAK,UAAU;MACrD,OAAO;AACH,QAAAA,QAAO,sBAAsB;MACjC;AAEA,MAAAA,QAAO,uCAAuC;AAC9C,MAAAA,QAAO,8BAA8B;AACrC,MAAAA,QAAO,2BAA2B;AAElC,MAAAA,QAAO,uBAAuB;AAC9B,MAAAA,QAAO,qBAAqB;AAE5B,WAAK,4BAA4B,IAAI,uBAAuBA,OAAM;AAElE,MAAAA,QAAO,eAAe,WAAW,sBAAsB,KAAK,UAAU,UAAU;IACpF;AAEA;AACI;AACI,YAAIA,UAAS,IAAI,6BAA6B,KAAK,UAAU,QAAQ;AAErE,QAAAA,QAAO,sBAAsB,KAAK;AAClC,QAAAA,QAAO,2BAA2B,KAAK;AAEvC,QAAAA,QAAO,yBAAyB,KAAK;AAErC,QAAAA,QAAO,eAAe,KAAK,UAAU;AAErC,QAAAA,QAAO,aAAa,KAAK,UAAU;AACnC,QAAAA,QAAO,sCAAsC,KAAK,UAAU;AAE5D,QAAAA,QAAO,uCAAuC;AAE9C,QAAAA,QAAO,eAAe,KAAK,UAAU;AACrC,QAAAA,QAAO,0BAA0B,KAAK,UAAU;AAChD,QAAAA,QAAO,4BAA4B,KAAK,UAAU;AAClD,QAAAA,QAAO,yBAAyB,KAAK,UAAU;AAC/C,QAAAA,QAAO,2BAA2B,KAAK,UAAU;AACjD,QAAAA,QAAO,sBAAsB,KAAK,UAAU;AAC5C,QAAAA,QAAO,wBAAwB,KAAK,UAAU;AAC9C,QAAAA,QAAO,uBAAuB,KAAK,UAAU;AAE7C,QAAAA,QAAO,wBAAwB,KAAK,UAAU;AAC9C,QAAAA,QAAO,oBAAoB,KAAK,UAAU;AAE1C,QAAAA,QAAO,yCAAyC,KAAK,UAAU;AAC/D,QAAAA,QAAO,6BAA6B,KAAK,UAAU;AACnD,QAAAA,QAAO,+BAA+B,KAAK,UAAU;AAErD,QAAAA,QAAO,+BAA+B,KAAK,UAAU;AACrD,QAAAA,QAAO,wCAAwC,KAAK,UAAU;AAC9D,QAAAA,QAAO,4BAA4B,KAAK,UAAU;AAClD,QAAAA,QAAO,+BAA+B,KAAK,UAAU;AAErD,aAAK,4BAA4B,IAAI,uBAAuBA,SAAQ,KAAK,wBAAwB;MACrG;AAEA;AACI,YAAIA,UAAS,IAAI,+BAA+B,KAAK,UAAU,QAAQ;AAEvE,QAAAA,QAAO,sBAAsB,KAAK;AAClC,QAAAA,QAAO,2BAA2B,KAAK;AAEvC,QAAAA,QAAO,yBAAyB,KAAK;AAErC,QAAAA,QAAO,eAAe,KAAK,UAAU;AAErC,QAAAA,QAAO,kBAAkB,gBAAgB,KAAK,UAAU;AACxD,QAAAA,QAAO,kBAAkB,wBAAwB,KAAK,UAAU;AAChE,QAAAA,QAAO,kBAAkB,8BAA8B,KAAK,gCAAgC;AAC5F,QAAAA,QAAO,kBAAkB,wBAAwB,KAAK,UAAU;AAChE,QAAAA,QAAO,kBAAkB,mBAAmB;AAE5C,QAAAA,QAAO,kBAAkB,0BAA0B,KAAK,KAAK,UAAU,wBAAwB;AAC/F,QAAAA,QAAO,kBAAkB,0BAA0B,KAAK,KAAK,UAAU,wBAAwB;AAE/F,QAAAA,QAAO,kBAAkB,sCAAsC;AAC/D,QAAAA,QAAO,kBAAkB,sCAAsC;AAC/D,QAAAA,QAAO,kBAAkB,4CAA4C;AAErE,QAAAA,QAAO,kBAAkB,wCAAwC,KAAK,UAAU;AAEhF,QAAAA,QAAO,kBAAkB,4BAA4B,KAAKA,QAAO,kBAAkB,yBAAyB;AAE5G,QAAAA,QAAO,iBAAiB,iBAAiB,KAAK,UAAU;AAExD,QAAAA,QAAO,mBAAmB,2BAA2B,KAAK,UAAU;AACpE,QAAAA,QAAO,mBAAmB,0BAA0B,KAAK,UAAU;AACnE,QAAAA,QAAO,mBAAmB,4BAA4B,KAAK,UAAU;AACrE,QAAAA,QAAO,mBAAmB,yCAAyC,KAAK,UAAU;AAElF,QAAAA,QAAO,8BAA8B;AACrC,QAAAA,QAAO,6CAA6C;AACpD,QAAAA,QAAO,oDAAoD;AAE3D,QAAAA,QAAO,wBAAwB,KAAK,UAAU;AAC9C,QAAAA,QAAO,oBAAoB,KAAK,UAAU;AAE1C,QAAAA,QAAO,iBAAiB;AACxB,QAAAA,QAAO,uBAAuB;AAC9B,QAAAA,QAAO,qBAAqB;AAC5B,QAAAA,QAAO,2BAA2B;AAElC,aAAK,8BAA8B,IAAI,yBAAyBA,SAAQ,KAAK,wBAAwB;MACzG;AAEA;AACI,YAAIA,UAAS,IAAI,2BAA2B,KAAK,UAAU,QAAQ;AAEnE,QAAAA,QAAO,2BAA2B,KAAK;AACvC,QAAAA,QAAO,6BAA6B,KAAK;AAEzC,QAAAA,QAAO,YAAY,KAAK,UAAU;AAElC,QAAAA,QAAO,kBAAkB;AACzB,QAAAA,QAAO,oBAAoB;AAC3B,QAAAA,QAAO,kBAAkB;AAEzB,QAAAA,QAAO,0BAA0B;AACjC,QAAAA,QAAO,yBAAyB;AAEhC,QAAAA,QAAO,8BAA8B,eAAe;AACpD,QAAAA,QAAO,+CAA+C,eAAe;AAErE,QAAAA,QAAO,4CAA4C;AACnD,QAAAA,QAAO,4CAA4C;AACnD,QAAAA,QAAO,uCAAuC;AAC9C,QAAAA,QAAO,kCAAkC;AAEzC,QAAAA,QAAO,kDAAkD;AACzD,QAAAA,QAAO,kDAAkD;AACzD,QAAAA,QAAO,6CAA6C;AACpD,QAAAA,QAAO,wCAAwC;AAE/C,aAAK,0BAA0B,IAAI,qBAAqBA,OAAM;MAClE;IAEJ;AAEA,SAAK,4BAA2B;AAEhC,SAAK,oCAAoC;AAEzC,SAAK,UAAU;AAEf,SAAK,YAAY;AACjB,SAAK,aAAa;AAElB,SAAK,6BAA6B,KAAK,UAAU;AAEjD,SAAK,sBAAsB,IAAIE,UAAO;AACtC,SAAK,uBAAuB,IAAIA,UAAO;AAEvC,SAAK,eAAe;EACxB;EAEA,QAAK;AACD,SAAK,aAAY;AAEjB,SAAK,qBAAqB,MAAK;AAC/B,SAAK,0BAA0B,MAAK;AAEpC,SAAK,wBAAwB,MAAK;AAElC,SAAK,0BAA0B,MAAK;AAEpC,QAAI,KAAK,UAAU,2BAA2B,qBAAqB,QAAQ;AACvE,WAAK,yBAAyB,QAAQ,aAAa;IACvD,OAAO;AACH,WAAK,yBAAyB,QAAQ,eAAe;IACzD;AAEA,SAAK,aAAa;AAElB,QAAI,gBAAgB,KAAK;AACzB,SAAK,YAAY,CAAC,KAAK;AACvB,SAAK,UAAU,aAAa;EAChC;;;EAIA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,UAAU,QAAM;AACZ,QAAI,KAAK,aAAa,QAAQ;AAC1B,WAAK,YAAY;AAEjB,UAAI,KAAK,YAAY;AACjB,YAAI,KAAK,WAAW;AAChB,eAAK,wBAAwB,MAAK;AAClC,cAAI,CAAC,KAAK,SAAS;AACf,iBAAK,yBAAyB,QAAQ,QAAQ;UAClD;QACJ,OAAO;AACH,eAAK,yBAAyB,QAAQ,MAAM;AAC5C,eAAK,wBAAwB,KAAI;QACrC;MACJ;AAEA,WAAK,qBAAqB,UAAU,KAAK,SAAS;AAClD,WAAK,0BAA0B,UAAU,KAAK,SAAS;IAC3D;EACJ;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,UAAO;AACH,QAAI,UAAU;AAEd,QAAI,KAAK,yBAAyB,UAAU,QAAQ,KAAK,KAAK,0BAA0B,QAAO,GAAI;AAC/F,gBAAU;IACd,WAAW,KAAK,yBAAyB,UAAU,UAAU,KAAK,KAAK,4BAA4B,QAAO,GAAI;AAC1G,gBAAU;IACd;AAEA,WAAO;EACX;EAEA,OAAO,IAAE;AACL,SAAK,oBAAoB,OAAO,IAAI,IAAI;AAExC,QAAI,8BAA8B;AAClC,QAAI,wBAAwB;AAC5B,QAAI,KAAK,UAAU,4BAA4B,QAAQ,eAAe,KAAK,UAAU,QAAQ,GAAG;AAC5F,oCAA8B,qBAAqB,yBAAwB;AAC3E,8BAAwB,KAAK,0BAAyB,EAAG,UAAS,EAAG;AACrE,2BAAqB,0BAA0B,IAAI;AACnD,WAAK,0BAAyB,EAAG,UAAS,EAAG,oBAAoB;IACrE;AAEA,SAAK,qBAAqB,OAAO,EAAE;AAEnC,QAAI,KAAK,UAAU,sBAAsB,KAAK,6BAA6B,GAAG;AAC1E,WAAK;AAEL,WAAK,0BAA0B,UAAU,MAAM,MAAM,QAAW,QAAW,QAAW,IAAI;AAC1F,WAAK,0BAA0B,OAAO,EAAE;AAExC,UAAI,KAAK,qBAAqB,SAAQ,GAAI;AACtC,aAAK,uBAAsB;MAC/B;IACJ,OAAO;AACH,WAAK,0BAA0B,OAAO,EAAE;AAExC,UAAI,CAAC,KAAK,0BAA0B,kBAAiB,KAAM,CAAC,QAAQ,eAAe,KAAK,UAAU,QAAQ,GAAG;AACzG,YAAI,CAAC,KAAK,UAAU,0BAA0B,QAAQ,gBAAe,GAAI;AACrE,cAAI,KAAK,UAAU,yCACf,KAAK,oBAAmB,EAAG,cAAc,gBAAgB,UAAU,EAAE,WAAW,CAAC,GAAG;AACpF,gBAAI,KAAK,yBAAyB,UAAU,QAAQ,KAAK,KAAK,0BAA0B,QAAO,GAAI;AAC/F,mBAAK,yBAAyB,QAAQ,MAAM;YAChD,WAAW,KAAK,yBAAyB,UAAU,UAAU,KAAK,KAAK,4BAA4B,QAAO,GAAI;AAC1G,mBAAK,yBAAyB,QAAQ,MAAM;YAChD;UACJ;QACJ;AAEA,YAAI,KAAK,UAAU,0BAA0B,CAAC,QAAQ,gBAAe,GAAI;AACrE,cAAI,KAAK,yBAAyB,UAAU,UAAU,KAAK,KAAK,4BAA4B,QAAO,GAAI;AACnG,iBAAK,oCAAoC;AACzC,iBAAK,yBAAyB,QAAQ,MAAM;UAChD;QACJ,WAAW,KAAK,qCAAqC,QAAQ,gBAAe,GAAI;AAC5E,cAAI,KAAK,yBAAyB,UAAU,QAAQ,KAAK,KAAK,0BAA0B,QAAO,GAAI;AAC/F,iBAAK,oCAAoC;AACzC,iBAAK,yBAAyB,QAAQ,MAAM;UAChD;QACJ;MACJ;AAEA,UAAI,KAAK,UAAU,6BAA6B,QAAQ,eAAe,KAAK,UAAU,QAAQ,GAAG;AAC7F,YAAI,aAAa,mBAAmB,CAAC,KAAK,oBAAmB,GAAI,gBAAgB,QAAQ,gBAAgB,UAAU,CAAC,GAAG;AACnH,cAAI,KAAK,yBAAyB,UAAU,UAAU,KAAK,KAAK,4BAA4B,QAAO,GAAI;AACnG,iBAAK,yBAAyB,QAAQ,MAAM;UAChD;AAEA,cAAI,KAAK,yBAAyB,UAAU,QAAQ,GAAG;AACnD,iBAAK,0BAA0B,mBAAmB,CAAC,KAAK,0BAA0B,kBAAiB,CAAE;AACrG,iBAAK,oCAAoC;UAC7C;QACJ;MACJ;AAEA,UAAI,KAAK,qBAAqB,SAAQ,GAAI;AACtC,aAAK,uBAAsB;AAE3B,YAAI,CAAC,KAAK,SAAS;AACf,eAAK,0BAA0B,OAAO,EAAE;AACxC,eAAK,yBAAyB,OAAO,EAAE;QAC3C;MACJ;IACJ;AAEA,QAAI,KAAK,UAAU,iDAAiD;AAChE,WAAK,0BAA0B,kCAAiC;IACpE;AAEA,SAAK,wBAAwB,OAAO,EAAE;AAEtC,QAAI,KAAK,UAAU,4BAA4B,QAAQ,eAAe,KAAK,UAAU,QAAQ,GAAG;AAC5F,2BAAqB,0BAA0B,2BAA2B;AAC1E,WAAK,0BAAyB,EAAG,UAAS,EAAG,oBAAoB;IACrE;AAEA,SAAK,qBAAqB,OAAO,IAAI,IAAI;EAC7C;EAEA,QAAQ,MAAI;AACR,SAAK,UAAU;AAEf,QAAI,MAAM;AACN,WAAK,yBAAyB,QAAQ,MAAM;IAChD,OAAO;AACH,WAAK,yBAAyB,QAAQ,QAAQ;IAClD;EACJ;EAEA,4BAAyB;AACrB,WAAO,KAAK;EAChB;EAEA,8BAA2B;AACvB,WAAO,KAAK;EAChB;EAEA,4BAAyB;AACrB,WAAO,KAAK;EAChB;EAEA,4BAAyB;AACrB,WAAO,KAAK;EAChB;EAEA,uBAAoB;AAChB,WAAO,KAAK;EAChB;EAEA,0BAAuB;AACnB,WAAO,KAAK;EAChB;EAEA,0BAA0B,IAAI,UAAQ;AAClC,SAAK,oBAAoB,IAAI,UAAU,EAAE,GAAM,CAAE;EACrD;EAEA,4BAA4B,IAAE;AAC1B,SAAK,oBAAoB,OAAO,EAAE;EACtC;EAEA,2BAA2B,IAAI,UAAQ;AACnC,SAAK,qBAAqB,IAAI,UAAU,EAAE,GAAM,CAAE;EACtD;EAEA,6BAA6B,IAAE;AAC3B,SAAK,qBAAqB,OAAO,EAAE;EACvC;EAEA,yBAAsB;AAClB,SAAK,gCAAgC,WAAW,KAAK,qBAAqB,cAAa;AACvF,QAAI,KAAK,gCAAgC,YAAY,MAAU;AAC3D,WAAK,gCAAgC,WAAW;IACpD;AACA,SAAK,gCAAgC,WAAW,KAAK,gCAAgC;EACzF;EAEA,qCAAkC;AAC9B,QAAI,mBAAmB,IAAI,+CAA8C;AAEzE,qBAAiB,WAAW,KAAK,UAAU;AAC3C,qBAAiB,WAAW,KAAK,UAAU;AAE3C,qBAAiB,kBAAkB,KAAK,UAAU;AAElD,qBAAiB,aAAa;AAE9B,qBAAiB,kBAAkB,KAAK,UAAU;AAElD,qBAAiB,aAAa,KAAK,UAAU;AAE7C,qBAAiB,WAAW,KAAK,UAAU;AAE3C,qBAAiB,yBAAyB,KAAK,UAAU;AAEzD,qBAAiB,sBAAsB;AACvC,qBAAiB,2BAA2B,KAAK,UAAU;AAC3D,qBAAiB,uBAAuB,KAAK,UAAU;AACvD,qBAAiB,8BAA8B,KAAK,UAAU;AAC9D,qBAAiB,gCAAgC,KAAK,UAAU;AAChE,qBAAiB,2BAA2B,KAAK,UAAU;AAE3D,qBAAiB,iCAAiC,KAAK,KAAK,UAAU,wBAAwB;AAC9F,QAAI,kBAAkB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,iBAAiBC,eAAc;AAChH,aAAS,kBAAkB,iBAAiB;AACxC,uBAAiB,iCAAiC,cAAc,eAAe,QAAQ,CAACF,QAAO,WAAWA,OAAM,UAAU,MAAM,CAAC;IACrI;AACA,qBAAiB,+BAA+B,KAAK,iBAAiB,gCAAgC;AACtG,qBAAiB,+BAA+B,QAAQ,iBAAiB,gCAAgC;AAEzG,qBAAiB,gCAAgC,KAAK,UAAU,4BAA4B,QAAQ,eAAe,KAAK,UAAU,QAAQ;AAC1I,qBAAiB,8BAA8B,KAAK,UAAU,0BAA0B,QAAQ,eAAe,KAAK,UAAU,QAAQ;AAEtI,QAAI,gBAAgB,4BAA4B,iBAAiB,gBAAgB;AAEjF,SAAK,kCAAkC,qBAAqB,oDAAoD,eAAe,KAAK,iCAAiC,KAAK,UAAU,QAAQ;EAChM;EAEA,qCAAkC;AAC9B,SAAK,kCAAkC,oBAAoB,4CAA4C,KAAK,+BAA+B;AAG3I,SAAK,gCAAgC,wBAAwB;AAC7D,SAAK,gCAAgC,yCAAyC;AAC9E,SAAK,gCAAgC,2BAA2B;EAqCpE;EAEA,eAAY;AAGR,QAAI,YAAY,YAAY,GAAG,GAAG,CAAC;AACnC,QAAI,qBAAqB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,SAAQ,EAAG,WAAW,SAAS;AACnH,QAAI,qBAAqB,GAAG;AACxB,UAAI,UAAU,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,cAAa;AACtF,UAAI,cAAc,QAAQ,WAAU;AACpC,kBAAY,CAAC,IAAI;AAEjB,UAAI,iBAAiB,YAAY,GAAG,GAAG,CAAC;AACxC,UAAI,0BAA0B,eAAe,iBAAiB,aAAa,SAAS;AAEpF,cAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,iBAAgB;AAC3E,cAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,SAAS,cAAc,yBAAyB,SAAS;IAC/G;EACJ;EAEA,8BAA2B;AACvB,SAAK,2BAA2B,IAAI,IAAG;AAGvC,SAAK,yBAAyB,SAAS,MAAM;AAC7C,SAAK,yBAAyB,SAAS,UAAU,CAAC,OAAO,KAAK,0BAA0B,OAAO,EAAE,CAAC;AAClG,SAAK,yBAAyB,SAAS,YAAY,CAAC,OAAO,KAAK,4BAA4B,OAAO,EAAE,CAAC;AACtG,SAAK,yBAAyB,SAAS,YAAY;AACnD,SAAK,yBAAyB,SAAS,cAAc;AAErD,SAAK,yBAAyB,cAAc,QAAQ,UAAU,eAAe,WAAA;AACzE,WAAK,0BAA0B,MAAK;IACxC,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,cAAc,QAAQ,YAAY,iBAAiB,WAAA;AAC7E,WAAK,0BAA0B,MAAK;IACxC,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,cAAc,UAAU,YAAY,QAAQ,WAAA;AACtE,WAAK,0BAA0B,KAAI;AACnC,WAAK,4BAA4B,MAAK;IAC1C,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,cAAc,YAAY,UAAU,QAAQ,WAAA;AACtE,WAAK,4BAA4B,KAAI;AACrC,WAAK,0BAA0B,MAAK;IACxC,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,cAAc,UAAU,cAAc,QAAQ,WAAA;AACxE,WAAK,0BAA0B,KAAI;IACvC,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,cAAc,YAAY,gBAAgB,QAAQ,WAAA;AAC5E,WAAK,4BAA4B,KAAI;IACzC,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,cAAc,cAAc,UAAU,UAAU,WAAA;AAC1E,WAAK,0BAA0B,MAAK;IACxC,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,cAAc,gBAAgB,YAAY,UAAU,WAAA;AAC9E,WAAK,4BAA4B,MAAK;IAC1C,EAAE,KAAK,IAAI,CAAC;AAEZ,SAAK,yBAAyB,KAAK,MAAM;EAC7C;EAEA,sBAAmB;AACf,WAAO,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,UAAU;EACjF;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,SAAK,qBAAqB,QAAO;AACjC,SAAK,0BAA0B,QAAO;AACtC,SAAK,0BAA0B,QAAO;AACtC,SAAK,wBAAwB,QAAO;AACpC,SAAK,4BAA4B,QAAO;EAC5C;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AWvyBE,IAAO,+BAAP,MAAmC;EAErC,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,sBAAsB;AAC3B,SAAK,2BAA2B;AAEhC,SAAK,yBAAyB;AAE9B,SAAK,aAAa;AAClB,SAAK,sCAAsC;AAE3C,SAAK,uCAAuC;AAE5C,SAAK,eAAe;AACpB,SAAK,0BAA0B;AAC/B,SAAK,4BAA4B;AACjC,SAAK,yBAAyB;AAC9B,SAAK,2BAA2B;AAChC,SAAK,sBAAsB;AAC3B,SAAK,wBAAwB;AAC7B,SAAK,uBAAuB;AAE5B,SAAK,wBAAwB;AAC7B,SAAK,oBAAoB;AAEzB,SAAK,6BAA6B,uCAAuC;AACzE,SAAK,+BAA+B;AAEpC,SAAK,eAAe,WAAW;AAE/B,SAAK,+BAA+B;AACpC,SAAK,wCAAwC;AAC7C,SAAK,4BAA4B;AACjC,SAAK,+BAA+B;AAEpC,SAAK,WAAW;EACpB;;AAGE,IAAO,yBAAP,cAAsC,yBAAwB;EAEhE,YAAY,QAAQ,yBAAuB;AACvC,UAAM,uBAAuB;AAE7B,SAAK,YAAY;AAEjB,SAAK,kBAAkB;AACvB,SAAK,4BAA4B,YAAW;AAE5C,SAAK,wBAAwB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE;AAE/E,SAAK,oBAAoB,IAAI,MAAM,MAAM,KAAK;AAE9C,QAAI,gCAAgC,IAAI,+BAA+B,KAAK,UAAU,QAAQ;AAC9F,kCAA8B,yBAAyB,KAAK,UAAU,gBAAgB,KAAK,UAAU;AACrG,kCAA8B,uBAAuB,KAAK,UAAU,gBAAgB,KAAK,UAAU;AACnG,kCAA8B,2BAA2B,KAAK,UAAU;AACxE,kCAA8B,6BAA6B,KAAK,UAAU;AAC1E,kCAA8B,yBAAyB,KAAK,UAAU;AACtE,kCAA8B,2BAA2B,KAAK,UAAU;AACxE,kCAA8B,gCAAgC,KAAK,UAAU;AAE7E,QAAI,6BAA6B,IAAI,+BAA+B,KAAK,UAAU,QAAQ;AAC3F,+BAA2B,yBAAyB,KAAK,UAAU,gBAAgB,KAAK,UAAU;AAClG,+BAA2B,uBAAuB,KAAK,UAAU,gBAAgB,KAAK,UAAU;AAChG,+BAA2B,2BAA2B,KAAK,UAAU;AACrE,+BAA2B,6BAA6B,KAAK,UAAU;AACvE,+BAA2B,yBAAyB,KAAK,UAAU;AACnE,+BAA2B,2BAA2B,KAAK,UAAU;AACrE,+BAA2B,gCAAgC,KAAK,UAAU;AAE1E,SAAK,6BAA6B,IAAI,yBAAyB,6BAA6B;AAC5F,SAAK,0BAA0B,IAAI,yBAAyB,0BAA0B;AACtF,SAAK,+BAA+B,KAAK;AAEzC,SAAK,qBAAqB;AAE1B,SAAK,eAAe;AAEpB,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,MAAM,OAAO,KAAK,UAAU,QAAQ;EAChK;EAEA,QAAK;AACD,SAAK,kBAAkB;AACvB,SAAK,0BAA0B,UAAS;EAC5C;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,yBAAsB;AAClB,WAAO,KAAK;EAChB;EAEA,OAAO,IAAE;EAET;EAEA,mBAAmB,SAAO;AACtB,QAAI,KAAK,sBAAsB,SAAS;AACpC,UAAI,CAAC,SAAS;AACV,aAAK,2BAA2B,aAAa;AAC7C,aAAK,6BAA6B,SAAQ;MAC9C;IACJ;AAEA,SAAK,qBAAqB;EAC9B;EAEA,oBAAiB;AACb,WAAO,KAAK;EAChB;EAEA,kBAAkB,SAAO;EAEzB;EAEA,gBAAgB,SAAO;EAEvB;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,YAAQ,wCAAwC,MAAM,KAAK,UAAU,QAAQ;EACjF;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;AAOJ,uBAAuB,UAAU,SAAS,WAAA;AACtC,MAAI,WAAW,YAAW;AAC1B,MAAI,eAAe,YAAW;AAC9B,MAAI,YAAY,YAAW;AAC3B,MAAI,gBAAgB,YAAW;AAC/B,MAAI,mBAAmB,YAAW;AAClC,MAAI,oBAAoB,aAAY;AAEpC,MAAI,kCAAkC,aAAY;AAClD,SAAO,SAAS,OAAO,IAAE;AACrB,QAAI,kBAAkB,KAAK,sBAAsB,QAAQ,eAAe,KAAK,UAAU,QAAQ;AAE/F,SAAK,kBAAkB;AACvB,SAAK,0BAA0B,UAAS;AAExC,eAAW,KAAK,UAAU,oBAAoB,UAAS,EAAG,SAAS,QAAQ;AAE3E,iBAAa,UAAS;AAEtB,QAAI,OAAO,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,YAAY,cAAc,UAAU,EAAE,QAAO;AAClI,SAAK,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,uCAAuC,KAAK,CAAC,IAAI;AAC9F,SAAK,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,uCAAuC,KAAK,CAAC,IAAI;AAE9F,QAAI,mBAAmB;AACvB,QAAI,WAAW,KAAK,UAAU;AAC9B,QAAI,iBAAiB;AACjB,iBAAW,WAAW,KAAK,UAAU;IACzC;AAEA,QAAK,KAAK,UAAU,gCAAgC,QAAQ,eAAe,KAAK,UAAU,QAAQ,KAAM,iBAAiB;AACrH,UAAI,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,cAAc,gBAAgB,MAAM,EAAE,UAAS,GAAI;AAC7H,oBAAY;MAChB;IACJ;AAEA,QAAI,mBAAmB,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,WAAW,sBAAsB,KAAK,UAAU,YAAY,CAAC,EAAE,cAAc,gBAAgB,MAAM,EAAE,UAAS,GAAI;AAClL,iBAAW,KAAK,UAAU;IAC9B;AAEA,QAAI,CAAC,KAAK,YAAW,GAAI;AACrB,WAAK,kBAAkB,MAAK;AAE5B,kBAAY,KAAK,6BAA6B,qBAAqB,MAAM,KAAK,sBAAsB,oBAAoB,+BAA+B,GAAG,UAAU,SAAS;AAE7K,UAAI,CAAC,UAAU,YAAW,GAAI;AAC1B,aAAK,2BAA2B,aAAa,KAAK,2BAA2B,cAAc,UAAU,wBAAwB,UAAU,aAAa,EAAE,YAAW,IAAK;AACtK,YAAI,CAAC,KAAK,2BAA2B,YAAY;AAC7C,sBAAY,UAAU,8BAA8B,UAAU,SAAS;QAC3E;AAEA,YAAI,oBAAoB,KAAK,YAAW;AACxC,aAAK,kBAAkB,KAAK,QAAQ,GAAG,UAAU,iBAAiB;AAElE,YAAI,KAAK,2BAA2B,yBAAyB,eAAe,KAAK,UAAU,uCAAuC,GAAG;AACjI,cAAI,iBAAiB,KAAK,UAAU;AAEpC,cAAI,eAAe,KAAK,cAAc,KAAK,IAAI,KAAK,2BAA2B,yBAAyB,sBAAsB,GAAG,GAAG,IAAI,GAAG,CAAC;AAC5I,2BAAiB,KAAK,QAAQ,GAAG,gBAAgB,YAAY;AAE7D,eAAK,kBAAkB,KAAK,kBAAkB;QAClD;AAEA,uBAAe,UAAU,WAAW,KAAK,kBAAkB,IAAI,YAAY;AAE3E,2BAAmB;MACvB;IACJ,OAAO;AACH,UAAI,KAAK,kBAAkB,UAAS,GAAI;AACpC,aAAK,kBAAkB,OAAO,EAAE;AAChC,YAAI,KAAK,kBAAkB,OAAM,GAAI;AACjC,eAAK,6BAA6B,SAAQ;QAC9C;MACJ;IACJ;AAEA,QAAK,KAAK,UAAU,gBAAgB,KAAK,UAAU,2BAA4B,iBAAiB;AAC5F,UAAI,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,GAAI;AACjI,2BAAmB,SAAS,WAAW,WAAW,IAAI,gBAAgB;AACtE,uBAAe,aAAa,SAAS,kBAAkB,YAAY;AACnE,aAAK,2BAA2B,aAAa;AAE7C,2BAAmB;MACvB,WAAW,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,cAAc,gBAAgB,aAAa,EAAE,UAAS,GAAI;AAC3I,2BAAmB,SAAS,WAAW,CAAC,WAAW,IAAI,gBAAgB;AACvE,uBAAe,aAAa,SAAS,kBAAkB,YAAY;AACnE,aAAK,2BAA2B,aAAa;AAE7C,2BAAmB;MACvB;AAEA,UAAI,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,cAAc,gBAAgB,aAAa,EAAE,WAAW,CAAC,GAAG;AACtI,aAAK,2BAA2B,aAAa;MACjD;IACJ;AAEA,QAAI,KAAK,UAAU,6BAA6B,QAAQ,eAAe,KAAK,UAAU,QAAQ,KAC1F,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,WAAW,sBAAsB,KAAK,UAAU,YAAY,CAAC,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,GAAI;AACnK,WAAK,UAAU,yBAAyB,qBAAoB,EAAG,SAAS,YAAY;IACxF,WAAY,KAAK,UAAU,yCAAyC,QAAQ,eAAe,KAAK,UAAU,QAAQ,KAC9G,QAAQ,YAAY,KAAK,UAAU,QAAQ,EAAE,KAAK,UAAU,YAAY,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,KAC1H,iBAAiB;AACpB,WAAK,UAAU,yBAAyB,KAAK,cAAc,KAAK,2BAA2B,0BAA0B,IAAI;AACzH,UAAI,kBAAkB;AAClB,aAAK,UAAU,yBAAyB,UAAS;MACrD;IACJ,OAAO;AACH,UAAI,CAAC,KAAK,2BAA2B,YAAY;AAC7C,aAAK,2BAA2B,kBAAkB,KAAK,UAAU,wBAAwB;AAEzF,YAAI,KAAK,IAAI,KAAK,2BAA2B,cAAc,IAAI,KAAK,IAAI,KAAK,UAAU,iBAAiB,GAAG;AACvG,eAAK,2BAA2B,iBAAiB,KAAK,QAAQ,KAAK,UAAU,qBAAqB,IAAI,KAAK,IAAI,KAAK,UAAU,iBAAiB;QACnJ;AAEA,2BAAmB,SAAS,WAAW,KAAK,2BAA2B,iBAAiB,IAAI,gBAAgB;AAC5G,uBAAe,aAAa,SAAS,kBAAkB,YAAY;MACvE,OAAO;AACH,aAAK,2BAA2B,iBAAiB;MACrD;AAEA,0BAAoB,KAAK,UAAU,yBAAyB,iBAAiB,iBAAiB;AAE9F,WAAK,UAAU,yBAAyB,KAAK,cAAc,KAAK,2BAA2B,wBAAwB;AACnH,UAAI,kBAAkB;AAClB,aAAK,UAAU,yBAAyB,UAAS;AAEjD,aAAK,2BAA2B,yBAAyB,gBAAgB,8BACrE,KAAK,2BAA2B,yBAAyB,cACzD,KAAK,yBAAyB;MAEtC;AAEA,UAAI,KAAK,2BAA2B,iBAAiB,KAAK,KAAK,2BAA2B,yBAAyB,iBAC/G,KAAK,2BAA2B,iBAAiB,KAAK,KAAK,2BAA2B,yBAAyB,cAAc;AAC7H,aAAK,2BAA2B,iBAAiB;MACrD;IACJ;AAEA,QAAI,KAAK,2BAA2B,yBAAyB,cAAc;AACvE,WAAK,2BAA2B,aAAa;AAC7C,WAAK,6BAA6B,SAAQ;IAC9C;EACJ;AACJ,EAAC;AAED,uBAAuB,UAAU,oBAAoB,WAAA;AACjD,SAAO,SAAS,kBAAkB,SAAO;AACrC,YAAQ,KAAK,UAAU,4BAA4B;MAC/C,KAAK;AACD,aAAK,wBAAwB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE;AAC/E;MACJ,KAAK;AACD,aAAK,wBAAwB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE,QAAQ,KAAK,UAAU,YAAY;AAClH;MACJ,KAAK;AACD,aAAK,wBAAwB,KAAK,UAAU;AAC5C;IACR;AAEA,SAAK,+BAA+B,KAAK;AACzC,SAAK,6BAA6B,SAAQ;EAC9C;AACJ,EAAC;AAED,uBAAuB,UAAU,kBAAkB,WAAA;AAC/C,SAAO,SAAS,gBAAgB,SAAO;AACnC,SAAK,wBAAwB,QAAQ,iBAAiB,KAAK,UAAU,QAAQ,EAAE;AAC/E,SAAK,+BAA+B,KAAK;AAEzC,SAAK,6BAA6B,SAAQ;EAC9C;AACJ,EAAC;;;AClUD,SAAS,aAAAG,aAAW,YAAAC,kBAAgB;AAQ9B,IAAO,4BAAP,cAAyCC,YAAS;EACpD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,0BAA0BC,WAAS,KAAK,CAAC,UAAU,UAAU,GAAG,QAAQ;IACxE,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,wCAAwCA,WAAS,KAAK,IAAI;;IAC1D,2BAA2BA,WAAS,OAAO,wBAAwB;IACnE,kBAAkBA,WAAS,MAAM,GAAI;IACrC,oBAAoBA,WAAS,MAAM,GAAG;IACtC,aAAaA,WAAS,MAAM,CAAC;IAC7B,qBAAqBA,WAAS,MAAM,GAAG;IACvC,wBAAwBA,WAAS,MAAM,GAAG;IAC1C,oBAAoBA,WAAS,MAAM,GAAG;IACtC,sCAAsCA,WAAS,MAAM,CAAC;IACtD,eAAeA,WAAS,KAAK,IAAI;IACjC,mBAAmBA,WAAS,KAAK,IAAI;IACrC,kBAAkBA,WAAS,MAAM,EAAE;IACnC,yBAAyBA,WAAS,MAAM,CAAC;IAEzC,eAAeA,WAAS,KAAK,KAAK;IAClC,gBAAgBA,WAAS,KAAK,KAAK;IACnC,0BAA0BA,WAAS,KAAK,IAAI;IAC5C,4BAA4BA,WAAS,KAAK,IAAI;IAC9C,yBAAyBA,WAAS,MAAM,EAAE;IAC1C,2BAA2BA,WAAS,MAAM,EAAE;IAC5C,sBAAsBA,WAAS,MAAM,EAAE;IACvC,wBAAwBA,WAAS,MAAM,CAAC;IACxC,uBAAuBA,WAAS,MAAM,EAAE;IAExC,aAAaA,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACpD,yCAAyCA,WAAS,KAAK,IAAI;IAC3D,6BAA6BA,WAAS,KAAK,CAAC,QAAQ,QAAQ,eAAe,GAAG,MAAM;IACpF,+BAA+BA,WAAS,OAAM;IAE9C,iBAAiBA,WAAS,KAAK,CAAC,WAAW,SAAS,OAAO,GAAG,OAAO;IACrE,wBAAwBA,WAAS,MAAM,CAAC;IACxC,gCAAgCA,WAAS,MAAM,IAAI;IACnD,gCAAgCA,WAAS,KAAK,KAAK;IACnD,0BAA0BA,WAAS,SAAQ;IAC3C,4BAA4BA,WAAS,SAAQ;IAC7C,2BAA2BA,WAAS,OAAM;IAC1C,yCAAyCA,WAAS,KAAK,IAAI;IAC3D,wCAAwCA,WAAS,OAAM;IAEvD,qBAAqBA,WAAS,KAAK,IAAI;;;;;;;;;;;IAYvC,iCAAiCA,WAAS,IAAI,CAAC;;;IAI/C,iCAAiCA,WAAS,KAAK,IAAI;IACnD,+BAA+BA,WAAS,MAAM,IAAI;;IAGlD,yCAAyCA,WAAS,KAAK,IAAI;;IAC3D,oCAAoCA,WAAS,KAAK,IAAI;IAEtD,uCAAuCA,WAAS,KAAK,KAAK;IAC1D,8CAA8CA,WAAS,KAAK,KAAK;IAEjE,kDAAkDA,WAAS,KAAK,IAAI;IAEpE,qBAAqBA,WAAS,KAAK,CAAC,YAAY,OAAO,UAAU,QAAQ,WAAW,GAAG,MAAM;IAC7F,0BAA0BA,WAAS,KAAK,KAAK;IAC7C,2BAA2BA,WAAS,KAAK,IAAI;IAC7C,mCAAmCA,WAAS,MAAM,EAAE;IACpD,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,sCAAsCA,WAAS,MAAM,GAAG;IACxD,wCAAwCA,WAAS,MAAM,GAAG;IAC1D,oCAAoCA,WAAS,KAAK,KAAK;IAEvD,4BAA4BA,WAAS,KAAK,KAAK;;IAC/C,+BAA+BA,WAAS,MAAM,CAAC;IAC/C,wCAAwCA,WAAS,KAAK,KAAK;;IAC3D,4BAA4BA,WAAS,KAAK,KAAK;;IAC/C,+BAA+BA,WAAS,KAAK,KAAK;;IAElD,2BAA2BA,WAAS,KAAK,KAAK;IAC9C,yBAAyBA,WAAS,KAAK,KAAK;IAE5C,2BAA2BA,WAAS,KAAK,KAAK;IAE9C,2BAA2BA,WAAS,KAAK,KAAK;IAC9C,8BAA8BA,WAAS,KAAK,KAAK;IACjD,0BAA0BA,WAAS,KAAK,KAAK;;EAGjD,QAAK;AACD,QAAI,SAAS,IAAI,uBAAuB,KAAK,MAAM;AAEnD,WAAO,0BAA0B,KAAK;AACtC,WAAO,yBAAyB,KAAK;AACrC,WAAO,wCAAwC,KAAK;AAEpD,WAAO,kBAAkB,KAAK;AAE9B,WAAO,aAAa,KAAK;AACzB,WAAO,qBAAqB,KAAK;AACjC,WAAO,wBAAwB,KAAK;AACpC,WAAO,oBAAoB,KAAK;AAEhC,WAAO,oBAAoB,KAAK;AAEhC,WAAO,sCAAsC,KAAK;AAElD,WAAO,eAAe,KAAK;AAC3B,WAAO,mBAAmB,KAAK;AAC/B,WAAO,kBAAkB,KAAK;AAC9B,WAAO,yBAAyB,KAAK;AAErC,WAAO,eAAe,KAAK;AAC3B,WAAO,gBAAgB,KAAK;AAC5B,WAAO,0BAA0B,KAAK;AACtC,WAAO,4BAA4B,KAAK;AACxC,WAAO,yBAAyB,KAAK;AACrC,WAAO,2BAA2B,KAAK;AACvC,WAAO,sBAAsB,KAAK;AAClC,WAAO,wBAAwB,KAAK;AACpC,WAAO,uBAAuB,KAAK;AAEnC,WAAO,aAAa,WAAW,qBAAqB,KAAK,WAAW;AAEpE,WAAO,yCAAyC,KAAK;AACrD,WAAO,6BAA6B,KAAK;AACzC,WAAO,+BAA+B,KAAK;AAE3C,WAAO,wBAAwB;AAE/B,WAAO,iBAAiB,KAAK;AAC7B,WAAO,wBAAwB,KAAK;AACpC,WAAO,gCAAgC,KAAK;AAC5C,WAAO,gCAAgC,KAAK;AAC5C,WAAO,0BAA0B,KAAK;AACtC,WAAO,4BAA4B,KAAK;AACxC,WAAO,2BAA2B,KAAK;AACvC,WAAO,yCAAyC,KAAK;AACrD,WAAO,wCAAwC,KAAK;AAEpD,WAAO,qBAAqB,KAAK;AACjC,WAAO,iCAAiC,KAAK;AAC7C,WAAO,iCAAiC,KAAK;AAC7C,WAAO,+BAA+B,KAAK;AAE3C,WAAO,yCAAyC,KAAK;AACrD,WAAO,oCAAoC,KAAK;AAEhD,WAAO,uCAAuC,KAAK;AACnD,WAAO,8CAA8C,KAAK;AAE1D,WAAO,kDAAkD,KAAK;AAE9D,WAAO,qBAAqB,KAAK;AACjC,WAAO,0BAA0B,KAAK;AACtC,WAAO,2BAA2B,KAAK;AACvC,WAAO,mCAAmC,KAAK;AAC/C,WAAO,yBAAyB,KAAK;AACrC,WAAO,sCAAsC,KAAK;AAClD,WAAO,wCAAwC,KAAK;AACpD,WAAO,oCAAoC,KAAK;AAEhD,WAAO,4BAA4B,KAAK;AACxC,WAAO,+BAA+B,KAAK;AAC3C,WAAO,wCAAwC,KAAK;AACpD,WAAO,4BAA4B,KAAK;AACxC,WAAO,+BAA+B,KAAK;AAE3C,WAAO,2BAA2B,KAAK;AACvC,WAAO,yBAAyB,KAAK;AAErC,WAAO,2BAA2B,KAAK;AAEvC,WAAO,yBAAyB,KAAK,KAAK,4BAA2B,CAAE;AAEvE,SAAK,sBAAsB,IAAI,iBAAiB,MAAM;AAEtD,SAAK,uBAAuB;AAC5B,SAAK,eAAe;AAEpB,SAAK,8BAA8B,IAAI,MAAM,GAAG;AAChD,SAAK,kCAAkC;AACvC,SAAK,mCAAmC;AAExC,YAAQ,YAAY,KAAK,MAAM,EAAE,0CAA0C,MAAM,KAAK,uBAAuB,KAAK,IAAI,CAAC;EAC3H;EAEA,uBAAuB,IAAI,MAAM,cAAY;AACzC,QAAI;AAAc;AAElB,QAAI,YAAY;AAChB,QAAI,KAAK,4BAA4B,QAAQ,eAAe,KAAK,MAAM,GAAG;AACtE,kBAAY,OAAO,YAAY,IAAG;IACtC;AAEA,QAAI,kCAAkC;AACtC,QAAI,KAAK,gCAAgC,QAAQ,eAAe,KAAK,MAAM,GAAG;AAC1E,wCAAkC,aAAa,4BAA4B,KAAK,OAAO,OAAO;AAC9F,mBAAa,6BAA6B,MAAM,KAAK,OAAO,OAAO;IACvE;AAEA,QAAI,KAAK,6BAA6B,QAAQ,eAAe,KAAK,MAAM,GAAG;AACvE,mBAAa,kBAAkB,KAAK,OAAO,OAAO;IACtD;AAEA,QAAI,CAAC,KAAK,sBAAsB;AAC5B,WAAK,uBAAuB;AAC5B,WAAK,oBAAoB,MAAK;IAClC;AAEA,SAAK,oBAAoB,OAAO,EAAE;AAElC,QAAI,KAAK,4BAA4B,QAAQ,eAAe,KAAK,MAAM,GAAG;AACtE,UAAI,UAAU,OAAO,YAAY,IAAG;AACpC,WAAK,mCAAmC,UAAU;AAClD,WAAK;AAEL,WAAK,4BAA4B,OAAO,EAAE;AAC1C,UAAI,KAAK,4BAA4B,OAAM,GAAI;AAC3C,aAAK,4BAA4B,MAAK;AAEtC,YAAI,cAAc,KAAK,kCAAkC,KAAK;AAE9D,gBAAQ,IAAI,oBAAoB,YAAY,QAAQ,CAAC,CAAC;AAEtD,aAAK,kCAAkC;AACvC,aAAK,mCAAmC;MAC5C;IACJ;AAEA,QAAI,KAAK,gCAAgC,QAAQ,eAAe,KAAK,MAAM,GAAG;AAC1E,mBAAa,6BAA6B,iCAAiC,KAAK,OAAO,OAAO;IAClG;AAEA,QAAI,KAAK,6BAA6B,QAAQ,eAAe,KAAK,MAAM,GAAG;AACvE,cAAQ,IAAI,oBAAoB,aAAa,gBAAgB,KAAK,OAAO,OAAO,CAAC;AACjF,mBAAa,kBAAkB,KAAK,OAAO,OAAO;IACtD;EACJ;EAEA,sBAAmB;AACf,WAAO,KAAK;EAChB;EAEA,aAAU;AACN,QAAI,KAAK,uBAAuB,MAAM;AAClC,WAAK,oBAAoB,UAAU,IAAI;IAC3C;EACJ;EAEA,eAAY;AACR,QAAI,KAAK,uBAAuB,MAAM;AAClC,WAAK,oBAAoB,UAAU,KAAK;IAC5C;EACJ;EAEA,8BAA2B;AACvB,QAAI,eAAe,IAAI,kBAAiB;AAExC,QAAI,QAAQ,CAAC,GAAG,KAAK,0BAA0B,MAAM,GAAG,CAAC;AACzD,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,mBAAa,cAAc,GAAG,MAAM,CAAC,EAAE,KAAI,KAAM,GAAG;IACxD;AAEA,WAAO;EACX;EAEA,YAAS;AACL,SAAK,qBAAqB,QAAO;EACrC;;;;AC7RJ,SAAS,UAAU,sBAAAC,qBAAoB,aAAAC,aAAW,YAAAC,kBAAgB;AAClE,SAAS,gBAAAC,qBAAoB;AAOvB,IAAO,wBAAP,cAAqCC,YAAS;EAChD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,0BAA0BA,WAAS,KAAK,IAAI;IAC5C,mBAAmBA,WAAS,IAAI,CAAC;IACjC,kBAAkBA,WAAS,MAAM,MAAM;IACvC,iBAAiBA,WAAS,OAAO,IAAI;;EAGzC,OAAI;AACA,SAAK,gBAAgB;AACrB,SAAK,qBAAqB;AAC1B,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAE3E,SAAK,sBAAsB;AAC3B,SAAK,sBAAsB;AAC3B,SAAK,yBAAyB;AAC9B,SAAK,wBAAwB;EACjC;EAEA,QAAK;AACD,SAAK,wBAAwB,KAAK,OAAO,aAAY;AAErD,QAAI,KAAK,mBAAmB,MAAM;AAC9B,WAAK,kBAAkB,KAAK,sBAAsB,aAAY;IAClE,OAAO;AACH,WAAK,gBAAgB,aAAa,KAAK,qBAAqB;IAChE;AAEA,SAAK,wBAAwB,KAAK,gBAAgB,gBAAgBC,mBAAkB;AACpF,SAAK,sBAAsB,WAAW,SAAS;AAC/C,SAAK,sBAAsB,QAAQ,KAAK,KAAK;AAC7C,SAAK,sBAAsB,UAAU,YAAY,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,gBAAgB;EACxH;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,sBAAsB,GAAG;AAC9B,WAAK,uBAAuB;IAChC;AAEA,QAAI,KAAK,sBAAsB,GAAG;AAC9B,WAAK,uBAAuB;IAChC;AAEA,SAAK,sBAAsB,oBAAoB,QAAQ,iBAAiB,KAAK,MAAM,EAAE,iBAAiB,oBAAmB,CAAE;AAC3H,SAAK,YAAW;AAEhB,QAAI,KAAK,oBAAoB;AACzB,UAAI,WAAW,KAAK,sBAAsB,cAAa;AACvD,UAAI,gBAAgB;AACpB,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACtC,YAAI,YAAY,SAAS,CAAC;AAC1B,YAAI,UAAU,QAAQ,KAAK,sBAAsB,OAAO;AACpD,cAAI,SAAS,UAAU;AACvB,cAAI,SAAS,OAAO,gBAAgBC,aAAY;AAChD,cAAI,WAAW,iBAAiB,QAAQ,CAAC,OAAO,YAAY;AACxD,4BAAgB;AAChB,gBAAI,CAAC,OAAO,WAAW;AACnB;YACJ;UACJ;QACJ;MACJ;AAEA,UAAI,CAAC,eAAe;AAChB,aAAK,gBAAe;MACxB,WAAW,CAAC,cAAc,OAAO,KAAK,aAAa,GAAG;AAClD,aAAK,gBAAe;AAEpB,aAAK,gBAAgB;AAErB,aAAK,kBAAiB;MAC1B;IACJ,OAAO;AACH,WAAK,gBAAe;IACxB;EACJ;EAEA,oBAAiB;AACb,SAAK,cAAc,QAAQ,OAAO,KAAK,cAAc,QAAQ,IAAI;AACjE,SAAK,cAAc,OAAO,OAAO,KAAK,cAAc,QAAQ,IAAI;EACpE;EAEA,kBAAe;AACX,QAAI,KAAK,eAAe;AACpB,WAAK,cAAc,QAAQ,OAAO,KAAK,cAAc,QAAQ,IAAI;AAEjE,UAAI,KAAK,4BAA4B,KAAK,sBAAsB,KAAK,KAAK,0BAA0B,KAAK,uBAAuB,UAAU,KAAK,cAAc,MAAM,GAAG;AAClK,aAAK,cAAc,cAAc,OAAO,KAAK,cAAc,QAAQ,IAAI;AAEvE,aAAK,sBAAsB;MAC/B,WAAW,KAAK,4BAA4B,KAAK,sBAAsB,KAAK,KAAK,0BAA0B,KAAK,uBAAuB,UAAU,KAAK,cAAc,MAAM,GAAG;AACzK,aAAK,cAAc,cAAc,OAAO,KAAK,cAAc,QAAQ,IAAI;AAEvE,aAAK,sBAAsB,KAAK;AAChC,aAAK,sBAAsB;MAC/B,OAAO;AACH,aAAK,cAAc,cAAc,OAAO,KAAK,cAAc,QAAQ,IAAI;AAEvE,aAAK,sBAAsB;AAC3B,aAAK,sBAAsB,KAAK;AAChC,aAAK,yBAAyB,KAAK,cAAc;MACrD;AAEA,WAAK,cAAc,KAAK,OAAO,KAAK,cAAc,QAAQ,IAAI;AAC9D,WAAK,cAAc,aAAa,OAAO,KAAK,cAAc,QAAQ,IAAI;AAEtE,WAAK,cAAc,UAAU,OAAO,KAAK,cAAc,QAAQ,IAAI;AAEnE,WAAK,gBAAgB;IACzB;EACJ;EAEA,aAAU;AACN,SAAK,sBAAsB,aAAa,IAAI;EAChD;EAEA,eAAY;AACR,QAAI,KAAK,yBAAyB,MAAM;AACpC,WAAK,sBAAsB,aAAa,KAAK;IACjD;EACJ;EAEA,cAAW;AACP,SAAK,qBAAqB,WAAW,eAAe,KAAK,mBAAmB,gBAAgB,cAAc,KAAK,MAAM;AAErH,QAAI,KAAK,oBAAoB;AACzB,UAAI,MAAM;AAEV,UAAI;AACA,cAAM,QAAQ,SAAS,KAAK,MAAM,EAAE,aAAa,KAAK,mBAAmB,KAAK,IAAI,mBAAmB,gBAAgB,GAAG,QAAQ,kBAAkB,KAAK,MAAM,CAAC;MAClK,SAASC,QAAO;MAEhB;AAEA,UAAI,KAAK;AACL,aAAK,gBAAgB,wBAAwB;UACzC,IAAI,UAAU,YAAY;UAC1B,IAAI,UAAU,YAAY;UAC1B,IAAI,UAAU,YAAY;UAC1B,IAAI,UAAU,YAAY;SAAE;AAEhC,aAAK,gBAAgB,oBAAoB;UACrC,IAAI,UAAU,SAAS;UACvB,IAAI,UAAU,SAAS;UACvB,IAAI,UAAU,SAAS;SAAE;MACjC;IACJ;EACJ;;;;AC7JJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAK9B,IAAO,4BAAP,cAAyCC,YAAS;EACpD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,YAAYA,WAAS,OAAM;IAC3B,gBAAgBA,WAAS,OAAM;IAC/B,0BAA0BA,WAAS,KAAK,IAAI;;EAGhD,QAAK;AACD,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAC3E,SAAK,iBAAiB;AAEtB,SAAK,4BAA4B;EACrC;EAEA,aAAU;AACN,SAAK,iBAAiB;EAC1B;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,gBAAgB;AACrB,WAAK,iBAAiB;AACtB,WAAK,OAAM;IACf;AAEA,QAAI,KAAK,4BAA4B,CAAC,QAAQ,gBAAe,GAAI;AAC7D,UAAI,KAAK,6BAA6B,MAAM;AACxC,aAAK,4BAA4B;AAEjC,aAAK,WAAW,aAAa,KAAK;AAClC,aAAK,eAAe,aAAa,KAAK;MAC1C;IACJ,OAAO;AACH,UAAI,kBAAkB,WAAW,+BAA+B,KAAK,mBAAmB,KAAK,MAAM;AACnG,UAAI,mBAAmB,QAAQ,KAAK,6BAA6B,iBAAiB;AAC9E,aAAK,4BAA4B;AAEjC,YAAI,mBAAmB,gBAAgB,cAAc;AACjD,cAAI,KAAK,cAAc,MAAM;AACzB,iBAAK,WAAW,aAAa,KAAK;UACtC;AACA,cAAI,KAAK,kBAAkB,MAAM;AAC7B,iBAAK,eAAe,aAAa,IAAI;UACzC;QACJ,WAAW,mBAAmB,gBAAgB,SAAS;AACnD,cAAI,KAAK,kBAAkB,MAAM;AAC7B,iBAAK,eAAe,aAAa,KAAK;UAC1C;AACA,cAAI,KAAK,cAAc,MAAM;AACzB,iBAAK,WAAW,aAAa,IAAI;UACrC;QACJ;MACJ;IACJ;EACJ;EAEA,SAAM;AACF,QAAI,KAAK,cAAc,MAAM;AACzB,WAAK,WAAW,aAAa,KAAK;IACtC;AAEA,QAAI,KAAK,kBAAkB,MAAM;AAC7B,WAAK,eAAe,aAAa,KAAK;IAC1C;AAEA,SAAK,4BAA4B;EACrC;;;;ACxEJ,SAAS,aAAAC,aAAW,iBAAAC,iBAAe,YAAAC,kBAAgB;AAK7C,IAAO,gCAAP,cAA6CC,YAAS;EACxD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,YAAYA,WAAS,KACjB;MACI;MACA;MAAoB;MAA0B;MAAwB;MACtE;MAAoB;MAA0B;MAA8B;MAAwB;MACpG;MAAqB;MAA2B;MAA+B;MAAyB;MACxG;MAAmB;MAAyB;MAA6B;MAAuB;MAChG;MAAoB;MAA0B;MAA8B;MAAwB;OAExG,OAAO;IACX,cAAcA,WAAS,KAAI;IAC3B,kBAAkBA,WAAS,SAAQ;;EAGvC,QAAK;AACD,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAC3E,SAAK,iBAAiB,WAAW,kBAAkB,KAAK,UAAU;AAElE,SAAK,2BAA0B;EACnC;EAEA,OAAO,IAAE;EAET;EAEA,6BAA0B;AACtB,SAAK,qBAAqB,KAAK,OAAO,aAAY;AAElD,QAAI,OAAO,KAAK,mBAAmB,gBAAgBC,eAAa;AAChE,SAAK,OAAO,KAAK;AACjB,SAAK,WAAW,KAAK;AAErB,SAAK,mBAAmB,iBAAiB,CAAC;EAC9C;;AAOJ,8BAA8B,UAAU,SAAS,WAAA;AAC7C,MAAIC,iBAAgB,aAAY;AAChC,SAAO,SAAS,OAAO,IAAE;AACrB,QAAI,YAAY,QAAQ,mBAAmB,KAAK,mBAAmB,KAAK,MAAM,EAAE,aAAa,KAAK,cAAc;AAEhH,SAAK,mBAAmB,yBAAyB,UAAU,iBAAiBA,gBAAe,IAAI,CAAC;AAChG,SAAK,mBAAmB,iBAAiB,UAAU,eAAc,CAAE;EACvE;AACJ,EAAC;;;ACzDD,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,oCAAP,cAAiDC,YAAS;EAC5D,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,oBAAoBA,WAAS,KAAK,IAAI;IACtC,cAAcA,WAAS,KAAI;IAC3B,kBAAkBA,WAAS,SAAQ;;EAGvC,QAAK;AACD,SAAK,2BAA0B;EACnC;EAEA,6BAA0B;AACtB,SAAK,2BAA2B,KAAK,OAAO,aAAY;AAExD,SAAK,yBAAyB,CAAA;AAE9B,aAAS,cAAc,oBAAoB;AACvC,UAAI,UAAU,mBAAmB,UAAU;AAC3C,UAAI,CAAC,KAAK,sBACL,WAAW,mBAAmB,oBAC3B,WAAW,mBAAmB,2BAA2B,WAAW,mBAAmB,4BACvF,WAAW,mBAAmB,0BAA0B,WAAW,mBAAmB,yBAC5F;AACE,YAAI,cAAc,KAAK,yBAAyB,aAAY;AAC5D,aAAK,uBAAuB,OAAO,IAAI;AAEvC,oBAAY,gBAAgB,+BACxB;UACI,iBAAiB,KAAK;UACtB,cAAc,wBAAwB,UAAU;UAChD,gBAAgB,KAAK;UACrB,oBAAoB,KAAK;SAC5B;MAET;IACJ;EACJ;;;;AC1CJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAM9B,IAAO,+BAAP,cAA4CC,YAAS;EACvD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,aAAaA,WAAS,KAAK,IAAI;;EAGnC,QAAK;AACD,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAE3E,SAAK,eAAc;EACvB;EAEA,OAAO,IAAE;EAET;EAEA,iBAAc;AACV,SAAK,YAAY,CAAA;AAEjB,QAAI,eAAe,KAAK,YAAY;AAEpC,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,WAAK,UAAU,CAAC,IAAI,YAAY,WAAW,aAAa,CAAC,CAAC;IAC9D;EACJ;;AAOJ,6BAA6B,UAAU,SAAS,WAAA;AAC5C,MAAIC,iBAAgB,aAAY;AAChC,SAAO,SAAS,OAAO,IAAE;AACrB,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC5C,UAAI,cAAc,KAAK,UAAU,CAAC;AAElC,UAAI,UAAU,YAAY,WAAU;AACpC,UAAI,YAAY,QAAQ,mBAAmB,KAAK,mBAAmB,KAAK,MAAM,EAAE,aAAa,OAAO;AAEpG,kBAAY,yBAAyB,UAAU,iBAAiBA,gBAAe,IAAI,CAAC;IACxF;EACJ;AACJ,EAAC;;;AClDD,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAM9B,IAAO,+BAAP,cAA4CC,YAAS;EACvD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,WAAWA,WAAS,OAAO,IAAI;IAC/B,YAAYA,WAAS,OAAO,IAAI;IAChC,eAAeA,WAAS,OAAO,IAAI;IACnC,cAAcA,WAAS,OAAO,IAAI;IAClC,iBAAiBA,WAAS,OAAO,IAAI;IACrC,sBAAsBA,WAAS,MAAM,EAAE;IACvC,uBAAuBA,WAAS,MAAM,EAAE;IACxC,0BAA0BA,WAAS,MAAM,EAAE;IAC3C,0BAA0BA,WAAS,MAAM,MAAQ;IACjD,yBAAyBA,WAAS,MAAM,KAAM;IAC9C,4BAA4BA,WAAS,MAAM,KAAM;IACjD,uBAAuBA,WAAS,KAAK,KAAK;IAC1C,uBAAuBA,WAAS,MAAM,KAAM;;EAGhD,QAAK;AACD,QAAI,UAAU;AACd,QAAI,KAAK,iBAAiB,gBAAgB,MAAM;AAC5C,gBAAU,QAAQ,eAAe,KAAK,MAAM;IAChD,OAAO;AACH,gBAAU,QAAQ,gBAAgB,KAAK,MAAM;IACjD;AAEA,QAAI,KAAK,aAAa,MAAM;AACxB,WAAK,4BAA4B,KAAK,UAAU,wBAAuB;AACvE,WAAK,wBAAwB,KAAK,UAAU,gBAAe;IAC/D;AAEA,QAAI,KAAK,cAAc,MAAM;AACzB,WAAK,6BAA6B,KAAK,WAAW,oBAAmB;AACrE,WAAK,6BAA6B,KAAK,WAAW,wBAAuB;AACzE,WAAK,yBAAyB,KAAK,WAAW,gBAAe;AAC7D,WAAK,4BAA4B,KAAK,WAAW,mBAAkB;IACvE;AAEA,QAAI,KAAK,iBAAiB,MAAM;AAC5B,WAAK,gCAAgC,KAAK,cAAc,oBAAmB;AAC3E,WAAK,gCAAgC,KAAK,cAAc,wBAAuB;AAC/E,WAAK,4BAA4B,KAAK,cAAc,gBAAe;AACnE,WAAK,0BAA0B,KAAK,cAAc,cAAa;AAC/D,WAAK,+BAA+B,KAAK,cAAc,mBAAkB;IAC7E;AAEA,QAAI,KAAK,gBAAgB,MAAM;AAC3B,WAAK,+BAA+B,KAAK,aAAa,oBAAmB;AACzE,WAAK,yBAAyB,KAAK,aAAa,cAAa;IACjE;AAEA,QAAI,KAAK,mBAAmB,MAAM;AAC9B,WAAK,kCAAkC,KAAK,gBAAgB,oBAAmB;AAC/E,WAAK,4BAA4B,KAAK,gBAAgB,cAAa;IACvE;AAGA,QAAI,KAAK,iBAAiB,MAAM;AAC5B,cAAQ,4BAA4B,gBAAgB,YAAY,mBAAmB,aAAa,MAAM,KAAK,wBAAwB,KAAK,IAAI,CAAC;AAC7I,cAAQ,4BAA4B,gBAAgB,YAAY,mBAAmB,WAAW,MAAM,KAAK,sBAAsB,KAAK,IAAI,CAAC;IAC7I;AAEA,QAAI,KAAK,gBAAgB,MAAM;AAC3B,cAAQ,4BAA4B,gBAAgB,YAAY,mBAAmB,aAAa,MAAM,KAAK,uBAAuB,KAAK,IAAI,CAAC;AAC5I,cAAQ,4BAA4B,gBAAgB,YAAY,mBAAmB,WAAW,MAAM,KAAK,qBAAqB,KAAK,IAAI,CAAC;IAC5I;AAEA,QAAI,KAAK,mBAAmB,MAAM;AAE9B,cAAQ,4BAA4B,gBAAgB,eAAe,mBAAmB,aAAa,MAAM,KAAK,0BAA0B,KAAK,IAAI,CAAC;AAClJ,cAAQ,4BAA4B,gBAAgB,eAAe,mBAAmB,WAAW,MAAM,KAAK,wBAAwB,KAAK,IAAI,CAAC;IAClJ;AAGA,QAAI,KAAK,aAAa,MAAM;AACxB,cAAQ,4BAA4B,gBAAgB,QAAQ,mBAAmB,eAAe,MAAM,KAAK,oBAAoB,KAAK,IAAI,CAAC;IAC3I;AAEA,QAAI,KAAK,cAAc,MAAM;AACzB,cAAQ,4BAA4B,gBAAgB,SAAS,mBAAmB,eAAe,MAAM,KAAK,qBAAqB,KAAK,IAAI,CAAC;IAC7I;AAGA,QAAI,KAAK,iBAAiB,MAAM;AAC5B,cAAQ,0BAA0B,cAAc,YAAY,iBAAiB,cAAc,MAAM,KAAK,wBAAwB,KAAK,IAAI,CAAC;IAC5I;EACJ;EAEA,0BAAuB;EAEvB;EAEA,sBAAsB,YAAY,SAAO;AACrC,SAAK,cAAc,oBAAoB,KAAK,6BAA6B;EAC7E;EAEA,uBAAuB,YAAY,SAAO;AACtC,SAAK,aAAa,sBAAsB,CAAC,KAAK,yBAAyB,KAAK,sBAAsB;EACtG;EAEA,qBAAqB,YAAY,SAAO;AACpC,SAAK,aAAa,oBAAoB,KAAK,4BAA4B;EAC3E;EAEA,0BAA0B,YAAY,SAAO;AACzC,SAAK,gBAAgB,sBAAsB,CAAC,KAAK,4BAA4B,KAAK,yBAAyB;EAC/G;EAEA,wBAAwB,YAAY,SAAO;AACvC,SAAK,gBAAgB,oBAAoB,KAAK,+BAA+B;EACjF;EAEA,oBAAoB,YAAY,SAAO;AACnC,SAAK,UAAU,wBAAwB,KAAK,yBAAyB;AAErE,QAAI,WAAW,SAAQ,IAAK,MAAS;AACjC,WAAK,UAAU,mBAAmB,KAAK,uBAAuB,WAAW,SAAQ,GAAI,KAAK,qBAAqB;IACnH;EACJ;EAEA,qBAAqB,YAAY,SAAO;AACpC,SAAK,WAAW,oBAAoB,KAAK,0BAA0B;AACnE,SAAK,WAAW,wBAAwB,KAAK,0BAA0B;AAEvE,QAAI,WAAW,SAAQ,IAAK,MAAS;AACjC,UAAI,KAAK,uBAAuB;AAC5B,YAAI,cAAc,KAAK;AACvB,YAAI,KAAK,iBAAiB,GAAG;AACzB,yBAAe;QACnB;AAEA,aAAK,WAAW,sBAAsB,cAAc,WAAW,SAAQ,GAAI,KAAK,sBAAsB;MAC1G,OAAO;AACH,YAAI,WAAW,CAAC,KAAK;AACrB,YAAI,KAAK,iBAAiB,GAAG;AACzB,sBAAY;QAChB;AAEA,aAAK,WAAW,mBAAmB,WAAW,WAAW,SAAQ,GAAI,KAAK,yBAAyB;MACvG;IACJ;EACJ;EAEA,wBAAwB,UAAU,SAAO;AACrC,SAAK,cAAc,wBAAwB,KAAK,6BAA6B;AAE7E,QAAI,eAAe,KAAK,2BAA2B,SAAS,OAAO,CAAC;AACpE,QAAI,kBAAkB,KAAK,2BAA2B,SAAS,OAAO,CAAC;AAEvE,QAAI,KAAK,IAAI,YAAY,IAAI,MAAQ;AACjC,WAAK,cAAc,mBAAmB,cAAc,KAAK,yBAAyB;IACtF;AAEA,QAAI,KAAK,IAAI,eAAe,IAAI,MAAQ;AACpC,WAAK,cAAc,mBAAmB,iBAAiB,KAAK,4BAA4B;IAC5F;EACJ;;AAOJ,6BAA6B,UAAU,0BAA0B,WAAA;AAC7D,MAAI,gBAAgB,YAAW;AAC/B,SAAO,SAAS,wBAAwB,YAAY,SAAO;AAEvD,SAAK,wBAAwB,WAAW,CAAC,KAAK,0BAA0B,aAAa;AACrF,SAAK,cAAc,kBAAkB,aAAa;EACtD;AACJ,EAAC;;;ACjLD,SAAS,aAAAC,YAAW,aAAAC,aAAW,iBAAAC,gBAAe,iBAAAC,iBAAe,YAAAC,YAAU,iBAAAC,sBAAqB;AAMtF,IAAO,gCAAP,cAA6CC,YAAS;EACxD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,gBAAgBC,WAAS,KAAK,IAAI;IAElC,eAAeA,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IAEtD,eAAeA,WAAS,OAAO,EAAE;IACjC,gBAAgBA,WAAS,OAAO,EAAE;IAClC,mBAAmBA,WAAS,OAAO,EAAE;IACrC,qBAAqBA,WAAS,OAAO,EAAE;IACvC,kBAAkBA,WAAS,OAAO,EAAE;IAEpC,WAAWA,WAAS,OAAO,IAAI;IAC/B,YAAYA,WAAS,OAAO,IAAI;IAChC,eAAeA,WAAS,OAAO,IAAI;IACnC,iBAAiBA,WAAS,OAAO,IAAI;IACrC,cAAcA,WAAS,OAAO,IAAI;IAElC,wBAAwBA,WAAS,MAAM,CAAC;IACxC,yBAAyBA,WAAS,MAAM,CAAC;IACzC,yBAAyBA,WAAS,MAAM,CAAC;IACzC,4BAA4BA,WAAS,MAAM,CAAC;IAC5C,kCAAkCA,WAAS,MAAM,CAAC;IAElD,iBAAiBA,WAAS,SAAQ;IAClC,iBAAiBA,WAAS,SAAQ;;EAGtC,QAAK;AACD,SAAK,uBAAwB,KAAK,mBAAmB,OAAQ,KAAK,kBAAkB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,OAAO,MAAK;AACzI,SAAK,uBAAwB,KAAK,mBAAmB,OAAQ,KAAK,kBAAkB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,aAAa,MAAK;AAE/I,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAC3E,SAAK,4BAA6B,KAAK,qBAAqB,WAAW,OAAQ,IAAI;AAEnF,SAAK,aAAa;AAClB,SAAK,0BAA0B;AAE/B,SAAK,qBAAoB;AACzB,SAAK,WAAW,KAAK,cAAc;AAEnC,SAAK,mBAAmB,KAAK;EACjC;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,yBAAyB;AAC9B,WAAK,0BAA0B;AAC/B,WAAK,WAAW,KAAK;AACrB,WAAK,WAAW,KAAK,gBAAgB;IACzC;EACJ;EAEA,aAAU;AACN,SAAK,0BAA0B;EACnC;EAEA,eAAY;AACR,QAAI,KAAK,cAAc,MAAM;AACzB,WAAK,mBAAmB,KAAK;AAC7B,WAAK,WAAW,KAAK;IACzB;EACJ;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,WAAW,SAAO;AACd,SAAK,aAAa;AAElB,QAAI,KAAK,mBAAmB,MAAM;AAC9B,WAAK,gBAAgB,aAAa,KAAK,UAAU;AAEjD,UAAI,KAAK,YAAY;AACjB,aAAK,kBAAiB;MAC1B;IACJ;EACJ;EAEA,cAAc,MAAI;AACd,SAAK,gBAAgB;AACrB,SAAK,uBAAuB,OAAO,KAAK;AACxC,SAAK,WAAW,KAAK,UAAU;EACnC;EAEA,eAAe,MAAI;AACf,SAAK,iBAAiB;AACtB,SAAK,wBAAwB,OAAO,KAAK;AACzC,SAAK,WAAW,KAAK,UAAU;EACnC;EAEA,kBAAkB,MAAI;AAClB,SAAK,oBAAoB;AACzB,SAAK,2BAA2B,OAAO,KAAK;AAC5C,SAAK,WAAW,KAAK,UAAU;EACnC;EAEA,oBAAoB,MAAI;AACpB,SAAK,sBAAsB;AAC3B,SAAK,6BAA6B,OAAO,KAAK;AAC9C,SAAK,WAAW,KAAK,UAAU;EACnC;EAEA,iBAAiB,MAAI;AACjB,SAAK,mBAAmB;AACxB,SAAK,0BAA0B,OAAO,KAAK;AAC3C,SAAK,WAAW,KAAK,UAAU;EACnC;EAEA,uBAAoB;AAChB,SAAK,kBAAkB,KAAK,OAAO,aAAY;AAE/C,QAAI,qBAAqB,OAAO,KAAK;AACrC,QAAI,aAAa,SAAS,KAAK;AAE/B,QAAI,kBAAkB,KAAK;AAE3B,SAAK,kBAAkB,KAAK,gBAAgB,aAAY;AACxD,SAAK,yBAAyB,KAAK,WAAW,KAAK,WAAW,iBAC1D,YAAY,GAAG,GAAG,kBAAkB,GACpC,YAAY,aAAa,KAAK,2BAA2B,GAAG,CAAC,GAC7D,KAAK,eAAe;AACxB,SAAK,uBAAuB,OAAO,KAAK;AAExC,SAAK,mBAAmB,KAAK,gBAAgB,aAAY;AACzD,SAAK,0BAA0B,KAAK,WAAW,KAAK,YAAY,iBAC5D,YAAY,qBAAqB,KAAK,2BAA2B,GAAG,CAAC,GACrE,YAAY,aAAa,KAAK,2BAA2B,GAAG,CAAC,GAC7D,KAAK,gBAAgB;AACzB,SAAK,wBAAwB,OAAO,KAAK;AAEzC,SAAK,sBAAsB,KAAK,gBAAgB,aAAY;AAC5D,SAAK,6BAA6B,KAAK,WAAW,KAAK,eAAe,iBAClE,YAAY,GAAG,oBAAoB,CAAC,GACpC,YAAY,CAAC,aAAa,KAAK,2BAA2B,GAAG,CAAC,GAC9D,KAAK,mBAAmB;AAC5B,SAAK,2BAA2B,OAAO,KAAK;AAE5C,QAAI,0BAA0B,KAAK,cAAc,oBAAmB;AACpE,QAAI,oBAAoB,KAAK,cAAc,cAAa;AAExD;AACI,UAAI,4BAA4B,KAAK,gBAAgB,oBAAmB;AACxE,UAAI,aAAa,0BAA0B,SAAS,uBAAuB;AAC3E,UAAI,iBAAiB,WAAW,oBAAoB,iBAAiB;AAErE,WAAK,wBAAwB,KAAK,gBAAgB,aAAY;AAC9D,WAAK,+BAA+B,KAAK,WAAW,KAAK,iBAAiB,iBACtE,YAAY,GAAG,qBAAqB,gBAAgB,CAAC,GACrD,YAAY,GAAG,GAAG,CAAC,UAAU,GAC7B,KAAK,qBAAqB;AAC9B,WAAK,6BAA6B,OAAO,KAAK;IAClD;AAEA;AACI,UAAI,yBAAyB,KAAK,aAAa,oBAAmB;AAClE,UAAI,aAAa,uBAAuB,SAAS,uBAAuB;AACxE,UAAI,iBAAiB,WAAW,oBAAoB,iBAAiB;AAErE,WAAK,qBAAqB,KAAK,gBAAgB,aAAY;AAC3D,WAAK,4BAA4B,KAAK,WAAW,KAAK,cAAc,iBAChE,YAAY,GAAG,qBAAqB,gBAAgB,CAAC,GACrD,YAAY,CAAC,aAAa,KAAK,2BAA2B,GAAG,CAAC,EAAE,gBAAgB,MAAM,KAAK,2BAA2B,YAAY,GAAG,GAAG,CAAC,CAAC,GAC1I,KAAK,kBAAkB;AAC3B,WAAK,0BAA0B,OAAO,KAAK;IAC/C;EACJ;EAEA,WAAW,cAAc,iBAAiB,aAAa,WAAW,cAAY;AAC1E,QAAI,iBAAiB,aAAa,oBAAmB;AACrD,QAAI,mBAAmB,gBAAgB,mBAAkB;AACzD,QAAI,iBAAiB,gBAAgB,iBAAgB;AACrD,QAAI,cAAc,gBAAgB,cAAa;AAE/C,QAAI,YAAY,eAAe,SAAS,eAAe,WAAW,YAAY,CAAC,CAAC,CAAC;AACjF,cAAU,SAAS,YAAY,WAAW,YAAY,CAAC,CAAC,GAAG,SAAS;AACpE,cAAU,SAAS,iBAAiB,WAAW,YAAY,CAAC,CAAC,GAAG,SAAS;AAEzE,QAAI,UAAU,UAAU,SAAS,eAAe,WAAW,UAAU,CAAC,CAAC,CAAC;AACxE,YAAQ,SAAS,YAAY,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;AAC9D,YAAQ,SAAS,iBAAiB,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;AAEnE,QAAI,aAAa,OAAO,KAAK;AAC7B,QAAI,eAAe,QAAQ,SAAS,iBAAiB,WAAW,CAAC,UAAU,CAAC;AAE5E,SAAK,SAAS,WAAW,SAAS,YAAY;AAC9C,QAAI,gBAAgB,KAAK,SAAS,cAAc,kBAAkB,aAAa,YAAY;AAE3F,WAAO;EACX;EAEA,SAAS,OAAO,KAAK,cAAY;AAC7B,QAAI,gBAAgB,IAAI,SAAS,KAAK;AACtC,QAAIC,UAAS,cAAc,YAAW;AACtC,kBAAc,eAAe,aAAa;AAE1C,QAAI,mBAAmB,aAAa,aAAY;AAChD,QAAI,aAAa,iBAAiB,aAAY;AAE9C,QAAI,WAAW,WAAW,gBAAgBC,eAAa;AACvD,aAAS,OAAO,QAAQ,iBAAiB,KAAK,MAAM,EAAE;AACtD,aAAS,WAAW,KAAK;AAEzB,qBAAiB,oBAAoB,KAAK;AAE1C,QAAI,YAAY,OAAQ,KAAK;AAC7B,eAAW,eAAe,YAAY,YAAY,GAAGD,UAAS,GAAG,YAAY,CAAC,CAAC;AAE/E,eAAW,cAAc,aAAa;AACtC,eAAW,mBAAmB,YAAY,GAAGA,UAAS,GAAG,CAAC,CAAC;EAC/D;EAEA,SAAS,UAAU,SAAS,IAAI,cAAY;AACxC,QAAI,aAAa,aAAa,aAAY;AAC1C,eAAW,oBAAoB,QAAQ;AACvC,eAAW,eAAe,IAAI,OAAO;AACrC,eAAW,eAAe,SAAS,KAAK,sBAAsB;AAE9D,QAAI,gBAAgB,WAAW,gBAAgBE,cAAa;AAC5D,kBAAc,YAAYC,WAAU;AACpC,kBAAc,gBAAgBC,eAAc;AAC5C,kBAAc,WAAW,KAAK;AAE9B,WAAO;EACX;EAEA,oBAAiB;AACb,QAAI,KAAK,cAAc,UAAU,GAAG;AAChC,WAAK,gBAAgB,aAAa,KAAK;IAC3C;AACA,QAAI,KAAK,eAAe,UAAU,GAAG;AACjC,WAAK,iBAAiB,aAAa,KAAK;IAC5C;AACA,QAAI,KAAK,kBAAkB,UAAU,GAAG;AACpC,WAAK,oBAAoB,aAAa,KAAK;IAC/C;AACA,QAAI,KAAK,oBAAoB,UAAU,GAAG;AACtC,WAAK,sBAAsB,aAAa,KAAK;IACjD;AACA,QAAI,KAAK,iBAAiB,UAAU,GAAG;AACnC,WAAK,mBAAmB,aAAa,KAAK;IAC9C;EACJ;;;;ACvPE,IAAO,4BAAP,cAAyC,YAAW;EAEtD,YAAY,gBAAgB,UAAQ;AAChC,UAAM,QAAQ;AAEd,SAAK,oBAAoB;AAGzB,SAAK,gBAAgB,KAAK,kBAAiB;AAC3C,SAAK,cAAc,KAAK,gBAAe;AACvC,SAAK,qBAAqB,CAAA;EAC9B;EAEA,sBAAmB;AACf,WAAO,KAAK,kBAAkB,UAAS;EAC3C;EAEA,cAAc,UAAQ;AAClB,SAAK,cAAc,YAAY;AAC/B,SAAK,cAAc,YAAY;AAC/B,SAAK,cAAc,UAAU;AAE7B,QAAI,KAAK,oBAAmB,GAAI;AAC5B,UAAI,KAAK,kBAAkB,gBAAgB,KAAK,cAAa,GAAI,QAAQ,GAAG;AACxE,aAAK,cAAc,YAAY;AAC/B,aAAK,cAAc,YAAY;AAC/B,aAAK,cAAc,UAAU;MACjC;IACJ;AAEA,WAAO,KAAK;EAChB;EAEA,YAAY,QAAM;AACd,SAAK,YAAY,UAAS;AAE1B,QAAI,KAAK,oBAAmB,GAAI;AAC5B,WAAK,kBAAkB,QAAQ,KAAK,cAAa,GAAI,QAAQ,KAAK,WAAW;IACjF;AAEA,WAAO,KAAK;EAChB;EAEA,qBAAkB;AACd,WAAO,KAAK;EAChB;;;;AC7CG,IAAI,yBAAyB;EAChC,MAAM;EACN,OAAO;EACP,OAAO;EACP,KAAK;EACL,QAAQ;EACR,QAAQ;EACR,MAAM;EACN,OAAO;;AAGL,IAAO,2BAAP,MAA+B;EAEjC,cAAA;AACI,SAAK,oBAAoB;AACzB,SAAK,2BAA2B;AAChC,SAAK,cAAc;AACnB,SAAK,qBAAqB;AAE1B,SAAK,aAAa,uBAAuB;AAEzC,SAAK,6BAA6B;AAIlC,SAAK,UAAU;AACf,SAAK,kBAAkB;AACvB,SAAK,oBAAoB;AACzB,SAAK,oBAAoB;AAIzB,SAAK,aAAa;AAClB,SAAK,2BAA2B;EACpC;;AAGE,IAAO,qBAAP,MAAyB;EAE3B,YAAY,mBAAmB,YAAY,mBAAmBC,QAAO,SAAS,QAAQ,cAAa,GAAE;AACjG,SAAK,YAAY;AAEjB,SAAK,YAAY;AAEjB,SAAK,0BAA0B;AAC/B,SAAK,uBAAuB;AAC5B,SAAK,iBAAiB;AAEtB,SAAK,aAAa;AAElB,SAAK,gBAAgB;AACrB,SAAK,uBAAuB;AAE5B,SAAK,eAAe;AAEpB,SAAK,OAAO,mBAAmB,mBAAmBA,MAAK;EAC3D;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,cAAc,CAAC,KAAK,iBAAiB,CAAC,KAAK,sBAAsB;AACtE,WAAK,wBAAwB,MAAM,SAAS;IAChD,OAAO;AACH,WAAK,wBAAwB,MAAM,SAAS,gBAAgB,KAAK,UAAU,6BAA6B;IAC5G;EACJ;EAEA,QAAK;AACD,SAAK,WAAW,KAAK;AACrB,SAAK,gBAAgB;AACrB,SAAK,wBAAwB,MAAM,SAAS;EAChD;EAEA,WAAW,SAAO;AACd,QAAI,KAAK,cAAc,SAAS;AAC5B,WAAK,aAAa;AAElB,UAAI,KAAK,YAAY;AACjB,aAAK,qBAAqB,MAAM,OAAO,KAAK,UAAU;AACtD,YAAI,KAAK,kBAAkB,MAAM;AAC7B,cAAI,KAAK,eAAe,MAAM,YAAY,SAAS,GAAG;AAClD,iBAAK,eAAe,MAAM,SAAS,KAAK,UAAU;UACtD,OAAO;AACH,iBAAK,eAAe,MAAM,OAAO,KAAK,UAAU;UACpD;AAEA,cAAI,KAAK,UAAU,cAAc,uBAAuB,OAAO;AAC3D,iBAAK,eAAe,MAAM,SAAS,gBAAgB,KAAK,UAAU,2BAA2B;UACjG;QACJ;MACJ,OAAO;AACH,aAAK,qBAAqB,MAAM,OAAO,KAAK,UAAU;AACtD,YAAI,KAAK,kBAAkB,MAAM;AAC7B,cAAI,KAAK,eAAe,MAAM,YAAY,SAAS,GAAG;AAClD,iBAAK,eAAe,MAAM,SAAS,KAAK,UAAU;UACtD,OAAO;AACH,iBAAK,eAAe,MAAM,OAAO,KAAK,UAAU;UACpD;AAEA,cAAI,KAAK,UAAU,cAAc,uBAAuB,OAAO;AAC3D,iBAAK,eAAe,MAAM,SAAS;UACvC;QACJ;MACJ;IACJ;EACJ;EAEA,eAAY;AACR,SAAK,gBAAgB;EACzB;EAEA,eAAY;AACR,SAAK,gBAAgB;EACzB;EAEA,qBAAqB,SAAO;AACxB,SAAK,uBAAuB;EAChC;EAEA,OAAO,mBAAmB,mBAAmBA,QAAK;AAC9C,SAAK,0BAA0B,SAAS,gBAAgB,8BAA8B,KAAK;AAC3F,SAAK,wBAAwB,MAAM,WAAW;AAC9C,SAAK,wBAAwB,MAAM,QAAQ;AAC3C,SAAK,wBAAwB,MAAM,SAAS;AAC5C,sBAAkB,YAAY,KAAK,uBAAuB;AAE1D,SAAK,uBAAuB,SAAS,gBAAgB,8BAA8B,QAAQ;AAC3F,SAAK,qBAAqB,eAAe,MAAM,MAAM,KAAK;AAC1D,SAAK,qBAAqB,eAAe,MAAM,MAAM,KAAK;AAC1D,SAAK,qBAAqB,eAAe,MAAM,KAAK,KAAK;AACzD,SAAK,qBAAqB,MAAM,OAAO,KAAK,UAAU;AACtD,SAAK,wBAAwB,YAAY,KAAK,oBAAoB;AAElE,YAAQ,KAAK,UAAU,YAAY;MAC/B,KAAK,uBAAuB;AACxB;MACJ,KAAK,uBAAuB;AACxB,aAAK,iBAAiB,SAAS,gBAAgB,8BAA8B,MAAM;AACnF,aAAK,eAAe,eAAe,MAAM,KAAK,KAAK;AACnD,aAAK,eAAe,eAAe,MAAM,KAAK,KAAK;AACnD,aAAK,eAAe,MAAM,YAAY;AACtC,aAAK,eAAe,MAAM,aAAa;AACvC,aAAK,eAAe,MAAM,mBAAmB;AAC7C,aAAK,eAAe,MAAM,oBAAoB;AAC9C,aAAK,eAAe,MAAM,aAAa,KAAK,UAAU;AACtD,aAAK,eAAe,MAAM,aAAa,KAAK,UAAU;AACtD,aAAK,eAAe,MAAM,WAAW,KAAK,iBAAiB,KAAK,UAAU,kBAAkBA,QAAO,iBAAiB;AACpH,aAAK,eAAe,MAAM,OAAO,KAAK,UAAU;AAChD,aAAK,eAAe,cAAc,KAAK,UAAU;AACjD,aAAK,wBAAwB,YAAY,KAAK,cAAc;AAC5D;MACJ,KAAK,uBAAuB;AACxB,aAAK,iBAAiB,SAAS,gBAAgB,8BAA8B,OAAO;AACpF,aAAK,eAAe,eAAe,MAAM,KAAK,IAAI;AAClD,aAAK,eAAe,eAAe,MAAM,KAAK,IAAI;AAClD,aAAK,eAAe,aAAa,QAAQ,KAAK,UAAU,UAAU;AAClE,aAAK,eAAe,MAAM,QAAQ;AAClC,aAAK,eAAe,MAAM,SAAS;AACnC,aAAK,eAAe,MAAM,SAAS;AACnC,aAAK,wBAAwB,YAAY,KAAK,cAAc;AAC5D;MACJ,KAAK,uBAAuB;AACxB,aAAK,iBAAiB,SAAS,gBAAgB,8BAA8B,QAAQ;AACrF,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,KAAK,OAAO;AACrD,aAAK,eAAe,MAAM,OAAO,KAAK,UAAU;AAChD,aAAK,wBAAwB,YAAY,KAAK,cAAc;AAC5D;MACJ,KAAK,uBAAuB;AACxB,aAAK,iBAAiB,SAAS,gBAAgB,8BAA8B,QAAQ;AACrF,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,KAAK,KAAK;AACnD,aAAK,eAAe,MAAM,OAAO,KAAK,UAAU;AAChD,aAAK,wBAAwB,YAAY,KAAK,cAAc;AAC5D;MACJ,KAAK,uBAAuB;AACxB,aAAK,iBAAiB,SAAS,gBAAgB,8BAA8B,MAAM;AACnF,aAAK,eAAe,eAAe,MAAM,KAAK,KAAK;AACnD,aAAK,eAAe,eAAe,MAAM,KAAK,KAAK;AACnD,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,SAAS,KAAK;AACvD,aAAK,eAAe,eAAe,MAAM,UAAU,KAAK;AACxD,aAAK,eAAe,MAAM,OAAO,KAAK,UAAU;AAChD,aAAK,eAAe,MAAM,kBAAkB;AAC5C,aAAK,wBAAwB,YAAY,KAAK,cAAc;AAC5D;MACJ,KAAK,uBAAuB;AACxB,aAAK,iBAAiB,SAAS,gBAAgB,8BAA8B,QAAQ;AACrF,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,KAAK,KAAK;AACnD,aAAK,eAAe,MAAM,OAAO;AACjC,aAAK,eAAe,MAAM,SAAS,KAAK,UAAU;AAClD,aAAK,eAAe,MAAM,cAAc;AACxC,aAAK,wBAAwB,YAAY,KAAK,cAAc;AAC5D;MACJ,KAAK,uBAAuB;AACxB,aAAK,iBAAiB,SAAS,gBAAgB,8BAA8B,MAAM;AACnF,aAAK,eAAe,eAAe,MAAM,KAAK,OAAO;AACrD,aAAK,eAAe,eAAe,MAAM,KAAK,OAAO;AACrD,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,MAAM,KAAK;AACpD,aAAK,eAAe,eAAe,MAAM,SAAS,KAAK;AACvD,aAAK,eAAe,eAAe,MAAM,UAAU,KAAK;AACxD,aAAK,eAAe,MAAM,OAAO;AACjC,aAAK,eAAe,MAAM,SAAS,KAAK,UAAU;AAClD,aAAK,eAAe,MAAM,cAAc;AACxC,aAAK,eAAe,MAAM,kBAAkB;AAC5C,aAAK,wBAAwB,YAAY,KAAK,cAAc;AAC5D;IACR;EACJ;EAEA,iBAAiB,OAAO,mBAAiB;AACrC,WAAO,SAAS,MAAM,QAAQ,CAAC,IAAI,WAAW,QAAQ,mBAAmB,QAAQ,CAAC,IAAI;EAC1F;EAEA,gBAAa;AACT,QAAI,KAAK,eAAe,MAAM,YAAY,SAAS,GAAG;AAClD,WAAK,qBAAqB,MAAM,OAAO,KAAK,UAAU;AACtD,WAAK,eAAe,MAAM,OAAO,KAAK,UAAU;AAChD,WAAK,eAAe,MAAM,SAAS,KAAK,UAAU;IACtD,OAAO;AACH,WAAK,qBAAqB,MAAM,OAAO,KAAK,UAAU;AACtD,WAAK,eAAe,MAAM,OAAO,KAAK,UAAU;IACpD;EACJ;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,SAAK,wBAAwB,OAAM;EACvC;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AC3OE,IAAO,6BAAP,MAAiC;EAEnC,cAAA;AACI,SAAK,eAAe,IAAI,yBAAwB;EACpD;;AAGE,IAAO,iCAAP,MAAqC;EAEvC,cAAA;AACI,SAAK,oBAAoB;AAEzB,SAAK,oCAAoC;AAEzC,SAAK,6BAA6B;AAClC,SAAK,0BAA0B;AAE/B,SAAK,iCAAiC;AAEtC,SAAK,eAAe,IAAI,yBAAwB;EACpD;;AAGE,IAAO,uBAAP,MAA2B;EAE7B,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,kBAAkB;AACvB,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AAEvB,SAAK,yBAAyB;AAE9B,SAAK,YAAY;AAEjB,SAAK,mBAAmB;AACxB,SAAK,gBAAgB;AAErB,SAAK,0BAA0B;AAC/B,SAAK,mCAAmC;AAIxC,SAAK,iBAAiB,CAAA;AACtB,SAAK,eAAe,WAAW,IAAI,IAAI,CAAA;AACvC,SAAK,eAAe,WAAW,KAAK,IAAI,CAAA;AAExC,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,MAAM,IAAI,IAAI,2BAA0B;AAC7F,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,OAAO,IAAI,IAAI,2BAA0B;AAC9F,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,UAAU,IAAI,IAAI,2BAA0B;AACjG,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,UAAU,IAAI,IAAI,2BAA0B;AACjG,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,aAAa,IAAI,IAAI,2BAA0B;AAEpG,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,MAAM,IAAI,IAAI,2BAA0B;AAC9F,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,OAAO,IAAI,IAAI,2BAA0B;AAC/F,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,UAAU,IAAI,IAAI,2BAA0B;AAClG,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,UAAU,IAAI,IAAI,2BAA0B;AAClG,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,aAAa,IAAI,IAAI,2BAA0B;AAErG,SAAK,qBAAqB,CAAA;AAC1B,SAAK,mBAAmB,WAAW,IAAI,IAAI,CAAA;AAC3C,SAAK,mBAAmB,WAAW,KAAK,IAAI,CAAA;AAC5C,SAAK,mBAAmB,WAAW,IAAI,EAAE,cAAc,UAAU,IAAI,IAAI,+BAA8B;AACvG,SAAK,mBAAmB,WAAW,KAAK,EAAE,cAAc,UAAU,IAAI,IAAI,+BAA8B;AAExG,SAAK,iBAAiB,CAAA;AACtB,SAAK,eAAe,WAAW,IAAI,IAAI,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;AACpE,SAAK,eAAe,WAAW,KAAK,IAAI,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;AAErE,SAAK,qBAAqB,CAAA;AAC1B,SAAK,mBAAmB,WAAW,IAAI,IAAI,CAAC,IAAI;AAChD,SAAK,mBAAmB,WAAW,KAAK,IAAI,CAAC,IAAI;AAIjD,SAAK,wBAAwB,CAAA;AAE7B,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,iBAAiB;AAEtB,SAAK,mBAAmB;AAExB,SAAK,eAAe;AACpB,SAAK,sBAAsB;AAC3B,SAAK,0BAA0B;AAC/B,SAAK,wBAAwB;AAE7B,SAAK,aAAa;AAElB,SAAK,sBAAsB;AAE3B,SAAK,iCAAiC;AAEtC,SAAK,WAAW;EACpB;EAEA,gBAAa;AACT,SAAK,iBAAiB;AACtB,SAAK,yBAAyB;AAE9B,SAAK,YAAY;AAIjB,QAAI,kBAAkB;AACtB,QAAI,YAAY;AAEhB,QAAI,0BAA0B;AAC9B,QAAI,8BAA8B;AAElC,QAAI,yCAAyC;AAE7C,aAAS,cAAc,KAAK,gBAAgB;AACxC,eAAS,mBAAmB,KAAK,eAAe,UAAU,GAAG;AACzD,YAAI,eAAe,KAAK,eAAe,UAAU,EAAE,eAAe;AAClE,qBAAa,aAAa,oBAAoB;AAC9C,qBAAa,aAAa,2BAA2B;AACrD,qBAAa,aAAa,cAAc;AACxC,qBAAa,aAAa,qBAAqB;AAC/C,qBAAa,aAAa,6BAA6B;MAC3D;IACJ;AAEA,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,OAAO,EAAE,aAAa,aAAa,uBAAuB;AAC/G,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,OAAO,EAAE,aAAa,aAAa,uBAAuB;AAEhH,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,MAAM,EAAE,aAAa,aAAa,uBAAuB;AAC9G,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,MAAM,EAAE,aAAa,aAAa,uBAAuB;AAE/G,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,UAAU,EAAE,aAAa,aAAa,uBAAuB;AAClH,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,UAAU,EAAE,aAAa,aAAa,uBAAuB;AAEnH,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,aAAa,EAAE,aAAa,aAAa,uBAAuB;AACrH,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,aAAa,EAAE,aAAa,aAAa,uBAAuB;AAEtH,SAAK,eAAe,WAAW,IAAI,EAAE,gBAAgB,UAAU,EAAE,aAAa,aAAa,uBAAuB;AAClH,SAAK,eAAe,WAAW,KAAK,EAAE,gBAAgB,UAAU,EAAE,aAAa,aAAa,uBAAuB;AAEnH,aAAS,cAAc,KAAK,oBAAoB;AAC5C,eAAS,iBAAiB,KAAK,mBAAmB,UAAU,GAAG;AAC3D,YAAI,mBAAmB,KAAK,mBAAmB,UAAU,EAAE,aAAa;AACxE,yBAAiB,oBAAoB;AACrC,yBAAiB,aAAa,oBAAoB;AAClD,yBAAiB,aAAa,2BAA2B;AACzD,yBAAiB,aAAa,cAAc;AAC5C,yBAAiB,aAAa,qBAAqB;AACnD,yBAAiB,aAAa,6BAA6B;AAE3D,yBAAiB,iCAAiC;MACtD;IACJ;AAIA,SAAK,eAAe,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,MAAM,gBAAgB,OAAO;AACnF,SAAK,eAAe,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,MAAM,gBAAgB,MAAM;AAClF,SAAK,eAAe,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,MAAM,gBAAgB,UAAU;AACtF,SAAK,eAAe,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,MAAM,gBAAgB,aAAa;AACzF,SAAK,eAAe,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,MAAM,gBAAgB,UAAU;AAEtF,SAAK,eAAe,WAAW,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,OAAO,gBAAgB,OAAO;AACrF,SAAK,eAAe,WAAW,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,OAAO,gBAAgB,MAAM;AACpF,SAAK,eAAe,WAAW,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,OAAO,gBAAgB,UAAU;AACxF,SAAK,eAAe,WAAW,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,OAAO,gBAAgB,aAAa;AAC3F,SAAK,eAAe,WAAW,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,OAAO,gBAAgB,UAAU;AAExF,SAAK,mBAAmB,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,MAAM,cAAc,UAAU;AACxF,SAAK,mBAAmB,WAAW,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,OAAO,cAAc,UAAU;AAI1F,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,iBAAiB;AAEtB,SAAK,mBAAmB;AAExB,SAAK,eAAe;AACpB,SAAK,sBAAsB;AAC3B,SAAK,0BAA0B;AAC/B,SAAK,wBAAwB;AAE7B,SAAK,sBAAsB,IAAI;AAI/B,SAAK,iCAAiC;AACtC,SAAK,wBAAwB,CAAC,CAAC;EACnC;;;;AC9LE,IAAO,8BAAP,MAAkC;EAEpC,YAAY,qBAAqB,sBAAsB,yBAAyB,oBAAoB,yBAAyB,iBAAe;AACxI,SAAK,mBAAmB;AACxB,SAAK,gBAAgB;AACrB,SAAK,4BAA4B;AAEjC,SAAK,YAAY;AAEjB,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAExB,SAAK,aAAa;AAElB,SAAK,0BAA0B;AAC/B,SAAK,YAAY,KAAK,wBAAwB,eAAe,uBAAuB,EAAE,eAAe;AAErG,SAAK,OAAO,qBAAqB,yBAAyB,kBAAkB;AAE5E,SAAK,8BAA8B,KAAK,eAAe,KAAK,MAAM,KAAK,wBAAwB,kCAAkC;AACjI,SAAK,4BAA4B,KAAK,aAAa,KAAK,IAAI;AAC5D,SAAK,+BAA+B,KAAK,gBAAgB,KAAK,IAAI;AAClE,SAAK,6BAA6B,KAAK,eAAe,KAAK,IAAI;AAC/D,SAAK,6BAA6B,KAAK,eAAe,KAAK,IAAI;AAE/D,SAAK,0BAA0B,iBAAiB,eAAe,KAAK,2BAA2B;AAC/F,aAAS,KAAK,iBAAiB,aAAa,KAAK,yBAAyB;AAE1E,QAAI,KAAK,wBAAwB,yBAAyB;AACtD,eAAS,KAAK,iBAAiB,gBAAgB,KAAK,4BAA4B;IACpF;AAEA,SAAK,0BAA0B,iBAAiB,cAAc,KAAK,0BAA0B;AAC7F,SAAK,0BAA0B,iBAAiB,cAAc,KAAK,0BAA0B;AAE7F,SAAK,eAAe;EACxB;EAEA,YAAS;AACL,WAAO,KAAK,aAAa,KAAK;EAClC;EAEA,UAAU,QAAM;AACZ,QAAI,KAAK,aAAa,QAAQ;AAC1B,WAAK,MAAK;AACV,WAAK,cAAc,MAAK;IAC5B;AAEA,SAAK,YAAY;EACrB;EAEA,qBAAqB,aAAW;AAC5B,SAAK,cAAc,qBAAqB,WAAW;EACvD;EAEA,QAAK;AACD,SAAK,cAAc,WAAW,KAAK;AAEnC,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,SAAK,mBAAmB;EAC5B;EAEA,OAAO,IAAE;AACL,SAAK,cAAc,OAAO,EAAE;EAChC;EAEA,eAAe,kCAAkC,OAAK;AAClD,QAAI,CAAC,KAAK;AAAW;AACrB,QAAI,KAAK;AAAY;AACrB,QAAI,CAAC,KAAK,wBAAwB,sBAAsB,YAAY,MAAM,MAAM;AAAG;AAEnF,QAAI,kCAAkC;AAClC,YAAM,gBAAe;IACzB;AACA,UAAM,eAAc;AAEpB,SAAK,cAAc,WAAW,IAAI;AAElC,SAAK,eAAe,MAAM;AAC1B,SAAK,mBAAmB,MAAM;AAE9B,SAAK,aAAa;EACtB;EAEA,aAAa,OAAK;AACd,QAAI,CAAC,KAAK;AAAW;AACrB,QAAI,CAAC,KAAK;AAAY;AACtB,QAAI,KAAK,gBAAgB,MAAM;AAAW;AAC1C,QAAI,KAAK,oBAAoB,QAAQ,KAAK,oBAAoB,MAAM;AAAQ;AAE5E,SAAK,MAAK;EACd;EAEA,gBAAgB,OAAK;AACjB,QAAI,CAAC,KAAK;AAAW;AACrB,QAAI,KAAK,gBAAgB,MAAM;AAAW;AAE1C,SAAK,MAAK;EACd;EAEA,eAAe,OAAK;AAChB,QAAI,CAAC,KAAK;AAAW;AAErB,SAAK,cAAc,aAAa,KAAK;EACzC;EAEA,eAAe,OAAK;AAChB,QAAI,CAAC,KAAK;AAAW;AAErB,SAAK,cAAc,aAAa,KAAK;EACzC;EAEA,OAAO,qBAAqB,yBAAyB,oBAAkB;AAGnE,QAAI,aAAa,KAAK,wBAAwB,eAAe,KAAK,wBAAwB;AAC1F,QAAI,oBAAoB,KAAK,wBAAwB,sBAAsB,KAAK,wBAAwB;AAExG,QAAI,iBAAiB,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAElG,QAAI,eAAe,KAAK,wBAAwB,iBAAiB,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAC9I,QAAI,aAAa,KAAK,wBAAwB,eAAe,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAC1I,QAAI,cAAc,KAAK,wBAAwB,gBAAgB,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAE5I,QAAI,uBAAuB,KAAK,wBAAwB;AACxD,QAAI,qBAAqB,KAAK,wBAAwB;AAEtD,QAAI,oBAAoB,KAAK,IAAI,GAAG,KAAK,wBAAwB,sBAAsB,KAAK,wBAAwB,gBAAgB;AAEpI,QAAI,gBAAgB,KAAK,wBAAwB,eAAe,WAAW,IAAI,EAAE;AAEjF,QAAI,aAAa,qBAAqB,yBAAyB,gBAAgB;AAE/E,QAAI,eAAe,KAAK,cAAc,uBAAuB,YAAY,kBAAkB;AAE3F,QAAI,2BAA2B,WAAW,OAAO;AAC7C,qBAAe,OAAO,MAAM;AAC5B,qBAAe,KAAK,cAAc,cAAc,IAAI;IACxD;AAEA,QAAI,eAAe,MAAM;AAIzB,SAAK,qBAAqB,SAAS,cAAc,KAAK;AACtD,SAAK,mBAAmB,MAAM,WAAW;AACzC,SAAK,mBAAmB,MAAM,QAAQ,KAAK,iBAAiB,YAAY,iBAAiB;AACzF,SAAK,mBAAmB,MAAM,SAAS,KAAK,iBAAiB,YAAY,iBAAiB;AAE1F,QAAI,2BAA2B,eAAe,iBAAiB,IAAI,aAAa;AAEhF,SAAK,mBAAmB,MAAM,SAAS,KAAK,iBAAiB,0BAA0B,iBAAiB;AAExG,QAAI,2BAA2B,WAAW,MAAM;AAC5C,UAAI,yBAAyB,aAAa,iBAAiB,IAAI,aAAa;AAC5E,WAAK,mBAAmB,MAAM,OAAO,KAAK,iBAAiB,wBAAwB,iBAAiB;IACxG,OAAO;AACH,UAAI,0BAA0B,cAAc,iBAAiB,IAAI,aAAa;AAC9E,WAAK,mBAAmB,MAAM,QAAQ,KAAK,iBAAiB,yBAAyB,iBAAiB;IAC1G;AAEA,SAAK,mBAAmB,MAAM,YAAY,YAAY,eAAe,qBAAqB,KAAK,iBAAiB,mBAAmB,iBAAiB,IAAI;AACxJ,wBAAoB,YAAY,KAAK,kBAAkB;AAEvD,SAAK,mBAAmB,SAAS,cAAc,KAAK;AACpD,SAAK,iBAAiB,MAAM,WAAW;AACvC,SAAK,iBAAiB,MAAM,QAAQ;AACpC,SAAK,iBAAiB,MAAM,SAAS;AACrC,SAAK,iBAAiB,MAAM,YAAY,YAAY,eAAe;AACnE,SAAK,mBAAmB,YAAY,KAAK,gBAAgB;AAEzD,SAAK,gBAAgB,IAAI,mBAAmB,KAAK,kBAAkB,KAAK,UAAU,cAAc,mBAAmB,KAAK,wBAAwB,kBAAkB,KAAK,wBAAwB,QAAQ;AAEvM,QAAI,qBAAqB,SAAS,cAAc,KAAK;AACrD,uBAAmB,MAAM,WAAW;AACpC,uBAAmB,MAAM,QAAQ;AACjC,uBAAmB,MAAM,SAAS;AAClC,uBAAmB,MAAM,YAAY,YAAY,eAAe;AAChE,SAAK,mBAAmB,YAAY,kBAAkB;AAEtD,QAAI,4BAA4B,SAAS,gBAAgB,8BAA8B,KAAK;AAC5F,8BAA0B,MAAM,WAAW;AAC3C,8BAA0B,MAAM,QAAQ;AACxC,8BAA0B,MAAM,SAAS;AACzC,uBAAmB,YAAY,yBAAyB;AAExD,QAAI,yBAAyB,SAAS,gBAAgB,8BAA8B,QAAQ;AAC5F,2BAAuB,eAAe,MAAM,MAAM,KAAK;AACvD,2BAAuB,eAAe,MAAM,MAAM,KAAK;AACvD,2BAAuB,eAAe,MAAM,KAAK,KAAK;AACtD,2BAAuB,MAAM,OAAO;AACpC,8BAA0B,YAAY,sBAAsB;AAE5D,SAAK,4BAA4B;EACrC;EAEA,iBAAiB,OAAO,mBAAiB;AACrC,WAAO,SAAS,MAAM,QAAQ,CAAC,IAAI,WAAW,QAAQ,mBAAmB,QAAQ,CAAC,IAAI;EAC1F;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,SAAK,0BAA0B,oBAAoB,eAAe,KAAK,2BAA2B;AAElG,aAAS,KAAK,oBAAoB,aAAa,KAAK,yBAAyB;AAC7E,aAAS,KAAK,oBAAoB,gBAAgB,KAAK,4BAA4B;AAEnF,SAAK,0BAA0B,oBAAoB,cAAc,KAAK,0BAA0B;AAChG,SAAK,0BAA0B,oBAAoB,cAAc,KAAK,mDAAmD;AAEzH,SAAK,cAAc,QAAO;AAE1B,SAAK,mBAAmB,OAAM;EAClC;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AC1NE,IAAO,kCAAP,MAAsC;EAExC,YAAY,yBAAyB,sBAAsB,6BAA6B,6BAA6B,eAAa;AAC9H,SAAK,uBAAuB;AAC5B,SAAK,oBAAoB;AACzB,SAAK,0BAA0B;AAC/B,SAAK,gCAAgC;AAErC,SAAK,YAAY;AAEjB,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAExB,SAAK,iCAAiC,YAAW;AAEjD,SAAK,UAAU,YAAW;AAC1B,SAAK,aAAa;AAElB,SAAK,0BAA0B;AAC/B,SAAK,YAAY,KAAK,wBAAwB,mBAAmB,2BAA2B,EAAE,aAAa;AAE3G,SAAK,OAAO,yBAAyB,2BAA2B;AAEhE,SAAK,8BAA8B,KAAK,eAAe,KAAK,MAAM,KAAK,wBAAwB,kCAAkC;AACjI,SAAK,4BAA4B,KAAK,aAAa,KAAK,IAAI;AAC5D,SAAK,8BAA8B,KAAK,eAAe,KAAK,IAAI;AAChE,SAAK,+BAA+B,KAAK,gBAAgB,KAAK,IAAI;AAClE,SAAK,6BAA6B,KAAK,mBAAmB,KAAK,IAAI;AACnE,SAAK,6BAA6B,KAAK,mBAAmB,KAAK,IAAI;AAEnE,SAAK,8BAA8B,iBAAiB,eAAe,KAAK,2BAA2B;AACnG,aAAS,KAAK,iBAAiB,aAAa,KAAK,yBAAyB;AAC1E,aAAS,KAAK,iBAAiB,eAAe,KAAK,2BAA2B;AAE9E,QAAI,KAAK,wBAAwB,yBAAyB;AACtD,eAAS,KAAK,iBAAiB,gBAAgB,KAAK,4BAA4B;IACpF;AAEA,SAAK,8BAA8B,iBAAiB,cAAc,KAAK,0BAA0B;AACjG,SAAK,8BAA8B,iBAAiB,cAAc,KAAK,0BAA0B;AAEjG,SAAK,eAAe;EACxB;EAEA,YAAS;AACL,WAAO,KAAK,aAAa,KAAK;EAClC;EAEA,UAAO;AACH,WAAO,KAAK;EAChB;EAEA,UAAU,QAAM;AACZ,QAAI,KAAK,aAAa,QAAQ;AAC1B,WAAK,MAAK;AACV,WAAK,kBAAkB,MAAK;IAChC;AAEA,SAAK,YAAY;EACrB;EAEA,qBAAqB,aAAW;AAC5B,SAAK,kBAAkB,qBAAqB,WAAW;EAC3D;EAEA,QAAK;AACD,SAAK,kBAAkB,WAAW,KAAK;AAEvC,SAAK,QAAQ,CAAC,IAAI;AAClB,SAAK,QAAQ,CAAC,IAAI;AAClB,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAExB,SAAK,qBAAqB,MAAM,aAAa,SAAS,KAAK,UAAU,6BAA6B;AAClG,SAAK,qBAAqB,MAAM,YAAY;EAChD;EAEA,OAAO,IAAE;AACL,SAAK,kBAAkB,OAAO,EAAE;EACpC;EAEA,eAAe,kCAAkC,OAAK;AAClD,QAAI,CAAC,KAAK;AAAW;AACrB,QAAI,KAAK;AAAY;AACrB,QAAI,CAAC,KAAK,wBAAwB,sBAAsB,YAAY,MAAM,MAAM;AAAG;AAEnF,QAAI,kCAAkC;AAClC,YAAM,gBAAe;IACzB;AACA,UAAM,eAAc;AAEpB,SAAK,kBAAkB,WAAW,IAAI;AAEtC,SAAK,eAAe,MAAM;AAC1B,SAAK,mBAAmB,MAAM;AAE9B,SAAK,+BAA+B,CAAC,IAAI,MAAM;AAC/C,SAAK,+BAA+B,CAAC,IAAI,MAAM;AAE/C,SAAK,aAAa;EACtB;EAEA,aAAa,OAAK;AACd,QAAI,CAAC,KAAK;AAAW;AACrB,QAAI,CAAC,KAAK;AAAY;AACtB,QAAI,KAAK,gBAAgB,MAAM;AAAW;AAC1C,QAAI,KAAK,oBAAoB,QAAQ,KAAK,oBAAoB,MAAM;AAAQ;AAE5E,SAAK,MAAK;EACd;EAEA,gBAAgB,OAAK;AACjB,QAAI,CAAC,KAAK;AAAW;AACrB,QAAI,KAAK,gBAAgB,MAAM;AAAW;AAE1C,SAAK,MAAK;EACd;EAEA,mBAAmB,OAAK;AACpB,SAAK,kBAAkB,aAAa,KAAK;EAC7C;EAEA,mBAAmB,OAAK;AACpB,SAAK,kBAAkB,aAAa,KAAK;EAC7C;EAEA,eAAe,OAAK;AAChB,QAAI,CAAC,KAAK;AAAW;AACrB,QAAI,CAAC,KAAK;AAAY;AAEtB,QAAI,MAAM,aAAa,KAAK;AAAc;AAE1C,QAAI,SAAS,MAAM;AACnB,QAAI,SAAS,MAAM;AAEnB,QAAI,iBAAiB,KAAK,wBAAwB,sBAAqB;AACvE,QAAI,wBAAyB,eAAe,QAAQ,IAAK,KAAK,UAAU;AAExE,QAAI,QAAQ,SAAS,KAAK,+BAA+B,CAAC;AAC1D,QAAI,QAAQ,SAAS,KAAK,+BAA+B,CAAC;AAE1D,QAAIC,SAAQ,KAAK,MAAM,OAAO,KAAK;AACnC,QAAI,wBAAwB,KAAK,IAAI,uBAAuB,KAAK,MAAM,OAAO,KAAK,CAAC;AAEpF,QAAI,uBAAuB,wBAAwB,KAAK,IAAIA,MAAK;AACjE,QAAI,uBAAuB,wBAAwB,KAAK,IAAIA,MAAK;AAEjE,SAAK,qBAAqB,MAAM,aAAa,SAAS,KAAK,UAAU,0BAA0B;AAC/F,SAAK,qBAAqB,MAAM,YAAY,eAAe,uBAAuB,SAAS,uBAAuB;AAElH,SAAK,QAAQ,CAAC,IAAI,uBAAuB;AACzC,SAAK,QAAQ,CAAC,IAAI,EAAE,uBAAuB;EAC/C;EAEA,OAAO,yBAAyB,6BAA2B;AAGvD,QAAI,iBAAiB,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAElG,QAAI,eAAe,KAAK,wBAAwB,iBAAiB,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAC9I,QAAI,aAAa,KAAK,wBAAwB,eAAe,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAC1I,QAAI,cAAc,KAAK,wBAAwB,gBAAgB,KAAK,wBAAwB,mBAAmB,KAAK,wBAAwB;AAE5I,QAAI,oBAAoB,KAAK,IAAI,GAAG,KAAK,wBAAwB,sBAAsB,KAAK,wBAAwB,gBAAgB;AAIpI,SAAK,yBAAyB,SAAS,cAAc,KAAK;AAC1D,SAAK,uBAAuB,MAAM,WAAW;AAC7C,SAAK,uBAAuB,MAAM,QAAQ,KAAK,iBAAiB,gBAAgB,iBAAiB;AACjG,SAAK,uBAAuB,MAAM,SAAS,KAAK,iBAAiB,gBAAgB,iBAAiB;AAClG,SAAK,uBAAuB,MAAM,SAAS,KAAK,iBAAiB,cAAc,iBAAiB;AAEhG,QAAI,+BAA+B,WAAW,MAAM;AAChD,WAAK,uBAAuB,MAAM,OAAO,KAAK,iBAAiB,YAAY,iBAAiB;IAChG,OAAO;AACH,WAAK,uBAAuB,MAAM,QAAQ,KAAK,iBAAiB,aAAa,iBAAiB;IAClG;AAEA,4BAAwB,YAAY,KAAK,sBAAsB;AAE/D,QAAI,yBAAyB,SAAS,gBAAgB,8BAA8B,KAAK;AACzF,2BAAuB,MAAM,WAAW;AACxC,2BAAuB,MAAM,QAAQ;AACrC,2BAAuB,MAAM,SAAS;AACtC,SAAK,uBAAuB,YAAY,sBAAsB;AAE9D,SAAK,0BAA0B,SAAS,gBAAgB,8BAA8B,QAAQ;AAC9F,SAAK,wBAAwB,eAAe,MAAM,MAAM,KAAK;AAC7D,SAAK,wBAAwB,eAAe,MAAM,MAAM,KAAK;AAC7D,SAAK,wBAAwB,eAAe,MAAM,KAAK,KAAK;AAC5D,SAAK,wBAAwB,MAAM,OAAO,KAAK,UAAU;AACzD,2BAAuB,YAAY,KAAK,uBAAuB;AAE/D,SAAK,uBAAuB,SAAS,cAAc,KAAK;AACxD,SAAK,qBAAqB,MAAM,WAAW;AAC3C,SAAK,qBAAqB,MAAM,QAAQ;AACxC,SAAK,qBAAqB,MAAM,SAAS;AACzC,SAAK,qBAAqB,MAAM,MAAM;AACtC,SAAK,qBAAqB,MAAM,OAAO;AACvC,SAAK,uBAAuB,YAAY,KAAK,oBAAoB;AAEjE,SAAK,oBAAoB,IAAI,mBAAmB,KAAK,sBAAsB,KAAK,UAAU,cAAc,mBAAmB,KAAK,wBAAwB,SAAS,KAAK,wBAAwB,QAAQ;AAEtM,QAAI,KAAK,UAAU,gCAAgC;AAC/C,UAAI,0CAA0C,SAAS,gBAAgB,8BAA8B,KAAK;AAC1G,8CAAwC,MAAM,WAAW;AACzD,8CAAwC,MAAM,QAAQ;AACtD,8CAAwC,MAAM,SAAS;AACvD,WAAK,uBAAuB,YAAY,uCAAuC;AAE/E,UAAI,uCAAuC,SAAS,gBAAgB,8BAA8B,QAAQ;AAC1G,2CAAqC,eAAe,MAAM,MAAM,KAAK;AACrE,2CAAqC,eAAe,MAAM,MAAM,KAAK;AACrE,2CAAqC,eAAe,MAAM,KAAK,KAAK;AACpE,2CAAqC,MAAM,OAAO;AAClD,8CAAwC,YAAY,oCAAoC;AAExF,WAAK,gCAAgC;IACzC,OAAO;AACH,UAAI,yBAAyB,SAAS,cAAc,KAAK;AACzD,6BAAuB,MAAM,WAAW;AACxC,6BAAuB,MAAM,QAAQ;AACrC,6BAAuB,MAAM,SAAS;AACtC,6BAAuB,MAAM,MAAM;AACnC,6BAAuB,MAAM,OAAO;AACpC,WAAK,uBAAuB,YAAY,sBAAsB;AAE9D,UAAI,gCAAgC,SAAS,gBAAgB,8BAA8B,KAAK;AAChG,oCAA8B,MAAM,WAAW;AAC/C,oCAA8B,MAAM,QAAQ;AAC5C,oCAA8B,MAAM,SAAS;AAC7C,6BAAuB,YAAY,6BAA6B;AAEhE,UAAI,6BAA6B,SAAS,gBAAgB,8BAA8B,QAAQ;AAChG,iCAA2B,eAAe,MAAM,MAAM,KAAK;AAC3D,iCAA2B,eAAe,MAAM,MAAM,KAAK;AAC3D,iCAA2B,eAAe,MAAM,KAAK,KAAK;AAC1D,iCAA2B,MAAM,OAAO;AACxC,oCAA8B,YAAY,0BAA0B;AAEpE,WAAK,gCAAgC;IACzC;EACJ;EAEA,iBAAiB,OAAO,mBAAiB;AACrC,WAAO,SAAS,MAAM,QAAQ,CAAC,IAAI,WAAW,QAAQ,mBAAmB,QAAQ,CAAC,IAAI;EAC1F;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,SAAK,8BAA8B,oBAAoB,eAAe,KAAK,2BAA2B;AAEtG,aAAS,KAAK,oBAAoB,aAAa,KAAK,yBAAyB;AAC7E,aAAS,KAAK,oBAAoB,eAAe,KAAK,2BAA2B;AACjF,aAAS,KAAK,oBAAoB,gBAAgB,KAAK,4BAA4B;AAEnF,SAAK,8BAA8B,oBAAoB,cAAc,KAAK,0BAA0B;AACpG,SAAK,8BAA8B,oBAAoB,cAAc,KAAK,mDAAmD;AAE7H,SAAK,kBAAkB,QAAO;AAE9B,SAAK,uBAAuB,OAAM;EACtC;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;ACxQE,IAAO,iBAAP,MAAqB;EAEvB,YAAY,SAAS,IAAI,qBAAoB,GAAE;AAC3C,SAAK,YAAY;AAEjB,SAAK,aAAa;AAClB,SAAK,6BAA6B;AAElC,SAAK,kCAAkC,CAAA;AACvC,SAAK,gCAAgC,WAAW,IAAI,IAAI,CAAA;AACxD,SAAK,gCAAgC,WAAW,KAAK,IAAI,CAAA;AAEzD,SAAK,gCAAgC,WAAW,IAAI,EAAE,gBAAgB,MAAM,IAAI;AAChF,SAAK,gCAAgC,WAAW,IAAI,EAAE,gBAAgB,OAAO,IAAI;AACjF,SAAK,gCAAgC,WAAW,IAAI,EAAE,gBAAgB,UAAU,IAAI;AACpF,SAAK,gCAAgC,WAAW,IAAI,EAAE,gBAAgB,UAAU,IAAI;AACpF,SAAK,gCAAgC,WAAW,IAAI,EAAE,gBAAgB,aAAa,IAAI;AAEvF,SAAK,gCAAgC,WAAW,KAAK,EAAE,gBAAgB,MAAM,IAAI;AACjF,SAAK,gCAAgC,WAAW,KAAK,EAAE,gBAAgB,OAAO,IAAI;AAClF,SAAK,gCAAgC,WAAW,KAAK,EAAE,gBAAgB,UAAU,IAAI;AACrF,SAAK,gCAAgC,WAAW,KAAK,EAAE,gBAAgB,UAAU,IAAI;AACrF,SAAK,gCAAgC,WAAW,KAAK,EAAE,gBAAgB,aAAa,IAAI;AAExF,SAAK,mBAAmB,KAAK,gCAAgC,WAAW,IAAI,EAAE;AAE9E,SAAK,sCAAsC,CAAA;AAC3C,SAAK,oCAAoC,WAAW,IAAI,IAAI,CAAA;AAC5D,SAAK,oCAAoC,WAAW,KAAK,IAAI,CAAA;AAC7D,SAAK,oCAAoC,WAAW,IAAI,EAAE,cAAc,UAAU,IAAI;AACtF,SAAK,oCAAoC,WAAW,KAAK,EAAE,cAAc,UAAU,IAAI;AAEvF,SAAK,+BAA+B;AAEpC,SAAK,eAAe;EACxB;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,WAAW,SAAO;AACd,QAAI,KAAK,cAAc,SAAS;AAC5B,WAAK,aAAa;AAElB,UAAI,KAAK,8BAA8B,MAAM;AACzC,YAAI,KAAK,YAAY;AACjB,eAAK,2BAA2B,MAAM,UAAU;QACpD,OAAO;AACH,eAAK,2BAA2B,MAAM,UAAU;QACpD;AAEA,iBAAS,cAAc,KAAK,iCAAiC;AACzD,mBAAS,mBAAmB,KAAK,gCAAgC,UAAU,GAAG;AAC1E,gBAAI,SAAS,KAAK,gCAAgC,UAAU,EAAE,eAAe;AAC7E,gBAAI,UAAU,MAAM;AAChB,qBAAO,UAAU,KAAK,UAAU;YACpC;UACJ;QACJ;AAEA,iBAAS,cAAc,KAAK,qCAAqC;AAC7D,mBAAS,iBAAiB,KAAK,oCAAoC,UAAU,GAAG;AAC5E,gBAAI,aAAa,KAAK,oCAAoC,UAAU,EAAE,aAAa;AACnF,gBAAI,cAAc,MAAM;AACpB,yBAAW,UAAU,KAAK,UAAU;YACxC;UACJ;QACJ;MACJ;IACJ;EACJ;EAEA,gBAAgB,YAAY,iBAAe;AACvC,QAAI,CAAC,KAAK;AAAY,aAAO;AAE7B,QAAI,SAAS,KAAK,gCAAgC,UAAU,EAAE,eAAe;AAC7E,QAAI,UAAU,MAAM;AAChB,aAAO,OAAO,UAAS;IAC3B;AAEA,WAAO;EACX;EAEA,QAAQ,YAAY,eAAe,UAAU,YAAY,GAAG,CAAC,GAAC;AAC1D,QAAI,CAAC,KAAK;AAAY,aAAO;AAE7B,QAAI,aAAa,KAAK,oCAAoC,UAAU,EAAE,aAAa;AACnF,QAAI,cAAc,MAAM;AACpB,cAAQ,UAAU,WAAW,QAAO,CAAE;IAC1C;AAEA,WAAO;EACX;EAEA,QAAK;AACD,SAAK,qBAAoB;AAEzB,QAAI,iBAAiB,KAAK;AAC1B,SAAK,aAAa,CAAC,KAAK;AACxB,SAAK,WAAW,cAAc;EAClC;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,UAAU,wBAAwB;AACvC,UAAI,QAAQ,gBAAgB,KAAK,UAAU,QAAQ,KAAK,QAAQ,cAAc,KAAK,UAAU,QAAQ,GAAG;AACpG,aAAK,WAAW,KAAK;MACzB,WAAW,KAAK,UAAU,mBAAmB,aAAa,UAAS,KAAM,CAAC,QAAQ,cAAc,KAAK,UAAU,QAAQ,GAAG;AACtH,aAAK,WAAW,IAAI;MACxB,WAAW,KAAK,UAAU,mBAAmB,aAAa,UAAS,KAAM,QAAQ,cAAc,KAAK,UAAU,QAAQ,GAAG;AACrH,aAAK,WAAW,IAAI;MACxB,WAAW,KAAK,UAAU,kBAAkB,aAAa,SAAQ,GAAI;AACjE,aAAK,WAAW,IAAI;MACxB,OAAO;AACH,aAAK,WAAW,KAAK;MACzB;IACJ;AAEA,QAAI,KAAK,YAAY;AACjB,eAAS,cAAc,KAAK,iCAAiC;AACzD,iBAAS,mBAAmB,KAAK,gCAAgC,UAAU,GAAG;AAC1E,cAAI,SAAS,KAAK,gCAAgC,UAAU,EAAE,eAAe;AAC7E,cAAI,UAAU,MAAM;AAChB,mBAAO,OAAO,EAAE;UACpB;QACJ;MACJ;AAEA,eAAS,cAAc,KAAK,qCAAqC;AAC7D,iBAAS,iBAAiB,KAAK,oCAAoC,UAAU,GAAG;AAC5E,cAAI,aAAa,KAAK,oCAAoC,UAAU,EAAE,aAAa;AACnF,cAAI,cAAc,MAAM;AACpB,uBAAW,OAAO,EAAE;UACxB;QACJ;MACJ;AAEA,WAAK,sBAAsB,EAAE,KAAK,UAAU,kCAAkC,KAAK,qBAAoB,EAAG;IAC9G;EACJ;EAEA,uBAAoB;AAChB,SAAK,mBAAkB;AAEvB,SAAK,6BAA6B,SAAS,cAAc,KAAK;AAC9D,SAAK,2BAA2B,MAAM,UAAU;AAChD,SAAK,2BAA2B,MAAM,UAAU,KAAK,UAAU,UAAU,SAAQ;AACjF,aAAS,KAAK,YAAY,KAAK,0BAA0B;AAEzD,QAAI,UAAU,SAAS,cAAc,KAAK;AAC1C,SAAK,2BAA2B,YAAY,OAAO;AAEnD,QAAI,WAAW,SAAS,cAAc,KAAK;AAC3C,SAAK,2BAA2B,YAAY,QAAQ;AAEpD,QAAI,gBAAgB,KAAK,UAAU,eAAe,WAAW,IAAI,EAAE;AACnE,aAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACpC,UAAI,KAAK,UAAU,eAAe,WAAW,IAAI,EAAE,CAAC,KAAK,MAAM;AAC3D,YAAI,0BAA0B,KAAK,UAAU,eAAe,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;AACjF,YAAI,kBAAkB,KAAK,UAAU,eAAe,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;AACzE,aAAK,aAAa,SAAS,WAAW,MAAM,GAAG,yBAAyB,eAAe;MAC3F;AAEA,UAAI,KAAK,UAAU,eAAe,WAAW,KAAK,EAAE,CAAC,KAAK,MAAM;AAC5D,YAAI,0BAA0B,KAAK,UAAU,eAAe,WAAW,KAAK,EAAE,CAAC,EAAE,CAAC;AAClF,YAAI,kBAAkB,KAAK,UAAU,eAAe,WAAW,KAAK,EAAE,CAAC,EAAE,CAAC;AAC1E,aAAK,aAAa,UAAU,WAAW,OAAO,GAAG,yBAAyB,eAAe;MAC7F;IACJ;AAEA,QAAI,oBAAoB,KAAK,UAAU,mBAAmB,WAAW,IAAI,EAAE;AAC3E,aAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AACxC,UAAI,KAAK,UAAU,mBAAmB,WAAW,IAAI,EAAE,CAAC,KAAK,MAAM;AAC/D,YAAI,8BAA8B,KAAK,UAAU,mBAAmB,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;AACzF,YAAI,gBAAgB,KAAK,UAAU,mBAAmB,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;AAC3E,aAAK,iBAAiB,SAAS,WAAW,MAAM,6BAA6B,aAAa;MAC9F;AAEA,UAAI,KAAK,UAAU,mBAAmB,WAAW,KAAK,EAAE,CAAC,KAAK,MAAM;AAChE,YAAI,8BAA8B,KAAK,UAAU,mBAAmB,WAAW,KAAK,EAAE,CAAC,EAAE,CAAC;AAC1F,YAAI,gBAAgB,KAAK,UAAU,mBAAmB,WAAW,KAAK,EAAE,CAAC,EAAE,CAAC;AAC5E,aAAK,iBAAiB,UAAU,WAAW,OAAO,6BAA6B,aAAa;MAChG;IACJ;EACJ;EAEA,qBAAkB;AACd,aAAS,KAAK,MAAM,WAAW;AAC/B,aAAS,KAAK,MAAM,aAAa;AACjC,aAAS,KAAK,MAAM,mBAAmB;AACvC,aAAS,KAAK,MAAM,0BAA0B;AAC9C,aAAS,KAAK,MAAM,cAAc;AAElC,SAAK,+BAA+B,SAAU,GAAC;AAC3C,QAAE,eAAc;IACpB;AACA,aAAS,iBAAiB,gBAAgB,KAAK,4BAA4B;EAC/E;EAEA,aAAa,qBAAqB,yBAAyB,oBAAoB,yBAAyB,iBAAe;AACnH,QAAI,8BAA8B,IAAI,4BAA4B,qBAAqB,KAAK,WAAW,yBAAyB,oBAAoB,yBAAyB,eAAe;AAC5L,SAAK,gCAAgC,uBAAuB,EAAE,eAAe,IAAI;EACrF;EAEA,iBAAiB,yBAAyB,6BAA6B,6BAA6B,eAAa;AAC7G,QAAI,kCAAkC,IAAI,gCAAgC,yBAAyB,KAAK,WAAW,6BAA6B,6BAA6B,aAAa;AAC1L,SAAK,oCAAoC,2BAA2B,EAAE,aAAa,IAAI;EAC3F;EAEA,iBAAiB,OAAO,mBAAiB;AACrC,WAAO,SAAS,MAAM,QAAQ,CAAC,IAAI,WAAW,QAAQ,mBAAmB,QAAQ,CAAC,IAAI;EAC1F;EAEA,uBAAoB;AAChB,QAAI,oBAAoB;AAExB,aAAS,cAAc,KAAK,iCAAiC;AACzD,eAAS,mBAAmB,KAAK,gCAAgC,UAAU,GAAG;AAC1E,YAAI,SAAS,KAAK,gCAAgC,UAAU,EAAE,eAAe;AAC7E,YAAI,UAAU,QAAQ,OAAO,UAAS,GAAI;AACtC,8BAAoB;AACpB;QACJ;MACJ;IACJ;AAEA,QAAI,CAAC,mBAAmB;AACpB,eAAS,cAAc,KAAK,qCAAqC;AAC7D,iBAAS,iBAAiB,KAAK,oCAAoC,UAAU,GAAG;AAC5E,cAAI,aAAa,KAAK,oCAAoC,UAAU,EAAE,aAAa;AACnF,cAAI,cAAc,QAAQ,WAAW,UAAS,GAAI;AAC9C,gCAAoB;AACpB;UACJ;QACJ;MACJ;IACJ;AAEA,WAAO;EACX;EAEA,sBAAsB,aAAW;AAC7B,aAAS,cAAc,KAAK,iCAAiC;AACzD,eAAS,mBAAmB,KAAK,gCAAgC,UAAU,GAAG;AAC1E,YAAI,SAAS,KAAK,gCAAgC,UAAU,EAAE,eAAe;AAC7E,YAAI,UAAU,MAAM;AAChB,iBAAO,qBAAqB,WAAW;QAC3C;MACJ;IACJ;AAEA,aAAS,cAAc,KAAK,qCAAqC;AAC7D,eAAS,iBAAiB,KAAK,oCAAoC,UAAU,GAAG;AAC5E,YAAI,aAAa,KAAK,oCAAoC,UAAU,EAAE,aAAa;AACnF,YAAI,cAAc,MAAM;AACpB,qBAAW,qBAAqB,WAAW;QAC/C;MACJ;IACJ;EACJ;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,aAAS,oBAAoB,gBAAgB,KAAK,4BAA4B;AAE9E,aAAS,cAAc,KAAK,iCAAiC;AACzD,eAAS,mBAAmB,KAAK,gCAAgC,UAAU,GAAG;AAC1E,YAAI,SAAS,KAAK,gCAAgC,UAAU,EAAE,eAAe;AAC7E,YAAI,UAAU,MAAM;AAChB,iBAAO,QAAO;QAClB;MACJ;IACJ;AAEA,aAAS,cAAc,KAAK,qCAAqC;AAC7D,eAAS,iBAAiB,KAAK,oCAAoC,UAAU,GAAG;AAC5E,YAAI,aAAa,KAAK,oCAAoC,UAAU,EAAE,aAAa;AACnF,YAAI,cAAc,MAAM;AACpB,qBAAW,QAAO;QACtB;MACJ;IACJ;AAEA,SAAK,2BAA2B,OAAM;EAC1C;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AC1SJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAQ9B,IAAO,0BAAP,cAAuCC,YAAS;EAClD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,kBAAkBC,WAAS,KAAK,KAAK;;IACrC,iBAAiBA,WAAS,KAAK,IAAI;IACnC,kBAAkBA,WAAS,KAAK,KAAK;;IACrC,0BAA0BA,WAAS,KAAK,IAAI;IAC5C,YAAYA,WAAS,MAAM,GAAG;IAC9B,cAAcA,WAAS,OAAO,SAAS;IACvC,oBAAoBA,WAAS,OAAO,SAAS;IAC7C,mBAAmBA,WAAS,MAAM,CAAC;IACnC,gBAAgBA,WAAS,MAAM,CAAC;IAEhC,uBAAuBA,WAAS,OAAO,EAAE;IAEzC,kBAAkBA,WAAS,MAAM,CAAC;IAClC,oBAAoBA,WAAS,OAAO,YAAY;IAChD,oBAAoBA,WAAS,OAAO,MAAM;IAC1C,2BAA2BA,WAAS,MAAM,GAAG;IAE7C,4BAA4BA,WAAS,KAAK,IAAI;IAC9C,+BAA+BA,WAAS,IAAI,CAAC;IAC7C,6BAA6BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,OAAO;IAC1H,wCAAwCA,WAAS,OAAO,EAAE;IAE1D,6BAA6BA,WAAS,KAAK,IAAI;IAC/C,gCAAgCA,WAAS,IAAI,CAAC;IAC9C,8BAA8BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,QAAQ;IAC5H,yCAAyCA,WAAS,OAAO,EAAE;IAE3D,gCAAgCA,WAAS,KAAK,IAAI;IAClD,mCAAmCA,WAAS,IAAI,CAAC;IACjD,iCAAiCA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,KAAK;IAC5H,4CAA4CA,WAAS,OAAO,EAAE;IAE9D,yBAAyBA,WAAS,KAAK,IAAI;IAC3C,4BAA4BA,WAAS,IAAI,CAAC;IAC1C,0BAA0BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,QAAQ;IACxH,qCAAqCA,WAAS,OAAO,EAAE;IAEvD,4BAA4BA,WAAS,KAAK,IAAI;IAC9C,+BAA+BA,WAAS,IAAI,CAAC;IAC7C,6BAA6BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,MAAM;IACzH,wCAAwCA,WAAS,OAAO,EAAE;IAE1D,6BAA6BA,WAAS,KAAK,IAAI;IAC/C,gCAAgCA,WAAS,IAAI,CAAC;IAC9C,8BAA8BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,OAAO;IAC3H,yCAAyCA,WAAS,OAAO,EAAE;IAE3D,8BAA8BA,WAAS,KAAK,IAAI;IAChD,iCAAiCA,WAAS,IAAI,CAAC;IAC/C,+BAA+BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,QAAQ;IAC7H,0CAA0CA,WAAS,OAAO,EAAE;IAE5D,iCAAiCA,WAAS,KAAK,IAAI;IACnD,oCAAoCA,WAAS,IAAI,CAAC;IAClD,kCAAkCA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,KAAK;IAC7H,6CAA6CA,WAAS,OAAO,EAAE;IAE/D,0BAA0BA,WAAS,KAAK,IAAI;IAC5C,6BAA6BA,WAAS,IAAI,CAAC;IAC3C,2BAA2BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,QAAQ;IACzH,sCAAsCA,WAAS,OAAO,EAAE;IAExD,6BAA6BA,WAAS,KAAK,IAAI;IAC/C,gCAAgCA,WAAS,IAAI,CAAC;IAC9C,8BAA8BA,WAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,OAAO,UAAU,UAAU,QAAQ,OAAO,GAAG,MAAM;IAC1H,yCAAyCA,WAAS,OAAO,EAAE;;EAG/D,QAAK;AACD,QAAI,SAAS,IAAI,qBAAqB,KAAK,MAAM;AACjD,WAAO,cAAa;AAEpB,aAAS,cAAc,OAAO,gBAAgB;AAC1C,eAAS,mBAAmB,OAAO,eAAe,UAAU,GAAG;AAC3D,YAAI,eAAe,OAAO,eAAe,UAAU,EAAE,eAAe;AACpE,qBAAa,aAAa,oBAAoB,KAAK;AACnD,qBAAa,aAAa,2BAA2B,KAAK;AAC1D,qBAAa,aAAa,cAAc,KAAK;AAC7C,qBAAa,aAAa,qBAAqB,KAAK;MACxD;IACJ;AAEA,aAAS,cAAc,OAAO,oBAAoB;AAC9C,eAAS,iBAAiB,OAAO,mBAAmB,UAAU,GAAG;AAC7D,YAAI,mBAAmB,OAAO,mBAAmB,UAAU,EAAE,aAAa;AAC1E,yBAAiB,oBAAoB,KAAK;AAC1C,yBAAiB,aAAa,oBAAoB,KAAK;AACvD,yBAAiB,aAAa,2BAA2B,KAAK;AAC9D,yBAAiB,aAAa,cAAc,KAAK;AACjD,yBAAiB,aAAa,qBAAqB,KAAK;MAC5D;IACJ;AAEA,WAAO,YAAY,KAAK;AAExB,WAAO,mBAAmB,KAAK;AAC/B,WAAO,gBAAgB,KAAK;AAE5B,WAAO,kBAAkB,KAAK;AAC9B,WAAO,iBAAiB,KAAK;AAC7B,WAAO,kBAAkB,KAAK;AAE9B,QAAI,OAAO,mBAAmB,OAAO,kBAAkB,OAAO,iBAAiB;AAC3E,aAAO,yBAAyB;IACpC,OAAO;AACH,aAAO,yBAAyB;IACpC;AAEA,SAAK,gBAAgB,MAAM;AAE3B,SAAK,oBAAoB,IAAI,eAAe,MAAM;AAClD,SAAK,kBAAkB,WAAW,KAAK;AAEvC,SAAK,kBAAkB,MAAK;AAE5B,SAAK,iBAAiB;AAEtB,SAAK,mCAAmC;AACxC,SAAK,oCAAoC;EAC7C;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,gBAAgB;AACrB,WAAK,iBAAiB;AAEtB,UAAI,KAAK,0BAA0B;AAC/B,aAAK,mCAAmC,IAAI,0BAA0B,KAAK,mBAAmB,QAAQ,eAAe,KAAK,MAAM,EAAE,eAAe,oBAAoB,EAAE,YAAW,CAAE;AACpL,aAAK,oCAAoC,IAAI,0BAA0B,KAAK,mBAAmB,QAAQ,gBAAgB,KAAK,MAAM,EAAE,eAAe,qBAAqB,EAAE,YAAW,CAAE;AAEvL,gBAAQ,eAAe,KAAK,MAAM,EAAE,eAAe,2BAA2B,KAAK,gCAAgC;AACnH,gBAAQ,gBAAgB,KAAK,MAAM,EAAE,eAAe,4BAA4B,KAAK,iCAAiC;MAC1H;IACJ;AAEA,SAAK,kBAAkB,OAAO,EAAE;EACpC;EAEA,gBAAgB,QAAM;AAClB,WAAO,eAAe,WAAW,IAAI,IAAI,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;AACtE,WAAO,eAAe,WAAW,KAAK,IAAI,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;AAEvE;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,IAAI,EAAE,gBAAgB,MAAM;AAChF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,4BAA4B;AACjC,eAAO,eAAe,WAAW,IAAI,EAAE,KAAK,6BAA6B,IAAI,CAAC,WAAW,MAAM,gBAAgB,MAAM;MACzH;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,IAAI,EAAE,gBAAgB,OAAO;AACjF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,6BAA6B;AAClC,eAAO,eAAe,WAAW,IAAI,EAAE,KAAK,8BAA8B,IAAI,CAAC,WAAW,MAAM,gBAAgB,OAAO;MAC3H;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,IAAI,EAAE,gBAAgB,UAAU;AACpF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,gCAAgC;AACrC,eAAO,eAAe,WAAW,IAAI,EAAE,KAAK,iCAAiC,IAAI,CAAC,WAAW,MAAM,gBAAgB,UAAU;MACjI;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,IAAI,EAAE,gBAAgB,UAAU;AACpF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,yBAAyB;AAC9B,eAAO,eAAe,WAAW,IAAI,EAAE,KAAK,0BAA0B,IAAI,CAAC,WAAW,MAAM,gBAAgB,UAAU;MAC1H;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,IAAI,EAAE,gBAAgB,aAAa;AACvF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,4BAA4B;AACjC,eAAO,eAAe,WAAW,IAAI,EAAE,KAAK,6BAA6B,IAAI,CAAC,WAAW,MAAM,gBAAgB,aAAa;MAChI;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,KAAK,EAAE,gBAAgB,MAAM;AACjF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,6BAA6B;AAClC,eAAO,eAAe,WAAW,KAAK,EAAE,KAAK,8BAA8B,IAAI,CAAC,WAAW,OAAO,gBAAgB,MAAM;MAC5H;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,KAAK,EAAE,gBAAgB,OAAO;AAClF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,8BAA8B;AACnC,eAAO,eAAe,WAAW,KAAK,EAAE,KAAK,+BAA+B,IAAI,CAAC,WAAW,OAAO,gBAAgB,OAAO;MAC9H;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,KAAK,EAAE,gBAAgB,UAAU;AACrF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,iCAAiC;AACtC,eAAO,eAAe,WAAW,KAAK,EAAE,KAAK,kCAAkC,IAAI,CAAC,WAAW,OAAO,gBAAgB,UAAU;MACpI;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,KAAK,EAAE,gBAAgB,UAAU;AACrF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,0BAA0B;AAC/B,eAAO,eAAe,WAAW,KAAK,EAAE,KAAK,2BAA2B,IAAI,CAAC,WAAW,OAAO,gBAAgB,UAAU;MAC7H;IACJ;AAEA;AACI,UAAI,eAAe,OAAO,eAAe,WAAW,KAAK,EAAE,gBAAgB,aAAa;AACxF,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,UAAU,KAAK;AACzC,mBAAa,aAAa,aAAa,KAAK;AAC5C,mBAAa,aAAa,kBAAkB,KAAK;AACjD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,oBAAoB,KAAK;AACnD,mBAAa,aAAa,2BAA2B,KAAK;AAE1D,UAAI,KAAK,6BAA6B;AAClC,eAAO,eAAe,WAAW,KAAK,EAAE,KAAK,8BAA8B,IAAI,CAAC,WAAW,OAAO,gBAAgB,aAAa;MACnI;IACJ;EACJ;EAEA,YAAS;AACL,YAAQ,eAAe,KAAK,MAAM,GAAG,kBAAkB,yBAAyB;AAChF,YAAQ,gBAAgB,KAAK,MAAM,GAAG,kBAAkB,0BAA0B;AAElF,SAAK,iCAAiC,QAAO;AAC7C,SAAK,kCAAkC,QAAO;AAE9C,SAAK,kBAAkB,QAAO;EAClC;;;;ACvTJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,2BAAP,cAAwCC,YAAS;EACnD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,MAAM,IAAI;IAClC,mBAAmBA,WAAS,KAAK,KAAK;;EAG1C,QAAK;AACD,QAAI,gBAAgB,KAAK,OAAO,oBAAmB;AACnD,SAAK,OAAO,oBAAoB,YAAY,cAAc,CAAC,GAAG,KAAK,eAAe,cAAc,CAAC,CAAC,CAAC;AAEnG,SAAK,mBAAmB;AAExB,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,MAAM,OAAO,KAAK,MAAM;EACpJ;EAEA,oBAAiB;AACb,QAAI,KAAK,WAAW,CAAC,KAAK,qBAAqB,CAAC,KAAK,mBAAmB;AACpE,UAAI,gBAAgB,KAAK,OAAO,oBAAmB;AACnD,UAAI,QAAQ,2BAA2B,KAAK,MAAM,GAAG;AACjD,aAAK,OAAO,oBAAoB,YAAY,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC;MACtF,OAAO;AACH,aAAK,OAAO,oBAAoB,YAAY,cAAc,CAAC,GAAG,KAAK,eAAe,cAAc,CAAC,CAAC,CAAC;MACvG;AAEA,WAAK,mBAAmB;IAC5B;EACJ;EAEA,kBAAe;AACX,QAAI,KAAK,UAAU,CAAC,KAAK,mBAAmB;AACxC,UAAI,gBAAgB,KAAK,OAAO,oBAAmB;AACnD,WAAK,OAAO,oBAAoB,YAAY,cAAc,CAAC,GAAG,KAAK,eAAe,cAAc,CAAC,CAAC,CAAC;IACvG;EACJ;;;;ACtCJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAM9B,IAAO,iCAAP,cAA8CC,YAAS;EACzD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;;EAG1D,QAAK;AACD,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAE3E,YAAQ,YAAY,KAAK,mBAAmB,KAAK,MAAM,EAAE,iCAAiC,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;EACjI;EAEA,cAAc,IAAI,MAAI;EAEtB;EAEA,YAAS;AACL,YAAQ,YAAY,KAAK,mBAAmB,KAAK,MAAM,GAAG,mCAAmC,IAAI;EACrG;;AAOJ,+BAA+B,UAAU,gBAAgB,WAAA;AACrD,MAAI,oBAAoB,aAAY;AACpC,SAAO,SAAS,cAAc,IAAI,MAAI;AAClC,QAAI,KAAK,QAAQ;AACb,UAAI,QAAQ,gBAAgB,KAAK,MAAM,GAAG;AACtC,YAAI,KAAK,QAAO,GAAI;AAChB,eAAK,OAAO,yBAAyB,KAAK,iBAAiB,mBAAmB,IAAI,CAAC;QACvF;MACJ;IACJ;EACJ;AACJ,EAAC;;;AC1CD,SAAS,aAAAC,mBAAiB;AAMpB,IAAO,iCAAP,MAAO,wCAAuCC,YAAS;EAClD,OAAgB,WAAW;EAElB,QAAK;AACjB,YAAQ,YAAY,KAAK,MAAM,EAAG,iCAAiC,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;EAC1G;EAEQ,OAAgB,mBACpB;IACI,qBAAqB,YAAW;IAChC,eAAe,YAAW;IAC1B,qBAAqB,YAAW;IAChC,mBAAmB,aAAY;;EAEhC,cAAc,IAAY,MAAwB;AACrD,QAAI,KAAK,QAAQ;AACb,UAAI,CAAC,QAAQ,gBAAgB,KAAK,MAAM,GAAG;AACvC,cAAM,cAAc,QAAQ,iBAAiB,KAAK,MAAM,EAAG;AAE3D,cAAM,sBAAsB,gCAA+B,iBAAiB;AAC5E,oBAAY,wBAAwB,mBAAmB;AAEvD,YAAI,QAAQ,mBAAmB,KAAK,MAAM,GAAG;AACzC,gBAAM,gBAAgB,gCAA+B,iBAAiB;AACrE,8BAA4B,uBAAuB,KAAK,IAAK,oBAA4B,WAAW,aAAa,GAAG,mBAAmB;QAC5I;AAEA,cAAM,sBAAsB,gCAA+B,iBAAiB;AAC5E,aAAK,OAAO,oBAAoB,YAAY,oBAAoB,mBAAmB,CAAC;AACpF,aAAK,OAAO,wBAAwB,mBAAmB;MAC3D,OAAO;AACH,YAAI,KAAK,QAAO,GAAI;AAChB,gBAAM,oBAAoB,gCAA+B,iBAAiB;AAC1E,eAAK,OAAO,yBAAyB,KAAK,iBAAiB,mBAAmB,IAAI,CAAC;QACvF;MACJ;IACJ;EACJ;EAEgB,YAAS;AACrB,YAAQ,YAAY,KAAK,MAAM,GAAG,mCAAmC,IAAI;EAC7E;;;;AC/CJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAM9B,IAAO,6CAAP,cAA0DC,YAAS;EACrE,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,+BAA+BA,WAAS,KAAK,KAAK;IAClD,YAAYA,WAAS,KACjB;MACI;MACA;MAAoB;MAA0B;MAAwB;MACtE;MAAoB;MAA0B;MAA8B;MAAwB;MACpG;MAAqB;MAA2B;MAA+B;MAAyB;MACxG;MAAmB;MAAyB;MAA6B;MAAuB;MAChG;MAAoB;MAA0B;MAA8B;MAAwB;OAExG,OAAO;;EAGf,QAAK;AACD,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAC3E,SAAK,iBAAiB,WAAW,kBAAkB,KAAK,UAAU;AAElE,YAAQ,mBAAmB,KAAK,mBAAmB,KAAK,MAAM,EAAE,aAAa,KAAK,cAAc,EAAE,iCAAiC,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;EAC1K;EAEA,cAAc,IAAI,MAAI;EAEtB;EAEA,YAAS;AACL,YAAQ,mBAAmB,KAAK,mBAAmB,KAAK,MAAM,GAAG,aAAa,KAAK,cAAc,GAAG,mCAAmC,IAAI;EAC/I;;AAOJ,2CAA2C,UAAU,gBAAgB,WAAA;AACjE,MAAI,qBAAqB,aAAY;AACrC,SAAO,SAAS,cAAc,IAAI,MAAI;AAClC,QAAI,KAAK,QAAQ;AACb,UAAI,QAAQ,gBAAgB,KAAK,MAAM,GAAG;AACtC,YAAI,KAAK,QAAO,GAAI;AAChB,eAAK,OAAO,yBAAyB,KAAK,iBAAiB,oBAAoB,IAAI,CAAC;AAEpF,cAAI,KAAK,+BAA+B;AACpC,iBAAK,OAAO,iBAAiB,KAAK,eAAc,CAAE;UACtD;QACJ;MACJ;IACJ;EACJ;AACJ,EAAC;;;AC1DD,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,6BAAP,cAA0CC,YAAS;EACrD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;;EAG1D,OAAI;AACA,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;EAC/E;EAEA,OAAO,IAAE;AACL,QAAI,OAAO,QAAQ,iBAAiB,KAAK,MAAM,EAAE,QAAQ,KAAK,iBAAiB;AAC/E,SAAK,OAAO,oBAAoB,KAAK,oBAAmB,CAAE;AAC1D,SAAK,OAAO,YAAY,KAAK,YAAW,CAAE;EAC9C;;;;AClBJ,SAAS,aAAAC,mBAAiB;AAGpB,IAAO,6BAAP,cAA0CC,YAAS;EACrD,OAAO,WAAW;EAClB,OAAO,aAAa,CAAA;EAEpB,OAAO,IAAE;AACL,QAAI,OAAO,QAAQ,iBAAiB,KAAK,MAAM,EAAE;AACjD,SAAK,OAAO,oBAAoB,KAAK,oBAAmB,CAAE;AAC1D,SAAK,OAAO,YAAY,KAAK,YAAW,CAAE;EAC9C;;;;ACXJ,SAAS,aAAAC,mBAAiB;AAGpB,IAAO,+BAAP,cAA4CC,YAAS;EACvD,OAAO,WAAW;EAClB,OAAO,aAAa,CAAA;EAEpB,OAAO,IAAE;AACL,QAAI,SAAS,QAAQ,iBAAiB,KAAK,MAAM,EAAE;AACnD,SAAK,OAAO,oBAAoB,OAAO,oBAAmB,CAAE;AAC5D,SAAK,OAAO,YAAY,OAAO,YAAW,CAAE;EAChD;;;;ACXJ,SAAS,aAAAC,mBAAiB;AAGpB,IAAO,uCAAP,cAAoDC,YAAS;EAC/D,OAAO,WAAW;EAClB,OAAO,aAAa,CAAA;EAEpB,OAAO,IAAE;AACL,QAAI,iBAAiB,QAAQ,iBAAiB,KAAK,MAAM,EAAE;AAC3D,SAAK,OAAO,oBAAoB,eAAe,oBAAmB,CAAE;AACpE,SAAK,OAAO,YAAY,eAAe,YAAW,CAAE;EACxD;;;;ACXG,IAAI,iBAAiB;EACxB,MAAM;EACN,MAAM;EACN,OAAO;;AAGJ,IAAI,sBAAsB;EAC7B,MAAM;EACN,SAAS;EACT,cAAc;;;;ACTlB,SAAS,aAAAC,aAAW,iBAAAC,iBAAe,YAAAC,YAAU,iBAAAC,sBAAqB;AAClE,SAAS,UAAAC,SAAQ,gBAAAC,qBAAoB;AAO/B,IAAO,sBAAP,cAAmCC,YAAS;EAC9C,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,OAAO,GAAG,MAAM;IACtD,6BAA6BA,WAAS,KAAK,IAAI;IAC/C,iBAAiBA,WAAS,KAAK,KAAK;IACpC,qBAAqBA,WAAS,KAAK,KAAK;IACxC,6BAA6BA,WAAS,KAAK,IAAI;;EAGnD,OAAI;AACA,SAAK,oBAAoB,WAAW,qBAAqB,KAAK,aAAa;AAE3E,SAAK,iCAAiC,YAAY,GAAG,QAAQ,IAAI;AACjE,SAAK,iCAAiC,YAAY,IAAI,GAAG,CAAC;AAE1D,SAAK,qBAAqB,YAAY,OAAQ,OAAQ,KAAM;AAC5D,SAAK,iBAAiB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAEpE,SAAK,gCAAgC;AAErC,SAAK,aAAa;EACtB;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,sBAAsB,KAAK,OAAO,aAAY;AAEnD,WAAK,oBAAoB,KAAK,oBAAoB,aAAY;AAE9D,UAAI,KAAK,6BAA6B;AAClC,aAAK,kBAAkB,oBAAoB,KAAK,8BAA8B;AAC9E,aAAK,kBAAkB,gBAAgB,KAAK,8BAA8B;MAC9E;AAEA;AACI,aAAK,sBAAsB,KAAK,kBAAkB,aAAY;AAC9D,aAAK,oBAAoB,YAAY,KAAK,kBAAkB;AAE5D,YAAI,sBAAsB,KAAK,oBAAoB,gBAAgBC,eAAa;AAChF,4BAAoB,OAAO,QAAQ,iBAAiB,KAAK,MAAM,EAAE;AACjE,4BAAoB,WAAW,QAAQ,oBAAoB,KAAK,MAAM,EAAE,aAAa,MAAK;AAC1F,4BAAoB,SAAS,QAAQ,KAAK;AAE1C,aAAK,uBAAuB,KAAK,kBAAkB,gBAAgBC,SAAQ;UACvE,kBAAkB,KAAK;UACvB,cAAc,KAAK,gBAAgB;UACnC,gBAAgB,KAAK;UACrB,eAAe;SAClB;AAED,aAAK,qBAAqB,cAAc;AACxC,YAAI,KAAK,iBAAiB;AACtB,eAAK,qBAAqB,aAAa,QAAQ,IAAI,KAAK,cAAc,KAAK,IAAI,GAAG,EAAE,IAAI,KAAI,CAAE;QAClG;MACJ;AAEA,WAAK,uBAAuB,KAAK,oBAAoB,aAAY;AAEjE;AACI,aAAK,0BAA0B,KAAK,qBAAqB,gBAAgBA,SAAQ;UAC7E,kBAAkB,KAAK;UACvB,cAAc,KAAK,gBAAgB;UACnC,eAAe,KAAK;SACvB;AAED,aAAK,wBAAwB,cAAc;AAC3C,YAAI,KAAK,iBAAiB;AACtB,eAAK,wBAAwB,aAAa,QAAQ,IAAI,KAAK,cAAc,KAAK,IAAI,GAAG,EAAE,IAAI,KAAI,CAAE;QACrG;AACA,aAAK,wBAAwB,oBAAoB,QAAQ,iBAAiB,KAAK,MAAM,EAAE,cAAc,gBAAgBC,cAAa,CAAC;MACvI;AAEA,UAAI,yBAAyB;AAC7B,UAAI,sBAAsB;AAE1B,UAAI,KAAK,qBAAqB;AAC1B,iCAAyB,KAAK,oBAAoB,aAAY;AAE9D,YAAI,gBAAgB,uBAAuB,gBAAgBF,eAAa;AACxE,sBAAc,OAAO,QAAQ,iBAAiB,KAAK,MAAM,EAAE;AAC3D,sBAAc,WAAW,QAAQ,oBAAoB,KAAK,MAAM,EAAE,aAAa,MAAK;AACpF,sBAAc,SAAS,QAAQ,KAAK;AAEpC,+BAAuB,YAAY,mBAAmB;MAC1D;AAEA,WAAK,wBAAwB,KAAK,oBAAoB,aAAY;AAClE,WAAK,2BAA2B,KAAK,sBAAsB,gBAAgB,uBAAuB;QAC9F,iBAAiB,KAAK;QACtB,4BAA4B;QAC5B,qBAAqB,KAAK;QAC1B,oBAAoB;QACpB,mBAAmB;OACtB;AAED,WAAK,qBAAqB,SAAS;AACnC,WAAK,wBAAwB,SAAS;AACtC,WAAK,yBAAyB,SAAS;AAEvC,WAAK,aAAa;IACtB;EACJ;EAEA,OAAO,IAAE;EAET;EAEA,eAAY;AACR,QAAI,YAAY;AAEhB,QAAI,QAAQ,WAAW,KAAK,MAAM,KAAK,QAAQ,WAAW,KAAK,MAAM,EAAE,gBAAgB,MAAM;AACzF,eAAS,IAAI,GAAG,IAAI,QAAQ,WAAW,KAAK,MAAM,EAAE,aAAa,QAAQ,KAAK;AAC1E,YAAI,QAAQ,QAAQ,WAAW,KAAK,MAAM,EAAE,aAAa,CAAC;AAC1D,YAAI,MAAM,QAAQ,MAAM,cAAc,KAAK,mBAAmB;AAC1D,sBAAY;AACZ;QACJ;MACJ;IACJ;AAEA,WAAO;EACX;EAEA,cAAc,QAAM;AAChB,QAAI,kBAAkB,OAAO,gBAAgBG,aAAY;AAEzD,QAAI,mBAAmB,CAAC,gBAAgB,WAAW;AAC/C,UAAI,KAAK,iBAAiB,GAAG;AACzB,YAAI,QAAQ,eAAe,KAAK,MAAM,KAAK,MAAM;AAC7C,kBAAQ,eAAe,KAAK,MAAM,EAAE,MAAM,KAAK,CAAC;QACpD;MACJ,OAAO;AACH,YAAI,QAAQ,gBAAgB,KAAK,MAAM,KAAK,MAAM;AAC9C,kBAAQ,gBAAgB,KAAK,MAAM,EAAE,MAAM,KAAK,CAAC;QACrD;MACJ;IACJ;EACJ;EAEA,YAAS;AACL,QAAI,KAAK,YAAY;AACjB,WAAK,qBAAqB,aAAa,QAAQ,OAAO,IAAI;AAC1D,WAAK,wBAAwB,aAAa,QAAQ,OAAO,IAAI;IACjE;EACJ;;AAOJ,oBAAoB,UAAU,SAAS,WAAA;AACnC,MAAIC,iBAAgB,aAAY;AAChC,SAAO,SAAS,OAAO,IAAE;AACrB,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,YAAY;AACjB,YAAI,YAAY,KAAK,aAAY;AAEjC,aAAK,yBAAyB,SAAS;AAEvC,YAAI,WAAW;AACX,eAAK,qBAAqB,SAAS;AACnC,eAAK,wBAAwB,SAAS;QAC1C,OAAO;AACH,cAAI,QAAQ,gBAAgB,KAAK,MAAM,GAAG;AACtC,iBAAK,qBAAqB,SAAS,CAAC;AACpC,iBAAK,wBAAwB,SAAS;UAC1C,OAAO;AACH,iBAAK,wBAAwB,SAAS,CAAC;AACvC,iBAAK,qBAAqB,SAAS;AAEnC,iBAAK,qBAAqB,oBAAoB,QAAQ,iBAAiB,KAAK,MAAM,EAAE,cAAc,oBAAoBA,cAAa,CAAC;UACxI;QACJ;MACJ;IACJ;EACJ;AACJ,EAAC;;;AC1LD,SAAS,aAAAC,YAAW,YAAAC,WAAU,iBAAAC,sBAAqB;;;ACA5C,IAAI,iCAAiC;EACxC,OAAO;EACP,MAAM;EACN,OAAO;EACP,KAAK;EACL,MAAM;EACN,QAAQ;;AAGL,IAAI,wBAAwB;EAC/B,iBAAiB;EACjB,YAAY;EACZ,QAAQ;;AAGL,IAAI,mCAAmC;EAC1C,OAAO;EACP,QAAQ;EACR,aAAa;;AAGV,IAAI,6BAA6B;EACpC,OAAO;EACP,MAAM;EACN,OAAO;EACP,KAAK;;AAGF,IAAI,kCAAkC;EACzC,MAAM;EACN,KAAK;EACL,kBAAkB;;;;AD1BhB,IAAO,wBAAP,MAA4B;EAE9B,cAAA;AACI,SAAK,kBAAiB;AACtB,SAAK,oBAAmB;EAC5B;EAEA,oBAAiB;AAEb,SAAK,oBAAoB,YAAY,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAEpE,SAAK,kCAAkCC,UAAS;AAChD,SAAK,+BAA+B;AACpC,SAAK,mCAAmC;AAExC,SAAK,qBAAqB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAExE,SAAK,kBAAkBC,WAAU;AACjC,SAAK,sBAAsBC,eAAc;AACzC,SAAK,cAAc,KAAK;AAExB,SAAK,sBAAsB,CAAA;AAC3B,SAAK,oBAAoB,2BAA2B,GAAG,IAAI,KAAK;AAChE,SAAK,oBAAoB,2BAA2B,KAAK,IAAI,YAAY,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AACzG,SAAK,oBAAoB,2BAA2B,IAAI,IAAI,YAAY,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC;AACzG,SAAK,oBAAoB,2BAA2B,KAAK,IAAI,YAAY,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAG1G,SAAK,0BAA0B,YAAY,GAAG,OAAO,CAAC;AAEtD,SAAK,4BAA4B,YAAY,MAAM,MAAM,CAAC;AAE1D;AACI,UAAI,qBAAqB;AACzB,UAAI,qBAAqB,qBAAqB,KAAK,0BAA0B,CAAC,IAAI,KAAK,0BAA0B,CAAC,IAAI;AACtH,UAAI,YAAY,CAAC,KAAK,0BAA0B,CAAC,IAAI,KAAK,0BAA0B,CAAC,IAAI;AACzF,UAAI,YAAY,KAAK,0BAA0B,CAAC,IAAI,KAAK,0BAA0B,CAAC,IAAI;AACxF,WAAK,+BAA+B,YAAY,WAAW,WAAW,IAAK;IAC/E;AACA,SAAK,4BAA4B,YAAY,KAAK,KAAK,GAAG;AAE1D,SAAK,4BAA4B;AACjC,SAAK,0BAA0BD,WAAU;AACzC,SAAK,8BAA8BC,eAAc;AAEjD,SAAK,0BAA0B,CAAA;AAC/B,SAAK,wBAAwB,2BAA2B,GAAG,IAAI,YAAY,GAAG,GAAG,IAAM;AACvF,SAAK,wBAAwB,2BAA2B,KAAK,IAAI,YAAY,GAAG,GAAG,CAAC;AACpF,SAAK,wBAAwB,2BAA2B,IAAI,IAAI,YAAY,GAAG,GAAG,CAAC;AACnF,SAAK,wBAAwB,2BAA2B,KAAK,IAAI,YAAY,GAAG,GAAG,CAAC;AAEpF,SAAK,uBAAuB,CAAA;AAC5B,SAAK,qBAAqB,2BAA2B,GAAG,IAAI,KAAK,oBAAoB,2BAA2B,GAAG;AACnH,SAAK,qBAAqB,2BAA2B,KAAK,IAAI,KAAK,oBAAoB,2BAA2B,KAAK;AACvH,SAAK,qBAAqB,2BAA2B,IAAI,IAAI,KAAK,oBAAoB,2BAA2B,IAAI;AACrH,SAAK,qBAAqB,2BAA2B,KAAK,IAAI,KAAK,oBAAoB,2BAA2B,KAAK;AAGvH,SAAK,yBAAyB,YAAY,GAAG,OAAO,KAAK;AAEzD,SAAK,0BAA0B,YAAY,MAAM,MAAM,CAAC;AAExD,SAAK,uBAAuB,YAAY,GAAG,GAAG,IAAK;AACnD,SAAK,oBAAoB,YAAY,MAAM,MAAM,IAAI;AAErD,SAAK,+BAA+B,YAAY,GAAG,GAAG,CAAC;AACvD,SAAK,6BAA6B,CAAC,IAAI,KAAK,qBAAqB,CAAC;AAElE,SAAK,6BAA6B,KAAK;AACvC,SAAK,0BAA0B,KAAK;AACpC,SAAK,4BAA4B,KAAK,wBAAwB,SAAQ;AACtE,SAAK,0BAA0B,CAAC,IAAI,KAAK;AAEzC,SAAK,yBAAyB;AAC9B,SAAK,sBAAsB;AAC3B,SAAK,wBAAwB;AAE7B,SAAK,4BAA4B,CAAA;AACjC,SAAK,0BAA0B,2BAA2B,GAAG,IAAI,KAAK,oBAAoB,2BAA2B,GAAG;AACxH,SAAK,0BAA0B,2BAA2B,KAAK,IAAI,KAAK,oBAAoB,2BAA2B,KAAK;AAC5H,SAAK,0BAA0B,2BAA2B,IAAI,IAAI,KAAK,oBAAoB,2BAA2B,IAAI;AAC1H,SAAK,0BAA0B,2BAA2B,KAAK,IAAI,KAAK,oBAAoB,2BAA2B,KAAK;AAE5H,SAAK,2BAA2B,CAAA;AAChC,SAAK,yBAAyB,2BAA2B,GAAG,IAAI;AAChE,SAAK,yBAAyB,2BAA2B,KAAK,IAAI;AAClE,SAAK,yBAAyB,2BAA2B,IAAI,IAAI;AACjE,SAAK,yBAAyB,2BAA2B,KAAK,IAAI;AAGlE;AACI,UAAI,kBAAkB;AACtB,UAAI,yBAAyB,KAAK,IAAI,MAAM,KAAK,wBAAwB,CAAC,IAAI,eAAe;AAE7F,UAAI,+BAA+B,IAAI,IAAI,IAAI,IAAI,IAAI;AACvD,UAAI,aAAa,KAAK,KAAK,yBAAyB,kBAAkB,KAAK,wBAAwB,CAAC,IAAI,KAAK,8BAA8B,CAAC;AAC5I,UAAI,kBAAkB,KAAK,wBAAwB,CAAC;AACpD,UAAI,kBAAkB,CAAE,yBAAyB;AAEjD,WAAK,2BAA2B,CAAA;AAChC,WAAK,yBAAyB,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,aAAa,IAAI,iBAAiB,GAAG,CAAC;AACzH,WAAK,yBAAyB,2BAA2B,KAAK,IAAI,CAAC,KAAK,yBAAyB,2BAA2B,GAAG,EAAE,CAAC,IAAI,kBAAkB,aAAa,iBAAiB,GAAG,CAAC;AAC1L,WAAK,yBAAyB,2BAA2B,IAAI,IAAI,CAAC,KAAK,yBAAyB,2BAA2B,KAAK,EAAE,CAAC,IAAI,kBAAkB,aAAa,iBAAiB,GAAG,CAAC;AAC3L,WAAK,yBAAyB,2BAA2B,KAAK,IAAI,CAAC,KAAK,yBAAyB,2BAA2B,IAAI,EAAE,CAAC,IAAI,kBAAkB,aAAa,iBAAiB,GAAG,CAAC;AAE3L,WAAK,wBAAwB,CAAC,KAAK,yBAAyB,2BAA2B,KAAK,EAAE,CAAC,IAAI,kBAAkB,aAAa,IAAI,iBAAiB,GAAG,CAAC;AAC3J,WAAK,qBAAqB,CAAC,KAAK,sBAAsB,CAAC,IAAI,kBAAkB,aAAa,IAAI,iBAAiB,GAAG,CAAC;AACnH,WAAK,uBAAuB,CAAC,KAAK,mBAAmB,CAAC,IAAI,kBAAkB,aAAa,iBAAiB,GAAG,CAAC;IAClH;AAGA,SAAK,8BAA8B,YAAY,MAAM,MAAM,CAAC;AAE5D,SAAK,6BAA6B,CAAA;AAClC,SAAK,2BAA2B,eAAe,IAAI,IAAI,YAAY,GAAG,GAAG,CAAC;AAC1E,SAAK,2BAA2B,eAAe,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,0BAA0B,CAAC,IAAI,KAAK,4BAA4B,CAAC,IAAI;AACrI,SAAK,2BAA2B,eAAe,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,0BAA0B,CAAC,IAAI,KAAK,4BAA4B,CAAC,IAAI;AACrI,SAAK,2BAA2B,eAAe,IAAI,EAAE,CAAC,IAAI,KAAK,6BAA6B,CAAC,IAAI;AAEjG,SAAK,2BAA2B,eAAe,IAAI,IAAI,KAAK,2BAA2B,eAAe,IAAI;AAE1G,SAAK,2BAA2B,eAAe,KAAK,IAAI,KAAK,2BAA2B,eAAe,IAAI;AAE3G,SAAK,mCAAmC,YAAY,GAAG,GAAG,CAAC;AAC3D,SAAK,iCAAiC,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,KAAK,6BAA6B,CAAC;AAE9I,SAAK,+BAA+B,KAAK,4BAA4B,SAAQ;AAC7E,SAAK,6BAA6B,CAAC,IAAI,KAAK;AAE5C,SAAK,oBAAoB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAGvE,SAAK,6BAA6B,KAAK;AACvC,SAAK,0BAA0B,KAAK;AAEpC;AACI,UAAI,iCAAiC,KAAK,IAAK,KAAK,wBAAwB,CAAC,IAAI,KAAK,0BAA0B,CAAC,KAAM,KAAK,uBAAuB,CAAC,IAAI,KAAK,wBAAwB,CAAC,EAAE;AACxL,UAAI,6BAA6B,KAAK,0BAA0B,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,iCAAiC;AACxI,WAAK,4BAA4B,YAAY,KAAK,0BAA0B,CAAC,GAAG,4BAA4B,KAAK,gCAAgC;IACrJ;AAEA,SAAK,gCAAgC,YAAY,GAAG,GAAG,CAAC;AACxD,SAAK,8BAA8B,CAAC,IAAK,KAAK,wBAAwB,CAAC,IAAI,KAAK,0BAA0B,CAAC,IAAK,KAAK,0BAA0B,CAAC;AAChJ,SAAK,8BAA8B,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI;EAC5G;EAEA,sBAAmB;AACf,SAAK,cAAc;AACnB,SAAK,sBAAsB;AAE3B,SAAK,yBAAyB;AAC9B,SAAK,kBAAkB;AACvB,SAAK,aAAa;AAClB,SAAK,gBAAgB;AACrB,SAAK,yBAAyB;AAE9B,SAAK,yBAAyB;AAE9B,SAAK,qBAAqB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AACxE,SAAK,4BAA4B,KAAK;AACtC,SAAK,kCAAkC,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAErF,SAAK,kCAAkC,KAAK;AAC5C,SAAK,wCAAwC,KAAK;AAElD,SAAK,gBAAgB;AACrB,SAAK,iBAAiB;AACtB,SAAK,+BAA+B,eAAe;AACnD,SAAK,0BAA0B;AAC/B,SAAK,iCAAiC;AACtC,SAAK,2BAA2B;AAEhC,SAAK,eAAe;AACpB,SAAK,mBAAmB;AACxB,SAAK,kBAAkB;AAEvB,SAAK,wCAAwC;AAE7C,SAAK,6BAA6B;EACtC;;;;AExLJ,SAAS,sBAAAC,qBAAoB,iBAAAC,iBAAe,iBAAAC,sBAAqB;AACjE,SAAS,gBAAAC,qBAAoB;AAMvB,IAAO,oBAAP,MAAwB;EAE1B,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,YAAY;AAEjB,SAAK,eAAe;EACxB;EAEA,MAAM,cAAc,QAAQ,QAAM;AAC9B,SAAK,kBAAkB;AACvB,SAAK,YAAY;AACjB,SAAK,YAAY;AAEjB,SAAK,eAAe,QAAQ,iBAAiB,KAAK,SAAS,EAAE;AAE7D,SAAK,gBAAe;AACpB,SAAK,eAAc;AACnB,SAAK,eAAc;AAEnB,SAAK,sBAAqB;AAE1B,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,MAAM,OAAO,KAAK,SAAS;EACvJ;EAEA,WAAW,SAAO;AACd,SAAK,cAAc,aAAa,OAAO;EAC3C;;EAGA,kBAAe;AACX,SAAK,gBAAgB,KAAK,gBAAgB,aAAY;AAEtD,SAAK,wBAAuB;AAC5B,SAAK,uBAAsB;AAC3B,SAAK,uBAAsB;EAC/B;EAEA,0BAAuB;AACnB,SAAK,kBAAkB,KAAK,cAAc,aAAY;AACtD,SAAK,uBAAuB,KAAK,gBAAgB,aAAY;AAC7D,SAAK,uBAAuB,KAAK,gBAAgB,aAAY;AAE7D,SAAK,kBAAkB,CAAA;AACvB,aAAS,OAAO,4BAA4B;AACxC,WAAK,gBAAgB,2BAA2B,GAAG,CAAC,IAAI,KAAK,qBAAqB,aAAY;IAClG;AAEA,SAAK,oBAAoB,KAAK,gBAAgB,aAAY;AAC1D,SAAK,yBAAyB,KAAK,kBAAkB,aAAY;AACjE,SAAK,2BAA2B,KAAK,kBAAkB,aAAY;EACvE;EAEA,yBAAsB;AAClB,SAAK,iBAAiB,KAAK,cAAc,aAAY;AAErD,SAAK,wBAAwB,CAAA;AAC7B,SAAK,6BAA6B,CAAA;AAClC,SAAK,uBAAuB,CAAA;AAC5B,SAAK,+BAA+B,CAAA;AAEpC,aAAS,OAAO,4BAA4B;AACxC,WAAK,sBAAsB,2BAA2B,GAAG,CAAC,IAAI,KAAK,eAAe,aAAY;AAC9F,WAAK,2BAA2B,2BAA2B,GAAG,CAAC,IAAI,KAAK,sBAAsB,2BAA2B,GAAG,CAAC,EAAE,aAAY;AAC3I,WAAK,qBAAqB,2BAA2B,GAAG,CAAC,IAAI,KAAK,sBAAsB,2BAA2B,GAAG,CAAC,EAAE,aAAY;AACrI,WAAK,6BAA6B,2BAA2B,GAAG,CAAC,IAAI,KAAK,sBAAsB,2BAA2B,GAAG,CAAC,EAAE,aAAY;IACjJ;AAEA,SAAK,qBAAqB,KAAK,eAAe,aAAY;AAC1D,SAAK,0BAA0B,KAAK,mBAAmB,aAAY;AACnE,SAAK,oBAAoB,KAAK,mBAAmB,aAAY;AAC7D,SAAK,4BAA4B,KAAK,mBAAmB,aAAY;AAErE,SAAK,kBAAkB,KAAK,eAAe,aAAY;AACvD,SAAK,uBAAuB,KAAK,gBAAgB,aAAY;AAC7D,SAAK,iBAAiB,KAAK,gBAAgB,aAAY;AACvD,SAAK,yBAAyB,KAAK,gBAAgB,aAAY;AAE/D,SAAK,oBAAoB,KAAK,eAAe,aAAY;AACzD,SAAK,yBAAyB,KAAK,kBAAkB,aAAY;AACjE,SAAK,mBAAmB,KAAK,kBAAkB,aAAY;AAC3D,SAAK,2BAA2B,KAAK,kBAAkB,aAAY;EACvE;EAEA,yBAAsB;AAClB,SAAK,wBAAwB,KAAK,cAAc,aAAY;EAChE;;EAGA,iBAAc;AACV,SAAK,cAAc,aAAY;AAE/B,SAAK,uBAAsB;AAC3B,SAAK,sBAAqB;AAC1B,SAAK,qBAAoB;EAC7B;EAEA,yBAAsB;AAClB,SAAK,gBAAgB,oBAAoB,KAAK,UAAU,uBAAuB;AAC/E,SAAK,qBAAqB,eAAe,KAAK,UAAU,yBAAyB;AAEjF,SAAK,qBAAqB,oBAAoB,KAAK,UAAU,4BAA4B;AACzF,SAAK,qBAAqB,eAAe,KAAK,UAAU,yBAAyB;AACjF,aAAS,OAAO,4BAA4B;AACxC,WAAK,gBAAgB,2BAA2B,GAAG,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB,2BAA2B,GAAG,CAAC,CAAC;IACrJ;AAEA,SAAK,kBAAkB,oBAAoB,KAAK,UAAU,2BAA2B,KAAK,UAAU,YAAY,CAAC;AACjH,SAAK,uBAAuB,eAAe,KAAK,UAAU,2BAA2B;AACrF,SAAK,yBAAyB,oBAAoB,KAAK,UAAU,gCAAgC;EACrG;EAEA,wBAAqB;AACjB,SAAK,eAAe,oBAAoB,KAAK,UAAU,sBAAsB;AAG7E,aAAS,OAAO,4BAA4B;AACxC,WAAK,sBAAsB,2BAA2B,GAAG,CAAC,EAAE,oBAAoB,KAAK,UAAU,yBAAyB,2BAA2B,GAAG,CAAC,CAAC;AAExJ,WAAK,2BAA2B,2BAA2B,GAAG,CAAC,EAAE,eAAe,KAAK,UAAU,uBAAuB;AAEtH,WAAK,qBAAqB,2BAA2B,GAAG,CAAC,EAAE,oBAAoB,KAAK,UAAU,oBAAoB;AAClH,WAAK,qBAAqB,2BAA2B,GAAG,CAAC,EAAE,eAAe,KAAK,UAAU,iBAAiB;AAE1G,WAAK,6BAA6B,2BAA2B,GAAG,CAAC,EAAE,oBAAoB,KAAK,UAAU,4BAA4B;IACtI;AAGA;AACI,WAAK,mBAAmB,oBAAoB,KAAK,UAAU,qBAAqB;AAEhF,WAAK,wBAAwB,eAAe,KAAK,UAAU,uBAAuB;AAElF,WAAK,kBAAkB,oBAAoB,KAAK,UAAU,oBAAoB;AAC9E,WAAK,kBAAkB,eAAe,KAAK,UAAU,iBAAiB;AAEtE,WAAK,0BAA0B,oBAAoB,KAAK,UAAU,4BAA4B;IAClG;AAGA;AACI,WAAK,gBAAgB,oBAAoB,KAAK,UAAU,kBAAkB;AAE1E,WAAK,qBAAqB,eAAe,KAAK,UAAU,uBAAuB;AAE/E,WAAK,eAAe,oBAAoB,KAAK,UAAU,oBAAoB;AAC3E,WAAK,eAAe,eAAe,KAAK,UAAU,iBAAiB;AAEnE,WAAK,uBAAuB,oBAAoB,KAAK,UAAU,4BAA4B;IAC/F;AAGA;AACI,WAAK,kBAAkB,oBAAoB,KAAK,UAAU,oBAAoB;AAE9E,WAAK,uBAAuB,eAAe,KAAK,UAAU,uBAAuB;AAEjF,WAAK,iBAAiB,oBAAoB,KAAK,UAAU,oBAAoB;AAC7E,WAAK,iBAAiB,eAAe,KAAK,UAAU,iBAAiB;AAErE,WAAK,yBAAyB,oBAAoB,KAAK,UAAU,4BAA4B;IACjG;EACJ;EAEA,uBAAoB;AAChB,SAAK,sBAAsB,oBAAoB,KAAK,UAAU,6BAA6B;EAC/F;;EAGA,iBAAc;AACV,SAAK,uBAAsB;AAC3B,SAAK,sBAAqB;AAC1B,SAAK,sBAAqB;EAC9B;EAEA,yBAAsB;AAClB,QAAI,6BAA6B,KAAK,qBAAqB,gBAAgBC,eAAa;AACxF,+BAA2B,OAAO,KAAK;AACvC,+BAA2B,WAAW,KAAK,UAAU,gBAAgB,MAAK;AAC1E,+BAA2B,SAAS,QAAQ,KAAK,UAAU;AAE3D,SAAK,2BAA2B,CAAA;AAChC,aAAS,OAAO,4BAA4B;AACxC,UAAI,WAAW,KAAK,gBAAgB,2BAA2B,GAAG,CAAC,EAAE,gBAAgBC,cAAa;AAElG,eAAS,YAAY,KAAK,UAAU;AACpC,eAAS,gBAAgB,KAAK,UAAU;AACxC,eAAS,WAAW,KAAK,UAAU,eAAe,MAAK;AACvD,eAAS,SAAS,QAAQ,KAAK,UAAU,qBAAqB,2BAA2B,GAAG,CAAC;AAC7F,eAAS,cAAc;AACvB,eAAS,OAAO,KAAK,UAAU;AAE/B,WAAK,yBAAyB,2BAA2B,GAAG,CAAC,IAAI;IACrE;AAEA,SAAK,kCAAkC,KAAK,uBAAuB,gBAAgBD,eAAa;AAChG,SAAK,gCAAgC,OAAO,KAAK;AACjD,SAAK,gCAAgC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpF,SAAK,gCAAgC,SAAS,QAAQ,KAAK,UAAU;AAErE,SAAK,oCAAoC,KAAK,yBAAyB,gBAAgBE,aAAY;AAEnG,SAAK,iCAAiC,KAAK,yBAAyB,gBAAgBC,mBAAkB;AACtG,SAAK,+BAA+B,WAAW,KAAK,UAAU;AAC9D,SAAK,+BAA+B,QAAQ,KAAK,KAAK,UAAU;AAChE,SAAK,+BAA+B,UAAU,KAAK,UAAU;EACjE;EAEA,wBAAqB;AAGjB,SAAK,sCAAsC,CAAA;AAC3C,SAAK,gCAAgC,CAAA;AACrC,SAAK,wCAAwC,CAAA;AAC7C,SAAK,qCAAqC,CAAA;AAG1C,aAAS,OAAO,4BAA4B;AACxC,UAAI,2BAA2B,KAAK,2BAA2B,2BAA2B,GAAG,CAAC,EAAE,gBAAgBH,eAAa;AAC7H,+BAAyB,OAAO,KAAK;AACrC,+BAAyB,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACxE,+BAAyB,SAAS,QAAQ,KAAK,UAAU;AAEzD,UAAI,iBAAiB,KAAK,qBAAqB,2BAA2B,GAAG,CAAC,EAAE,gBAAgBC,cAAa;AAC7G,WAAK,0BAA0B,cAAc;AAC7C,qBAAe,SAAS,QAAQ,KAAK,UAAU,0BAA0B,2BAA2B,GAAG,CAAC;AACxG,qBAAe,OAAO,KAAK,UAAU,yBAAyB,2BAA2B,GAAG,CAAC;AAE7F,UAAI,yBAAyB,KAAK,6BAA6B,2BAA2B,GAAG,CAAC,EAAE,gBAAgBC,aAAY;AAE5H,UAAI,sBAAsB,KAAK,6BAA6B,2BAA2B,GAAG,CAAC,EAAE,gBAAgBC,mBAAkB;AAC/H,0BAAoB,WAAW,KAAK,UAAU;AAC9C,0BAAoB,QAAQ,KAAK,KAAK,UAAU;AAChD,0BAAoB,UAAU,KAAK,UAAU;AAE7C,WAAK,oCAAoC,2BAA2B,GAAG,CAAC,IAAI;AAC5E,WAAK,8BAA8B,2BAA2B,GAAG,CAAC,IAAI;AACtE,WAAK,sCAAsC,2BAA2B,GAAG,CAAC,IAAI;AAC9E,WAAK,mCAAmC,2BAA2B,GAAG,CAAC,IAAI;IAC/E;AAGA;AACI,UAAI,2BAA2B,KAAK,wBAAwB,gBAAgBH,eAAa;AACzF,+BAAyB,OAAO,KAAK;AACrC,+BAAyB,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACxE,+BAAyB,SAAS,QAAQ,KAAK,UAAU;AAEzD,UAAI,iBAAiB,KAAK,kBAAkB,gBAAgBC,cAAa;AACzE,WAAK,0BAA0B,cAAc;AAC7C,qBAAe,OAAO,KAAK,UAAU;AAErC,UAAI,yBAAyB,KAAK,0BAA0B,gBAAgBC,aAAY;AAExF,UAAI,sBAAsB,KAAK,0BAA0B,gBAAgBC,mBAAkB;AAC3F,0BAAoB,WAAW,KAAK,UAAU;AAC9C,0BAAoB,QAAQ,KAAK,KAAK,UAAU;AAChD,0BAAoB,UAAU,KAAK,UAAU;AAE7C,WAAK,mCAAmC;AACxC,WAAK,6BAA6B;AAClC,WAAK,qCAAqC;AAC1C,WAAK,kCAAkC;IAC3C;AAGA;AACI,UAAI,2BAA2B,KAAK,qBAAqB,gBAAgBH,eAAa;AACtF,+BAAyB,OAAO,KAAK;AACrC,+BAAyB,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACxE,+BAAyB,SAAS,QAAQ,KAAK,UAAU;AAEzD,UAAI,iBAAiB,KAAK,eAAe,gBAAgBC,cAAa;AACtE,WAAK,0BAA0B,cAAc;AAC7C,qBAAe,OAAO,KAAK,UAAU;AAErC,UAAI,yBAAyB,KAAK,uBAAuB,gBAAgBC,aAAY;AAErF,UAAI,sBAAsB,KAAK,uBAAuB,gBAAgBC,mBAAkB;AACxF,0BAAoB,WAAW,KAAK,UAAU;AAC9C,0BAAoB,QAAQ,KAAK,KAAK,UAAU;AAChD,0BAAoB,UAAU,KAAK,UAAU;AAE7C,WAAK,gCAAgC;AACrC,WAAK,0BAA0B;AAC/B,WAAK,kCAAkC;AACvC,WAAK,+BAA+B;IACxC;AAGA;AACI,UAAI,2BAA2B,KAAK,uBAAuB,gBAAgBH,eAAa;AACxF,+BAAyB,OAAO,KAAK;AACrC,+BAAyB,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACxE,+BAAyB,SAAS,QAAQ,KAAK,UAAU;AAEzD,UAAI,iBAAiB,KAAK,iBAAiB,gBAAgBC,cAAa;AACxE,WAAK,0BAA0B,cAAc;AAC7C,qBAAe,OAAO,KAAK,UAAU;AAErC,UAAI,yBAAyB,KAAK,yBAAyB,gBAAgBC,aAAY;AAEvF,UAAI,sBAAsB,KAAK,yBAAyB,gBAAgBC,mBAAkB;AAC1F,0BAAoB,WAAW,KAAK,UAAU;AAC9C,0BAAoB,QAAQ,KAAK,KAAK,UAAU;AAChD,0BAAoB,UAAU,KAAK,UAAU;AAE7C,WAAK,kCAAkC;AACvC,WAAK,4BAA4B;AACjC,WAAK,oCAAoC;AACzC,WAAK,iCAAiC;IAC1C;EACJ;EAEA,wBAAqB;AACjB,SAAK,iCAAiC,KAAK,sBAAsB,gBAAgBD,aAAY;AAC7F,SAAK,+BAA+B,YAAY;AAEhD,QAAI,gBAAgB,KAAK,sBAAsB,gBAAgBC,mBAAkB;AACjF,kBAAc,WAAW,KAAK,UAAU;AACxC,kBAAc,QAAQ,KAAK,KAAK,UAAU;AAC1C,kBAAc,UAAU,KAAK,UAAU;AAEvC,SAAK,8BAA8B;EACvC;EAEA,0BAA0B,eAAa;AACnC,kBAAc,YAAY,KAAK,UAAU;AACzC,kBAAc,gBAAgB,KAAK,UAAU;AAC7C,kBAAc,WAAW,KAAK,UAAU,eAAe,MAAK;AAC5D,kBAAc,SAAS,QAAQ,KAAK,UAAU;AAC9C,kBAAc,OAAO;EACzB;EAEA,oBAAiB;AACb,SAAK,mBAAkB;EAC3B;EAEA,kBAAe;AACX,SAAK,sBAAqB;EAC9B;EAEA,qBAAkB;AACd,SAAK,kBAAkB,oBAAoB,KAAK,UAAU,2BAA2B,KAAK,UAAU,YAAY,CAAC;EACrH;EAEA,wBAAqB;AACjB,SAAK,kBAAkB,oBAAoB,KAAK,UAAU,2BAA2B,eAAe,IAAI,CAAC;EAC7G;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,YAAQ,wCAAwC,MAAM,KAAK,SAAS;EACxE;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AC5WJ,SAAS,WAAAC,iBAAe;;;ACAxB,SAAS,aAAAC,YAAW,YAAAC,WAAU,iBAAAC,sBAAqB;AAI7C,IAAO,oBAAP,MAAwB;EAE1B,YAAY,gBAAgB,oBAAkB;AAE1C,SAAK,kBAAkB,gBAAgB,kBAAkB;AACzD,SAAK,oBAAmB;EAC5B;EAEA,kBAAkB,gBAAgB,oBAAkB;AAEhD,SAAK,oBAAoB,YAAY,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAEpE,SAAK,kCAAkCC,UAAS;AAChD,SAAK,+BAA+B;AACpC,SAAK,mCAAmC;AAExC,SAAK,qBAAqB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAExE,SAAK,kBAAkBC,WAAU;AACjC,SAAK,sBAAsBC,eAAc;AACzC,SAAK,cAAc,KAAK;AAExB,SAAK,oBAAoB,YAAY,MAAM,MAAM,IAAI;AAErD,SAAK,oCAAoC,YAAY,OAAO,OAAO,CAAC;AACpE,SAAK,iCAAiC,YAAY,GAAG,GAAG,IAAK;AAC7D,SAAK,8BAA8B,KAAK;AAExC,QAAI,wCAAwC;AAC5C,QAAI,gBAAgB,KAAK,kCAAkC,CAAC,KAAK,IAAI,sBAAsB,wCAAwC;AAEnI,SAAK,6BAA6B,CAAA;AAClC,SAAK,2BAA2B,eAAe,IAAI,IAAI,CAAA;AACvD,SAAK,2BAA2B,eAAe,IAAI,EAAE,aAAa,YAAY,OAAO,eAAe,QAAQ,KAAK;AAEjH,SAAK,2BAA2B,eAAe,IAAI,IAAI,CAAA;AACvD,SAAK,2BAA2B,eAAe,IAAI,EAAE,aAAa,YAAY,OAAO,eAAe,OAAO,KAAK;AAEhH,SAAK,2BAA2B,eAAe,KAAK,IAAI,CAAA;AACxD,SAAK,2BAA2B,eAAe,KAAK,EAAE,aAAa,YAAY,MAAM,eAAe,OAAO,KAAK;AAEhH,SAAK,yBAAyB;AAE9B,SAAK,yCAAyC,YAAY,GAAG,GAAG,CAAC;AACjE,SAAK,uCAAuC,CAAC,IAAI,KAAK,+BAA+B,CAAC;AACtF,SAAK,qCAAqC,KAAK,kCAAkC,SAAQ;AACzF,SAAK,mCAAmC,CAAC,IAAI,KAAK;AAElD,SAAK,8BAA8B,YAAY,QAAQ,QAAQ,CAAC;AAChE,SAAK,2BAA2B,YAAY,GAAG,GAAG,IAAK;AACvD,SAAK,wBAAwB,YAAY,MAAM,MAAM,IAAI;AAEzD,QAAI,6BAA6B;AACjC,QAAI,eAAe;AACnB,QAAI,mBAAmB,KAAK,kCAAkC,CAAC,IAAI,KAAK,4BAA4B,CAAC,IAAI,6BACrG,KAAK,4BAA4B,CAAC,KAAK,IAAI,gBAAgB,6BAA6B;AAE5F,SAAK,sBAAsB,CAAA;AAC3B,SAAK,oBAAoB,eAAe,IAAI,IAAI,CAAA;AAChD,SAAK,oBAAoB,eAAe,IAAI,EAAE,aAAa,KAAK,2BAA2B,eAAe,IAAI,EAAE,WAAW,SAAQ;AACnI,SAAK,oBAAoB,eAAe,IAAI,EAAE,WAAW,CAAC,KAAK;AAE/D,SAAK,oBAAoB,eAAe,IAAI,IAAI,CAAA;AAChD,SAAK,oBAAoB,eAAe,IAAI,EAAE,aAAa,KAAK,2BAA2B,eAAe,IAAI,EAAE,WAAW,SAAQ;AACnI,SAAK,oBAAoB,eAAe,IAAI,EAAE,WAAW,CAAC,KAAK;AAE/D,SAAK,oBAAoB,eAAe,KAAK,IAAI,CAAA;AACjD,SAAK,oBAAoB,eAAe,KAAK,EAAE,aAAa,KAAK,2BAA2B,eAAe,KAAK,EAAE,WAAW,SAAQ;AACrI,SAAK,oBAAoB,eAAe,KAAK,EAAE,WAAW,CAAC,KAAK;AAEhE,SAAK,kBAAkB;AAEvB,SAAK,kCAAkC,YAAY,GAAG,GAAG,CAAC;AAC1D,SAAK,gCAAgC,CAAC,IAAI,KAAK,yBAAyB,CAAC;AACzE,SAAK,8BAA8B,KAAK,4BAA4B,SAAQ;AAC5E,SAAK,4BAA4B,CAAC,IAAI,KAAK;EAC/C;EAEA,sBAAmB;AACf,SAAK,6BAA4B;AAEjC,SAAK,qBAAqB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AACxE,SAAK,4BAA4B,KAAK;AACtC,SAAK,kCAAkC,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;EACzF;EAEA,+BAA4B;AACxB,SAAK,0BAA0B,KAAK,+BAA8B;AAElE,SAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,IAAI,EAAE,aAAa,YAAY,QAAQ,OAAO,MAAM,KAAK;AAClI,SAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,IAAI,EAAE,WAAW,eAAe,KAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,IAAI,EAAE,UAAU;AAElM,SAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,KAAK,EAAE,aAAa,YAAY,QAAQ,QAAQ,OAAO,KAAK;AACrI,SAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,KAAK,EAAE,WAAW,eAAe,KAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,KAAK,EAAE,UAAU;AAEpM,SAAK,wBAAwB,oBAAoB,YAAY,EAAE,eAAe,IAAI,EAAE,aAAa,YAAY,QAAQ,OAAO,MAAM,KAAK;AACvI,SAAK,wBAAwB,oBAAoB,YAAY,EAAE,eAAe,IAAI,EAAE,WAAW,eAAe,KAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,IAAI,EAAE,UAAU;AAEvM,SAAK,wBAAwB,oBAAoB,YAAY,EAAE,eAAe,KAAK,EAAE,aAAa,YAAY,QAAQ,QAAQ,OAAO,KAAK;AAC1I,SAAK,wBAAwB,oBAAoB,YAAY,EAAE,eAAe,KAAK,EAAE,WAAW,eAAe,KAAK,wBAAwB,oBAAoB,OAAO,EAAE,eAAe,KAAK,EAAE,UAAU;AAYzM,SAAK,2BAA2B,KAAK,+BAA8B;AAEnE,SAAK,yBAAyB,oBAAoB,OAAO,EAAE,eAAe,IAAI,EAAE,aAAa,YAAY,KAAK,MAAM,KAAK;AACzH,SAAK,yBAAyB,oBAAoB,OAAO,EAAE,eAAe,KAAK,EAAE,aAAa,YAAY,MAAM,MAAM,KAAK;AAE3H,SAAK,yBAAyB,oBAAoB,YAAY,EAAE,eAAe,IAAI,EAAE,aAAa,YAAY,KAAK,MAAM,KAAK;AAC9H,SAAK,yBAAyB,oBAAoB,YAAY,EAAE,eAAe,KAAK,EAAE,aAAa,YAAY,MAAM,MAAM,KAAK;AAEhI,SAAK,sCAAsC;EAC/C;EAEA,iCAA8B;AAC1B,QAAI,0BAA0B,CAAA;AAE9B,aAAS,sBAAsB,qBAAqB;AAChD,UAAI,kBAAkB,oBAAoB,kBAAkB;AAC5D,8BAAwB,eAAe,IAAI,CAAA;AAC3C,eAAS,iBAAiB,gBAAgB;AACtC,YAAI,aAAa,eAAe,aAAa;AAC7C,gCAAwB,eAAe,EAAE,UAAU,IAAI,CAAA;AACvD,gCAAwB,eAAe,EAAE,UAAU,EAAE,aAAa,YAAY,GAAG,GAAG,CAAC;AACrF,gCAAwB,eAAe,EAAE,UAAU,EAAE,aAAa,YAAY,GAAG,GAAG,GAAG,CAAC;MAC5F;IACJ;AAEA,WAAO;EACX;;;;AC7IJ,SAAS,sBAAAC,qBAAoB,iBAAAC,iBAAe,iBAAAC,uBAAqB;AACjE,SAAS,gBAAAC,qBAAoB;AAOvB,IAAO,gBAAP,MAAoB;EAEtB,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,qBAAqB;AAE1B,SAAK,kBAAkB;AACvB,SAAK,YAAY;AAEjB,SAAK,mBAAmB;AACxB,SAAK,6BAA6B;AAElC,SAAK,YAAY;AAEjB,SAAK,eAAe;EACxB;EAEA,MAAM,cAAc,QAAQ,QAAM;AAC9B,SAAK,kBAAkB;AACvB,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,eAAe,QAAQ,iBAAiB,KAAK,SAAS,EAAE;AAE7D,SAAK,gBAAe;AACpB,SAAK,eAAc;AACnB,SAAK,eAAc;AAEnB,SAAK,sBAAqB;AAE1B,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,MAAM,OAAO,KAAK,SAAS;EACvJ;EAEA,iBAAiB,SAAO;AACpB,SAAK,mBAAmB;AACxB,SAAK,mBAAmB,aAAa,OAAO;AAC5C,QAAI,SAAS;AACT,WAAK,yBAAyB,IAAI;IACtC;EACJ;EAEA,2BAA2B,SAAO;AAC9B,SAAK,6BAA6B;AAClC,SAAK,wBAAwB,aAAa,OAAO;EACrD;EAEA,UAAU,QAAM;AACZ,QAAI,UAAU,KAAK,WAAW;AAC1B,WAAK,YAAY;AACjB,UAAI,KAAK,WAAW;AAChB,aAAK,cAAc,aAAa,QAAQ,gBAAgB,KAAK,SAAS,EAAE,OAAO;MACnF,OAAO;AACH,aAAK,cAAc,aAAa,KAAK,kBAAkB;AAEvD,YAAI,CAAC,QAAQ,gBAAgB,KAAK,SAAS,GAAG;AAC1C,eAAK,sBAAqB;QAC9B;AAEA,aAAK,yBAAyB,IAAI;MACtC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,SAAK,yBAAyB,KAAK;EACvC;EAEA,yBAAyB,+BAA6B;AAClD,QAAI,QAAQ,gBAAgB,KAAK,SAAS,GAAG;AACzC,UAAI,kBAAkB,WAAW,+BAA+B,KAAK,UAAU,cAAc,KAAK,SAAS;AAE3G,UAAI,mBAAmB,KAAK,sBAAsB,+BAA+B;AAC7E,aAAK,qBAAqB;AAE1B,YAAI,CAAC,KAAK,WAAW;AACjB,eAAK,cAAc,oBAAoB,KAAK,UAAU,wBAAwB,KAAK,kBAAkB,EAAE,KAAK,UAAU,YAAY,EAAE,UAAU;AAC9I,eAAK,cAAc,sBAAqB;AACxC,eAAK,cAAc,oBAAoB,KAAK,UAAU,wBAAwB,KAAK,kBAAkB,EAAE,KAAK,UAAU,YAAY,EAAE,UAAU;AAE9I,eAAK,eAAe,oBAAoB,KAAK,UAAU,yBAAyB,KAAK,kBAAkB,EAAE,KAAK,UAAU,YAAY,EAAE,UAAU;AAChJ,eAAK,eAAe,sBAAqB;AACzC,eAAK,eAAe,oBAAoB,KAAK,UAAU,yBAAyB,KAAK,kBAAkB,EAAE,KAAK,UAAU,YAAY,EAAE,UAAU;AAEhJ,eAAK,wBAAwB,oBAAoB,KAAK,UAAU,2BAA2B,KAAK,UAAU,YAAY,EAAE,UAAU;AAClI,eAAK,iBAAiB,oBAAoB,KAAK,UAAU,oBAAoB,KAAK,UAAU,YAAY,EAAE,UAAU;QACxH;MACJ;IACJ,OAAO;AACH,WAAK,wBAAwB,aAAa,KAAK,oBAAoB,KAAK,0BAA0B;IACtG;EACJ;;EAGA,kBAAe;AACX,SAAK,qBAAqB,KAAK,gBAAgB,aAAY;AAE3D,QAAI,QAAQ,mBAAmB,KAAK,SAAS,GAAG;AAC5C,WAAK,mBAAmB,gBAAgB,YAAY,GAAG,KAAK,CAAC,CAAC;IAClE;AAEA,SAAK,gBAAgB,KAAK,mBAAmB,aAAY;AACzD,SAAK,iBAAiB,KAAK,cAAc,aAAY;AAErD,SAAK,0BAA0B,KAAK,cAAc,aAAY;AAC9D,SAAK,+BAA+B,KAAK,wBAAwB,aAAY;AAC7E,SAAK,yBAAyB,KAAK,wBAAwB,aAAY;AACvE,SAAK,iCAAiC,KAAK,wBAAwB,aAAY;AAE/E,SAAK,qBAAqB,KAAK,cAAc,aAAY;AAEzD,SAAK,mBAAmB,KAAK,mBAAmB,aAAY;AAC5D,SAAK,wBAAwB,KAAK,iBAAiB,aAAY;AAC/D,SAAK,kBAAkB,KAAK,iBAAiB,aAAY;AACzD,SAAK,0BAA0B,KAAK,iBAAiB,aAAY;AAEjE,SAAK,sBAAsB,QAAQ,iBAAiB,KAAK,SAAS,EAAE,cAAc,aAAY;AAC9F,SAAK,oBAAoB,kBAAkB,YAAY,GAAG,GAAG,CAAC,KAAK,UAAU,mCAAmC,CAAC;AACjH,SAAK,oBAAoB,eAAe,YAAY,GAAG,GAAG,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC;EAEtF;;EAGA,iBAAc;AACV,SAAK,cAAc,aAAY;AAE/B,SAAK,wBAAwB,oBAAoB,KAAK,UAAU,2BAA2B,KAAK,UAAU,YAAY,EAAE,UAAU;AAClI,SAAK,6BAA6B,eAAe,KAAK,UAAU,iCAAiC;AACjG,SAAK,uBAAuB,oBAAoB,KAAK,UAAU,8BAA8B;AAC7F,SAAK,uBAAuB,eAAe,KAAK,UAAU,2BAA2B;AACrF,SAAK,+BAA+B,oBAAoB,KAAK,UAAU,sCAAsC;AAE7G,SAAK,iBAAiB,oBAAoB,KAAK,UAAU,oBAAoB,KAAK,UAAU,YAAY,EAAE,UAAU;AAEpH,SAAK,sBAAsB,eAAe,KAAK,UAAU,2BAA2B;AACpF,SAAK,gBAAgB,oBAAoB,KAAK,UAAU,wBAAwB;AAChF,SAAK,gBAAgB,eAAe,KAAK,UAAU,qBAAqB;AACxE,SAAK,wBAAwB,oBAAoB,KAAK,UAAU,+BAA+B;EACnG;;EAGA,iBAAc;AACV,SAAK,wCAAwC,KAAK,6BAA6B,gBAAgBC,eAAa;AAC5G,SAAK,sCAAsC,OAAO,KAAK;AACvD,SAAK,sCAAsC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AAC1F,SAAK,sCAAsC,SAAS,QAAQ,KAAK,UAAU;AAE3E,SAAK,kCAAkC,KAAK,uBAAuB,gBAAgBC,eAAa;AAChG,SAAK,0BAA0B,KAAK,+BAA+B;AACnE,SAAK,gCAAgC,OAAO,KAAK,UAAU;AAE3D,SAAK,0CAA0C,KAAK,+BAA+B,gBAAgBC,aAAY;AAC/G,SAAK,uCAAuC,KAAK,+BAA+B,gBAAgBC,mBAAkB;AAClH,SAAK,qCAAqC,WAAW,KAAK,UAAU;AACpE,SAAK,qCAAqC,QAAQ,KAAK,KAAK,UAAU;AACtE,SAAK,qCAAqC,UAAU,KAAK,UAAU;AAEnE,SAAK,iCAAiC,KAAK,sBAAsB,gBAAgBH,eAAa;AAC9F,SAAK,+BAA+B,OAAO,KAAK;AAChD,SAAK,+BAA+B,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACnF,SAAK,+BAA+B,SAAS,QAAQ,KAAK,UAAU;AAEpE,SAAK,2BAA2B,KAAK,gBAAgB,gBAAgBC,eAAa;AAClF,SAAK,0BAA0B,KAAK,wBAAwB;AAC5D,SAAK,yBAAyB,SAAS,QAAQ,KAAK,UAAU;AAC9D,SAAK,yBAAyB,OAAO,KAAK,UAAU;AAEpD,SAAK,mCAAmC,KAAK,wBAAwB,gBAAgBC,aAAY;AAEjG,SAAK,gCAAgC,KAAK,wBAAwB,gBAAgBC,mBAAkB;AACpG,SAAK,8BAA8B,WAAW,KAAK,UAAU;AAC7D,SAAK,8BAA8B,QAAQ,KAAK,KAAK,UAAU;AAC/D,SAAK,8BAA8B,UAAU,KAAK,UAAU;EAChE;EAEA,0BAA0B,eAAa;AACnC,kBAAc,YAAY,KAAK,UAAU;AACzC,kBAAc,gBAAgB,KAAK,UAAU;AAC7C,kBAAc,WAAW,KAAK,UAAU,eAAe,MAAK;AAC5D,kBAAc,SAAS,QAAQ,KAAK,UAAU;AAC9C,kBAAc,OAAO;EACzB;EAEA,oBAAiB;AACb,SAAK,wBAAwB,aAAa,KAAK,0BAA0B;AAEzE,SAAK,mBAAkB;EAC3B;EAEA,kBAAe;AACX,SAAK,sBAAqB;EAC9B;EAEA,qBAAkB;AACd,SAAK,mBAAmB,aAAa,KAAK,eAAe;AAEzD,SAAK,mBAAmB,uBAAsB;AAE9C,QAAI,QAAQ,mBAAmB,KAAK,SAAS,GAAG;AAC5C,WAAK,mBAAmB,gBAAgB,YAAY,GAAG,KAAK,CAAC,CAAC;IAClE;AAEA,SAAK,yBAAyB,IAAI;EACtC;EAEA,wBAAqB;AACjB,QAAI,CAAC,KAAK,WAAW;AACjB,WAAK,mBAAmB,aAAa,KAAK,mBAAmB;AAC7D,WAAK,mBAAmB,uBAAsB;AAE9C,WAAK,cAAc,oBAAoB,KAAK,UAAU,wBAAwB,oBAAoB,IAAI,EAAE,eAAe,IAAI,EAAE,UAAU;AACvI,WAAK,cAAc,sBAAqB;AACxC,WAAK,cAAc,oBAAoB,KAAK,UAAU,wBAAwB,oBAAoB,IAAI,EAAE,eAAe,IAAI,EAAE,UAAU;AAEvI,WAAK,eAAe,oBAAoB,KAAK,UAAU,yBAAyB,oBAAoB,IAAI,EAAE,eAAe,IAAI,EAAE,UAAU;AACzI,WAAK,eAAe,sBAAqB;AACzC,WAAK,eAAe,oBAAoB,KAAK,UAAU,yBAAyB,oBAAoB,IAAI,EAAE,eAAe,IAAI,EAAE,UAAU;AAEzI,WAAK,wBAAwB,oBAAoB,KAAK,UAAU,2BAA2B,eAAe,IAAI,EAAE,UAAU;AAC1H,WAAK,iBAAiB,oBAAoB,KAAK,UAAU,oBAAoB,eAAe,IAAI,EAAE,UAAU;IAChH;EACJ;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,YAAQ,wCAAwC,MAAM,KAAK,SAAS;EACxE;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AFtOE,IAAO,eAAP,MAAmB;EAErB,cAAA;AACI,SAAK,eAAe,eAAe;AAEnC,SAAK,kBAAkB;AACvB,SAAK,iBAAiB;EAC1B;;AAGE,IAAO,cAAP,MAAkB;EAEpB,YAAY,gBAAgB,oBAAoB,SAAS,QAAQ,cAAa,GAAE;AAC5E,SAAK,mBAAmB;AACxB,SAAK,YAAY;AAEjB,SAAK,YAAY,IAAI,kBAAkB,gBAAgB,kBAAkB;AACzE,SAAK,YAAY;AAEjB,SAAK,QAAQ,IAAI,cAAc,MAAM;AACrC,SAAK,0BAA0B;AAE/B,SAAK,iCAAiC,IAAIC,UAAO;AACjD,SAAK,uBAAuB,IAAIA,UAAO;AAEvC,SAAK,eAAe;EACxB;EAEA,kBAAe;AACX,WAAO,KAAK,MAAM;EACtB;EAEA,WAAW,SAAO;AACd,SAAK,mBAAmB,CAAC;AACzB,SAAK,kBAAkB,OAAO,IAAI;EACtC;EAEA,YAAS;AACL,WAAO,KAAK;EAChB;EAEA,mBAAgB;AACZ,SAAK,kBAAkB,OAAO,IAAI;EACtC;EAEA,YAAS;AACL,SAAK,WAAW,KAAK;EACzB;EAEA,0CAA0C,IAAI,UAAQ;AAClD,SAAK,+BAA+B,IAAI,UAAU,EAAE,GAAM,CAAE;EAChE;EAEA,4CAA4C,IAAE;AAC1C,SAAK,+BAA+B,OAAO,EAAE;EACjD;EAEA,gCAAgC,IAAI,UAAQ;AACxC,SAAK,qBAAqB,IAAI,UAAU,EAAE,GAAM,CAAE;EACtD;EAEA,kCAAkC,IAAE;AAChC,SAAK,qBAAqB,OAAO,EAAE;EACvC;EAEA,MAAM,cAAc,QAAM;AACtB,SAAK,YAAY;AAEjB,SAAK,MAAM,MAAM,cAAc,KAAK,WAAW,MAAM;AACrD,SAAK,MAAM,2BAA2B,OAAO,sBAAsB;AACnE,SAAK,0BAA0B,OAAO;AACtC,QAAI,CAAC,OAAO,eAAe;AACvB,WAAK,kBAAkB,OAAO,KAAK;IACvC;AAEA,SAAK,cAAa;EACtB;EAEA,OAAO,IAAE;AACL,SAAK,MAAM,OAAO,EAAE;EACxB;EAEA,gBAAa;AACT,QAAI,KAAK,KAAK;AAEd,OAAG,iCAAiC,QAAQ,IAAI,KAAK,WAAW,KAAK,MAAM,IAAI,CAAC;AAChF,OAAG,iCAAiC,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,+BAA+B,QAAQ,CAAC;AACzH,OAAG,iCAAiC,UAAU,IAAI,KAAK,YAAY,KAAK,MAAM,GAAG,+BAA+B,QAAQ,CAAC;AAEzH,OAAG,wCAAwC,QAAQ,IAAI,KAAK,kBAAkB,KAAK,MAAM,MAAM,IAAI,CAAC;AACpG,OAAG,wCAAwC,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,sCAAsC,QAAQ,CAAC;AACvI,OAAG,wCAAwC,UAAU,IAAI,KAAK,mBAAmB,KAAK,MAAM,GAAG,sCAAsC,QAAQ,CAAC;EAClJ;EAEA,kBAAkB,UAAU,QAAM;AAC9B,SAAK,mBAAmB,CAAC,KAAK;AAE9B,SAAK,MAAM,iBAAiB,KAAK,gBAAgB;AAEjD,QAAI,eAAe,KAAK,MAAM,gCAAgC;AAC9D,QAAI,qBAAqB,KAAK,MAAM,sCAAsC;AAC1E,QAAI,KAAK,kBAAkB;AACvB,mBAAa,QAAQ,KAAK,UAAU;AACpC,UAAI,CAAC,UAAU;AACX,2BAAmB,QAAQ,KAAK,UAAU;MAC9C;IACJ,OAAO;AACH,mBAAa,QAAQ,KAAK,UAAU;AACpC,UAAI,CAAC,UAAU;AACX,2BAAmB,QAAQ,KAAK,UAAU;MAC9C;IACJ;AAEA,QAAI,QAAQ;AACR,WAAK,+BAA+B,OAAO,KAAK,gBAAgB;IACpE;AAEA,SAAK,MAAM,2BAA2B,KAAK,uBAAuB;EACtE;EAEA,WAAW,UAAQ;AACf,QAAI,KAAK,kBAAkB;AACvB,WAAK,YAAY,CAAC,KAAK;AAEvB,WAAK,MAAM,UAAU,KAAK,SAAS;AAEnC,UAAI,eAAe,KAAK,MAAM,yBAAyB;AACvD,UAAI,qBAAqB,KAAK,MAAM,+BAA+B;AACnE,UAAI,KAAK,WAAW;AAChB,qBAAa,QAAQ,KAAK,UAAU;AACpC,YAAI,CAAC,UAAU;AACX,6BAAmB,QAAQ,KAAK,UAAU;QAC9C;MACJ,OAAO;AACH,qBAAa,QAAQ,KAAK,UAAU;AACpC,YAAI,CAAC,UAAU;AACX,6BAAmB,QAAQ,KAAK,UAAU;QAC9C;MACJ;AAEA,WAAK,qBAAqB,OAAO,KAAK,SAAS;IACnD;EACJ;EAEA,cAAc,UAAQ;AAClB,aAAS,QAAQ,KAAK,UAAU;EACpC;EAEA,mBAAmB,UAAQ;AACvB,QAAI,KAAK,kBAAkB;AACvB,eAAS,QAAQ,KAAK,UAAU;IACpC,OAAO;AACH,eAAS,QAAQ,KAAK,UAAU;IACpC;EACJ;EAEA,YAAY,UAAQ;AAChB,QAAI,KAAK,WAAW;AAChB,eAAS,QAAQ,KAAK,UAAU;IACpC,OAAO;AACH,eAAS,QAAQ,KAAK,UAAU;IACpC;EACJ;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,QAAI,KAAK,SAAS,MAAM;AACpB,WAAK,MAAM,QAAO;IACtB;EACJ;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AG1KE,IAAO,wBAAP,cAAqC,aAAY;EAEnD,cAAA;AACI,UAAK;AAEL,SAAK,oCAAoC;AACzC,SAAK,gBAAgB;AACrB,SAAK,yBAAyB;AAC9B,SAAK,sBAAsB,iCAAiC;AAE5D,SAAK,kDAAkD;EAC3D;;AAGE,IAAO,yBAAP,MAA6B;EAE/B,YAAY,aAAa,cAAY;AACjC,SAAK,SAAS;AACd,SAAK,UAAU;AAEf,SAAK,kBAAkB,aAAa,KAAK,IAAI;AAE7C,SAAK,mBAAmB;EAC5B;EAEA,YAAY,SAAO;AACf,WAAO,KAAK,mBAAmB,QAAQ,mBAAmB,KAAK,UAAU,QAAQ;EACrF;EAEA,gBAAa;AACT,SAAK,oBAAoB;AAEzB,QAAI,cAAgB,KAAM,OAAO,KAAK,gBAAgB,EAAG,OAAO,IAAI;AAEpE,QAAI,OAAO,KAAK;AAChB,WAAO,YAAY,OAAO,IAAI;AAC9B,SAAK,UAAU,KAAK,MAAM,IAAI;EAClC;;AAWE,IAAO,kBAAP,MAAsB;EAExB,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,iBAAiB,IAAI,YAAY,KAAK,GAAG,MAAM;AACpD,SAAK,eAAe,0CAA0C,MAAM,KAAK,sBAAsB,KAAK,IAAI,CAAC;AAEzG,SAAK,YAAY,IAAI,sBAAqB;AAC1C,SAAK,YAAY;AAEjB,SAAK,QAAQ,IAAI,kBAAkB,MAAM;AAEzC,SAAK,cAAc,CAAA;AAEnB,SAAK,uBAAuB,CAAA;AAC5B,SAAK,kBAAkB,CAAA;AAEvB,SAAK,iBAAiB,CAAA;AACtB,aAAS,OAAO,4BAA4B;AACxC,WAAK,eAAe,2BAA2B,GAAG,CAAC,IAAI;IAC3D;AAEA,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,kBAAkB;AACvB,SAAK,iBAAiB;AACtB,SAAK,2BAA2B;AAEhC,SAAK,gBAAgB;AAErB,SAAK,0BAA0B;AAC/B,QAAI,KAAK,UAAU,4BAA4B;AAC3C,WAAK,0BAA0B;IACnC;AAEA,SAAK,wBAAwB;AAC7B,SAAK,qCAAqC;AAE1C,SAAK,mCAAmC;AACxC,SAAK,wCAAwC;AAC7C,SAAK,eAAe;AAEpB,SAAK,YAAY;AAEjB,SAAK,eAAe;EACxB;EAEA,WAAW,SAAO;AACd,SAAK,eAAe,WAAW,OAAO;EAC1C;EAEA,YAAS;AACL,WAAO,KAAK,eAAe,UAAS;EACxC;EAEA,MAAM,cAAc,QAAM;AACtB,SAAK,iBAAiB,QAAQ,eAAe,KAAK,SAAS;AAC3D,SAAK,kBAAkB,QAAQ,gBAAgB,KAAK,SAAS;AAE7D,SAAK,YAAY;AAEjB,SAAK,eAAe,MAAM,cAAc,MAAM;AAE9C,SAAK,MAAM,MAAM,KAAK,eAAe,gBAAe,GAAI,KAAK,WAAW,MAAM;AAC9E,SAAK,MAAM,WAAW,KAAK,eAAe,UAAS,CAAE;AACrD,SAAK,qBAAqB,KAAK;AAE/B,SAAK,cAAa;AAElB,SAAK,2BAA0B;EACnC;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,uCAAuC;AAC5C,WAAK,wCAAwC;AAC7C,WAAK,mCAAmC;IAC5C;AAEA,SAAK,eAAe,OAAO,EAAE;AAE7B,QAAI,KAAK,eAAe,UAAS,GAAI;AACjC,UAAI,KAAK,cAAc;AACnB,aAAK,gBAAe;MACxB;AAEA,WAAK,cAAc,EAAE;IACzB;AAEA,SAAK,4BAA4B,EAAE;EACvC;;EAGA,6BAA0B;AACtB,SAAK,qBAAqB,+BAA+B,GAAG,IAAI,QAAQ;AACxE,SAAK,qBAAqB,+BAA+B,KAAK,IAAI,QAAQ;AAC1E,SAAK,qBAAqB,+BAA+B,IAAI,IAAI,QAAQ;AACzE,SAAK,qBAAqB,+BAA+B,IAAI,IAAI,QAAQ;AACzE,SAAK,qBAAqB,+BAA+B,KAAK,IAAI,QAAQ;AAC1E,SAAK,qBAAqB,+BAA+B,MAAM,IAAI,QAAQ;AAC3E,SAAK,4BAA4B,QAAQ;AAEzC,QAAI,KAAK,UAAU,qCAAqC,gCAAgC,MAAM;AAE1F,UAAI,KAAK,UAAU,qCAAqC,gCAAgC,KAAK;AACzF,gBAAQ,MAAM,KAAK,cAAc,KAAK,MAAM,+BAA+B,KAAK,sBAAsB,eAAe;MACzH;AAEA,cAAQ,QAAQ,KAAK,cAAc,KAAK,MAAM,+BAA+B,OAAO,sBAAsB,eAAe;AACzH,cAAQ,OAAO,KAAK,cAAc,KAAK,MAAM,+BAA+B,MAAM,sBAAsB,eAAe;AAEvH,UAAI,KAAK,UAAU,qCAAqC,gCAAgC,KAAK;AACzF,gBAAQ,OAAO,KAAK,cAAc,KAAK,MAAM,+BAA+B,MAAM,sBAAsB,eAAe;AACvH,gBAAQ,QAAQ,KAAK,cAAc,KAAK,MAAM,+BAA+B,OAAO,sBAAsB,eAAe;MAC7H;AAEA,cAAQ,SAAS,KAAK,cAAc,KAAK,MAAM,+BAA+B,QAAQ,sBAAsB,eAAe;AAE3H,cAAQ,QAAQ,KAAK,cAAc,KAAK,MAAM,MAAM,sBAAsB,eAAe;AAEzF,WAAK,wBAAwB,SAAU,YAAU;AAC7C,YAAI,WAAW,SAAS,MAAM;AAC1B,eAAK,cAAc,+BAA+B,OAAO,sBAAsB,QAAQ,YAAY,WAAW,MAAM,KAAK;QAC7H,OAAO;AACH,eAAK,cAAc,+BAA+B,OAAO,sBAAsB,QAAQ,YAAY,WAAW,OAAO;QACzH;MACJ,EAAE,KAAK,IAAI;AAEX,WAAK,qCAAqC,SAAU,YAAU;AAC1D,aAAK,cAAc,+BAA+B,OAAO,sBAAsB,QAAQ,yBAAyB,WAAW,MAAM;MACrI,EAAE,KAAK,IAAI;AAEX,aAAO,iBAAiB,SAAS,KAAK,qBAAqB;AAC3D,aAAO,iBAAiB,sBAAsB,KAAK,kCAAkC;IACzF;AAEA,SAAK,gBAAgB,+BAA+B,GAAG,IAAI,QAAQ,aAAa,KAAK,SAAS,EAAE;AAChG,SAAK,gBAAgB,+BAA+B,KAAK,IAAI,QAAQ,aAAa,KAAK,SAAS,EAAE;AAClG,SAAK,gBAAgB,+BAA+B,IAAI,IAAI,QAAQ,aAAa,KAAK,SAAS,EAAE;AACjG,SAAK,gBAAgB,+BAA+B,IAAI,IAAI,QAAQ,aAAa,KAAK,SAAS,EAAE;AACjG,SAAK,gBAAgB,+BAA+B,KAAK,IAAI,QAAQ,aAAa,KAAK,SAAS,EAAE;AAClG,SAAK,gBAAgB,+BAA+B,MAAM,IAAI,QAAQ,aAAa,KAAK,SAAS,EAAE;AACnG,SAAK,uBAAuB,QAAQ,aAAa,KAAK,SAAS,EAAE;AAEjE,YAAQ,aAAa,KAAK,SAAS,EAAE,MAAM,KAAK,cAAc,KAAK,MAAM,+BAA+B,KAAK,sBAAsB,UAAU;AAC7I,YAAQ,aAAa,KAAK,SAAS,EAAE,QAAQ,KAAK,cAAc,KAAK,MAAM,+BAA+B,OAAO,sBAAsB,UAAU;AACjJ,YAAQ,aAAa,KAAK,SAAS,EAAE,OAAO,KAAK,cAAc,KAAK,MAAM,+BAA+B,MAAM,sBAAsB,UAAU;AAC/I,YAAQ,aAAa,KAAK,SAAS,EAAE,OAAO,KAAK,cAAc,KAAK,MAAM,+BAA+B,MAAM,sBAAsB,UAAU;AAC/I,YAAQ,aAAa,KAAK,SAAS,EAAE,QAAQ,KAAK,cAAc,KAAK,MAAM,+BAA+B,OAAO,sBAAsB,UAAU;AACjJ,YAAQ,aAAa,KAAK,SAAS,EAAE,SAAS,KAAK,cAAc,KAAK,MAAM,+BAA+B,QAAQ,sBAAsB,UAAU;AACnJ,YAAQ,aAAa,KAAK,SAAS,EAAE,QAAQ,KAAK,cAAc,KAAK,MAAM,MAAM,sBAAsB,UAAU;EACrH;;EAIA,YAAY,aAAW;AACnB,QAAI,cAAc;AAElB,QAAI,CAAC,KAAK,eAAe,WAAW,GAAG;AACnC,UAAI,aAAa;AACjB,UAAI,IAAI,KAAK,YAAY,SAAS;AAElC,UAAI,oBAAoB,KAAK,MAAM,KAAK,eAAe;AAEvD,aAAO,KAAK,KAAK,aAAa,KAAK,UAAU,YAAY;AACrD,YAAI,UAAU,KAAK,YAAY,CAAC;AAGhC,YAAI,KAAK,eAAe,QAAQ,MAAM,GAAG;AACrC,eAAK;AACL;QACJ;AAEA,YAAI,eAAe,QAAQ,QAAQ;AAGnC,YAAI,cAAc;AAClB,YAAI,oBAAoB,GAAG;AACvB,cAAI,uBAAuB;AAC3B,cAAI,KAAK,KAAK,YAAY,SAAS,GAAG;AAClC,mCAAuB,KAAK,UAAU;UAC1C;AAEA,cAAI,qBAAqB,eAAe,sBAAsB;AAC1D,iCAAqB,eAAe;AACpC,0BAAc,eAAe;UACjC,OAAO;AACH,0BAAc;AACd,gCAAoB;UACxB;QACJ;AAGA,YAAI,KAAK,KAAK,YAAY,SAAS,GAAG;AAClC,cAAI,mBAAmB,KAAK,UAAU,yBAAyB,KAAK,IAAI,KAAK,UAAU,yBAAyB,aAAa,CAAC;AAC9H,cAAI,mBAAmB,KAAK,UAAU,yBAAyB;AAC/D,cAAI,aAAa,mBAAmB,KAAK,UAAU,YAAY;AAC3D,+BAAmB,KAAK,cAAc;UAC1C;AAEA,mBAAS,IAAI,GAAG,IAAI,kBAAkB,KAAK;AACvC,0BAAe,KAAM,OAAO,WAAW;UAC3C;AAEA,wBAAc;AACd,yBAAe;QACnB;AAGA,YAAI,cAAc,eAAe;AACjC,YAAI,aAAa,cAAc,KAAK,UAAU,YAAY;AACtD,wBAAc,KAAK,UAAU,aAAa;QAC9C;AAEA,YAAI,cAAc,GAAG;AACjB,cAAI,QAAQ,UAAU,aAAa;AAG/B,gBAAI,eAAe,QAAQ,QAAQ,MAAM,eAAe,cAAc,aAAa,eAAe,WAAW;AAC7G,gBAAI,OAAO,aAAa,KAAK,IAAI;AACjC,0BAAe,KAAK,OAAO,IAAI,EAAG,OAAO,WAAW;AAEpD,0BAAc;UAClB,OAAO;AAGH,qBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AAClC,4BAAe,KAAM,OAAO,WAAW;YAC3C;AAEA,0BAAc;UAClB;QACJ;AAEA,aAAK;MACT;IACJ;AAEA,kBAAc,KAAK,UAAU,0BAA0B,OAAO,WAAW;AAEzE,SAAK,MAAM,yBAAyB,WAAW,EAAE,OAAO;EAC5D;EAEA,cAAc,iBAAiB,WAAW,MAAI;AAC1C,YAAQ,QAAQ;MACZ,KAAK,sBAAsB;AACvB,aAAK,qBAAqB,eAAe,EAAE,MAAM,SAAS,IAAI;AAC9D;MACJ,KAAK,sBAAsB;AACvB,aAAK,gBAAgB,eAAe,EAAE,MAAM,QAAQ,aAAa,KAAK,SAAS,GAAG,IAAI;AACtF;MACJ;AACI,aAAK,qBAAqB,eAAe,EAAE,MAAM,SAAS,IAAI;AAC9D;IACR;AAEA,QAAI,KAAK,qCAAqC,mBAAmB,+BAA+B,UAAW,KAAK,SAAS,KAAK,CAAC,KAAK,CAAC,IAAK;AACtI,WAAK,eAAe;AACpB,WAAK,cAAa;AAElB,UAAI;AACA,YAAI,UAAU,KAAK,eAAe,iBAAiB,GAAG,IAAI;AAC1D,aAAK,YAAY,OAAO;AAExB,YAAI,KAAK,YAAY,UAAU,KAAK,UAAU,gBAAgB,KAAK,UAAU,wBAAwB;AACjG,eAAK,cAAc,KAAK,YAAY,MAAM,KAAK,YAAY,SAAS,KAAK,UAAU,aAAa;AAChG,eAAK,mBAAkB;QAC3B;MACJ,SAASC,QAAO;AACZ,aAAK,mCAAmC;AACxC,aAAK,wCAAwC;AAE7C,YAAI;AACA,cAAI,eAAe;AACnB,cAAI,UAAU,IAAI,uBAAuB,2BAA2B,OAAO,CAAC,YAAY,CAAC;AACzF,eAAK,YAAY,KAAK,OAAO;AAC7B,mCAAyB,MAAM,KAAK,WAAW,YAAY;QAC/D,SAAS,cAAc;QAEvB;AAEA,cAAMA;MACV;IACJ;EACJ;EAEA,eAAe,oBAAoB,MAAI;AACnC,QAAI,mBAAmB,+BAA+B,QAAQ;AAC1D,aAAO,KAAK,MAAM,CAAC;AACnB,WAAK,OAAO,GAAG,GAAG,KAAK,UAAU,mBAAmB;IACxD;AAEA,QAAI,cAAc,KAAK,8BAA8B,eAAe;AAEpE,QAAI,gBAAgB,KAAK,YAAY,GAAG,IAAI;AAE5C,QAAI,QAAQ,KAAK,gBAAgB,aAAa;AAE9C,QAAI,eAAe,2BAA2B,MAAM;AAChD,oBAAc,2BAA2B;IAC7C,WAAW,eAAe,2BAA2B,aAAa,eAAe,2BAA2B,QAAQ;AAChH,oBAAc,2BAA2B;IAC7C;AAGA,QAAI,UAAU,IAAI,uBAAuB,aAAa,KAAK;AAE3D,WAAO;EACX;EAEA,8BAA8B,iBAAe;AACzC,QAAI,cAAc,2BAA2B;AAE7C,QAAI,kBAAkB,+BAA+B,MAAM;AACvD,oBAAc;IAClB,WAAW,mBAAmB,+BAA+B,MAAM;AAC/D,oBAAc,2BAA2B;IAC7C,OAAO;AACH,oBAAc,2BAA2B;IAC7C;AAEA,WAAO;EACX;;EAGA,eAAe,MAAI;AACf,QAAI,kBAAkB,CAAA;AACtB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,UAAI,KAAK,CAAC,MAAM,QAAW;AACvB,wBAAgB,KAAK,WAAW;MACpC,OAAO;AACH,wBAAgB,KAAK,KAAK,eAAe,KAAK,CAAC,CAAC,CAAC;MACrD;IACJ;AAEA,QAAI,kBAAkB,gBAAgB,KAAK,GAAG;AAE9C,WAAO;EACX;EAEA,eAAe,MAAI;AACf,QAAI,kBAAkB;AAEtB,QAAI,gBAAgB,OAAO;AACvB,wBAAkB,KAAK;IAC3B,WAAW,OAAO,QAAQ,UAAU;AAChC,UAAI,oBAAoB;AAExB,UAAI;AACA,0BAAkB,KAAK,UAAU,MAAM,KAAK,cAAc,KAAK,IAAI,GAAG,iBAAiB;MAC3F,SAASA,QAAO;AACZ,YAAI,QAAQ,oBAAI,QAAO;AAEvB,0BAAkB,KAAK,UAAU,MAAM,SAAU,KAAK,OAAK;AACvD,cAAI,SAAS,QAAQ,OAAO,SAAS,UAAU;AAC3C,gBAAI,MAAM,IAAI,KAAK,GAAG;AAClB,qBAAO;YACX;AACA,kBAAM,IAAI,KAAK;UACnB;AAEA,iBAAO,KAAK,cAAc,KAAK,KAAK;QACxC,EAAE,KAAK,IAAI,GAAG,iBAAiB;MACnC;AAEA,wBAAkB,gBAAgB,WAAW,MAAO,GAAG;AACvD,wBAAkB,gBAAgB,WAAW,MAAM,GAAG;AACtD,wBAAkB,gBAAgB,WAAW,MAAO,GAAG;AACvD,wBAAkB,gBAAgB,WAAW,MAAM,GAAG;IAC1D,OAAO;AACH,wBAAkB;IACtB;AAEA,WAAO;EACX;EAEA,gBAAgB,aAAW;AACvB,QAAI,eAAe,YAAY,MAAM,IAAI;AACzC,QAAI,QAAQ,CAAA;AACZ,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,UAAI,cAAc,aAAa,CAAC;AAEhC,UAAI,YAAY,SAAS,KAAK,UAAU,wBAAwB;AAC5D,YAAI,gBAAgB,KAAK,kBAAkB,WAAW;AACtD,YAAI,aAAa,KAAK,UAAU,YAAY,OAAO,aAAa;AAChE,YAAI,aAAa;AAEjB,eAAO,YAAY,SAAS,KAAK,UAAU,0BAA0B,aAAa,KAAK,UAAU,iBAAiB;AAC9G,cAAI,WAAW,YAAY,OAAO,GAAG,KAAK,UAAU,yBAAyB,CAAC;AAC9E,cAAI,YAAY,YAAY,OAAO,KAAK,UAAU,yBAAyB,CAAC;AAC5E,sBAAY,WAAW,OAAO,SAAS;AAEvC,gBAAM,KAAK,QAAQ;AAEnB,wBAAc;AACd;QACJ;AACA,cAAM,KAAK,WAAW;MAC1B,OAAO;AACH,cAAM,KAAK,WAAW;MAC1B;IACJ;AAEA,WAAO;EACX;EAEA,kBAAkB,MAAI;AAClB,QAAI,SAAS;AACb,QAAI,IAAI;AAER,WAAO,IAAI,KAAK,UAAU,KAAK,CAAC,KAAK,KAAK;AACtC,eAAS,OAAO,OAAO,GAAG;AAC1B;IACJ;AAEA,WAAO;EACX;EAEA,YAAY,SAAO;AACf,QAAI,oBAAoB;AACxB,QAAI,KAAK,YAAY,SAAS,GAAG;AAC7B,UAAI,cAAc,KAAK,YAAY,KAAK,YAAY,SAAS,CAAC;AAC9D,UAAI,YAAY,YAAY,OAAO,GAAG;AAClC,oBAAY,cAAa;AACzB,4BAAoB;MACxB;IACJ;AAEA,QAAI,CAAC,mBAAmB;AACpB,WAAK,YAAY,KAAK,OAAO;IACjC;AAEA,SAAK,qCAAqC,SAAS,iBAAiB;AACpE,SAAK,kBAAkB,OAAO;EAClC;;EAGA,qCAAqC,SAAS,mBAAiB;AAC3D,QAAI,CAAC,qBAAqB,CAAE,KAAK,eAAe,QAAQ,MAAM,KAAM,KAAK,kBAAkB,GAAG;AAC1F,WAAK,mBAAmB,QAAQ,QAAQ,SAAS,KAAK,UAAU;IACpE;EACJ;EAEA,kBAAe;AACX,QAAI,KAAK,eAAe,UAAS,GAAI;AACjC,eAAS,OAAO,4BAA4B;AACxC,aAAK,YAAY,2BAA2B,GAAG,CAAC;MACpD;AAEA,WAAK,eAAe;IACxB;EACJ;EAEA,kBAAkB,SAAO;AACrB,QAAI,CAAE,KAAK,eAAe,QAAQ,MAAM,KAAM,KAAK,kBAAkB,GAAG;AACpE,WAAK,qBAAqB,IAAI;IAClC;EACJ;EAEA,cAAc,IAAE;AACZ,QAAI,KAAK,aAAa;AAClB,WAAK,kBAAkB;AACvB,aAAO,KAAK,iBAAiB,KAAK,UAAU,eAAe;AACvD,aAAK,kBAAkB,KAAK,UAAU;AACtC,aAAK,mBAAmB,KAAK,UAAU;MAC3C;IACJ,WAAW,KAAK,eAAe;AAC3B,WAAK,kBAAkB;AACvB,aAAO,KAAK,iBAAiB,KAAK,UAAU,eAAe;AACvD,aAAK,kBAAkB,KAAK,UAAU;AACtC,aAAK,mBAAmB,KAAK,UAAU;MAC3C;IACJ;AAEA,SAAK,mBAAkB;AAEvB,QAAI,KAAK,eAAe,KAAK,eAAe;AACxC,WAAK,gBAAe;IACxB;AAEA,QAAI,KAAK,mBAAmB,GAAG;AAC3B,WAAK,qBAAqB,KAAK;IACnC;EACJ;EAEA,qBAAkB;AACd,QAAI,YAAY,KAAK,oBAAmB;AACxC,SAAK,kBAAkB,KAAK,SAAS,KAAK,iBAAiB,GAAG,SAAS;EAC3E;EAEA,sBAAmB;AACf,WAAO,KAAK,IAAI,KAAK,eAAc,IAAK,KAAK,UAAU,YAAY,CAAC;EACxE;EAEA,iBAAc;AACV,QAAI,aAAa;AACjB,aAAS,WAAW,KAAK,aAAa;AAClC,UAAI,CAAC,KAAK,eAAe,QAAQ,MAAM,GAAG;AACtC,sBAAc,QAAQ,QAAQ,SAAS,KAAK,UAAU;MAC1D;IACJ;AACA,kBAAc,KAAK,UAAU;AAC7B,iBAAa,KAAK,IAAI,YAAY,CAAC;AAEnC,WAAO;EACX;;EAIA,gBAAa;AACT,QAAI,KAAK,KAAK;AAEd,aAAS,OAAO,4BAA4B;AACxC,UAAI,eAAe,GAAG,sCAAsC,2BAA2B,GAAG,CAAC;AAC3F,UAAI,qBAAqB,GAAG,oCAAoC,2BAA2B,GAAG,CAAC,EAAE;AACjG,UAAI,eAAe,GAAG,8BAA8B,2BAA2B,GAAG,CAAC,EAAE;AAErF,mBAAa,cAAc,IAAI,KAAK,cAAc,KAAK,MAAM,2BAA2B,GAAG,GAAG,YAAY,CAAC;AAC3G,mBAAa,cAAc,IAAI,KAAK,iBAAiB,KAAK,MAAM,2BAA2B,GAAG,GAAG,YAAY,CAAC;AAC9G,mBAAa,cAAc,IAAI,KAAK,cAAc,KAAK,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7F,mBAAa,QAAQ,IAAI,KAAK,aAAa,KAAK,MAAM,2BAA2B,GAAG,GAAG,kBAAkB,CAAC;AAC1G,mBAAa,UAAU,IAAI,KAAK,eAAe,KAAK,MAAM,2BAA2B,GAAG,GAAG,kBAAkB,CAAC;IAClH;AAEA;AACI,UAAI,eAAe,GAAG;AACtB,UAAI,qBAAqB,GAAG,iCAAiC;AAE7D,mBAAa,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,OAAO,IAAI,CAAC;AACnE,mBAAa,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,kBAAkB,CAAC;AAC1E,mBAAa,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,kBAAkB,CAAC;IAClF;AAEA;AACI,UAAI,eAAe,GAAG;AACtB,UAAI,qBAAqB,GAAG,8BAA8B;AAE1D,mBAAa,cAAc,IAAI,KAAK,iBAAiB,KAAK,MAAM,IAAI,CAAC;AACrE,mBAAa,OAAO,IAAI,KAAK,aAAa,KAAK,MAAM,IAAI,CAAC;AAC1D,mBAAa,cAAc,IAAI,KAAK,aAAa,KAAK,MAAM,IAAI,CAAC;AACjE,mBAAa,KAAK,IAAI,KAAK,aAAa,KAAK,MAAM,KAAK,CAAC;AACzD,mBAAa,UAAU,IAAI,KAAK,aAAa,KAAK,MAAM,KAAK,CAAC;AAC9D,mBAAa,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,kBAAkB,CAAC;AAC1E,mBAAa,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,kBAAkB,CAAC;IAClF;AAEA;AACI,UAAI,eAAe,GAAG;AACtB,UAAI,qBAAqB,GAAG,gCAAgC;AAE5D,mBAAa,cAAc,IAAI,KAAK,mBAAmB,KAAK,IAAI,CAAC;AACjE,mBAAa,OAAO,IAAI,KAAK,eAAe,KAAK,MAAM,IAAI,CAAC;AAC5D,mBAAa,cAAc,IAAI,KAAK,eAAe,KAAK,MAAM,IAAI,CAAC;AACnE,mBAAa,KAAK,IAAI,KAAK,eAAe,KAAK,MAAM,KAAK,CAAC;AAC3D,mBAAa,UAAU,IAAI,KAAK,eAAe,KAAK,MAAM,KAAK,CAAC;AAChE,mBAAa,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,kBAAkB,CAAC;AAC1E,mBAAa,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,kBAAkB,CAAC;IAClF;AAEA;AACI,UAAI,eAAe,GAAG;AACtB,UAAI,qBAAqB,GAAG,gCAAgC;AAE5D,mBAAa,QAAQ,IAAI,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAC3D,mBAAa,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,kBAAkB,CAAC;AAC1E,mBAAa,UAAU,IAAI,KAAK,mBAAmB,KAAK,IAAI,CAAC;IACjE;AAEA,OAAG,+BAA+B,QAAQ,IAAI,KAAK,yBAAyB,KAAK,MAAM,IAAI,CAAC;AAC5F,OAAG,+BAA+B,UAAU,IAAI,KAAK,yBAAyB,KAAK,MAAM,KAAK,CAAC;EACnG;EAEA,cAAc,aAAW;AACrB,QAAI,KAAK,eAAe,UAAS,GAAI;AACjC,eAAS,OAAO,4BAA4B;AACxC,YAAI,qBAAqB,KAAK,MAAM,oCAAoC,2BAA2B,GAAG,CAAC,EAAE;AACzG,YAAI,qBAAqB,KAAK,MAAM,8BAA8B,2BAA2B,GAAG,CAAC,EAAE;AAEnG,aAAK,eAAe,2BAA2B,GAAG,CAAC,IAAI;AACvD,2BAAmB,QAAQ,KAAK,UAAU,oBAAoB,2BAA2B,GAAG,CAAC;AAC7F,YAAI,2BAA2B,GAAG,KAAK,aAAa;AAChD,6BAAmB,QAAQ,KAAK,UAAU;QAC9C;MACJ;AAEA,WAAK,mBAAkB;AACvB,WAAK,gBAAe;IACxB;EACJ;EAEA,iBAAiB,aAAW;AACxB,QAAI,KAAK,eAAe,UAAS,GAAI;AACjC,eAAS,OAAO,4BAA4B;AACxC,YAAI,qBAAqB,KAAK,MAAM,oCAAoC,2BAA2B,GAAG,CAAC,EAAE;AACzG,YAAI,qBAAqB,KAAK,MAAM,8BAA8B,2BAA2B,GAAG,CAAC,EAAE;AACnG,YAAI,2BAA2B,GAAG,KAAK,aAAa;AAChD,eAAK,eAAe,2BAA2B,GAAG,CAAC,IAAI;AACvD,6BAAmB,QAAQ,KAAK,UAAU;AAC1C,6BAAmB,QAAQ,KAAK,UAAU;QAC9C,OAAO;AACH,eAAK,eAAe,2BAA2B,GAAG,CAAC,IAAI;AACvD,6BAAmB,QAAQ,KAAK,UAAU,oBAAoB,WAAW;QAC7E;MACJ;AAEA,WAAK,mBAAkB;AACvB,WAAK,gBAAe;IACxB;EACJ;EAEA,cAAc,aAAa,cAAY;AACnC,QAAI,KAAK,eAAe,UAAS,GAAI;AAEjC,WAAK,eAAe,WAAW,IAAI,CAAC,KAAK,eAAe,WAAW;AACnE,UAAI,KAAK,eAAe,WAAW,GAAG;AAClC,qBAAa,QAAQ,KAAK,UAAU;MACxC,OAAO;AACH,qBAAa,QAAQ,KAAK,UAAU,oBAAoB,WAAW;MACvE;AAEA,WAAK,mBAAkB;AACvB,WAAK,gBAAe;IACxB;EACJ;EAEA,cAAc,kBAAkB,OAAO,SAAS,MAAI;AAChD,QAAI,KAAK,eAAe,UAAS,KAAM,iBAAiB;AACpD,WAAK,cAAc,CAAA;AACnB,WAAK,mBAAkB;AACvB,WAAK,gBAAe;AAEpB,UAAI,iBAAiB;AACjB,gBAAQ,QAAQ;UACZ,KAAK,sBAAsB;AACvB,iBAAK,0BAA0B,MAAM,OAAO;AAC5C;UACJ,KAAK,sBAAsB;AACvB,iBAAK,qBAAqB,MAAM,QAAQ,aAAa,KAAK,SAAS,CAAC;AACpE;UACJ;AACI;QACR;MACJ,WAAW,KAAK,UAAU,uCAAuC;AAC7D,iCAAyB,MAAM,KAAK,SAAS;MACjD;IACJ;EACJ;EAEA,aAAa,OAAK;AACd,QAAI,KAAK,eAAe,UAAS,KAAM,CAAC,OAAO;AAC3C,UAAI,OAAO;AACP,aAAK,iBAAiB;MAC1B;AAEA,WAAK,cAAc;IACvB;EACJ;EAEA,eAAe,OAAK;AAChB,QAAI,KAAK,eAAe,UAAS,KAAM,CAAC,OAAO;AAC3C,UAAI,OAAO;AACP,aAAK,iBAAiB;MAC1B;AAEA,WAAK,gBAAgB;IACzB;EACJ;EAEA,mBAAgB;AACZ,QAAI,KAAK,eAAe,UAAS,GAAI;AACjC,WAAK,kBAAkB,KAAK,oBAAmB;AAC/C,WAAK,gBAAe;IACxB;EACJ;EAEA,qBAAkB;AACd,QAAI,KAAK,eAAe,UAAS,GAAI;AACjC,WAAK,kBAAkB;AACvB,WAAK,qBAAqB,KAAK;AAC/B,WAAK,gBAAe;IACxB;EACJ;EAEA,qBAAqB,QAAM;AACvB,SAAK,MAAM,kBAAkB,aAAa,UAAU,KAAK,eAAe,UAAS,CAAE;EACvF;EAEA,qBAAkB;AACd,QAAI,WAAW,KAAK,MAAM,gCAAgC;AAC1D,aAAS,QAAQ,KAAK,UAAU;EACpC;EAEA,aAAa,aAAa,UAAQ;AAC9B,SAAK,cAAc,QAAQ;EAC/B;EAEA,eAAe,aAAa,UAAQ;AAChC,QAAI,KAAK,eAAe,WAAW,GAAG;AAClC,eAAS,QAAQ,KAAK,UAAU;IACpC,OAAO;AACH,eAAS,QAAQ,KAAK,UAAU;IACpC;EACJ;EAEA,cAAc,UAAQ;AAClB,aAAS,QAAQ,KAAK,UAAU;EACpC;EAEA,gBAAgB,UAAQ;AACpB,aAAS,QAAQ,KAAK,UAAU;EACpC;;EAIA,4BAA4B,IAAE;AAC1B,QAAI,KAAK,kBAAkB,KAAK,iBAAiB;AAC7C,UAAK,KAAK,eAAe,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,KAAK,gBAAgB,cAAc,gBAAgB,UAAU,EAAE,UAAS,KACxJ,KAAK,gBAAgB,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,KAAK,eAAe,cAAc,gBAAgB,UAAU,EAAE,UAAS,GAAK;AAC9J,aAAK,kBAAiB;MAC1B;AAEA,WAAK,gBAAgB,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAExD,WAAK,4BAA4B,EAAE;IACvC;EACJ;EAEA,oBAAiB;AACb,SAAK,eAAe,iBAAgB;EACxC;EAEA,sBAAsB,SAAO;AACzB,SAAK,MAAM,WAAW,OAAO;AAC7B,QAAI,SAAS;AACT,WAAK,gBAAe;IACxB;EACJ;EAEA,4BAA4B,IAAE;AAC1B,QAAI,KAAK,eAAe,UAAS,KAAM,KAAK,yBAAyB;AACjE,UAAI,OAAO,YAAY,GAAG,CAAC;AAC3B,UAAI,KAAK,UAAU,gCAAgC,eAAe,MAAM;AACpE,eAAO,KAAK,eAAe,YAAY,cAAc,UAAU,EAAE;MACrE,WAAW,KAAK,UAAU,gCAAgC,eAAe,OAAO;AAC5E,eAAO,KAAK,gBAAgB,YAAY,cAAc,UAAU,EAAE;MACtE;AAEA,UAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,gCAAgC;AACnE,aAAK,4BAA4B;AAEjC,eAAO,KAAK,2BAA2B,KAAK,UAAU,yBAAyB;AAC3E,eAAK,4BAA4B,KAAK,UAAU;AAEhD,cAAI,0BAA0B,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,mCAAmC,IAAI,KAAK,UAAU;AACvH,eAAK,mBAAmB,KAAK,KAAK,KAAK,CAAC,CAAC,IAAI,yBAAyB,KAAK,UAAU;QACzF;AAEA,aAAK,mBAAkB;AACvB,aAAK,gBAAe;MACxB,OAAO;AACH,aAAK,2BAA2B;MACpC;IACJ;EACJ;EAEA,gBAAa;AACT,QAAI,KAAK,kBAAkB,KAAK,iBAAiB;AAC7C,UAAI,YAAY,KAAK,UAAU;AAC/B,UAAI,eAAe,aAAa,iCAAiC,UAAW,CAAC,KAAK,eAAe,UAAS,KAAM,aAAa,iCAAiC;AAC9J,UAAI,gBAAgB,KAAK,iBAAiB,GAAG;AACzC,YAAI,KAAK,UAAU,gBAAgB,eAAe,OAAO;AACrD,eAAK,gBAAgB,MAAM,KAAK,UAAU,kBAAkB,KAAK,UAAU,eAAe;QAC9F,OAAO;AACH,eAAK,eAAe,MAAM,KAAK,UAAU,kBAAkB,KAAK,UAAU,eAAe;QAC7F;AACA,aAAK,gBAAgB,KAAK,UAAU;MACxC;IACJ;EACJ;EAEA,eAAe,OAAK;AAChB,QAAI,KAAK,sBAAsB,KAAK,GAAG;AACnC,aAAO;IACX,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC7B,UAAI,eAAe;AACnB,eAAS,WAAW,OAAO;AACvB,YAAI,mBAAmB,QAAQ;AAC3B,yBAAe;AACf;QACJ;MACJ;AAEA,aAAO;IACX;AAEA,WAAO;EACX;EAEA,sBAAsB,MAAI;AACtB,WAAO,QAAQ,KAAK,gBAEZ,KAAK,YAAY,QAAQ,uBACzB,KAAK,YAAY,QAAQ,gBACzB,KAAK,YAAY,QAAQ,iBACzB,KAAK,YAAY,QAAQ,iBACzB,KAAK,YAAY,QAAQ,eACzB,KAAK,YAAY,QAAQ,gBACzB,KAAK,YAAY,QAAQ,gBACzB,KAAK,YAAY,QAAQ,kBACzB,KAAK,YAAY,QAAQ;EAErC;EAEA,yBAAyB,SAAO;AAC5B,SAAK,0BAA0B;AAE/B,QAAI,CAAC,KAAK,UAAU,4BAA4B;AAC5C,WAAK,0BAA0B;IACnC;EACJ;EAEA,cAAc,KAAK,OAAK;AACpB,QAAI,iBAAiB,KAAK;AACtB,aAAO,MAAM,KAAK,MAAM,QAAO,CAAE;IACrC,WAAW,KAAK,eAAe,KAAK,GAAG;AACnC,UAAI,QAAQ;AACZ,UAAI,KAAK,sBAAsB,KAAK,GAAG;AACnC,YAAI,YAAY,CAAA;AAChB,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,oBAAU,CAAC,IAAI,MAAM,CAAC;QAC1B;AAEA,gBAAQ;MACZ;AAEA,UAAI,mBAAmB,KAAK,UAAU,KAAK;AAC3C,yBAAmB,iBAAiB,MAAM,GAAG,EAAE,KAAK,IAAI;AACxD,aAAO;IACX,OAAO;AACH,aAAO;IACX;EACJ;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,WAAO,oBAAoB,SAAS,KAAK,qBAAqB;AAC9D,WAAO,oBAAoB,sBAAsB,KAAK,kCAAkC;AAExF,SAAK,MAAM,QAAO;AAClB,SAAK,eAAe,QAAO;AAE3B,QAAI,KAAK,UAAU,iDAAiD;AAChE,cAAQ,MAAM,yBAAyB,OAAO,KAAK,SAAS;AAC5D,cAAQ,QAAQ,yBAAyB,SAAS,KAAK,SAAS;AAChE,cAAQ,OAAO,yBAAyB,QAAQ,KAAK,SAAS;AAC9D,cAAQ,OAAO,yBAAyB,QAAQ,KAAK,SAAS;AAC9D,cAAQ,QAAQ,yBAAyB,SAAS,KAAK,SAAS;AAChE,cAAQ,SAAS,yBAAyB,UAAU,KAAK,SAAS;AAClE,cAAQ,QAAQ,yBAAyB,SAAS,KAAK,SAAS;IACpE,OAAO;AACH,cAAQ,MAAM,KAAK,qBAAqB,+BAA+B,GAAG;AAC1E,cAAQ,QAAQ,KAAK,qBAAqB,+BAA+B,KAAK;AAC9E,cAAQ,OAAO,KAAK,qBAAqB,+BAA+B,IAAI;AAC5E,cAAQ,OAAO,KAAK,qBAAqB,+BAA+B,IAAI;AAC5E,cAAQ,QAAQ,KAAK,qBAAqB,+BAA+B,KAAK;AAC9E,cAAQ,SAAS,KAAK,qBAAqB,+BAA+B,MAAM;AAChF,cAAQ,QAAQ,KAAK;IACzB;EACJ;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;ACj6BJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAK9B,IAAO,yBAAP,cAAsCC,YAAS;EACjD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,QAAQ,OAAO,GAAG,MAAM;IAC9D,oCAAoCA,WAAS,KAAK,CAAC,QAAQ,OAAO,gBAAgB,GAAG,KAAK;IAC1F,gBAAgBA,WAAS,KAAK,KAAK;IACnC,yBAAyBA,WAAS,KAAK,KAAK;IAC5C,sBAAsBA,WAAS,KAAK,CAAC,SAAS,UAAU,aAAa,GAAG,OAAO;;EAGnF,QAAK;AACD,SAAK,aAAa;AAElB,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,OAAO,gBAAgB,sBAAsB;AAElD,WAAK,YAAY,IAAI,gBAAgB,KAAK,MAAM;AAEhD,UAAI,SAAS,IAAI,sBAAsB,KAAK,MAAM;AAClD,aAAO,eAAe,CAAC,MAAM,QAAQ,OAAO,EAAE,KAAK,aAAa;AAChE,aAAO,oCAAoC,KAAK;AAChD,aAAO,gBAAgB,KAAK;AAC5B,aAAO,yBAAyB,KAAK;AACrC,aAAO,sBAAsB,KAAK;AAClC,aAAO,kBAAkB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,aAAa,MAAK;AACpF,aAAO,iBAAiB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,OAAO,MAAK;AAE7E,WAAK,UAAU,MAAM,KAAK,QAAQ,MAAM;AAExC,WAAK,yBAAyB;AAE9B,WAAK,aAAa;IACtB;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,YAAY;AACjB,YAAI,KAAK,0BAA0B,MAAM;AACrC,eAAK,UAAU,WAAW,KAAK;AAC/B,eAAK,UAAU,WAAW,KAAK,sBAAsB;AAErD,eAAK,yBAAyB;QAClC;AAEA,aAAK,UAAU,OAAO,EAAE;MAC5B;IACJ,WAAW,KAAK,YAAY;AACxB,UAAI,KAAK,0BAA0B,MAAM;AACrC,aAAK,yBAAyB,KAAK,UAAU,UAAS;MAC1D;AAEA,UAAI,KAAK,UAAU,UAAS,GAAI;AAC5B,aAAK,UAAU,WAAW,KAAK;MACnC;IACJ;EACJ;EAEA,eAAY;AACR,QAAI,KAAK,YAAY;AACjB,UAAI,KAAK,0BAA0B,MAAM;AACrC,aAAK,yBAAyB,KAAK,UAAU,UAAS;MAC1D;AAEA,UAAI,KAAK,UAAU,UAAS,GAAI;AAC5B,aAAK,UAAU,WAAW,KAAK;MACnC;IACJ;EACJ;EAEA,YAAS;AACL,QAAI,KAAK,YAAY;AACjB,WAAK,UAAU,QAAO;IAC1B;EACJ;;;;ACnEJ,SAAS,WAAAC,iBAAe;;;ACVxB,IAAI,uCAAuC,oBAAI,QAAO;AACtD,IAAI,4BAA4B,oBAAI,QAAO;AAE3C,IAAI,oCAAoC,oBAAI,QAAO;AACnD,IAAI,sCAAsC,oBAAI,QAAO;AACrD,IAAI,gCAAgC,oBAAI,QAAO;AAEzC,SAAU,yBAAyB,cAAc,SAAS,QAAQ,cAAa,GAAE;AACnF,MAAI,qCAAqC,IAAI,MAAM,GAAG;AAClD,aAAS,YAAY,qCAAqC,IAAI,MAAM,EAAE,OAAM,GAAI;AAC5E,eAAS,YAAY;IACzB;EACJ;AACJ;AAEM,SAAU,cAAc,SAAS,QAAQ,cAAa,GAAE;AAC1D,MAAI,0BAA0B,IAAI,MAAM,GAAG;AACvC,aAAS,YAAY,0BAA0B,IAAI,MAAM,EAAE,OAAM,GAAI;AACjE,eAAQ;IACZ;EACJ;AACJ;AAIM,SAAU,gBAAgB,UAAU,MAAM,qCAAqC,OAAO,eAAe,OAAO,oBAAoB,MAAM,oBAAoB,MAAM,SAAS,QAAQ,cAAa,GAAE;AAClM,MAAI,WAAW,QAAQ,QAAQ,UAAU,GAAG;AACxC,QAAI,UAAU,WAAW;AACrB,gBAAU,UAAU,SAAQ,EAAG,KAC3B,SAAU,WAAS;AACf,gBAAQ,qBAAqB,MAAM,EAAE,SAAS,WAAW,oCAAoC,YAAY;AAEzG,sBAAc,cAAc,MAAM;AAElC,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,IAAI,8CAA8C;AAC1D,gBAAQ,IAAI,SAAS;MACzB,GAAG,WAAA;AACC,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,MAAM,2EAA2E;MAC7F,CAAC,EACH,MAAM,SAAU,QAAM;AACpB,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,MAAM,2EAA2E;AACzF,gBAAQ,MAAM,MAAM;MACxB,CAAC;IACL;EACJ,OAAO;AACH,QAAI,kBAAkB,2CAA2C,SAAS,MAAM;AAEhF,UAAM,eAAe,EAAE,KACnB,SAAU,UAAQ;AACd,UAAI,SAAS,IAAI;AACb,iBAAS,KAAI,EAAG,KACZ,SAAU,MAAI;AACV,kBAAQ,qBAAqB,MAAM,EAAE,SAAS,MAAM,oCAAoC,YAAY;AAEpG,wBAAc,cAAc,MAAM;AAElC,cAAI,qBAAqB,MAAM;AAC3B,8BAAiB;UACrB;AAEA,kBAAQ,IAAI,sCAAsC,eAAe;AACjE,kBAAQ,IAAI,IAAI;QACpB,GACA,SAAUC,WAAQ;AACd,cAAI,qBAAqB,MAAM;AAC3B,8BAAiB;UACrB;AAEA,kBAAQ,MAAM,mEAAmE,eAAe;AAChG,kBAAQ,MAAMA,SAAQ;QAC1B,CAAC;MAET,OAAO;AACH,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,MAAM,mEAAmE,eAAe;AAChG,gBAAQ,MAAM,QAAQ;MAC1B;IACJ,GACA,SAAU,UAAQ;AACd,UAAI,qBAAqB,MAAM;AAC3B,0BAAiB;MACrB;AAEA,cAAQ,MAAM,mEAAmE,eAAe;AAChG,cAAQ,MAAM,QAAQ;IAC1B,CAAC,EACH,MAAM,SAAU,QAAM;AACpB,UAAI,qBAAqB,MAAM;AAC3B,0BAAiB;MACrB;AAEA,cAAQ,MAAM,mEAAmE,eAAe;AAChG,cAAQ,MAAM,MAAM;IACxB,CAAC;EACL;AAEA,gBAAc,cAAc,MAAM;AACtC;AAIM,SAAU,gBAAgB,UAAU,MAAM,oBAAoB,MAAM,oBAAoB,MAAM,SAAS,QAAQ,cAAa,GAAE;AAChI,MAAI,gBAAgB,QAAQ,qBAAqB,MAAM,EAAE,OAAM;AAE/D,MAAI,WAAW,QAAQ,QAAQ,UAAU,GAAG;AACxC,QAAI,UAAU,WAAW;AACrB,gBAAU,UAAU,UAAU,aAAa,EAAE,KACzC,WAAA;AACI,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,IAAI,4CAA4C;AACxD,gBAAQ,IAAI,aAAa;MAC7B,GACA,WAAA;AACI,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,MAAM,yEAAyE;MAC3F,CAAC,EACH,MAAM,SAAU,QAAM;AACpB,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,MAAM,yEAAyE;AACvF,gBAAQ,MAAM,MAAM;MACxB,CAAC;IACL;EACJ,OAAO;AACH,QAAI,kBAAkB,2CAA2C,SAAS,MAAM;AAEhF,UAAM,iBAAiB;MACnB,SAAS;QACL,UAAU;QACV,gBAAgB;;MAEpB,QAAQ;MACR,MAAM;KACT,EAAE,KACC,SAAU,UAAQ;AACd,UAAI,SAAS,IAAI;AACb,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,IAAI,oCAAoC,eAAe;AAC/D,gBAAQ,IAAI,aAAa;MAC7B,OAAO;AACH,YAAI,qBAAqB,MAAM;AAC3B,4BAAiB;QACrB;AAEA,gBAAQ,MAAM,iEAAiE,eAAe;AAC9F,gBAAQ,MAAM,QAAQ;MAC1B;IACJ,GACA,SAAU,UAAQ;AACd,UAAI,qBAAqB,MAAM;AAC3B,0BAAiB;MACrB;AAEA,cAAQ,MAAM,iEAAiE,eAAe;AAC9F,cAAQ,MAAM,QAAQ;IAC1B,CAAC,EACH,MAAM,SAAU,QAAM;AACpB,UAAI,qBAAqB,MAAM;AAC3B,0BAAiB;MACrB;AAEA,cAAQ,MAAM,iEAAiE,eAAe;AAC9F,cAAQ,MAAM,MAAM;IACxB,CAAC;EACL;AACJ;AAEM,SAAU,iCAAiC,cAAc,SAAS,QAAQ,cAAa,GAAE;AAC3F,oCAAkC,IAAI,QAAQ,YAAY;AAC9D;AAEM,SAAU,mCAAmC,cAAc,SAAS,QAAQ,cAAa,GAAE;AAC7F,sCAAoC,IAAI,QAAQ,YAAY;AAChE;AAEM,SAAU,6BAA6B,cAAc,SAAS,QAAQ,cAAa,GAAE;AACvF,gCAA8B,IAAI,QAAQ,YAAY;AAC1D;AAEM,SAAU,iCAAiC,SAAS,QAAQ,cAAa,GAAE;AAC7E,MAAI,eAAe;AAEnB,MAAI,kCAAkC,IAAI,MAAM,GAAG;AAC/C,mBAAe,kCAAkC,IAAI,MAAM;EAC/D;AAEA,SAAO;AACX;AAEM,SAAU,mCAAmC,SAAS,QAAQ,cAAa,GAAE;AAC/E,MAAI,eAAe;AAEnB,MAAI,oCAAoC,IAAI,MAAM,GAAG;AACjD,mBAAe,oCAAoC,IAAI,MAAM;EACjE;AAEA,SAAO;AACX;AAEM,SAAU,6BAA6B,SAAS,QAAQ,cAAa,GAAE;AACzE,MAAI,eAAe;AAEnB,MAAI,8BAA8B,IAAI,MAAM,GAAG;AAC3C,mBAAe,8BAA8B,IAAI,MAAM;EAC3D;AAEA,SAAO;AACX;AAEM,SAAU,oCAAoC,IAAI,UAAU,SAAS,QAAQ,cAAa,GAAE;AAC9F,MAAI,CAAC,qCAAqC,IAAI,MAAM,GAAG;AACnD,yCAAqC,IAAI,QAAQ,oBAAI,IAAG,CAAE;EAC9D;AAEA,uCAAqC,IAAI,MAAM,EAAE,IAAI,IAAI,QAAQ;AACrE;AAEM,SAAU,uCAAuC,IAAI,SAAS,QAAQ,cAAa,GAAE;AACvF,MAAI,qCAAqC,IAAI,MAAM,GAAG;AAClD,yCAAqC,IAAI,MAAM,EAAE,OAAO,EAAE;EAC9D;AACJ;AAEM,SAAU,yBAAyB,IAAI,UAAU,SAAS,QAAQ,cAAa,GAAE;AACnF,MAAI,CAAC,0BAA0B,IAAI,MAAM,GAAG;AACxC,8BAA0B,IAAI,QAAQ,oBAAI,IAAG,CAAE;EACnD;AAEA,4BAA0B,IAAI,MAAM,EAAE,IAAI,IAAI,QAAQ;AAC1D;AAEM,SAAU,4BAA4B,IAAI,SAAS,QAAQ,cAAa,GAAE;AAC5E,MAAI,0BAA0B,IAAI,MAAM,GAAG;AACvC,8BAA0B,IAAI,MAAM,EAAE,OAAO,EAAE;EACnD;AACJ;AAEO,IAAI,gBAAgB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKJ,IAAI,6CAA6C,WAAA;AAC7C,MAAI,8BAA8B,IAAI,OAAO,aAAa,GAAG;AAC7D,SAAO,SAASC,4CAA2C,SAAS,SAAS,QAAQ,cAAa,GAAE;AAChG,QAAI,SAAS,QAAQ,MAAM,2BAA2B;AAEtD,QAAI,UAAU,QAAQ,OAAO,UAAU,GAAG;AACtC,aAAO;IACX;AAEA,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,aAAO,CAAC,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK,EAAE;AACrC,aAAO,CAAC,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK,EAAE;IACzC;AAEA,QAAI,kBAAkB,IAAI,IAAI,SAAS,QAAQ,EAAE;AAEjD,QAAI,kBAAkB;AAEtB,aAAS,SAAS,QAAQ;AACtB,UAAI,mBAAmB,gBAAgB,IAAI,KAAK;AAChD,UAAI,oBAAoB,MAAM;AAC1B,0BAAkB,gBAAgB,QAAQ,MAAM,QAAQ,KAAK,gBAAgB;MACjF;IACJ;AAEA,WAAO;EACX;AACJ,EAAC;;;ADtSM,IAAI,uBAAuB;EAC9B,MAAM;EACN,QAAQ;EACR,MAAM;EACN,WAAW;;AAGT,IAAO,8BAAP,MAAkC;EACpC,YAAY,oBAAoB,MAAM,sBAAsB,MAAM,gBAAgB,MAAI;AAClF,SAAK,sBAAsB;AAC3B,SAAK,wBAAwB;AAC7B,SAAK,kBAAkB;EAC3B;;AAGE,IAAO,mBAAP,MAAO,kBAAgB;EAEzB,YAAY,MAAM,MAAM,8BAA8B,MAAM,eAAe,MAAM,cAAc,IAAI,4BAA2B,GAAI,SAAS,QAAQ,cAAa,GAAE;AAC9J,SAAK,UAAU;AACf,SAAK,UAAU;AAEf,SAAK,WAAW;AAChB,SAAK,kBAAkB;AAEvB,SAAK,kBAAkB;AACvB,SAAK,uBAAuB,YAAY,uBAAuB,OAAO,YAAY,sBAAsB,cAAc,iCAAiC,MAAM;AAC7J,SAAK,yBAAyB,YAAY,yBAAyB,OAAO,YAAY,wBAAwB,cAAc,mCAAmC,MAAM;AACrK,SAAK,mBAAmB,YAAY,mBAAmB,OAAO,YAAY,kBAAkB,cAAc,6BAA6B,MAAM;AAE7I,SAAK,2BAA2B;AAEhC,SAAK,yBAAyB,IAAIC,UAAO;AAEzC,SAAK,YAAY;AAEjB,QAAI,+BAA+B,MAAM;AACrC,WAAK,kCAAkC,MAAM,2BAA2B;IAC5E;EACJ;EAEA,UAAO;AACH,WAAO,KAAK;EAChB;EAEA,UAAO;AACH,WAAO,KAAK;EAChB;EAEA,0BAAuB;AACnB,WAAO,KAAK;EAChB;EAEA,yBAAyB,uBAAqB;AAC1C,SAAK,2BAA2B;AAChC,WAAO;EACX;EAEA,WAAQ;AACJ,WAAO,KAAK;EAChB;EAEA,SAAS,OAAO,oBAAoB,OAAK;AACrC,QAAI,eAAe,KAAK,YAAY;AAEpC,SAAK,WAAW;AAEhB,QAAI,mBAAmB;AACnB,wBAAiB,UAAU,gBAAgB,KAAK,MAAM,KAAK;IAC/D;AAEA,kBAAc,cAAc,KAAK,SAAS;AAE1C,QAAI,cAAc;AACd,WAAK,uBAAuB,OAAO,KAAK,SAAQ,GAAI,IAAI;IAC5D;AAEA,WAAO;EACX;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,gBAAgB,OAAK;AACjB,SAAK,kBAAkB;AACvB,WAAO;EACX;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,gBAAgB,cAAY;AACxB,SAAK,kBAAkB;AACvB,WAAO;EACX;EAEA,wBAAqB;AACjB,WAAO,KAAK;EAChB;EAEA,sBAAmB;AACf,WAAO,KAAK;EAChB;EAEA,kBAAe;AACX,WAAO,KAAK;EAChB;EAEA,uBAAuB,SAAO;AAC1B,SAAK,yBAAyB;AAC9B,WAAO;EACX;EAEA,qBAAqB,SAAO;AACxB,SAAK,uBAAuB;AAC5B,WAAO;EACX;EAEA,iBAAiB,SAAO;AACpB,SAAK,mBAAmB;AACxB,WAAO;EACX;EAEA,SAAS,WAAW,oBAAoB,OAAK;AACzC,SAAK,SAAS,KAAK,MAAM,SAAS,GAAG,iBAAiB;EAC1D;EAEA,SAAM;AACF,WAAO,KAAK,UAAU,KAAK,SAAQ,CAAE;EACzC;EAEA,kCAAkC,IAAI,UAAQ;AAC1C,SAAK,uBAAuB,IAAI,UAAU,EAAE,GAAM,CAAE;EACxD;EAEA,oCAAoC,IAAE;AAClC,SAAK,uBAAuB,OAAO,EAAE;EACzC;;AAGE,IAAO,wBAAP,MAAO,+BAA8B,iBAAgB;EAEvD,YAAY,MAAM,MAAM,OAAO,6BAA6B,cAAc,aAAa,QAAM;AACzF,UAAM,MAAM,MAAM,6BAA6B,cAAc,aAAa,MAAM;AAEhF,2BAAsB,UAAU,SAAS,KAAK,MAAM,OAAO,IAAI;EACnE;EAEA,SAAS,OAAO,oBAAoB,OAAK;AACrC,QAAI,eAAe,KAAK,YAAY,QAAQ,CAAC,KAAK,SAAS,UAAU,KAAK;AAE1E,QAAI,KAAK,YAAY,MAAM;AACvB,WAAK,WAAW,MAAM,SAAQ;IAClC,OAAO;AACH,WAAK,SAAS,QAAQ,KAAK;IAC/B;AAEA,QAAI,mBAAmB;AACnB,6BAAsB,UAAU,gBAAgB,KAAK,MAAM,KAAK;IACpE;AAEA,kBAAc,cAAc,KAAK,SAAS;AAE1C,QAAI,cAAc;AACd,WAAK,uBAAuB,OAAO,KAAK,SAAQ,GAAI,IAAI;IAC5D;AAEA,WAAO;EACX;EAEA,gBAAgB,OAAK;AACjB,QAAI,KAAK,mBAAmB,MAAM;AAC9B,WAAK,kBAAkB,MAAM,SAAQ;IACzC,OAAO;AACH,WAAK,gBAAgB,QAAQ,KAAK;IACtC;AAEA,WAAO;EACX;;AAKE,IAAO,sBAAP,cAAmC,sBAAqB;EAE1D,YAAY,MAAM,OAAO,6BAA6B,cAAc,gBAAgB,GAAG,gBAAgB,GAAG,MAAM,MAAM,MAAM,MAAM,wBAAwB,OAAO,aAAa,QAAM;AAChL,UAAM,MAAM,qBAAqB,QAAQ,OAAO,6BAA6B,cAAc,aAAa,MAAM;AAE9G,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AAExB,SAAK,0BAA0B,KAAK;AAEpC,SAAK,SAAS;AACd,SAAK,SAAS;AAEd,SAAK,2BAA2B;AAEhC,SAAK,YAAY,IAAI;EACzB;EAEA,OAAO,KAAG;AACN,SAAK,SAAS;AACd,SAAK,YAAY,KAAK;EAC1B;EAEA,OAAO,KAAG;AACN,SAAK,SAAS;AACd,SAAK,YAAY,KAAK;EAC1B;EAEA,YAAY,mBAAiB;AACzB,QAAI,eAAe,KAAK,SAAS,UAAU,KAAK,QAAQ,KAAK,MAAM;AAEnE,QAAI,CAAC,mBAAmB;AACpB,UAAI,sBAAsB,KAAK,gBAAe,EAAG,UAAU,KAAK,QAAQ,KAAK,MAAM;AACnF,UAAI,sBAAsB,CAAC,oBAAoB,WAAW,KAAK,gBAAe,GAAI,IAAO;AACzF,UAAI,qBAAqB;AACrB,8BAAsB,UAAU,gBAAgB,KAAK,MAAM,mBAAmB;MAClF;IACJ;AAEA,0BAAsB,UAAU,SAAS,KAAK,MAAM,cAAc,iBAAiB;EACvF;;AAGE,IAAO,iBAAP,cAA8B,oBAAmB;EAEnD,YAAY,MAAM,OAAO,6BAA6B,cAAc,eAAe,eAAe,KAAK,KAAK,aAAa,QAAM;AAC3H,UAAM,MAAM,CAAC,KAAK,GAAG,6BAA6B,cAAc,eAAe,eAAe,KAAK,KAAK,QAAW,aAAa,MAAM;AAEtI,SAAK,eAAe,CAAC,CAAC;AACtB,SAAK,sBAAsB,CAAC,CAAC;EACjC;EAEA,WAAQ;AACJ,WAAO,MAAM,SAAQ,EAAG,CAAC;EAC7B;EAEA,SAAS,OAAO,oBAAoB,OAAK;AACrC,SAAK,aAAa,CAAC,IAAI;AACvB,WAAO,MAAM,SAAS,KAAK,cAAc,iBAAiB;EAC9D;EAEA,kBAAe;AACX,WAAO,MAAM,gBAAe,EAAG,CAAC;EACpC;EAEA,gBAAgB,OAAK;AACjB,SAAK,oBAAoB,CAAC,IAAI;AAC9B,WAAO,MAAM,gBAAgB,KAAK,YAAY;EAClD;;AAGE,IAAO,cAAP,cAA2B,eAAc;EAE3C,YAAY,MAAM,OAAO,6BAA6B,cAAc,eAAe,KAAK,KAAK,aAAa,QAAM;AAC5G,UAAM,MAAM,OAAO,6BAA6B,cAAc,GAAG,eAAe,KAAK,KAAK,aAAa,MAAM;EACjH;;AAGE,IAAO,mBAAP,cAAgC,oBAAmB;EAErD,YAAY,MAAM,OAAO,6BAA6B,cAAc,eAAe,KAAK,KAAK,uBAAuB,aAAa,QAAM;AACnI,QAAI,eAAe,MAAM,SAAQ;AAEjC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,mBAAa,CAAC,IAAI,KAAK,MAAM,aAAa,CAAC,CAAC;IAChD;AAEA,UAAM,MAAM,cAAc,6BAA6B,cAAc,GAAG,eAAe,OAAO,OAAO,KAAK,MAAM,GAAG,IAAI,MAAM,OAAO,OAAO,KAAK,MAAM,GAAG,IAAI,KAAK,uBAAuB,aAAa,MAAM;EAChN;;AAKE,IAAO,oBAAP,cAAiC,sBAAqB;EAExD,YAAY,MAAM,OAAO,6BAA6B,cAAc,aAAa,QAAM;AACnF,UAAM,MAAM,qBAAqB,MAAM,OAAO,6BAA6B,cAAc,aAAa,MAAM;EAChH;;AAGE,IAAO,eAAP,cAA4B,kBAAiB;EAE/C,YAAY,MAAM,OAAO,6BAA6B,cAAc,aAAa,QAAM;AACnF,UAAM,MAAM,CAAC,KAAK,GAAG,6BAA6B,cAAc,aAAa,MAAM;AAEnF,SAAK,eAAe,CAAC,CAAC;AACtB,SAAK,sBAAsB,CAAC,CAAC;EACjC;EAEA,WAAQ;AACJ,WAAO,MAAM,SAAQ,EAAG,CAAC;EAC7B;EAEA,SAAS,OAAO,oBAAoB,OAAK;AACrC,SAAK,aAAa,CAAC,IAAI;AACvB,WAAO,MAAM,SAAS,KAAK,cAAc,iBAAiB;EAC9D;EAEA,kBAAe;AACX,WAAO,MAAM,gBAAe,EAAG,CAAC;EACpC;EAEA,gBAAgB,OAAK;AACjB,SAAK,oBAAoB,CAAC,IAAI;AAC9B,WAAO,MAAM,gBAAgB,KAAK,YAAY;EAClD;;AAKE,IAAO,oBAAP,MAAO,2BAA0B,iBAAgB;EAEnD,YAAY,MAAM,OAAO,6BAA6B,cAAc,aAAa,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,wBAAwB,IAAI,qBAAqB,GAAG,aAAa,QAAM;AACxM,UAAM,MAAM,qBAAqB,WAAW,6BAA6B,cAAc,aAAa,MAAM;AAE1G,SAAK,mBAAmB;AAExB,SAAK,cAAc,MAAM,iBAAgB;AACzC,SAAK,cAAc,MAAM,wBAAuB;AAChD,SAAK,WAAW,MAAM,cAAa;AAEnC,QAAI,0BAA0B,KAAK,IAAI,IAAI,KAAK,gBAAgB;AAChE,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,SAAS,CAAC,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC,GAAG,IAAI,uBAAuB;IAC7E;AAEA,SAAK,gBAAgB;AAErB,SAAK,2BAA2B;AAChC,SAAK,2BAA2B;AAChC,SAAK,wBAAwB;AAE7B,SAAK,qBAAqB,KAAK,YAAY,WAAU;AACrD,SAAK,qBAAqB,KAAK,YAAY,WAAU;AACrD,SAAK,kBAAkB,KAAK,SAAS,WAAU;AAE/C,SAAK,kCAAkC,KAAK;AAC5C,SAAK,kCAAkC,KAAK;AAC5C,SAAK,+BAA+B,KAAK;AAEzC,SAAK,eAAe,YAAW;AAC/B,SAAK,aAAa,qCAAqC,KAAK,aAAa,KAAK,aAAa,KAAK,QAAQ;AAExG,SAAK,mBAAmB,YAAW;EACvC;EAEA,WAAQ;AACJ,SAAK,aAAa,qCAAqC,KAAK,aAAa,KAAK,aAAa,KAAK,QAAQ;AACxG,WAAO,KAAK;EAChB;EAEA,SAAS,OAAO,oBAAoB,OAAK;AACrC,SAAK,iBAAiB,qCAAqC,KAAK,aAAa,KAAK,aAAa,KAAK,QAAQ;AAE5G,UAAM,iBAAiB,KAAK,WAAW;AACvC,UAAM,wBAAwB,KAAK,WAAW;AAC9C,UAAM,cAAc,KAAK,QAAQ;AAEjC,SAAK,aAAa,qCAAqC,KAAK,aAAa,KAAK,aAAa,KAAK,QAAQ;AAExG,QAAI,eAAe,CAAC,KAAK,iBAAiB,UAAU,KAAK,YAAY;AAErE,QAAI,mBAAmB;AACnB,yBAAkB,UAAU,gBAAgB,KAAK,MAAM,KAAK;IAChE;AAEA,kBAAc,cAAc,KAAK,SAAS;AAE1C,QAAI,cAAc;AACd,WAAK,uBAAuB,OAAO,KAAK,SAAQ,GAAI,IAAI;IAC5D;AAEA,WAAO;EACX;EAEA,gBAAgB,OAAK;AACjB,SAAK,qBAAqB,MAAM,iBAAgB;AAChD,SAAK,qBAAqB,MAAM,wBAAuB;AACvD,SAAK,kBAAkB,MAAM,cAAa;AAE1C,WAAO;EACX;EAEA,SAAS,WAAW,oBAAoB,OAAK;AACzC,SAAK,SAAS,KAAK,MAAM,SAAS,GAAG,iBAAiB;EAC1D;EAEA,SAAM;AACF,WAAO,KAAK,SAAQ,EAAG,aAAY;EACvC;;;;AE1ZJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;;;ACApC,SAAS,WAAAC,iBAAe;AAGlB,IAAO,2BAAP,MAA+B;EAEjC,cAAA;AACI,SAAK,4BAA4B;AACjC,SAAK,4BAA4B;EACrC;;AAGE,IAAO,qBAAP,MAAyB;EAE3B,YAAY,QAAM;AACd,SAAK,YAAY;AACjB,SAAK,QAAQ;AAEb,SAAK,YAAY;AAEjB,SAAK,cAAc;AAEnB,SAAK,aAAa;AAElB,SAAK,kCAAkC,IAAIC,UAAO;AAElD,SAAK,0BAA0B;AAE/B,SAAK,0BAA0B;AAC/B,SAAK,qBAAqB;AAC1B,SAAK,yBAAyB;AAC9B,SAAK,iBAAiB;AAEtB,SAAK,2BAA2B,IAAI,MAAM,GAAG,KAAK;AAClD,SAAK,2BAA2B,IAAI,MAAM,GAAG,KAAK;AAElD,SAAK,eAAe;EAExB;EAEA,WAAW,SAAO;AACd,QAAI,SAAS;AACT,WAAK,WAAU;IACnB;AAEA,SAAK,MAAM,WAAW,OAAO;AAE7B,SAAK,aAAa;EACtB;EAEA,oBAAoB,UAAU,sBAAoB;AAC9C,SAAK,cAAc;AAEnB,QAAI,wBAAwB,MAAM;AAC9B,WAAK,0BAA0B;IACnC,OAAO;AACH,WAAK,0BAA0B;IACnC;AAEA,SAAK,yBAAwB;AAE7B,SAAK,WAAU;EACnB;EAEA,yBAAsB;AAClB,WAAO,KAAK;EAChB;EAEA,6BAA0B;AACtB,WAAO,KAAK;EAChB;EAEA,wBAAwB,QAAQ,iBAAe;AAC3C,SAAK,0BAA0B;AAC/B,SAAK,qBAAqB;AAC1B,SAAK,yBAAyB,KAAK,UAAU;AAC7C,SAAK,iBAAiB;EAC1B;EAEA,YAAS;AACL,WAAO;EACX;EAEA,WAAW,qBAAmB;AAC1B,QAAI,uBAAuB,MAAM;AAC7B,UAAI,oBAAoB,yBAAyB,UAAS,GAAI;AAC1D,aAAK,yBAAyB,MAAM,oBAAoB,yBAAyB,YAAW,CAAE;MAClG,OAAO;AACH,aAAK,yBAAyB,MAAK;MACvC;AAEA,UAAI,oBAAoB,yBAAyB,UAAS,GAAI;AAC1D,aAAK,yBAAyB,MAAM,oBAAoB,yBAAyB,YAAW,CAAE;MAClG,OAAO;AACH,aAAK,yBAAyB,MAAK;MACvC;AAEA,WAAK,MAAM,4BAA4B,OAAO,oBAAoB,MAAM,4BAA4B;AACpG,WAAK,MAAM,4BAA4B,OAAO,oBAAoB,MAAM,4BAA4B;AAEpG,WAAK,wBAAwB,oBAAoB,uBAAsB,GAAI,oBAAoB,2BAA0B,CAAE;IAC/H,OAAO;AACH,WAAK,yBAAyB,MAAK;AACnC,WAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;AAE7D,WAAK,yBAAyB,MAAK;AACnC,WAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;IACjE;EACJ;EAEA,kBAAe;AACX,SAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;AAC7D,SAAK,yBAAyB,MAAM,KAAK,UAAU,+BAA+B;EACtF;EAEA,kBAAe;AACX,SAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;AAC7D,SAAK,yBAAyB,MAAM,KAAK,UAAU,+BAA+B;EACtF;EAEA,kBAAe;AACX,SAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;AAC7D,SAAK,yBAAyB,MAAM,KAAK,UAAU,+BAA+B;EACtF;EAEA,kBAAe;AACX,SAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;AAC7D,SAAK,yBAAyB,MAAM,KAAK,UAAU,+BAA+B;EACtF;EAEA,2CAA2C,IAAI,UAAQ;AACnD,SAAK,gCAAgC,IAAI,UAAU,EAAE,GAAM,CAAE;EACjE;EAEA,6CAA6C,IAAE;AAC3C,SAAK,gCAAgC,OAAO,EAAE;EAClD;EAEA,MAAM,cAAc,gBAAc;AAC9B,SAAK,UAAU,MAAK;AAEpB,SAAK,yBAAyB,MAAM,KAAK,UAAU,+BAA+B;AAClF,SAAK,yBAAyB,MAAM,KAAK,UAAU,+BAA+B;AAElF,SAAK,MAAM,MAAM,cAAc,KAAK,WAAW,cAAc;AAC7D,SAAK,MAAM,8BAA8B,eAAe,kCAAkC;AAE1F,SAAK,WAAW,cAAc,cAAc;AAE5C,SAAK,cAAa;EACtB;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,UAAS,GAAI;AAClB,WAAK,YAAY,EAAE;AAEnB,WAAK,sBAAsB,EAAE;AAE7B,WAAK,yBAAyB,EAAE;IACpC;EACJ;;EAIA,2BAAwB;EACxB;EAEA,iBAAc;EACd;EAEA,WAAW,cAAc,gBAAc;EACvC;EAEA,oBAAiB;EACjB;EAEA,YAAY,IAAE;EACd;;EAIA,aAAU;AACN,QAAI,KAAK,aAAa;AAClB,UAAI,KAAK,YAAY,QAAO,KAAM,MAAM;AACpC,aAAK,MAAM,6BAA6B,OAAO,KAAK,YAAY,QAAO,EAAG,OAAO,KAAK,uBAAuB;MACjH,OAAO;AACH,YAAI,OAAO;AACX,aAAK,MAAM,6BAA6B,OAAO,KAAK,OAAO,KAAK,uBAAuB;MAC3F;AAEA,WAAK,eAAc;IACvB;EACJ;EAEA,sBAAsB,IAAE;AACpB,QAAI,KAAK,yBAAyB;AAC9B,UAAI,KAAK,0BAA0B,GAAG;AAClC,aAAK,uBAAuB,KAAK,kBAAkB;AACnD,aAAK,yBAAyB,KAAK,UAAU;AAC7C,aAAK,iBAAiB;MAC1B,OAAO;AACH,aAAK,0BAA0B;MACnC;IACJ;EACJ;EAEA,yBAAyB,IAAE;AACvB,QAAI,KAAK,yBAAyB,UAAU,EAAE,GAAG;AAC7C,WAAK,yBAAyB,OAAO,EAAE;AACvC,UAAI,KAAK,yBAAyB,OAAM,GAAI;AACxC,aAAK,yBAAyB,MAAK;AACnC,aAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;MACjE;IACJ;AAEA,QAAI,KAAK,yBAAyB,UAAU,EAAE,GAAG;AAC7C,WAAK,yBAAyB,OAAO,EAAE;AACvC,UAAI,KAAK,yBAAyB,OAAM,GAAI;AACxC,aAAK,yBAAyB,MAAK;AACnC,aAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;MACjE;IACJ;EACJ;EAEA,YAAS;AACL,WAAO,KAAK,cAAc,KAAK;EACnC;EAEA,gBAAa;AACT,QAAI,KAAK,KAAK;AAEd,OAAG,kCAAkC,OAAO,IAAI,KAAK,yBAAyB,KAAK,MAAM,MAAM,GAAG,KAAK,CAAC;AACxG,OAAG,kCAAkC,cAAc,IAAI,KAAK,yBAAyB,KAAK,MAAM,MAAM,GAAG,KAAK,CAAC;AAC/G,OAAG,kCAAkC,aAAa,IAAI,KAAK,yBAAyB,KAAK,MAAM,OAAO,GAAG,KAAK,CAAC;AAC/G,OAAG,kCAAkC,eAAe,IAAI,KAAK,yBAAyB,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC;AAChH,OAAG,kCAAkC,UAAU,IAAI,KAAK,yBAAyB,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC;AAC3G,OAAG,kCAAkC,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,gCAAgC,QAAQ,CAAC;AAC3H,OAAG,kCAAkC,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,gCAAgC,QAAQ,CAAC;AAE/H,OAAG,sCAAsC,OAAO,IAAI,KAAK,yBAAyB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC;AAC7G,OAAG,sCAAsC,cAAc,IAAI,KAAK,yBAAyB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC;AACpH,OAAG,sCAAsC,aAAa,IAAI,KAAK,yBAAyB,KAAK,MAAM,OAAO,GAAG,KAAK,CAAC;AACnH,OAAG,sCAAsC,eAAe,IAAI,KAAK,yBAAyB,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC;AACpH,OAAG,sCAAsC,UAAU,IAAI,KAAK,yBAAyB,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC;AAC/G,OAAG,sCAAsC,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,oCAAoC,QAAQ,CAAC;AACnI,OAAG,sCAAsC,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,oCAAoC,QAAQ,CAAC;AAEvI,OAAG,oCAAoC,aAAa,IAAI,KAAK,iBAAiB,KAAK,IAAI,CAAC;AACxF,OAAG,oCAAoC,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,kCAAkC,QAAQ,CAAC;AAC/H,OAAG,oCAAoC,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,kCAAkC,QAAQ,CAAC;AAEnI,OAAG,oCAAoC,aAAa,IAAI,KAAK,iBAAiB,KAAK,IAAI,CAAC;AACxF,OAAG,oCAAoC,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,kCAAkC,QAAQ,CAAC;AAC/H,OAAG,oCAAoC,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,kCAAkC,QAAQ,CAAC;AAEnI,SAAK,kBAAiB;EAC1B;EAEA,yBAAyB,QAAQ,iBAAiB,iBAAe;AAC7D,QAAI,KAAK,UAAS,KAAM,CAAC,QAAQ;AAC7B,UAAI,cAAc,CAAC,UAAU,CAAC,KAAK,kBAAkB,CAAC;AACtD,UAAI,qBAAqB,KAAK;AAE9B,WAAK,wBAAwB,QAAQ,eAAe;AAEpD,UAAI,aAAa;AACb,aAAK,uBAAuB,kBAAkB;MAClD;IACJ;EACJ;EAEA,uBAAuB,QAAM;AACzB,QAAI,KAAK,UAAS,KAAM,UAAU,GAAG;AACjC,WAAK,gCAAgC,OAAO,MAAM;IACtD;EACJ;EAEA,cAAc,UAAQ;AAClB,aAAS,QAAQ,KAAK,UAAU;EACpC;EAEA,gBAAgB,UAAQ;AACpB,aAAS,QAAQ,KAAK,UAAU;EACpC;EAEA,mBAAgB;AACZ,QAAI,KAAK,MAAM,4BAA4B,QAAQ,KAAK,UAAU,oBAAoB;AAClF,WAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;AAC7D,WAAK,yBAAyB,MAAK;AAEnC,WAAK,UAAU,0BAAyB;IAC5C;EACJ;EAEA,mBAAgB;AACZ,QAAI,KAAK,MAAM,4BAA4B,QAAQ,KAAK,UAAU,oBAAoB;AAClF,WAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU;AAC7D,WAAK,yBAAyB,MAAK;AAEnC,WAAK,UAAU,0BAAyB;IAC5C;EACJ;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,QAAI,KAAK,SAAS,MAAM;AACpB,WAAK,MAAM,QAAO;IACtB;EACJ;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;ACxTJ,SAAS,WAAAC,iBAAe;AAGlB,IAAO,kCAAP,MAAsC;EAExC,YAAY,QAAQ,SAAS,SAAS,QAAQ,cAAa,GAAE;AACzD,SAAK,aAAa;AAElB,SAAK,kBAAkB;AAEvB,SAAK,YAAY;AACjB,SAAK,oBAAoB;AAEzB,SAAK,aAAa,oBAAI,IAAG;AAEzB,SAAK,cAAc;AACnB,SAAK,aAAa;AAElB,SAAK,0BAA0B;AAE/B,SAAK,kCAAkC,IAAIC,UAAO;AAElD,SAAK,sBAAsB;AAE3B,SAAK,YAAY;AAEjB,SAAK,eAAe;EACxB;EAEA,oBAAoB,UAAU,sBAAoB;AAC9C,SAAK,cAAc;AAEnB,SAAK,sBAAsB,KAAK,YAAY,SAAQ,EAAG;AAEvD,SAAK,0BAA0B;AAE/B,QAAI,CAAC,KAAK,WAAW,IAAI,KAAK,mBAAmB,GAAG;AAChD,WAAK,cAAc,KAAK,mBAAmB;IAC/C;AAEA,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,oBAAoB,UAAU,oBAAoB;IAC7D;AAEA,SAAK,WAAW,KAAK,UAAU;EACnC;EAEA,WAAW,SAAO;AACd,aAAS,UAAU,KAAK,WAAW,OAAM,GAAI;AACzC,aAAO,WAAW,KAAK;IAC3B;AAEA,QAAI,KAAK,aAAa;AAClB,WAAK,kBAAiB;AAEtB,UAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,UAAI,QAAQ;AACR,eAAO,WAAW,OAAO;MAC7B;IACJ;AAEA,SAAK,aAAa;EACtB;EAEA,yBAAsB;AAClB,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,OAAO,uBAAsB;IACxC;AAEA,WAAO;EACX;EAEA,6BAA0B;AACtB,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,OAAO,2BAA0B;IAC5C;AAEA,WAAO;EACX;EAEA,wBAAwB,QAAQ,iBAAe;AAC3C,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,wBAAwB,QAAQ,eAAe;IAC1D;EACJ;EAEA,YAAS;AACL,WAAO,KAAK,WAAW,IAAI,KAAK,mBAAmB;EACvD;EAEA,2CAA2C,IAAI,UAAQ;AACnD,SAAK,gCAAgC,IAAI,UAAU,EAAE,GAAM,CAAE;EACjE;EAEA,6CAA6C,IAAE;AAC3C,SAAK,gCAAgC,OAAO,EAAE;EAClD;EAEA,MAAM,cAAc,gBAAc;AAC9B,SAAK,kBAAkB;AACvB,SAAK,oBAAoB;AAEzB,SAAK,cAAc,CAAC;AAEpB,QAAI,KAAK,aAAa;AAClB,WAAK,oBAAoB,KAAK,aAAa,KAAK,uBAAuB;IAC3E;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,UAAS,GAAI;AAClB,WAAK,kBAAiB;AAEtB,UAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,UAAI,QAAQ;AACR,eAAO,OAAO,EAAE;MACpB;IACJ;EACJ;EAEA,kBAAe;AACX,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,gBAAe;IAC1B;EACJ;EAEA,kBAAe;AACX,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,gBAAe;IAC1B;EACJ;EAEA,kBAAe;AACX,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,gBAAe;IAC1B;EACJ;EAEA,kBAAe;AACX,QAAI,SAAS,KAAK,WAAW,IAAI,KAAK,mBAAmB;AACzD,QAAI,QAAQ;AACR,aAAO,gBAAe;IAC1B;EACJ;EAEA,YAAS;AACL,WAAO,KAAK,cAAc,KAAK;EACnC;EAEA,uBAAuB,QAAM;AACzB,SAAK,gCAAgC,OAAO,MAAM;EACtD;EAEA,cAAc,WAAS;AACnB,SAAK,WAAW,IAAI,WAAW,KAAK,wBAAwB,SAAS,CAAC;AACtE,SAAK,WAAW,IAAI,SAAS,EAAE,MAAM,KAAK,iBAAiB,KAAK,iBAAiB;AACjF,SAAK,WAAW,IAAI,SAAS,EAAE,WAAW,KAAK;AAC/C,SAAK,WAAW,IAAI,SAAS,EAAE,2CAA2C,MAAM,KAAK,uBAAuB,KAAK,IAAI,CAAC;EAC1H;EAEA,oBAAiB;AACb,QAAI,KAAK,YAAY,SAAQ,EAAG,UAAU,KAAK,qBAAqB;AAChE,WAAK,oBAAoB,KAAK,aAAa,KAAK,uBAAuB;IAC3E;EACJ;;;;;;EAOA,wBAAwB,WAAS;AAC7B,WAAO;EACX;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,aAAS,UAAU,KAAK,WAAW,OAAM,GAAI;AACzC,aAAO,QAAO;IAClB;EACJ;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;AChMJ,SAAS,aAAAC,YAAW,YAAAC,WAAU,iBAAAC,sBAAqB;AAI7C,IAAO,2BAAP,MAA+B;EAEjC,cAAA;EAEA;EAEA,QAAK;AACD,SAAK,kBAAiB;AACtB,SAAK,oBAAmB;EAC5B;;EAIA,oBAAiB;AACb,WAAO,KAAK,uBAAuB,CAAC,IAAI,KAAK,6BAA6B,CAAC,IAAI,KAAK,4BAA4B,CAAC,IAAI,KAAK,kCAAkC;EAChK;EAEA,oBAAiB;AACb,WAAO,KAAK,uBAAuB,CAAC,IAAI,KAAK,kCAAkC,OAAO,KAAK,4BAA4B,CAAC;EAC5H;EAEA,oBAAiB;AACb,WAAO,KAAK;EAChB;EAEA,oBAAiB;AACb,WAAO,CAAC,KAAK;EACjB;;EAGA,mBAAgB;AACZ,WAAO;EACX;EAEA,wBAAqB;EACrB;EAEA,0BAAuB;EACvB;;EAIA,oBAAiB;AAGb,SAAK,oBAAoB,YAAY,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAEpE,SAAK,kCAAkCC,UAAS;AAChD,SAAK,+BAA+B;AACpC,SAAK,mCAAmC;AAExC,SAAK,qBAAqB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAExE,SAAK,kBAAkBC,WAAU;AACjC,SAAK,sBAAsBC,eAAc;AACzC,SAAK,cAAc,KAAK;AAExB,SAAK,mBAAmB,YAAY,MAAM,MAAM,IAAI;AACpD,SAAK,oBAAoB,YAAY,MAAM,MAAM,IAAI;AAErD,SAAK,kBAAkB;AACvB,SAAK,qBAAqB;AAC1B,SAAK,kCAAkC;AACvC,SAAK,8BAA8B;AAInC,SAAK,yBAAyB,CAAA;AAC9B,SAAK,uBAAuB,eAAe,IAAI,IAAI,YAAY,GAAG,GAAG,KAAK,iBAAgB,CAAE;AAC5F,SAAK,uBAAuB,eAAe,IAAI,IAAI,YAAY,OAAO,MAAM,KAAK,iBAAgB,CAAE;AACnG,SAAK,uBAAuB,eAAe,KAAK,IAAI,YAAY,OAAO,MAAM,KAAK,iBAAgB,CAAE;AAEpG,SAAK,8BAA8B,YAAY,OAAO,OAAO,CAAC;AAC9D,SAAK,wBAAwB,KAAK;AAClC,SAAK,2BAA2B,YAAY,GAAG,GAAG,IAAK;AAEvD,SAAK,mCAAmC,YAAY,GAAG,GAAG,CAAC;AAC3D,SAAK,iCAAiC,CAAC,IAAI,KAAK,qBAAqB,KAAK;AAC1E,SAAK,+BAA+B,KAAK,4BAA4B,SAAQ;AAC7E,SAAK,6BAA6B,CAAC,IAAI,KAAK;AAE5C,SAAK,2BAA2B,YAAY,GAAG,GAAG,KAAQ;AAC1D,SAAK,yBAAyB,CAAC,IAAI,CAAC,KAAK,8BAA8B,KAAK,4BAA4B,CAAC,IAAI,KAAK;AAElH,SAAK,4BAA4B,YAAY,GAAG,GAAG,KAAQ;AAC3D,SAAK,0BAA0B,CAAC,IAAI,CAAC,KAAK,yBAAyB,CAAC;AAIpE,SAAK,yBAAyB,YAAY,GAAG,KAAK,CAAC;AAEnD,SAAK,+BAA+B,YAAY,GAAG,OAAO,KAAK,eAAe;AAC9E,SAAK,2BAA2B,KAAK;AAErC,SAAK,sCAAsC,YAAY,GAAG,GAAG,CAAC;AAC9D,SAAK,oCAAoC,CAAC,IAAI,KAAK,qBAAqB,KAAK;AAC7E,SAAK,kCAAkC,YAAY,OAAO,QAAQ,CAAC;AACnE,SAAK,gCAAgC,CAAC,IAAI,KAAK;AAE/C,SAAK,mBAAmB;AACxB,SAAK,uBAAuB;AAE5B,SAAK,sBAAqB;AAI1B;AACI,UAAI,OAAO,KAAK,kBAAiB;AACjC,UAAI,OAAO,KAAK,kBAAiB;AACjC,UAAI,OAAO,KAAK,kBAAiB;AACjC,UAAI,OAAO,KAAK,kBAAiB;AAEjC,WAAK,sBAAsB,EAAE,OAAO,QAAQ,IAAI,OAAO,QAAQ,GAAG,CAAC;AACnE,WAAK,wBAAwB,EAAE,OAAO,QAAQ,IAAI,OAAO,QAAQ,GAAG,CAAC;AAErE,WAAK,wBAAwB,YAAY,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;IAC5E;AAIA,SAAK,sCAAsC,YAAY,MAAM,MAAM,CAAC;AACpE,SAAK,gCAAgC,KAAK;AAC1C,SAAK,mCAAmC,YAAY,GAAG,GAAG,IAAK;AAE/D,SAAK,8BAA8B,CAAC,GAAG,KAAK,kBAAiB,IAAK,KAAK,kCAAkC,KAAK,oCAAoC,CAAC,GAAG,KAAK,eAAe;AAE1K,SAAK,2CAA2C,YAAY,GAAG,GAAG,CAAC;AACnE,SAAK,yCAAyC,CAAC,IAAI,KAAK,qBAAqB,KAAK;AAClF,SAAK,uCAAuC,KAAK,oCAAoC,SAAQ;AAC7F,SAAK,qCAAqC,CAAC,IAAI,KAAK;AAEpD,SAAK,qBAAqB;AAC1B,SAAK,qBAAqB;AAE1B,SAAK,kCAAkC;AAEvC,SAAK,wBAAwB;AAC7B,SAAK,4BAA4B;AACjC,SAAK,4BAA4B;AAEjC,SAAK,wBAAwB;AAC7B,SAAK,4BAA4B;AACjC,SAAK,4BAA4B;AAEjC,SAAK,yBAAyB,YAAY,GAAG,GAAG,KAAQ;AACxD,SAAK,uBAAuB,CAAC,IAAI,CAAC,KAAK,oCAAoC,CAAC,IAAI,KAAK,kCAAkC;AAEvH,SAAK,yBAAyB,YAAY,GAAG,GAAG,KAAQ;AACxD,SAAK,uBAAuB,CAAC,IAAI,CAAC,KAAK,uBAAuB,CAAC;AAK/D,SAAK,4BAA4B,KAAK,sBAAsB,SAAQ;AACpE,SAAK,0BAA0B,CAAC,IAAI,KAAK;AACzC,SAAK,gCAAgC,KAAK,oBAAoB,SAAQ;AACtE,SAAK,8BAA8B,CAAC,IAAI,KAAK,qBAAqB;EACtE;EAEA,sBAAmB;AACf,SAAK,qBAAqB,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC;AAExE,SAAK,wBAAwB;AAE7B,SAAK,wBAAuB;EAChC;;;;ACtKE,IAAO,gCAAP,cAA6C,yBAAwB;EAEvE,YAAY,WAAS;AACjB,UAAK;AAEL,SAAK,cAAc;EACvB;EAEA,oBAAiB;AACb,QAAI,yBAA0B,KAAK,uBAAuB,KAAK,cAAc,CAAC,IAAK,KAAK,uBAAuB,KAAK,cAAc,CAAC,EAAE,CAAC,IAAI;AAC1I,WAAO,MAAM,kBAAiB,IAAK,KAAK,sBAAsB,CAAC,IAAI;EACvE;EAEA,mBAAgB;AACZ,WAAO;EACX;EAEA,wBAAqB;AACjB,SAAK,uBAAuB;AAC5B,SAAK,uBAAuB;AAE5B,SAAK,8CAA8C;AACnD,SAAK,2BAA2B,KAAK,4BAA4B,CAAC,IAAI,IAAI;AAE1E,SAAK,wBAAwB,CAAC,GAAG,KAAK,6BAA6B,CAAC,IAAI,KAAK,6CAA6C,KAAK,eAAe;AAE9I,SAAK,mBAAmB,YAAY,KAAK,KAAK,GAAG;AAEjD,SAAK,8BAA8B,YAAY,GAAG,GAAG,CAAC;AACtD,SAAK,4BAA4B,CAAC,IAAI,KAAK,qBAAqB,KAAK;AACrE,SAAK,0BAA0B,YAAY,OAAO,MAAM,CAAC;AACzD,SAAK,wBAAwB,CAAC,IAAI,KAAK;AAEvC,SAAK,yBAAyB,CAAA;AAC9B,SAAK,uBAAuB,CAAC,IAAI,YAAY,GAAG,GAAG,CAAC;AACpD,aAAS,IAAI,GAAG,IAAI,KAAK,aAAa,KAAK;AACvC,WAAK,uBAAuB,CAAC,IAAI,KAAK,uBAAuB,IAAI,CAAC,EAAE,SAAQ;AAC5E,WAAK,uBAAuB,CAAC,EAAE,CAAC,KAAK,KAAK;IAC9C;EACJ;EAEA,0BAAuB;AACnB,SAAK,6BAA6B,YAAY,KAAK,KAAK,GAAG;AAE3D,SAAK,8BAA8B;AACnC,SAAK,oBAAoB;EAC7B;;;;ACjDJ,SAAS,sBAAAC,qBAAoB,iBAAAC,iBAAe,iBAAAC,uBAAqB;AACjE,SAAS,gBAAAC,sBAAoB;;;ACD7B,SAAS,sBAAAC,qBAAoB,iBAAAC,iBAAe,iBAAAC,uBAAqB;AACjE,SAAS,gBAAAC,qBAAoB;AAKvB,IAAO,uBAAP,MAA2B;EAE7B,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,YAAY;AAEjB,SAAK,eAAe;EACxB;EAEA,MAAM,cAAc,QAAQ,QAAM;AAC9B,SAAK,kBAAkB;AACvB,SAAK,YAAY;AACjB,SAAK,YAAY;AAEjB,SAAK,gCAAgC;AAErC,SAAK,eAAe,QAAQ,iBAAiB,KAAK,SAAS,EAAE;AAE7D,SAAK,WAAU;AAEf,SAAK,gBAAe;AACpB,SAAK,eAAc;AACnB,SAAK,eAAc;AAEnB,SAAK,sBAAqB;AAE1B,YAAQ,sCAAsC,MAAM,KAAK,kBAAkB,KAAK,IAAI,GAAG,KAAK,gBAAgB,KAAK,IAAI,GAAG,MAAM,OAAO,KAAK,SAAS;EACvJ;EAEA,WAAW,SAAO;AACd,SAAK,cAAc,aAAa,OAAO;AAEvC,QAAI,SAAS;AACT,WAAK,8BAA8B,KAAK,6BAA6B;IACzE;AAEA,SAAK,gBAAgB,OAAO;EAChC;EAEA,8BAA8B,SAAO;AACjC,SAAK,gCAAgC;AAErC,SAAK,oBAAoB,aAAa,KAAK,6BAA6B;EAC5E;;EAIA,aAAU;EACV;EAEA,gBAAgB,SAAO;EACvB;EAEA,sBAAmB;EACnB;EAEA,oBAAiB;EACjB;EAEA,qBAAkB;EAClB;;;EAMA,kBAAe;AACX,SAAK,gBAAgB,KAAK,gBAAgB,aAAY;AAEtD,SAAK,cAAc,KAAK,cAAc,aAAY;AAClD,SAAK,mBAAmB,KAAK,YAAY,aAAY;AAIrD,SAAK,iBAAiB,KAAK,cAAc,aAAY;AAErD,SAAK,uBAAuB,KAAK,eAAe,aAAY;AAC5D,SAAK,sBAAsB,KAAK,qBAAqB,aAAY;AACjE,SAAK,8BAA8B,KAAK,qBAAqB,aAAY;AAIzE,SAAK,oBAAoB,KAAK,qBAAqB,aAAY;AAC/D,SAAK,yBAAyB,KAAK,kBAAkB,aAAY;AACjE,SAAK,mBAAmB,KAAK,kBAAkB,aAAY;AAC3D,SAAK,2BAA2B,KAAK,kBAAkB,aAAY;AAEnE,SAAK,wBAAwB,KAAK,qBAAqB,aAAY;AACnE,SAAK,6BAA6B,KAAK,sBAAsB,aAAY;AACzE,SAAK,uBAAuB,KAAK,sBAAsB,aAAY;AACnE,SAAK,+BAA+B,KAAK,sBAAsB,aAAY;AAI3E,SAAK,sBAAsB,KAAK,cAAc,aAAY;AAE1D,SAAK,sBAAsB,KAAK,oBAAoB,aAAY;AAChE,SAAK,2BAA2B,KAAK,oBAAoB,aAAY;AACrE,SAAK,qBAAqB,KAAK,oBAAoB,aAAY;AAC/D,SAAK,6BAA6B,KAAK,oBAAoB,aAAY;AAEvE,SAAK,sBAAsB,KAAK,oBAAoB,aAAY;AAChE,SAAK,2BAA2B,KAAK,oBAAoB,aAAY;AACrE,SAAK,qBAAqB,KAAK,oBAAoB,aAAY;AAC/D,SAAK,6BAA6B,KAAK,oBAAoB,aAAY;AAIvE,SAAK,wBAAwB,KAAK,cAAc,aAAY;AAE5D,SAAK,oBAAmB;EAC5B;;EAIA,iBAAc;AACV,SAAK,cAAc,oBAAoB,KAAK,UAAU,uBAAuB,KAAK,UAAU,YAAY,CAAC;AAEzG,SAAK,YAAY,oBAAoB,KAAK,UAAU,mBAAmB;AACvE,SAAK,iBAAiB,eAAe,KAAK,UAAU,qBAAqB;AAGzE,SAAK,eAAe,oBAAoB,KAAK,UAAU,sBAAsB;AAE7E,SAAK,qBAAqB,oBAAoB,KAAK,UAAU,4BAA4B;AACzF,SAAK,oBAAoB,eAAe,KAAK,UAAU,wBAAwB;AAC/E,SAAK,4BAA4B,oBAAoB,KAAK,UAAU,mCAAmC;AAIvG,SAAK,kBAAkB,oBAAoB,KAAK,UAAU,yBAAyB;AACnF,SAAK,uBAAuB,eAAe,KAAK,UAAU,2BAA2B;AACrF,SAAK,iBAAiB,oBAAoB,KAAK,UAAU,wBAAwB;AACjF,SAAK,iBAAiB,eAAe,KAAK,UAAU,qBAAqB;AACzE,SAAK,yBAAyB,oBAAoB,KAAK,UAAU,gCAAgC;AAEjG,SAAK,sBAAsB,oBAAoB,KAAK,UAAU,wBAAwB;AACtF,SAAK,2BAA2B,eAAe,KAAK,UAAU,2BAA2B;AACzF,SAAK,qBAAqB,oBAAoB,KAAK,UAAU,wBAAwB;AACrF,SAAK,qBAAqB,eAAe,KAAK,UAAU,qBAAqB;AAC7E,SAAK,6BAA6B,oBAAoB,KAAK,UAAU,gCAAgC;AAIrG,SAAK,oBAAoB,oBAAoB,KAAK,UAAU,2BAA2B;AAEvF,SAAK,oBAAoB,oBAAoB,KAAK,UAAU,sBAAsB;AAClF,SAAK,yBAAyB,eAAe,KAAK,UAAU,mCAAmC;AAC/F,SAAK,mBAAmB,oBAAoB,KAAK,UAAU,gCAAgC;AAC3F,SAAK,mBAAmB,eAAe,KAAK,UAAU,6BAA6B;AACnF,SAAK,2BAA2B,oBAAoB,KAAK,UAAU,wCAAwC;AAE3G,SAAK,oBAAoB,oBAAoB,KAAK,UAAU,sBAAsB;AAClF,SAAK,yBAAyB,eAAe,KAAK,UAAU,mCAAmC;AAC/F,SAAK,mBAAmB,oBAAoB,KAAK,UAAU,gCAAgC;AAC3F,SAAK,mBAAmB,eAAe,KAAK,UAAU,6BAA6B;AACnF,SAAK,2BAA2B,oBAAoB,KAAK,UAAU,wCAAwC;AAI3G,SAAK,sBAAsB,oBAAoB,KAAK,UAAU,6BAA6B;AAE3F,SAAK,kBAAiB;EAC1B;;EAIA,iBAAc;AACV,SAAK,4BAA4B,KAAK,iBAAiB,gBAAgBC,eAAa;AACpF,SAAK,0BAA0B,OAAO,KAAK;AAC3C,SAAK,0BAA0B,WAAW,KAAK,UAAU,gBAAgB,MAAK;AAC9E,SAAK,0BAA0B,SAAS,QAAQ,KAAK,UAAU;AAI/D,SAAK,+BAA+B,KAAK,oBAAoB,gBAAgBC,eAAa;AAC1F,SAAK,oBAAoB,KAAK,4BAA4B;AAC1D,SAAK,6BAA6B,OAAO;AAEzC,SAAK,uCAAuC,KAAK,4BAA4B,gBAAgBC,aAAY;AACzG,SAAK,oCAAoC,KAAK,4BAA4B,gBAAgBC,mBAAkB;AAC5G,SAAK,kCAAkC,WAAW,KAAK,UAAU;AACjE,SAAK,kCAAkC,QAAQ,KAAK,KAAK,UAAU;AACnE,SAAK,kCAAkC,UAAU,KAAK,UAAU;AAIhE,SAAK,kCAAkC,KAAK,uBAAuB,gBAAgBH,eAAa;AAChG,SAAK,gCAAgC,OAAO,KAAK;AACjD,SAAK,gCAAgC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpF,SAAK,gCAAgC,SAAS,QAAQ,KAAK,UAAU;AAErE,SAAK,4BAA4B,KAAK,iBAAiB,gBAAgBC,eAAa;AACpF,SAAK,oBAAoB,KAAK,yBAAyB;AACvD,SAAK,0BAA0B,OAAO,KAAK,UAAU;AAErD,SAAK,oCAAoC,KAAK,yBAAyB,gBAAgBC,aAAY;AACnG,SAAK,iCAAiC,KAAK,yBAAyB,gBAAgBC,mBAAkB;AACtG,SAAK,+BAA+B,WAAW,KAAK,UAAU;AAC9D,SAAK,+BAA+B,QAAQ,KAAK,KAAK,UAAU;AAChE,SAAK,+BAA+B,UAAU,KAAK,UAAU;AAE7D,SAAK,sCAAsC,KAAK,2BAA2B,gBAAgBH,eAAa;AACxG,SAAK,oCAAoC,OAAO,KAAK;AACrD,SAAK,oCAAoC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACxF,SAAK,oCAAoC,SAAS,QAAQ,KAAK,UAAU;AAEzE,SAAK,gCAAgC,KAAK,qBAAqB,gBAAgBC,eAAa;AAC5F,SAAK,oBAAoB,KAAK,6BAA6B;AAC3D,SAAK,8BAA8B,OAAO,KAAK,UAAU;AAEzD,SAAK,wCAAwC,KAAK,6BAA6B,gBAAgBC,aAAY;AAC3G,SAAK,qCAAqC,KAAK,6BAA6B,gBAAgBC,mBAAkB;AAC9G,SAAK,mCAAmC,WAAW,KAAK,UAAU;AAClE,SAAK,mCAAmC,QAAQ,KAAK,KAAK,UAAU;AACpE,SAAK,mCAAmC,UAAU,KAAK,UAAU;AAIjE,SAAK,oCAAoC,KAAK,yBAAyB,gBAAgBH,eAAa;AACpG,SAAK,kCAAkC,OAAO,KAAK;AACnD,SAAK,kCAAkC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACtF,SAAK,kCAAkC,SAAS,QAAQ,KAAK,UAAU;AAEvE,SAAK,8BAA8B,KAAK,mBAAmB,gBAAgBC,eAAa;AACxF,SAAK,oBAAoB,KAAK,2BAA2B;AACzD,SAAK,4BAA4B,OAAO,KAAK,UAAU;AAEvD,SAAK,sCAAsC,KAAK,2BAA2B,gBAAgBC,aAAY;AACvG,SAAK,mCAAmC,KAAK,2BAA2B,gBAAgBC,mBAAkB;AAC1G,SAAK,iCAAiC,WAAW,KAAK,UAAU;AAChE,SAAK,iCAAiC,QAAQ,KAAK,KAAK,UAAU;AAClE,SAAK,iCAAiC,UAAU,KAAK,UAAU;AAE/D,SAAK,oCAAoC,KAAK,yBAAyB,gBAAgBH,eAAa;AACpG,SAAK,kCAAkC,OAAO,KAAK;AACnD,SAAK,kCAAkC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACtF,SAAK,kCAAkC,SAAS,QAAQ,KAAK,UAAU;AAEvE,SAAK,8BAA8B,KAAK,mBAAmB,gBAAgBC,eAAa;AACxF,SAAK,oBAAoB,KAAK,2BAA2B;AACzD,SAAK,4BAA4B,OAAO,KAAK,UAAU;AAEvD,SAAK,sCAAsC,KAAK,2BAA2B,gBAAgBC,aAAY;AACvG,SAAK,mCAAmC,KAAK,2BAA2B,gBAAgBC,mBAAkB;AAC1G,SAAK,iCAAiC,WAAW,KAAK,UAAU;AAChE,SAAK,iCAAiC,QAAQ,KAAK,KAAK,UAAU;AAClE,SAAK,iCAAiC,UAAU,KAAK,UAAU;AAI/D,SAAK,8BAA8B,KAAK,sBAAsB,gBAAgBA,mBAAkB;AAChG,SAAK,4BAA4B,WAAW,KAAK,UAAU;AAC3D,SAAK,4BAA4B,QAAQ,KAAK,KAAK,UAAU;AAC7D,SAAK,4BAA4B,UAAU,KAAK,UAAU;AAE1D,SAAK,mBAAkB;EAC3B;EAEA,oBAAoB,eAAa;AAC7B,kBAAc,YAAY,KAAK,UAAU;AACzC,kBAAc,gBAAgB,KAAK,UAAU;AAC7C,kBAAc,WAAW,KAAK,UAAU,eAAe,MAAK;AAC5D,kBAAc,SAAS,QAAQ,KAAK,UAAU;AAC9C,kBAAc,OAAO;EACzB;EAEA,oBAAiB;AACb,SAAK,mBAAkB;EAC3B;EAEA,kBAAe;AACX,SAAK,sBAAqB;EAC9B;EAEA,qBAAkB;AACd,SAAK,cAAc,oBAAoB,KAAK,UAAU,uBAAuB,KAAK,UAAU,YAAY,CAAC;EAC7G;EAEA,wBAAqB;AACjB,SAAK,cAAc,oBAAoB,KAAK,UAAU,uBAAuB,eAAe,IAAI,CAAC;EACrG;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,YAAQ,wCAAwC,MAAM,KAAK,SAAS;EACxE;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;;;;ADpSE,IAAO,4BAAP,cAAyC,qBAAoB;EAE/D,YAAY,QAAM;AACd,UAAM,MAAM;EAChB;EAEA,4BAA4B,SAAO;AAC/B,SAAK,8BAA8B;AAEnC,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,4BAA4B,CAAC,EAAE,aAAa,KAAK,2BAA2B;AACjF,WAAK,4BAA4B,CAAC,EAAE,aAAa,KAAK,2BAA2B;IACrF;EACJ;EAEA,aAAU;AACN,SAAK,8BAA8B;EACvC;EAEA,sBAAmB;AACf,SAAK,gBAAgB,KAAK,eAAe,aAAY;AAErD,SAAK,gBAAgB,CAAA;AACrB,SAAK,eAAe,CAAA;AACpB,SAAK,uBAAuB,CAAA;AAE5B,SAAK,8BAA8B,CAAA;AACnC,SAAK,mCAAmC,CAAA;AACxC,SAAK,6BAA6B,CAAA;AAClC,SAAK,qCAAqC,CAAA;AAE1C,SAAK,8BAA8B,CAAA;AACnC,SAAK,mCAAmC,CAAA;AACxC,SAAK,6BAA6B,CAAA;AAClC,SAAK,qCAAqC,CAAA;AAE1C,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,cAAc,CAAC,IAAI,KAAK,cAAc,aAAY;AACvD,WAAK,aAAa,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACzD,WAAK,qBAAqB,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AAEjE,WAAK,4BAA4B,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACxE,WAAK,iCAAiC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAC3F,WAAK,2BAA2B,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AACrF,WAAK,mCAAmC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAE7F,WAAK,4BAA4B,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACxE,WAAK,iCAAiC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAC3F,WAAK,2BAA2B,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AACrF,WAAK,mCAAmC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;IACjG;EACJ;EAEA,oBAAiB;AACb,SAAK,cAAc,oBAAoB,KAAK,UAAU,qBAAqB;AAE3E,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,cAAc,CAAC,EAAE,oBAAoB,KAAK,UAAU,uBAAuB,CAAC,CAAC;AAClF,WAAK,aAAa,CAAC,EAAE,eAAe,KAAK,UAAU,gBAAgB;AACnE,WAAK,qBAAqB,CAAC,EAAE,oBAAoB,KAAK,UAAU,2BAA2B;AAE3F,WAAK,4BAA4B,CAAC,EAAE,oBAAoB,KAAK,UAAU,yBAAyB;AAChG,WAAK,iCAAiC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AAClG,WAAK,2BAA2B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,WAAK,2BAA2B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACtF,WAAK,mCAAmC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;AAE9G,WAAK,4BAA4B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC/F,WAAK,iCAAiC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AAClG,WAAK,2BAA2B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,WAAK,2BAA2B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACtF,WAAK,mCAAmC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;IAClH;EACJ;EAEA,qBAAkB;AACd,SAAK,wBAAwB,CAAA;AAC7B,SAAK,gCAAgC,CAAA;AACrC,SAAK,6BAA6B,CAAA;AAElC,SAAK,4CAA4C,CAAA;AACjD,SAAK,sCAAsC,CAAA;AAC3C,SAAK,8CAA8C,CAAA;AACnD,SAAK,2CAA2C,CAAA;AAEhD,SAAK,4CAA4C,CAAA;AACjD,SAAK,sCAAsC,CAAA;AAC3C,SAAK,8CAA8C,CAAA;AACnD,SAAK,2CAA2C,CAAA;AAGhD,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,sBAAsB,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,gBAAgBC,eAAa;AAClF,WAAK,oBAAoB,KAAK,sBAAsB,CAAC,CAAC;AACtD,WAAK,sBAAsB,CAAC,EAAE,OAAO;AAErC,WAAK,8BAA8B,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,gBAAgBC,cAAY;AACjG,WAAK,2BAA2B,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,gBAAgBC,mBAAkB;AACpG,WAAK,2BAA2B,CAAC,EAAE,WAAW,KAAK,UAAU;AAC7D,WAAK,2BAA2B,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC/D,WAAK,2BAA2B,CAAC,EAAE,UAAU,KAAK,UAAU;AAE5D,WAAK,0CAA0C,CAAC,IAAI,KAAK,iCAAiC,CAAC,EAAE,gBAAgBC,eAAa;AAC1H,WAAK,0CAA0C,CAAC,EAAE,OAAO,KAAK;AAC9D,WAAK,0CAA0C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,WAAK,0CAA0C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAElF,WAAK,oCAAoC,CAAC,IAAI,KAAK,2BAA2B,CAAC,EAAE,gBAAgBH,eAAa;AAC9G,WAAK,oBAAoB,KAAK,oCAAoC,CAAC,CAAC;AACpE,WAAK,oCAAoC,CAAC,EAAE,OAAO,KAAK,UAAU;AAElE,WAAK,4CAA4C,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,cAAY;AAC7H,WAAK,yCAAyC,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,mBAAkB;AAChI,WAAK,yCAAyC,CAAC,EAAE,WAAW,KAAK,UAAU;AAC3E,WAAK,yCAAyC,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC7E,WAAK,yCAAyC,CAAC,EAAE,UAAU,KAAK,UAAU;AAE1E,WAAK,0CAA0C,CAAC,IAAI,KAAK,iCAAiC,CAAC,EAAE,gBAAgBC,eAAa;AAC1H,WAAK,0CAA0C,CAAC,EAAE,OAAO,KAAK;AAC9D,WAAK,0CAA0C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,WAAK,0CAA0C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAElF,WAAK,oCAAoC,CAAC,IAAI,KAAK,2BAA2B,CAAC,EAAE,gBAAgBH,eAAa;AAC9G,WAAK,oBAAoB,KAAK,oCAAoC,CAAC,CAAC;AACpE,WAAK,oCAAoC,CAAC,EAAE,OAAO,KAAK,UAAU;AAElE,WAAK,4CAA4C,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,cAAY;AAC7H,WAAK,yCAAyC,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,mBAAkB;AAChI,WAAK,yCAAyC,CAAC,EAAE,WAAW,KAAK,UAAU;AAC3E,WAAK,yCAAyC,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC7E,WAAK,yCAAyC,CAAC,EAAE,UAAU,KAAK,UAAU;IAC9E;EACJ;EAEA,gBAAgB,SAAO;AACnB,QAAI,SAAS;AACT,WAAK,4BAA4B,KAAK,2BAA2B;IACrE;EACJ;;;;AExIE,IAAO,0BAAP,cAAuC,mBAAkB;EAE3D,YAAY,QAAQ,WAAW,SAAS,SAAS,QAAQ,cAAa,GAAE;AACpE,UAAM,MAAM;AAEZ,SAAK,cAAc,aAAa;AAChC,SAAK,eAAe,KAAK,cAAc,IAAI;AAE3C,SAAK,YAAY,IAAI,8BAA8B,KAAK,YAAY;AACpE,SAAK,QAAQ,IAAI,0BAA0B,MAAM;AAEjD,SAAK,aAAa;AAElB,SAAK,oBAAoB;AACzB,SAAK,8BAA8B;AACnC,SAAK,mCAAmC;AACxC,SAAK,sBAAsB;AAE3B,SAAK,eAAe,CAAA;AAEpB,SAAK,uBAAuB,CAAC,CAAC;AAC9B,SAAK,8BAA8B,CAAC,CAAC;EACzC;EAEA,iBAAc;AACV,aAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACxC,WAAK,MAAM,sBAAsB,CAAC,EAAE,OAAQ,KAAK,kBAAiB,EAAG,CAAC,IAAK,SAAS;IACxF;EACJ;EAEA,WAAW,cAAc,gBAAc;AACnC,SAAK,MAAM,4BAA4B,eAAe,uBAAuB;EACjF;EAEA,2BAAwB;AACpB,QAAI,KAAK,eAAe,MAAM;AAC1B,WAAK,aAAa,QAAQ,KAAK,kBAAiB,CAAE;IACtD;EACJ;EAEA,YAAY,IAAE;AACV,SAAK,aAAa,EAAE;EACxB;EAEA,aAAa,IAAE;AACX,QAAI,yBAAyB;AAE7B,QAAI,KAAK,YAAY;AACjB,+BAAyB,KAAK,WAAW,YAAY,cAAc,UAAU,EAAE,OAAO,CAAC;IAC3F;AAEA,QAAI,iBAAiB;AACrB,QAAI,KAAK,qBAAqB;AAC1B,uBAAiB;IACrB,WAAW,KAAK,+BAA+B,GAAG;AAC9C,UAAI,KAAK,oCAAoC,GAAG;AAC5C,yBAAiB,KAAK;MAC1B,OAAO;AACH,aAAK,oCAAoC;MAC7C;IACJ;AAEA,QAAI,KAAK,qBAAqB,KAAK,KAAK,oBAAoB,KAAK,kBAAiB,EAAG,QAAQ;AACzF,UAAI,KAAK,IAAI,cAAc,IAAI,KAAK,UAAU,6BAA6B;AACvE,aAAK,aAAa,QAAQ,KAAK,kBAAiB,CAAE;AAClD,aAAK,aAAa,KAAK,iBAAiB,IAAI,iBAAiB;AAC7D,aAAK,kBAAkB,KAAK,YAAY;AACxC,aAAK,WAAU;MACnB;IACJ;EACJ;EAEA,oBAAiB;AACb,QAAI,KAAK,KAAK;AAEd,OAAG,qCAAqC,QAAQ,IAAI,KAAK,gBAAgB,KAAK,IAAI,CAAC;AACnF,OAAG,qCAAqC,QAAQ,IAAI,KAAK,kBAAkB,KAAK,MAAM,GAAG,mBAAmB,CAAC;AAC7G,OAAG,qCAAqC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,qBAAqB,KAAK,UAAU,wBAAwB,CAAC;AAE1J,aAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACxC,SAAG,4CAA4C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AACzG,SAAG,4CAA4C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AAChH,SAAG,4CAA4C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AACvG,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC5G,SAAG,4CAA4C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,EAAE,CAAC;AAC1G,SAAG,4CAA4C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,EAAE,CAAC;AACjH,SAAG,4CAA4C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AACvG,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AAE5G,SAAG,4CAA4C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACrJ,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACzJ,SAAG,4CAA4C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACrJ,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AAEzJ,SAAG,8BAA8B,CAAC,EAAE,QAAQ,IAAI,KAAK,YAAY,KAAK,MAAM,CAAC,CAAC;AAC9E,SAAG,8BAA8B,CAAC,EAAE,QAAQ,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC;AACjH,SAAG,8BAA8B,CAAC,EAAE,UAAU,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,KAAK,CAAC;IACxH;EACJ;EAEA,uBAAuB,OAAO,OAAK;AAC/B,QAAI,KAAK,UAAS,KAAM,SAAS,GAAG;AAChC,UAAI,SAAS,GAAG;AACZ,aAAK,mCAAmC,KAAK,UAAU;AACvD,aAAK,oBAAoB;MAC7B;AAEA,WAAK,8BAA8B;IACvC;EACJ;EAEA,qBAAqB,OAAO,MAAM,SAAO;AACrC,QAAI,KAAK,UAAS,KAAM,CAAC,SAAS;AAC9B,UAAI,SAAS;AACT,aAAK,oBAAoB;AACzB,aAAK,eAAe,KAAK,UAAU,0BAA0B;MACjE,OAAO;AACH,aAAK,iBAAiB,KAAK,UAAU,gBAAgB;MACzD;AAEA,WAAK,sBAAsB;IAC/B;EACJ;EAEA,YAAY,OAAK;AACb,QAAI,KAAK,UAAS,GAAI;AAClB,WAAK,aAAa,QAAQ,KAAK,kBAAiB,CAAE;AAClD,WAAK,aAAa,KAAK,IAAI,KAAK,yBAAwB,EAAG,KAAK;AAChE,WAAK,kBAAkB,KAAK,YAAY;AAExC,WAAK,MAAM,sBAAsB,KAAK,EAAE,OAAQ,KAAK,kBAAiB,EAAG,KAAK,IAAK,SAAS;IAChG;EACJ;EAEA,kBAAe;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACxC,WAAK,YAAY,CAAC;IACtB;EACJ;EAEA,kBAAkB,MAAI;AAClB,SAAK,eAAe,KAAK,UAAU,0BAA0B;EACjE;EAEA,oBAAoB,MAAM,eAAa;AACnC,SAAK,iBAAiB,aAAa;EACvC;EAEA,oBAAiB;AACb,QAAI,KAAK,aAAa;AAClB,WAAK,qBAAqB,CAAC,IAAI,KAAK,YAAY,SAAQ;AACxD,aAAO,KAAK;IAChB;AAEA,WAAO,KAAK,YAAY,SAAQ;EACpC;EAEA,2BAAwB;AACpB,QAAI,KAAK,aAAa;AAClB,WAAK,4BAA4B,CAAC,IAAI,KAAK,YAAY,gBAAe;AACtE,aAAO,KAAK;IAChB;AAEA,WAAO,KAAK,YAAY,gBAAe;EAC3C;EAEA,kBAAkB,OAAK;AACnB,QAAI,KAAK,aAAa;AAClB,WAAK,YAAY,SAAS,MAAM,CAAC,CAAC;IACtC,OAAO;AACH,WAAK,YAAY,SAAS,KAAK,YAAY;IAC/C;EACJ;;;;AC/KE,IAAO,kCAAP,cAA+C,gCAA+B;EAEhF,wBAAwB,WAAS;AAC7B,WAAO,IAAI,wBAAwB,KAAK,WAAW,WAAW,KAAK,YAAY,KAAK,SAAS;EACjG;;;;ACLE,IAAO,uBAAP,MAA2B;EAE7B,cAAA;AACI,SAAK,oBAAmB;EAC5B;EAEA,sBAAmB;AACf,SAAK,sBAAsB,eAAe;AAE1C,SAAK,wBAAwB;AAC7B,SAAK,gCAAgC;AACrC,SAAK,gCAAgC;AACrC,SAAK,2BAA2B;AAEhC,SAAK,0BAA0B;EACnC;;;;ACdE,IAAO,2BAAP,cAAwC,yBAAwB;EAElE,oBAAiB;AACb,WAAO,MAAM,kBAAiB,IAAK,KAAK,gCAAgC,CAAC;EAC7E;EAEA,mBAAgB;AACZ,WAAO;EACX;EAEA,wBAAqB;AACjB,SAAK,kCAAkC,YAAY,GAAG,OAAO,KAAK,eAAe;AACjF,SAAK,8BAA8B,YAAY,OAAO,OAAO,KAAK;AAClE,SAAK,yBAAyB;EAClC;;;;ACjBJ,SAAS,iBAAAE,uBAAqB;AAGxB,IAAO,uBAAP,cAAoC,qBAAoB;EAE1D,YAAY,QAAM;AACd,UAAM,MAAM;EAChB;EAEA,sBAAmB;AACf,SAAK,0BAA0B,KAAK,eAAe,aAAY;AAC/D,SAAK,yBAAyB,KAAK,wBAAwB,aAAY;AACvE,SAAK,iCAAiC,KAAK,wBAAwB,aAAY;EACnF;EAEA,oBAAiB;AACb,SAAK,wBAAwB,oBAAoB,KAAK,UAAU,+BAA+B;AAC/F,SAAK,uBAAuB,eAAe,KAAK,UAAU,2BAA2B;EACzF;EAEA,qBAAkB;AACd,SAAK,kCAAkC,KAAK,uBAAuB,gBAAgBC,eAAa;AAChG,SAAK,oBAAoB,KAAK,+BAA+B;AAC7D,SAAK,gCAAgC,OAAO,KAAK,UAAU;EAC/D;;;;ACnBE,IAAO,qBAAP,cAAkC,mBAAkB;EAEtD,YAAY,QAAQ,SAAS,QAAQ,cAAa,GAAE;AAChD,UAAM,MAAM;AAEZ,SAAK,YAAY,IAAI,yBAAwB;AAC7C,SAAK,QAAQ,IAAI,qBAAqB,MAAM;EAChD;;;;ACTE,IAAO,kCAAP,cAA+C,yBAAwB;EAEzE,YAAY,WAAS;AACjB,UAAK;AAEL,SAAK,cAAc;EACvB;EAEA,oBAAiB;AACb,WAAO,KAAK,oBAAoB,CAAC,IAAI,KAAK,kCAAkC,OAAO,KAAK,4BAA4B,CAAC;EACzH;EAEA,mBAAgB;AACZ,WAAO;EACX;EAEA,wBAAqB;AACjB,SAAK,uBAAuB;AAC5B,SAAK,uBAAuB;AAE5B,SAAK,8CAA8C;AACnD,SAAK,2BAA2B,KAAK,4BAA4B,CAAC,IAAI,IAAI;AAE1E,SAAK,wBAAwB,CAAC,GAAG,KAAK,6BAA6B,CAAC,IAAI,KAAK,6CAA6C,KAAK,eAAe;AAE9I,SAAK,mBAAmB,YAAY,KAAK,KAAK,GAAG;AAEjD,SAAK,8BAA8B,YAAY,GAAG,GAAG,CAAC;AACtD,SAAK,4BAA4B,CAAC,IAAI,KAAK,qBAAqB,KAAK;AACrE,SAAK,0BAA0B,YAAY,OAAO,MAAM,CAAC;AACzD,SAAK,wBAAwB,CAAC,IAAI,KAAK;AAEvC,SAAK,yBAAyB,CAAA;AAC9B,SAAK,uBAAuB,CAAC,IAAI,YAAY,GAAG,GAAG,CAAC;AACpD,aAAS,IAAI,GAAG,IAAI,KAAK,aAAa,KAAK;AACvC,WAAK,uBAAuB,CAAC,IAAI,KAAK,uBAAuB,IAAI,CAAC,EAAE,SAAQ;AAC5E,WAAK,uBAAuB,CAAC,EAAE,CAAC,KAAK,KAAK;IAC9C;AAEA,QAAI,yBAA0B,KAAK,uBAAuB,KAAK,cAAc,CAAC,IAAK,KAAK,uBAAuB,KAAK,cAAc,CAAC,EAAE,CAAC,IAAI;AAC1I,SAAK,sBAAsB,CAAC,GAAG,KAAK,uBAAuB,CAAC,IAAI,KAAK,sBAAsB,CAAC,IAAI,yBAAyB,KAAK,6CAA6C,KAAK,eAAe;AAC/L,SAAK,kBAAkB,KAAK;AAC5B,SAAK,oBAAoB;AAEzB,SAAK,6BAA6B,YAAY,GAAG,GAAG,CAAC;AACrD,SAAK,2BAA2B,CAAC,IAAI,KAAK,qBAAqB,KAAK,oBAAoB,CAAC;AACzF,SAAK,yBAAyB,YAAY,OAAO,QAAQ,CAAC;AAC1D,SAAK,uBAAuB,CAAC,IAAI,KAAK;EAC1C;EAEA,0BAAuB;AACnB,SAAK,6BAA6B,YAAY,KAAK,KAAK,GAAG;AAE3D,SAAK,+BAA+B;AACpC,SAAK,gCAAgC;AACrC,SAAK,oBAAoB;EAC7B;;;;AC3DJ,SAAS,sBAAAC,qBAAoB,iBAAAC,iBAAe,iBAAAC,uBAAqB;AACjE,SAAS,gBAAAC,sBAAoB;AAGvB,IAAO,8BAAP,cAA2C,qBAAoB;EAEjE,YAAY,QAAM;AACd,UAAM,MAAM;EAChB;EAEA,4BAA4B,SAAO;AAC/B,SAAK,8BAA8B;AAEnC,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,4BAA4B,CAAC,EAAE,aAAa,KAAK,2BAA2B;AACjF,WAAK,4BAA4B,CAAC,EAAE,aAAa,KAAK,2BAA2B;IACrF;AAEA,SAAK,0BAA0B,aAAa,KAAK,2BAA2B;AAC5E,SAAK,0BAA0B,aAAa,KAAK,2BAA2B;EAChF;EAEA,aAAU;AACN,SAAK,8BAA8B;EACvC;EAEA,sBAAmB;AACf,SAAK,gBAAgB,KAAK,eAAe,aAAY;AAErD,SAAK,gBAAgB,CAAA;AACrB,SAAK,eAAe,CAAA;AACpB,SAAK,uBAAuB,CAAA;AAE5B,SAAK,8BAA8B,CAAA;AACnC,SAAK,mCAAmC,CAAA;AACxC,SAAK,6BAA6B,CAAA;AAClC,SAAK,qCAAqC,CAAA;AAE1C,SAAK,8BAA8B,CAAA;AACnC,SAAK,mCAAmC,CAAA;AACxC,SAAK,6BAA6B,CAAA;AAClC,SAAK,qCAAqC,CAAA;AAE1C,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,cAAc,CAAC,IAAI,KAAK,cAAc,aAAY;AACvD,WAAK,aAAa,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACzD,WAAK,qBAAqB,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AAEjE,WAAK,4BAA4B,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACxE,WAAK,iCAAiC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAC3F,WAAK,2BAA2B,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AACrF,WAAK,mCAAmC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAE7F,WAAK,4BAA4B,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACxE,WAAK,iCAAiC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAC3F,WAAK,2BAA2B,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AACrF,WAAK,mCAAmC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;IACjG;AAEA,SAAK,cAAc,KAAK,cAAc,aAAY;AAClD,SAAK,aAAa,KAAK,YAAY,aAAY;AAC/C,SAAK,qBAAqB,KAAK,YAAY,aAAY;AAEvD,SAAK,4BAA4B,KAAK,YAAY,aAAY;AAC9D,SAAK,iCAAiC,KAAK,0BAA0B,aAAY;AACjF,SAAK,2BAA2B,KAAK,0BAA0B,aAAY;AAC3E,SAAK,mCAAmC,KAAK,0BAA0B,aAAY;AAEnF,SAAK,4BAA4B,KAAK,YAAY,aAAY;AAC9D,SAAK,iCAAiC,KAAK,0BAA0B,aAAY;AACjF,SAAK,2BAA2B,KAAK,0BAA0B,aAAY;AAC3E,SAAK,mCAAmC,KAAK,0BAA0B,aAAY;EACvF;EAEA,oBAAiB;AACb,SAAK,cAAc,oBAAoB,KAAK,UAAU,qBAAqB;AAE3E,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,cAAc,CAAC,EAAE,oBAAoB,KAAK,UAAU,uBAAuB,CAAC,CAAC;AAClF,WAAK,aAAa,CAAC,EAAE,eAAe,KAAK,UAAU,gBAAgB;AACnE,WAAK,qBAAqB,CAAC,EAAE,oBAAoB,KAAK,UAAU,2BAA2B;AAE3F,WAAK,4BAA4B,CAAC,EAAE,oBAAoB,KAAK,UAAU,yBAAyB;AAChG,WAAK,iCAAiC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AAClG,WAAK,2BAA2B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,WAAK,2BAA2B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACtF,WAAK,mCAAmC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;AAE9G,WAAK,4BAA4B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC/F,WAAK,iCAAiC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AAClG,WAAK,2BAA2B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,WAAK,2BAA2B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACtF,WAAK,mCAAmC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;IAClH;AAEA,SAAK,YAAY,oBAAoB,KAAK,UAAU,mBAAmB;AACvE,SAAK,WAAW,eAAe,KAAK,UAAU,eAAe;AAC7D,SAAK,mBAAmB,oBAAoB,KAAK,UAAU,0BAA0B;AAErF,SAAK,0BAA0B,oBAAoB,KAAK,UAAU,yBAAyB;AAC3F,SAAK,+BAA+B,eAAe,KAAK,UAAU,2BAA2B;AAC7F,SAAK,yBAAyB,oBAAoB,KAAK,UAAU,wBAAwB;AACzF,SAAK,yBAAyB,eAAe,KAAK,UAAU,qBAAqB;AACjF,SAAK,iCAAiC,oBAAoB,KAAK,UAAU,gCAAgC;AAEzG,SAAK,0BAA0B,oBAAoB,KAAK,UAAU,wBAAwB;AAC1F,SAAK,+BAA+B,eAAe,KAAK,UAAU,2BAA2B;AAC7F,SAAK,yBAAyB,oBAAoB,KAAK,UAAU,wBAAwB;AACzF,SAAK,yBAAyB,eAAe,KAAK,UAAU,qBAAqB;AACjF,SAAK,iCAAiC,oBAAoB,KAAK,UAAU,gCAAgC;EAC7G;EAEA,qBAAkB;AACd,SAAK,wBAAwB,CAAA;AAC7B,SAAK,gCAAgC,CAAA;AACrC,SAAK,6BAA6B,CAAA;AAElC,SAAK,4CAA4C,CAAA;AACjD,SAAK,sCAAsC,CAAA;AAC3C,SAAK,8CAA8C,CAAA;AACnD,SAAK,2CAA2C,CAAA;AAEhD,SAAK,4CAA4C,CAAA;AACjD,SAAK,sCAAsC,CAAA;AAC3C,SAAK,8CAA8C,CAAA;AACnD,SAAK,2CAA2C,CAAA;AAGhD,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,aAAa,KAAK;AACjD,WAAK,sBAAsB,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,gBAAgBC,eAAa;AAClF,WAAK,oBAAoB,KAAK,sBAAsB,CAAC,CAAC;AACtD,WAAK,sBAAsB,CAAC,EAAE,OAAO;AAErC,WAAK,8BAA8B,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,gBAAgBC,cAAY;AACjG,WAAK,2BAA2B,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,gBAAgBC,mBAAkB;AACpG,WAAK,2BAA2B,CAAC,EAAE,WAAW,KAAK,UAAU;AAC7D,WAAK,2BAA2B,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC/D,WAAK,2BAA2B,CAAC,EAAE,UAAU,KAAK,UAAU;AAE5D,WAAK,0CAA0C,CAAC,IAAI,KAAK,iCAAiC,CAAC,EAAE,gBAAgBC,eAAa;AAC1H,WAAK,0CAA0C,CAAC,EAAE,OAAO,KAAK;AAC9D,WAAK,0CAA0C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,WAAK,0CAA0C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAElF,WAAK,oCAAoC,CAAC,IAAI,KAAK,2BAA2B,CAAC,EAAE,gBAAgBH,eAAa;AAC9G,WAAK,oBAAoB,KAAK,oCAAoC,CAAC,CAAC;AACpE,WAAK,oCAAoC,CAAC,EAAE,OAAO,KAAK,UAAU;AAElE,WAAK,4CAA4C,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,cAAY;AAC7H,WAAK,yCAAyC,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,mBAAkB;AAChI,WAAK,yCAAyC,CAAC,EAAE,WAAW,KAAK,UAAU;AAC3E,WAAK,yCAAyC,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC7E,WAAK,yCAAyC,CAAC,EAAE,UAAU,KAAK,UAAU;AAE1E,WAAK,0CAA0C,CAAC,IAAI,KAAK,iCAAiC,CAAC,EAAE,gBAAgBC,eAAa;AAC1H,WAAK,0CAA0C,CAAC,EAAE,OAAO,KAAK;AAC9D,WAAK,0CAA0C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,WAAK,0CAA0C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAElF,WAAK,oCAAoC,CAAC,IAAI,KAAK,2BAA2B,CAAC,EAAE,gBAAgBH,eAAa;AAC9G,WAAK,oBAAoB,KAAK,oCAAoC,CAAC,CAAC;AACpE,WAAK,oCAAoC,CAAC,EAAE,OAAO,KAAK,UAAU;AAElE,WAAK,4CAA4C,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,cAAY;AAC7H,WAAK,yCAAyC,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,mBAAkB;AAChI,WAAK,yCAAyC,CAAC,EAAE,WAAW,KAAK,UAAU;AAC3E,WAAK,yCAAyC,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC7E,WAAK,yCAAyC,CAAC,EAAE,UAAU,KAAK,UAAU;IAC9E;AAEA,SAAK,sBAAsB,KAAK,WAAW,gBAAgBF,eAAa;AACxE,SAAK,oBAAoB,KAAK,mBAAmB;AACjD,SAAK,oBAAoB,OAAO;AAEhC,SAAK,8BAA8B,KAAK,mBAAmB,gBAAgBC,cAAY;AACvF,SAAK,2BAA2B,KAAK,mBAAmB,gBAAgBC,mBAAkB;AAC1F,SAAK,yBAAyB,WAAW,KAAK,UAAU;AACxD,SAAK,yBAAyB,QAAQ,KAAK,KAAK,UAAU;AAC1D,SAAK,yBAAyB,UAAU,KAAK,UAAU;AAGvD,SAAK,0CAA0C,KAAK,+BAA+B,gBAAgBC,eAAa;AAChH,SAAK,wCAAwC,OAAO,KAAK;AACzD,SAAK,wCAAwC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AAC5F,SAAK,wCAAwC,SAAS,QAAQ,KAAK,UAAU;AAE7E,SAAK,oCAAoC,KAAK,yBAAyB,gBAAgBH,eAAa;AACpG,SAAK,oBAAoB,KAAK,iCAAiC;AAC/D,SAAK,kCAAkC,OAAO,KAAK,UAAU;AAE7D,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBC,cAAY;AACnH,SAAK,yCAAyC,KAAK,iCAAiC,gBAAgBC,mBAAkB;AACtH,SAAK,uCAAuC,WAAW,KAAK,UAAU;AACtE,SAAK,uCAAuC,QAAQ,KAAK,KAAK,UAAU;AACxE,SAAK,uCAAuC,UAAU,KAAK,UAAU;AAErE,SAAK,0CAA0C,KAAK,+BAA+B,gBAAgBC,eAAa;AAChH,SAAK,wCAAwC,OAAO,KAAK;AACzD,SAAK,wCAAwC,WAAW,KAAK,UAAU,gBAAgB,MAAK;AAC5F,SAAK,wCAAwC,SAAS,QAAQ,KAAK,UAAU;AAE7E,SAAK,oCAAoC,KAAK,yBAAyB,gBAAgBH,eAAa;AACpG,SAAK,oBAAoB,KAAK,iCAAiC;AAC/D,SAAK,kCAAkC,OAAO,KAAK,UAAU;AAE7D,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBC,cAAY;AACnH,SAAK,yCAAyC,KAAK,iCAAiC,gBAAgBC,mBAAkB;AACtH,SAAK,uCAAuC,WAAW,KAAK,UAAU;AACtE,SAAK,uCAAuC,QAAQ,KAAK,KAAK,UAAU;AACxE,SAAK,uCAAuC,UAAU,KAAK,UAAU;EACzE;EAEA,gBAAgB,SAAO;AACnB,QAAI,SAAS;AACT,WAAK,4BAA4B,KAAK,2BAA2B;IACrE;EACJ;;;;AClNE,IAAO,4BAAP,cAAyC,mBAAkB;EAE7D,YAAY,QAAQ,WAAW,SAAS,SAAS,QAAQ,cAAa,GAAE;AACpE,UAAM,MAAM;AAEZ,SAAK,aAAa;AAElB,SAAK,cAAc,aAAa;AAChC,SAAK,eAAe,KAAK,cAAc,IAAI;AAE3C,SAAK,YAAY,IAAI,gCAAgC,KAAK,YAAY;AACtE,SAAK,QAAQ,IAAI,4BAA4B,MAAM;AAEnD,SAAK,oBAAoB;AAEzB,SAAK,8BAA8B;AACnC,SAAK,mCAAmC;AACxC,SAAK,6BAA6B;AAClC,SAAK,kCAAkC;AAEvC,SAAK,sBAAsB;AAC3B,SAAK,qBAAqB;AAE1B,SAAK,oBAAoB;AACzB,SAAK,yBAAyB;AAC9B,SAAK,kBAAkB;AAEvB,SAAK,eAAe,CAAA;AAEpB,SAAK,uBAAuB,CAAC,CAAC;AAC9B,SAAK,8BAA8B,CAAC,CAAC;EACzC;EAEA,iBAAc;AACV,aAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACxC,WAAK,MAAM,sBAAsB,CAAC,EAAE,OAAO,KAAK,kBAAiB,EAAG,CAAC,EAAE,QAAQ,KAAK,YAAY,gBAAgB;IACpH;AAEA,SAAK,MAAM,oBAAoB,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,gBAAgB;EACnH;EAGA,WAAW,cAAc,gBAAc;AACnC,SAAK,MAAM,4BAA4B,eAAe,uBAAuB;EACjF;EAEA,2BAAwB;AACpB,QAAI,KAAK,eAAe,MAAM;AAC1B,WAAK,aAAa,QAAQ,KAAK,kBAAiB,CAAE;IACtD;EACJ;EAEA,YAAY,IAAE;AACV,SAAK,aAAa,EAAE;EACxB;EAEA,aAAa,IAAE;AACX,QAAI,yBAAyB;AAE7B,QAAI,KAAK,YAAY;AACjB,UAAI,IAAI,KAAK,WAAW,YAAY,cAAc,UAAU,EAAE,OAAO,CAAC;AAEtE,UAAI,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,8BAA8B;AAC3D,YAAI,wBAAwB,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,iCAAiC,IAAI,KAAK,UAAU;AAC7G,iCAAyB,KAAK,KAAK,CAAC,IAAI;MAC5C;IACJ;AAEA,QAAI,iBAAiB;AACrB,QAAI,KAAK,qBAAqB;AAC1B,uBAAiB;IACrB,WAAW,KAAK,+BAA+B,GAAG;AAC9C,UAAI,KAAK,oCAAoC,GAAG;AAC5C,yBAAiB,KAAK;MAC1B,OAAO;AACH,aAAK,oCAAoC;MAC7C;IACJ;AAEA,QAAI,KAAK,qBAAqB,KAAK,KAAK,oBAAoB,KAAK,kBAAiB,EAAG,QAAQ;AACzF,UAAI,kBAAkB,GAAG;AACrB,YAAI,cAAc,iBAAiB,KAAK,YAAY,mBAAmB;AAEvE,aAAK,qBAAqB;AAE1B,YAAI,KAAK,YAAY,UAAU,QAAQ,KAAK,YAAY,UAAU,MAAM;AACpE,eAAK,oBAAoB,KAAK,SAAS,KAAK,mBAAmB,KAAK,YAAY,QAAQ,KAAK,YAAY,MAAM;QACnH,WAAW,KAAK,YAAY,UAAU,MAAM;AACxC,eAAK,oBAAoB,KAAK,IAAI,KAAK,mBAAmB,KAAK,YAAY,MAAM;QACrF,WAAW,KAAK,YAAY,UAAU,MAAM;AACxC,eAAK,oBAAoB,KAAK,IAAI,KAAK,mBAAmB,KAAK,YAAY,MAAM;QACrF;AAEA,YAAI,0BAA0B,KAAK,IAAI,IAAI,KAAK,YAAY,gBAAgB;AAE5E,aAAK,aAAa,QAAQ,KAAK,kBAAiB,CAAE;AAElD,YAAI,KAAK,YAAY,0BAA0B;AAC3C,cAAI,WAAW,KAAK,MAAM,KAAK,oBAAoB,0BAA0B,OAAO,OAAO,IAAI;AAC/F,cAAI,aAAa,WAAW,KAAK,aAAa,KAAK,iBAAiB;AAEpE,mBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACxC,iBAAK,aAAa,CAAC,IAAI,KAAK,OAAO,KAAK,aAAa,CAAC,IAAI,cAAc,0BAA0B,OAAO,OAAO,IAAI;AAEpH,gBAAI,KAAK,YAAY,UAAU,QAAQ,KAAK,YAAY,UAAU,MAAM;AACpE,mBAAK,aAAa,CAAC,IAAI,KAAK,SAAS,KAAK,aAAa,CAAC,GAAG,KAAK,YAAY,QAAQ,KAAK,YAAY,MAAM;YAC/G,WAAW,KAAK,YAAY,UAAU,MAAM;AACxC,mBAAK,aAAa,CAAC,IAAI,KAAK,IAAI,KAAK,aAAa,CAAC,GAAG,KAAK,YAAY,MAAM;YACjF,WAAW,KAAK,YAAY,UAAU,MAAM;AACxC,mBAAK,aAAa,CAAC,IAAI,KAAK,IAAI,KAAK,aAAa,CAAC,GAAG,KAAK,YAAY,MAAM;YACjF;AAEA,iBAAK,MAAM,sBAAsB,CAAC,EAAE,OAAO,KAAK,aAAa,CAAC,EAAE,QAAQ,KAAK,YAAY,gBAAgB;UAC7G;QAEJ,OAAO;AACH,eAAK,aAAa,KAAK,iBAAiB,IAAI,KAAK,MAAM,KAAK,oBAAoB,0BAA0B,OAAO,OAAO,IAAI;AAE5H,cAAI,KAAK,YAAY,UAAU,QAAQ,KAAK,YAAY,UAAU,MAAM;AACpE,iBAAK,aAAa,KAAK,iBAAiB,IAAI,KAAK,SAAS,KAAK,aAAa,KAAK,iBAAiB,GAAG,KAAK,YAAY,QAAQ,KAAK,YAAY,MAAM;UACzJ,WAAW,KAAK,YAAY,UAAU,MAAM;AACxC,iBAAK,aAAa,KAAK,iBAAiB,IAAI,KAAK,IAAI,KAAK,aAAa,KAAK,iBAAiB,GAAG,KAAK,YAAY,MAAM;UAC3H,WAAW,KAAK,YAAY,UAAU,MAAM;AACxC,iBAAK,aAAa,KAAK,iBAAiB,IAAI,KAAK,IAAI,KAAK,aAAa,KAAK,iBAAiB,GAAG,KAAK,YAAY,MAAM;UAC3H;AAEA,eAAK,MAAM,sBAAsB,KAAK,iBAAiB,EAAE,OAAO,KAAK,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,YAAY,gBAAgB;QACvJ;AAEA,aAAK,kBAAkB,KAAK,YAAY;MAC5C,OAAO;AACH,aAAK,oBAAoB,KAAK,kBAAiB,EAAG,KAAK,iBAAiB;MAC5E;IACJ;AAEA,QAAI,gBAAgB;AACpB,QAAI,KAAK,oBAAoB;AACzB,sBAAgB;IACpB,WAAW,KAAK,8BAA8B,GAAG;AAC7C,UAAI,KAAK,mCAAmC,GAAG;AAC3C,wBAAgB,KAAK;MACzB,OAAO;AACH,aAAK,mCAAmC;MAC5C;IACJ;AAEA,QAAI,iBAAiB,GAAG;AACpB,UAAI,cAAc;AAClB,UAAI,KAAK,iBAAiB;AACtB,sBAAc,KAAK,KAAK,aAAa,IAAI;AACzC,aAAK,kBAAkB;MAC3B,OAAO;AACH,sBAAc,gBAAgB,KAAK,UAAU,gCAAgC;MACjF;AAEA,WAAK,0BAA0B;AAC/B,UAAI,KAAK,IAAI,KAAK,sBAAsB,KAAK,GAAG;AAC5C,YAAI,KAAK,KAAK,KAAK,sBAAsB,IAAI,GAAG;AAC5C,eAAK,0BAA0B;AAC/B,eAAK,YAAY,KAAK,YAAY,mBAAmB,EAAE;QAC3D,OAAO;AACH,eAAK,0BAA0B;AAC/B,eAAK,YAAY,KAAK,YAAY,mBAAmB,GAAG;QAC5D;MACJ;IACJ,OAAO;AACH,WAAK,yBAAyB;AAC9B,WAAK,kBAAkB;IAC3B;EACJ;EAEA,oBAAiB;AACb,QAAI,KAAK,KAAK;AAEd,OAAG,qCAAqC,QAAQ,IAAI,KAAK,gBAAgB,KAAK,IAAI,CAAC;AACnF,OAAG,qCAAqC,QAAQ,IAAI,KAAK,kBAAkB,KAAK,MAAM,GAAG,mBAAmB,CAAC;AAC7G,OAAG,qCAAqC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,qBAAqB,KAAK,UAAU,wBAAwB,CAAC;AAE1J,aAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACxC,SAAG,4CAA4C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AACzG,SAAG,4CAA4C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AAChH,SAAG,4CAA4C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AACvG,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC5G,SAAG,4CAA4C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,EAAE,CAAC;AAC1G,SAAG,4CAA4C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,EAAE,CAAC;AACjH,SAAG,4CAA4C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AACvG,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,CAAC,CAAC;AAE5G,SAAG,4CAA4C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACrJ,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACzJ,SAAG,4CAA4C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACrJ,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AAEzJ,SAAG,8BAA8B,CAAC,EAAE,QAAQ,IAAI,KAAK,YAAY,KAAK,MAAM,CAAC,CAAC;AAC9E,SAAG,8BAA8B,CAAC,EAAE,QAAQ,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC;AACjH,SAAG,8BAA8B,CAAC,EAAE,UAAU,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,KAAK,CAAC;IACxH;AAEA,OAAG,4BAA4B,QAAQ,IAAI,KAAK,WAAW,KAAK,IAAI,CAAC;AACrE,OAAG,4BAA4B,QAAQ,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,YAAY,IAAI,CAAC;AACnG,OAAG,4BAA4B,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,YAAY,KAAK,CAAC;AAEtG,OAAG,0CAA0C,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AAChG,OAAG,0CAA0C,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AACvG,OAAG,0CAA0C,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AAC9F,OAAG,0CAA0C,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AACnG,OAAG,0CAA0C,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,EAAE,CAAC;AACjG,OAAG,0CAA0C,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,EAAE,CAAC;AACxG,OAAG,0CAA0C,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AAC9F,OAAG,0CAA0C,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AAEnG,OAAG,0CAA0C,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,wCAAwC,QAAQ,CAAC;AAC3I,OAAG,0CAA0C,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,wCAAwC,QAAQ,CAAC;AAC/I,OAAG,0CAA0C,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,wCAAwC,QAAQ,CAAC;AAC3I,OAAG,0CAA0C,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,wCAAwC,QAAQ,CAAC;EACnJ;EAEA,uBAAuB,OAAO,OAAK;AAC/B,QAAI,KAAK,UAAS,KAAM,SAAS,GAAG;AAChC,UAAI,SAAS,GAAG;AACZ,aAAK,mCAAmC,KAAK,UAAU;AACvD,aAAK,oBAAoB,KAAK,kBAAiB,EAAG,KAAK;AACvD,aAAK,oBAAoB;MAC7B;AAEA,WAAK,8BAA8B;IACvC;EACJ;EAEA,sBAAsB,OAAK;AACvB,QAAI,KAAK,UAAS,KAAM,SAAS,GAAG;AAChC,UAAI,SAAS,GAAG;AACZ,aAAK,kCAAkC,KAAK,UAAU;MAC1D;AAEA,WAAK,6BAA6B;IACtC;EACJ;EAEA,qBAAqB,OAAO,MAAM,SAAO;AACrC,QAAI,KAAK,UAAS,KAAM,CAAC,SAAS;AAC9B,UAAI,SAAS;AACT,aAAK,oBAAoB,KAAK,kBAAiB,EAAG,KAAK;AACvD,aAAK,oBAAoB;AACzB,aAAK,eAAe,KAAK,UAAU,0BAA0B;MACjE,OAAO;AACH,aAAK,iBAAiB,KAAK,UAAU,gBAAgB;MACzD;AAEA,WAAK,sBAAsB;IAC/B;EACJ;EAEA,oBAAoB,MAAM,SAAO;AAC7B,QAAI,KAAK,UAAS,KAAM,CAAC,SAAS;AAC9B,UAAI,SAAS;AACT,aAAK,eAAe,KAAK,UAAU,0BAA0B;MACjE,OAAO;AACH,aAAK,iBAAiB,KAAK,UAAU,eAAe;MACxD;AAEA,WAAK,qBAAqB;IAC9B;EACJ;EAEA,YAAY,OAAK;AACb,QAAI,KAAK,UAAS,GAAI;AAClB,WAAK,aAAa,QAAQ,KAAK,kBAAiB,CAAE;AAClD,WAAK,aAAa,KAAK,IAAI,KAAK,yBAAwB,EAAG,KAAK;AAChE,WAAK,kBAAkB,KAAK,YAAY;AAExC,WAAK,MAAM,sBAAsB,KAAK,EAAE,OAAO,KAAK,kBAAiB,EAAG,KAAK,EAAE,QAAQ,KAAK,YAAY,gBAAgB;IAC5H;EACJ;EAEA,kBAAe;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,cAAc,KAAK;AACxC,WAAK,YAAY,CAAC;IACtB;EACJ;EAEA,aAAU;AACN,QAAI,KAAK,UAAS,GAAI;AAClB,WAAK,YAAY,KAAK,YAAY,uBAAuB;IAC7D;EACJ;EAEA,YAAY,MAAI;AACZ,WAAO,KAAK,gBAAgB,MAAM,EAAE;AACpC,SAAK,YAAY,mBAAmB;AACpC,SAAK,MAAM,oBAAoB,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,gBAAgB;EACnH;EAEA,kBAAkB,MAAI;AAClB,SAAK,eAAe,KAAK,UAAU,0BAA0B;EACjE;EAEA,oBAAoB,MAAM,eAAa;AACnC,SAAK,iBAAiB,aAAa;EACvC;EAEA,oBAAiB;AACb,QAAI,KAAK,aAAa;AAClB,WAAK,qBAAqB,CAAC,IAAI,KAAK,YAAY,SAAQ;AACxD,aAAO,KAAK;IAChB;AAEA,WAAO,KAAK,YAAY,SAAQ;EACpC;EAEA,2BAAwB;AACpB,QAAI,KAAK,aAAa;AAClB,WAAK,4BAA4B,CAAC,IAAI,KAAK,YAAY,gBAAe;AACtE,aAAO,KAAK;IAChB;AAEA,WAAO,KAAK,YAAY,gBAAe;EAC3C;EAEA,kBAAkB,OAAK;AACnB,QAAI,KAAK,aAAa;AAClB,WAAK,YAAY,SAAS,MAAM,CAAC,CAAC;IACtC,OAAO;AACH,WAAK,YAAY,SAAS,KAAK,YAAY;IAC/C;EACJ;;;;ACxUE,IAAO,oCAAP,cAAiD,gCAA+B;EAElF,wBAAwB,WAAS;AAC7B,WAAO,IAAI,0BAA0B,KAAK,WAAW,WAAW,KAAK,YAAY,KAAK,SAAS;EACnG;;;;ACJE,IAAO,gCAAP,cAA6C,yBAAwB;EAEvE,oBAAiB;AACb,WAAO,MAAM,kBAAiB,IAAK,KAAK,wBAAwB,CAAC,IAAI,KAAK,oBAAoB,CAAC;EACnG;EAEA,oBAAiB;AACb,WAAO,KAAK,uBAAuB,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,KAAK,yBAAyB,CAAC,IAAI,KAAK,4BAA4B,CAAC,IAAI,KAAK;EAC5J;EAEA,oBAAiB;AACb,WAAO,KAAK,uBAAuB,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,KAAK,yBAAyB,CAAC,IAAI,KAAK,4BAA4B,CAAC,IAAI,KAAK;EACzJ;EAEA,mBAAgB;AACZ,WAAO;EACX;EAEA,wBAAqB;AACjB,SAAK,uBAAuB;AAC5B,SAAK,uBAAuB;AAE5B,SAAK,2BAA2B,YAAY,OAAO,GAAG,KAAQ;AAC9D,SAAK,2BAA2B,YAAY,CAAC,KAAK,yBAAyB,CAAC,GAAG,GAAG,KAAQ;AAE1F,QAAI,4BAA4B,KAAK,IAAI,KAAK,yBAAyB,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,0BAA0B,CAAC,CAAC;AACvH,QAAI,4BAA4B;AAChC,SAAK,0BAA0B,CAAC,GAAG,KAAK,6BAA6B,CAAC,IAAI,2BAA2B,KAAK,eAAe;AACzH,SAAK,0BAA0B,CAAC,KAAK,wBAAwB,CAAC,IAAI,2BAA2B,KAAK,6BAA6B,CAAC,IAAI,2BAA2B,KAAK,eAAe;AACnL,SAAK,uBAAuB,CAAC,KAAK,wBAAwB,CAAC,IAAI,2BAA2B,KAAK,6BAA6B,CAAC,IAAI,2BAA2B,KAAK,eAAe;AAEhL,SAAK,iBAAiB;AACtB,SAAK,iBAAiB;AACtB,SAAK,cAAc;AAEnB,SAAK,4BAA4B,KAAK;AACtC,SAAK,uCAAuC,YAAY,GAAG,GAAG,CAAC;AAC/D,SAAK,qCAAqC,CAAC,IAAI,KAAK,qBAAqB,KAAK;AAC9E,SAAK,mCAAmC,YAAY,OAAO,QAAQ,CAAC;AACpE,SAAK,iCAAiC,CAAC,IAAI,KAAK;AAEhD,SAAK,8CAA8C;AACnD,SAAK,2BAA2B,KAAK,4BAA4B,CAAC,IAAI,IAAI;AAE1E,SAAK,mBAAmB,YAAY,KAAK,KAAK,GAAG;AAEjD,SAAK,8BAA8B,YAAY,GAAG,GAAG,CAAC;AACtD,SAAK,4BAA4B,CAAC,IAAI,KAAK,qBAAqB,KAAK;AACrE,SAAK,0BAA0B,YAAY,OAAO,MAAM,CAAC;AACzD,SAAK,wBAAwB,CAAC,IAAI,KAAK;AAEvC,SAAK,yBAAyB,CAAA;AAC9B,SAAK,uBAAuB,CAAC,IAAI,YAAY,GAAG,CAAC,KAAK,6CAA6C,CAAC;AACpG,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,uBAAuB,CAAC,IAAI,KAAK,uBAAuB,IAAI,CAAC,EAAE,SAAQ;AAC5E,WAAK,uBAAuB,CAAC,EAAE,CAAC,KAAK,KAAK;IAC9C;AAEA,QAAI,yBAAyB,KAAK,uBAAuB,CAAC,EAAE,CAAC;AAC7D,SAAK,sBAAsB,CAAC,GAAG,yBAAyB,KAAK,6CAA6C,CAAC;AAC3G,SAAK,kBAAkB,KAAK;AAC5B,SAAK,oBAAoB;AAEzB,SAAK,6BAA6B,YAAY,GAAG,GAAG,CAAC;AACrD,SAAK,2BAA2B,CAAC,IAAI,KAAK,qBAAqB,KAAK,oBAAoB,CAAC;AACzF,SAAK,yBAAyB,YAAY,OAAO,QAAQ,CAAC;AAC1D,SAAK,uBAAuB,CAAC,IAAI,KAAK;EAC1C;EAEA,0BAAuB;AACnB,SAAK,6BAA6B,YAAY,KAAK,KAAK,GAAG;AAE3D,SAAK,+BAA+B;AACpC,SAAK,gCAAgC;AACrC,SAAK,oBAAoB;EAC7B;;;;AC9EJ,SAAS,sBAAAE,qBAAoB,iBAAAC,iBAAe,iBAAAC,uBAAqB;AACjE,SAAS,gBAAAC,sBAAoB;AAGvB,IAAO,4BAAP,cAAyC,qBAAoB;EAE/D,YAAY,QAAM;AACd,UAAM,MAAM;EAChB;EAEA,4BAA4B,SAAO;AAC/B,SAAK,8BAA8B;AAEnC,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,+BAA+B,CAAC,EAAE,aAAa,KAAK,2BAA2B;AACpF,WAAK,+BAA+B,CAAC,EAAE,aAAa,KAAK,2BAA2B;IACxF;AACA,SAAK,kCAAkC,aAAa,KAAK,2BAA2B;AACpF,SAAK,kCAAkC,aAAa,KAAK,2BAA2B;AAEpF,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,+BAA+B,CAAC,EAAE,aAAa,KAAK,2BAA2B;AACpF,WAAK,+BAA+B,CAAC,EAAE,aAAa,KAAK,2BAA2B;IACxF;AACA,SAAK,kCAAkC,aAAa,KAAK,2BAA2B;AACpF,SAAK,kCAAkC,aAAa,KAAK,2BAA2B;AAEpF,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,4BAA4B,CAAC,EAAE,aAAa,KAAK,2BAA2B;AACjF,WAAK,4BAA4B,CAAC,EAAE,aAAa,KAAK,2BAA2B;IACrF;AACA,SAAK,+BAA+B,aAAa,KAAK,2BAA2B;AACjF,SAAK,+BAA+B,aAAa,KAAK,2BAA2B;EACrF;EAEA,aAAU;AACN,SAAK,8BAA8B;EACvC;EAEA,sBAAmB;AAGf,SAAK,kBAAkB,KAAK,eAAe,aAAY;AACvD,SAAK,sBAAsB,KAAK,gBAAgB,aAAY;AAC5D,SAAK,8BAA8B,KAAK,gBAAgB,aAAY;AAEpE,SAAK,mBAAmB,CAAA;AACxB,SAAK,kBAAkB,CAAA;AACvB,SAAK,0BAA0B,CAAA;AAE/B,SAAK,iCAAiC,CAAA;AACtC,SAAK,sCAAsC,CAAA;AAC3C,SAAK,gCAAgC,CAAA;AACrC,SAAK,wCAAwC,CAAA;AAE7C,SAAK,iCAAiC,CAAA;AACtC,SAAK,sCAAsC,CAAA;AAC3C,SAAK,gCAAgC,CAAA;AACrC,SAAK,wCAAwC,CAAA;AAE7C,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,iBAAiB,CAAC,IAAI,KAAK,gBAAgB,aAAY;AAC5D,WAAK,gBAAgB,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAC/D,WAAK,wBAAwB,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAEvE,WAAK,+BAA+B,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAC9E,WAAK,oCAAoC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AACjG,WAAK,8BAA8B,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AAC3F,WAAK,sCAAsC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AAEnG,WAAK,+BAA+B,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAC9E,WAAK,oCAAoC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AACjG,WAAK,8BAA8B,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AAC3F,WAAK,sCAAsC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;IACvG;AAIA,SAAK,kBAAkB,KAAK,eAAe,aAAY;AACvD,SAAK,sBAAsB,KAAK,gBAAgB,aAAY;AAC5D,SAAK,8BAA8B,KAAK,gBAAgB,aAAY;AAEpE,SAAK,mBAAmB,CAAA;AACxB,SAAK,kBAAkB,CAAA;AACvB,SAAK,0BAA0B,CAAA;AAE/B,SAAK,iCAAiC,CAAA;AACtC,SAAK,sCAAsC,CAAA;AAC3C,SAAK,gCAAgC,CAAA;AACrC,SAAK,wCAAwC,CAAA;AAE7C,SAAK,iCAAiC,CAAA;AACtC,SAAK,sCAAsC,CAAA;AAC3C,SAAK,gCAAgC,CAAA;AACrC,SAAK,wCAAwC,CAAA;AAE7C,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,iBAAiB,CAAC,IAAI,KAAK,gBAAgB,aAAY;AAC5D,WAAK,gBAAgB,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAC/D,WAAK,wBAAwB,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAEvE,WAAK,+BAA+B,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAC9E,WAAK,oCAAoC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AACjG,WAAK,8BAA8B,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AAC3F,WAAK,sCAAsC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AAEnG,WAAK,+BAA+B,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,aAAY;AAC9E,WAAK,oCAAoC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AACjG,WAAK,8BAA8B,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;AAC3F,WAAK,sCAAsC,CAAC,IAAI,KAAK,+BAA+B,CAAC,EAAE,aAAY;IACvG;AAIA,SAAK,eAAe,KAAK,eAAe,aAAY;AACpD,SAAK,mBAAmB,KAAK,aAAa,aAAY;AACtD,SAAK,2BAA2B,KAAK,aAAa,aAAY;AAE9D,SAAK,gBAAgB,CAAA;AACrB,SAAK,eAAe,CAAA;AACpB,SAAK,uBAAuB,CAAA;AAE5B,SAAK,8BAA8B,CAAA;AACnC,SAAK,mCAAmC,CAAA;AACxC,SAAK,6BAA6B,CAAA;AAClC,SAAK,qCAAqC,CAAA;AAE1C,SAAK,8BAA8B,CAAA;AACnC,SAAK,mCAAmC,CAAA;AACxC,SAAK,6BAA6B,CAAA;AAClC,SAAK,qCAAqC,CAAA;AAE1C,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,cAAc,CAAC,IAAI,KAAK,aAAa,aAAY;AACtD,WAAK,aAAa,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACzD,WAAK,qBAAqB,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AAEjE,WAAK,4BAA4B,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACxE,WAAK,iCAAiC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAC3F,WAAK,2BAA2B,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AACrF,WAAK,mCAAmC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAE7F,WAAK,4BAA4B,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,aAAY;AACxE,WAAK,iCAAiC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AAC3F,WAAK,2BAA2B,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;AACrF,WAAK,mCAAmC,CAAC,IAAI,KAAK,4BAA4B,CAAC,EAAE,aAAY;IACjG;AAMA,SAAK,sBAAsB,KAAK,gBAAgB,aAAY;AAC5D,SAAK,qBAAqB,KAAK,oBAAoB,aAAY;AAC/D,SAAK,6BAA6B,KAAK,oBAAoB,aAAY;AAEvE,SAAK,oCAAoC,KAAK,oBAAoB,aAAY;AAC9E,SAAK,yCAAyC,KAAK,kCAAkC,aAAY;AACjG,SAAK,mCAAmC,KAAK,kCAAkC,aAAY;AAC3F,SAAK,2CAA2C,KAAK,kCAAkC,aAAY;AAEnG,SAAK,oCAAoC,KAAK,oBAAoB,aAAY;AAC9E,SAAK,yCAAyC,KAAK,kCAAkC,aAAY;AACjG,SAAK,mCAAmC,KAAK,kCAAkC,aAAY;AAC3F,SAAK,2CAA2C,KAAK,kCAAkC,aAAY;AAInG,SAAK,sBAAsB,KAAK,gBAAgB,aAAY;AAC5D,SAAK,qBAAqB,KAAK,oBAAoB,aAAY;AAC/D,SAAK,6BAA6B,KAAK,oBAAoB,aAAY;AAEvE,SAAK,oCAAoC,KAAK,oBAAoB,aAAY;AAC9E,SAAK,yCAAyC,KAAK,kCAAkC,aAAY;AACjG,SAAK,mCAAmC,KAAK,kCAAkC,aAAY;AAC3F,SAAK,2CAA2C,KAAK,kCAAkC,aAAY;AAEnG,SAAK,oCAAoC,KAAK,oBAAoB,aAAY;AAC9E,SAAK,yCAAyC,KAAK,kCAAkC,aAAY;AACjG,SAAK,mCAAmC,KAAK,kCAAkC,aAAY;AAC3F,SAAK,2CAA2C,KAAK,kCAAkC,aAAY;AAInG,SAAK,mBAAmB,KAAK,aAAa,aAAY;AACtD,SAAK,kBAAkB,KAAK,iBAAiB,aAAY;AACzD,SAAK,0BAA0B,KAAK,iBAAiB,aAAY;AAEjE,SAAK,iCAAiC,KAAK,iBAAiB,aAAY;AACxE,SAAK,sCAAsC,KAAK,+BAA+B,aAAY;AAC3F,SAAK,gCAAgC,KAAK,+BAA+B,aAAY;AACrF,SAAK,wCAAwC,KAAK,+BAA+B,aAAY;AAE7F,SAAK,iCAAiC,KAAK,iBAAiB,aAAY;AACxE,SAAK,sCAAsC,KAAK,+BAA+B,aAAY;AAC3F,SAAK,gCAAgC,KAAK,+BAA+B,aAAY;AACrF,SAAK,wCAAwC,KAAK,+BAA+B,aAAY;EACjG;EAEA,oBAAiB;AAGb,SAAK,gBAAgB,oBAAoB,KAAK,UAAU,uBAAuB;AAC/E,SAAK,oBAAoB,eAAe,KAAK,UAAU,yBAAyB;AAChF,SAAK,4BAA4B,oBAAoB,KAAK,UAAU,oCAAoC;AAExG,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,iBAAiB,CAAC,EAAE,oBAAoB,KAAK,UAAU,uBAAuB,CAAC,CAAC;AACrF,WAAK,gBAAgB,CAAC,EAAE,eAAe,KAAK,UAAU,gBAAgB;AACtE,WAAK,wBAAwB,CAAC,EAAE,oBAAoB,KAAK,UAAU,2BAA2B;AAE9F,WAAK,+BAA+B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,WAAK,oCAAoC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AACrG,WAAK,8BAA8B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,WAAK,8BAA8B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACzF,WAAK,sCAAsC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;AAEjH,WAAK,+BAA+B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,WAAK,oCAAoC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AACrG,WAAK,8BAA8B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,WAAK,8BAA8B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACzF,WAAK,sCAAsC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;IACrH;AAIA,SAAK,gBAAgB,oBAAoB,KAAK,UAAU,uBAAuB;AAC/E,SAAK,oBAAoB,eAAe,KAAK,UAAU,yBAAyB;AAChF,SAAK,4BAA4B,oBAAoB,KAAK,UAAU,oCAAoC;AAExG,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,iBAAiB,CAAC,EAAE,oBAAoB,KAAK,UAAU,uBAAuB,CAAC,CAAC;AACrF,WAAK,gBAAgB,CAAC,EAAE,eAAe,KAAK,UAAU,gBAAgB;AACtE,WAAK,wBAAwB,CAAC,EAAE,oBAAoB,KAAK,UAAU,2BAA2B;AAE9F,WAAK,+BAA+B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,WAAK,oCAAoC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AACrG,WAAK,8BAA8B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,WAAK,8BAA8B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACzF,WAAK,sCAAsC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;AAEjH,WAAK,+BAA+B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,WAAK,oCAAoC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AACrG,WAAK,8BAA8B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,WAAK,8BAA8B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACzF,WAAK,sCAAsC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;IACrH;AAIA,SAAK,aAAa,oBAAoB,KAAK,UAAU,oBAAoB;AACzE,SAAK,iBAAiB,eAAe,KAAK,UAAU,yBAAyB;AAC7E,SAAK,yBAAyB,oBAAoB,KAAK,UAAU,oCAAoC;AAErG,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,cAAc,CAAC,EAAE,oBAAoB,KAAK,UAAU,uBAAuB,CAAC,CAAC;AAClF,WAAK,aAAa,CAAC,EAAE,eAAe,KAAK,UAAU,gBAAgB;AACnE,WAAK,qBAAqB,CAAC,EAAE,oBAAoB,KAAK,UAAU,2BAA2B;AAE3F,WAAK,4BAA4B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC/F,WAAK,iCAAiC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AAClG,WAAK,2BAA2B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,WAAK,2BAA2B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACtF,WAAK,mCAAmC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;AAE9G,WAAK,4BAA4B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC/F,WAAK,iCAAiC,CAAC,EAAE,eAAe,KAAK,UAAU,2BAA2B;AAClG,WAAK,2BAA2B,CAAC,EAAE,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,WAAK,2BAA2B,CAAC,EAAE,eAAe,KAAK,UAAU,qBAAqB;AACtF,WAAK,mCAAmC,CAAC,EAAE,oBAAoB,KAAK,UAAU,gCAAgC;IAClH;AAMA,SAAK,oBAAoB,oBAAoB,KAAK,UAAU,mBAAmB;AAC/E,SAAK,mBAAmB,eAAe,KAAK,UAAU,eAAe;AACrE,SAAK,2BAA2B,oBAAoB,KAAK,UAAU,0BAA0B;AAE7F,SAAK,kCAAkC,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,SAAK,uCAAuC,eAAe,KAAK,UAAU,2BAA2B;AACrG,SAAK,iCAAiC,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,SAAK,iCAAiC,eAAe,KAAK,UAAU,qBAAqB;AACzF,SAAK,yCAAyC,oBAAoB,KAAK,UAAU,gCAAgC;AAEjH,SAAK,kCAAkC,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,SAAK,uCAAuC,eAAe,KAAK,UAAU,2BAA2B;AACrG,SAAK,iCAAiC,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,SAAK,iCAAiC,eAAe,KAAK,UAAU,qBAAqB;AACzF,SAAK,yCAAyC,oBAAoB,KAAK,UAAU,gCAAgC;AAIjH,SAAK,oBAAoB,oBAAoB,KAAK,UAAU,mBAAmB;AAC/E,SAAK,mBAAmB,eAAe,KAAK,UAAU,eAAe;AACrE,SAAK,2BAA2B,oBAAoB,KAAK,UAAU,0BAA0B;AAE7F,SAAK,kCAAkC,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,SAAK,uCAAuC,eAAe,KAAK,UAAU,2BAA2B;AACrG,SAAK,iCAAiC,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,SAAK,iCAAiC,eAAe,KAAK,UAAU,qBAAqB;AACzF,SAAK,yCAAyC,oBAAoB,KAAK,UAAU,gCAAgC;AAEjH,SAAK,kCAAkC,oBAAoB,KAAK,UAAU,wBAAwB;AAClG,SAAK,uCAAuC,eAAe,KAAK,UAAU,2BAA2B;AACrG,SAAK,iCAAiC,oBAAoB,KAAK,UAAU,wBAAwB;AACjG,SAAK,iCAAiC,eAAe,KAAK,UAAU,qBAAqB;AACzF,SAAK,yCAAyC,oBAAoB,KAAK,UAAU,gCAAgC;AAIjH,SAAK,iBAAiB,oBAAoB,KAAK,UAAU,mBAAmB;AAC5E,SAAK,gBAAgB,eAAe,KAAK,UAAU,eAAe;AAClE,SAAK,wBAAwB,oBAAoB,KAAK,UAAU,0BAA0B;AAE1F,SAAK,+BAA+B,oBAAoB,KAAK,UAAU,wBAAwB;AAC/F,SAAK,oCAAoC,eAAe,KAAK,UAAU,2BAA2B;AAClG,SAAK,8BAA8B,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,SAAK,8BAA8B,eAAe,KAAK,UAAU,qBAAqB;AACtF,SAAK,sCAAsC,oBAAoB,KAAK,UAAU,gCAAgC;AAE9G,SAAK,+BAA+B,oBAAoB,KAAK,UAAU,wBAAwB;AAC/F,SAAK,oCAAoC,eAAe,KAAK,UAAU,2BAA2B;AAClG,SAAK,8BAA8B,oBAAoB,KAAK,UAAU,wBAAwB;AAC9F,SAAK,8BAA8B,eAAe,KAAK,UAAU,qBAAqB;AACtF,SAAK,sCAAsC,oBAAoB,KAAK,UAAU,gCAAgC;EAClH;EAEA,qBAAkB;AAGd,SAAK,+BAA+B,KAAK,oBAAoB,gBAAgBC,eAAa;AAC1F,SAAK,oBAAoB,KAAK,4BAA4B;AAC1D,SAAK,6BAA6B,OAAO,KAAK,UAAU;AAExD,SAAK,uCAAuC,KAAK,4BAA4B,gBAAgBC,cAAY;AACzG,SAAK,oCAAoC,KAAK,4BAA4B,gBAAgBC,mBAAkB;AAC5G,SAAK,kCAAkC,WAAW,KAAK,UAAU;AACjE,SAAK,kCAAkC,QAAQ,KAAK,KAAK,UAAU;AACnE,SAAK,kCAAkC,UAAU,KAAK,UAAU;AAEhE,SAAK,2BAA2B,CAAA;AAChC,SAAK,mCAAmC,CAAA;AACxC,SAAK,gCAAgC,CAAA;AAErC,SAAK,+CAA+C,CAAA;AACpD,SAAK,yCAAyC,CAAA;AAC9C,SAAK,iDAAiD,CAAA;AACtD,SAAK,8CAA8C,CAAA;AAEnD,SAAK,+CAA+C,CAAA;AACpD,SAAK,yCAAyC,CAAA;AAC9C,SAAK,iDAAiD,CAAA;AACtD,SAAK,8CAA8C,CAAA;AAEnD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,yBAAyB,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,gBAAgBF,eAAa;AACxF,WAAK,oBAAoB,KAAK,yBAAyB,CAAC,CAAC;AACzD,WAAK,yBAAyB,CAAC,EAAE,OAAO;AAExC,WAAK,iCAAiC,CAAC,IAAI,KAAK,wBAAwB,CAAC,EAAE,gBAAgBC,cAAY;AACvG,WAAK,8BAA8B,CAAC,IAAI,KAAK,wBAAwB,CAAC,EAAE,gBAAgBC,mBAAkB;AAC1G,WAAK,8BAA8B,CAAC,EAAE,WAAW,KAAK,UAAU;AAChE,WAAK,8BAA8B,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAClE,WAAK,8BAA8B,CAAC,EAAE,UAAU,KAAK,UAAU;AAE/D,WAAK,6CAA6C,CAAC,IAAI,KAAK,oCAAoC,CAAC,EAAE,gBAAgBC,eAAa;AAChI,WAAK,6CAA6C,CAAC,EAAE,OAAO,KAAK;AACjE,WAAK,6CAA6C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,WAAK,6CAA6C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAErF,WAAK,uCAAuC,CAAC,IAAI,KAAK,8BAA8B,CAAC,EAAE,gBAAgBH,eAAa;AACpH,WAAK,oBAAoB,KAAK,uCAAuC,CAAC,CAAC;AACvE,WAAK,uCAAuC,CAAC,EAAE,OAAO,KAAK,UAAU;AAErE,WAAK,+CAA+C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,cAAY;AACnI,WAAK,4CAA4C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,mBAAkB;AACtI,WAAK,4CAA4C,CAAC,EAAE,WAAW,KAAK,UAAU;AAC9E,WAAK,4CAA4C,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAChF,WAAK,4CAA4C,CAAC,EAAE,UAAU,KAAK,UAAU;AAE7E,WAAK,6CAA6C,CAAC,IAAI,KAAK,oCAAoC,CAAC,EAAE,gBAAgBC,eAAa;AAChI,WAAK,6CAA6C,CAAC,EAAE,OAAO,KAAK;AACjE,WAAK,6CAA6C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,WAAK,6CAA6C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAErF,WAAK,uCAAuC,CAAC,IAAI,KAAK,8BAA8B,CAAC,EAAE,gBAAgBH,eAAa;AACpH,WAAK,oBAAoB,KAAK,uCAAuC,CAAC,CAAC;AACvE,WAAK,uCAAuC,CAAC,EAAE,OAAO,KAAK,UAAU;AAErE,WAAK,+CAA+C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,cAAY;AACnI,WAAK,4CAA4C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,mBAAkB;AACtI,WAAK,4CAA4C,CAAC,EAAE,WAAW,KAAK,UAAU;AAC9E,WAAK,4CAA4C,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAChF,WAAK,4CAA4C,CAAC,EAAE,UAAU,KAAK,UAAU;IACjF;AAIA,SAAK,+BAA+B,KAAK,oBAAoB,gBAAgBF,eAAa;AAC1F,SAAK,oBAAoB,KAAK,4BAA4B;AAC1D,SAAK,6BAA6B,OAAO,KAAK,UAAU;AAExD,SAAK,uCAAuC,KAAK,4BAA4B,gBAAgBC,cAAY;AACzG,SAAK,oCAAoC,KAAK,4BAA4B,gBAAgBC,mBAAkB;AAC5G,SAAK,kCAAkC,WAAW,KAAK,UAAU;AACjE,SAAK,kCAAkC,QAAQ,KAAK,KAAK,UAAU;AACnE,SAAK,kCAAkC,UAAU,KAAK,UAAU;AAEhE,SAAK,2BAA2B,CAAA;AAChC,SAAK,mCAAmC,CAAA;AACxC,SAAK,gCAAgC,CAAA;AAErC,SAAK,+CAA+C,CAAA;AACpD,SAAK,yCAAyC,CAAA;AAC9C,SAAK,iDAAiD,CAAA;AACtD,SAAK,8CAA8C,CAAA;AAEnD,SAAK,+CAA+C,CAAA;AACpD,SAAK,yCAAyC,CAAA;AAC9C,SAAK,iDAAiD,CAAA;AACtD,SAAK,8CAA8C,CAAA;AAEnD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,yBAAyB,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,gBAAgBF,eAAa;AACxF,WAAK,oBAAoB,KAAK,yBAAyB,CAAC,CAAC;AACzD,WAAK,yBAAyB,CAAC,EAAE,OAAO;AAExC,WAAK,iCAAiC,CAAC,IAAI,KAAK,wBAAwB,CAAC,EAAE,gBAAgBC,cAAY;AACvG,WAAK,8BAA8B,CAAC,IAAI,KAAK,wBAAwB,CAAC,EAAE,gBAAgBC,mBAAkB;AAC1G,WAAK,8BAA8B,CAAC,EAAE,WAAW,KAAK,UAAU;AAChE,WAAK,8BAA8B,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAClE,WAAK,8BAA8B,CAAC,EAAE,UAAU,KAAK,UAAU;AAE/D,WAAK,6CAA6C,CAAC,IAAI,KAAK,oCAAoC,CAAC,EAAE,gBAAgBC,eAAa;AAChI,WAAK,6CAA6C,CAAC,EAAE,OAAO,KAAK;AACjE,WAAK,6CAA6C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,WAAK,6CAA6C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAErF,WAAK,uCAAuC,CAAC,IAAI,KAAK,8BAA8B,CAAC,EAAE,gBAAgBH,eAAa;AACpH,WAAK,oBAAoB,KAAK,uCAAuC,CAAC,CAAC;AACvE,WAAK,uCAAuC,CAAC,EAAE,OAAO,KAAK,UAAU;AAErE,WAAK,+CAA+C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,cAAY;AACnI,WAAK,4CAA4C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,mBAAkB;AACtI,WAAK,4CAA4C,CAAC,EAAE,WAAW,KAAK,UAAU;AAC9E,WAAK,4CAA4C,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAChF,WAAK,4CAA4C,CAAC,EAAE,UAAU,KAAK,UAAU;AAE7E,WAAK,6CAA6C,CAAC,IAAI,KAAK,oCAAoC,CAAC,EAAE,gBAAgBC,eAAa;AAChI,WAAK,6CAA6C,CAAC,EAAE,OAAO,KAAK;AACjE,WAAK,6CAA6C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,WAAK,6CAA6C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAErF,WAAK,uCAAuC,CAAC,IAAI,KAAK,8BAA8B,CAAC,EAAE,gBAAgBH,eAAa;AACpH,WAAK,oBAAoB,KAAK,uCAAuC,CAAC,CAAC;AACvE,WAAK,uCAAuC,CAAC,EAAE,OAAO,KAAK,UAAU;AAErE,WAAK,+CAA+C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,cAAY;AACnI,WAAK,4CAA4C,CAAC,IAAI,KAAK,sCAAsC,CAAC,EAAE,gBAAgBC,mBAAkB;AACtI,WAAK,4CAA4C,CAAC,EAAE,WAAW,KAAK,UAAU;AAC9E,WAAK,4CAA4C,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAChF,WAAK,4CAA4C,CAAC,EAAE,UAAU,KAAK,UAAU;IACjF;AAIA,SAAK,4BAA4B,KAAK,iBAAiB,gBAAgBF,eAAa;AACpF,SAAK,oBAAoB,KAAK,yBAAyB;AACvD,SAAK,0BAA0B,OAAO,KAAK,UAAU;AAErD,SAAK,oCAAoC,KAAK,yBAAyB,gBAAgBC,cAAY;AACnG,SAAK,iCAAiC,KAAK,yBAAyB,gBAAgBC,mBAAkB;AACtG,SAAK,+BAA+B,WAAW,KAAK,UAAU;AAC9D,SAAK,+BAA+B,QAAQ,KAAK,KAAK,UAAU;AAChE,SAAK,+BAA+B,UAAU,KAAK,UAAU;AAE7D,SAAK,wBAAwB,CAAA;AAC7B,SAAK,gCAAgC,CAAA;AACrC,SAAK,6BAA6B,CAAA;AAElC,SAAK,4CAA4C,CAAA;AACjD,SAAK,sCAAsC,CAAA;AAC3C,SAAK,8CAA8C,CAAA;AACnD,SAAK,2CAA2C,CAAA;AAEhD,SAAK,4CAA4C,CAAA;AACjD,SAAK,sCAAsC,CAAA;AAC3C,SAAK,8CAA8C,CAAA;AACnD,SAAK,2CAA2C,CAAA;AAEhD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,sBAAsB,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,gBAAgBF,eAAa;AAClF,WAAK,oBAAoB,KAAK,sBAAsB,CAAC,CAAC;AACtD,WAAK,sBAAsB,CAAC,EAAE,OAAO;AAErC,WAAK,8BAA8B,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,gBAAgBC,cAAY;AACjG,WAAK,2BAA2B,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,gBAAgBC,mBAAkB;AACpG,WAAK,2BAA2B,CAAC,EAAE,WAAW,KAAK,UAAU;AAC7D,WAAK,2BAA2B,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC/D,WAAK,2BAA2B,CAAC,EAAE,UAAU,KAAK,UAAU;AAE5D,WAAK,0CAA0C,CAAC,IAAI,KAAK,iCAAiC,CAAC,EAAE,gBAAgBC,eAAa;AAC1H,WAAK,0CAA0C,CAAC,EAAE,OAAO,KAAK;AAC9D,WAAK,0CAA0C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,WAAK,0CAA0C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAElF,WAAK,oCAAoC,CAAC,IAAI,KAAK,2BAA2B,CAAC,EAAE,gBAAgBH,eAAa;AAC9G,WAAK,oBAAoB,KAAK,oCAAoC,CAAC,CAAC;AACpE,WAAK,oCAAoC,CAAC,EAAE,OAAO,KAAK,UAAU;AAElE,WAAK,4CAA4C,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,cAAY;AAC7H,WAAK,yCAAyC,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,mBAAkB;AAChI,WAAK,yCAAyC,CAAC,EAAE,WAAW,KAAK,UAAU;AAC3E,WAAK,yCAAyC,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC7E,WAAK,yCAAyC,CAAC,EAAE,UAAU,KAAK,UAAU;AAE1E,WAAK,0CAA0C,CAAC,IAAI,KAAK,iCAAiC,CAAC,EAAE,gBAAgBC,eAAa;AAC1H,WAAK,0CAA0C,CAAC,EAAE,OAAO,KAAK;AAC9D,WAAK,0CAA0C,CAAC,EAAE,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,WAAK,0CAA0C,CAAC,EAAE,SAAS,QAAQ,KAAK,UAAU;AAElF,WAAK,oCAAoC,CAAC,IAAI,KAAK,2BAA2B,CAAC,EAAE,gBAAgBH,eAAa;AAC9G,WAAK,oBAAoB,KAAK,oCAAoC,CAAC,CAAC;AACpE,WAAK,oCAAoC,CAAC,EAAE,OAAO,KAAK,UAAU;AAElE,WAAK,4CAA4C,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,cAAY;AAC7H,WAAK,yCAAyC,CAAC,IAAI,KAAK,mCAAmC,CAAC,EAAE,gBAAgBC,mBAAkB;AAChI,WAAK,yCAAyC,CAAC,EAAE,WAAW,KAAK,UAAU;AAC3E,WAAK,yCAAyC,CAAC,EAAE,QAAQ,KAAK,KAAK,UAAU;AAC7E,WAAK,yCAAyC,CAAC,EAAE,UAAU,KAAK,UAAU;IAC9E;AAKA,SAAK,8BAA8B,KAAK,mBAAmB,gBAAgBF,eAAa;AACxF,SAAK,oBAAoB,KAAK,2BAA2B;AACzD,SAAK,4BAA4B,OAAO;AAExC,SAAK,sCAAsC,KAAK,2BAA2B,gBAAgBC,cAAY;AACvG,SAAK,mCAAmC,KAAK,2BAA2B,gBAAgBC,mBAAkB;AAC1G,SAAK,iCAAiC,WAAW,KAAK,UAAU;AAChE,SAAK,iCAAiC,QAAQ,KAAK,KAAK,UAAU;AAClE,SAAK,iCAAiC,UAAU,KAAK,UAAU;AAE/D,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAE7E,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAI7E,SAAK,8BAA8B,KAAK,mBAAmB,gBAAgBF,eAAa;AACxF,SAAK,oBAAoB,KAAK,2BAA2B;AACzD,SAAK,4BAA4B,OAAO;AAExC,SAAK,sCAAsC,KAAK,2BAA2B,gBAAgBC,cAAY;AACvG,SAAK,mCAAmC,KAAK,2BAA2B,gBAAgBC,mBAAkB;AAC1G,SAAK,iCAAiC,WAAW,KAAK,UAAU;AAChE,SAAK,iCAAiC,QAAQ,KAAK,KAAK,UAAU;AAClE,SAAK,iCAAiC,UAAU,KAAK,UAAU;AAE/D,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAE7E,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAI7E,SAAK,2BAA2B,KAAK,gBAAgB,gBAAgBF,eAAa;AAClF,SAAK,oBAAoB,KAAK,wBAAwB;AACtD,SAAK,yBAAyB,OAAO;AAErC,SAAK,mCAAmC,KAAK,wBAAwB,gBAAgBC,cAAY;AACjG,SAAK,gCAAgC,KAAK,wBAAwB,gBAAgBC,mBAAkB;AACpG,SAAK,8BAA8B,WAAW,KAAK,UAAU;AAC7D,SAAK,8BAA8B,QAAQ,KAAK,KAAK,UAAU;AAC/D,SAAK,8BAA8B,UAAU,KAAK,UAAU;AAE5D,SAAK,+CAA+C,KAAK,oCAAoC,gBAAgBC,eAAa;AAC1H,SAAK,6CAA6C,OAAO,KAAK;AAC9D,SAAK,6CAA6C,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,SAAK,6CAA6C,SAAS,QAAQ,KAAK,UAAU;AAElF,SAAK,yCAAyC,KAAK,8BAA8B,gBAAgBH,eAAa;AAC9G,SAAK,oBAAoB,KAAK,sCAAsC;AACpE,SAAK,uCAAuC,OAAO,KAAK,UAAU;AAElE,SAAK,iDAAiD,KAAK,sCAAsC,gBAAgBC,cAAY;AAC7H,SAAK,8CAA8C,KAAK,sCAAsC,gBAAgBC,mBAAkB;AAChI,SAAK,4CAA4C,WAAW,KAAK,UAAU;AAC3E,SAAK,4CAA4C,QAAQ,KAAK,KAAK,UAAU;AAC7E,SAAK,4CAA4C,UAAU,KAAK,UAAU;AAE1E,SAAK,+CAA+C,KAAK,oCAAoC,gBAAgBC,eAAa;AAC1H,SAAK,6CAA6C,OAAO,KAAK;AAC9D,SAAK,6CAA6C,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,SAAK,6CAA6C,SAAS,QAAQ,KAAK,UAAU;AAElF,SAAK,yCAAyC,KAAK,8BAA8B,gBAAgBH,eAAa;AAC9G,SAAK,oBAAoB,KAAK,sCAAsC;AACpE,SAAK,uCAAuC,OAAO,KAAK,UAAU;AAElE,SAAK,iDAAiD,KAAK,sCAAsC,gBAAgBC,cAAY;AAC7H,SAAK,8CAA8C,KAAK,sCAAsC,gBAAgBC,mBAAkB;AAChI,SAAK,4CAA4C,WAAW,KAAK,UAAU;AAC3E,SAAK,4CAA4C,QAAQ,KAAK,KAAK,UAAU;AAC7E,SAAK,4CAA4C,UAAU,KAAK,UAAU;EAC9E;EAEA,qBAAkB;AAEd,SAAK,8BAA8B,KAAK,mBAAmB,gBAAgBF,eAAa;AACxF,SAAK,oBAAoB,KAAK,2BAA2B;AACzD,SAAK,4BAA4B,OAAO;AAExC,SAAK,sCAAsC,KAAK,2BAA2B,gBAAgBC,cAAY;AACvG,SAAK,mCAAmC,KAAK,2BAA2B,gBAAgBC,mBAAkB;AAC1G,SAAK,iCAAiC,WAAW,KAAK,UAAU;AAChE,SAAK,iCAAiC,QAAQ,KAAK,KAAK,UAAU;AAClE,SAAK,iCAAiC,UAAU,KAAK,UAAU;AAG/D,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAE7E,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAG7E,SAAK,8BAA8B,KAAK,mBAAmB,gBAAgBF,eAAa;AACxF,SAAK,oBAAoB,KAAK,2BAA2B;AACzD,SAAK,4BAA4B,OAAO;AAExC,SAAK,sCAAsC,KAAK,2BAA2B,gBAAgBC,cAAY;AACvG,SAAK,mCAAmC,KAAK,2BAA2B,gBAAgBC,mBAAkB;AAC1G,SAAK,iCAAiC,WAAW,KAAK,UAAU;AAChE,SAAK,iCAAiC,QAAQ,KAAK,KAAK,UAAU;AAClE,SAAK,iCAAiC,UAAU,KAAK,UAAU;AAG/D,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAE7E,SAAK,kDAAkD,KAAK,uCAAuC,gBAAgBC,eAAa;AAChI,SAAK,gDAAgD,OAAO,KAAK;AACjE,SAAK,gDAAgD,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACpG,SAAK,gDAAgD,SAAS,QAAQ,KAAK,UAAU;AAErF,SAAK,4CAA4C,KAAK,iCAAiC,gBAAgBH,eAAa;AACpH,SAAK,oBAAoB,KAAK,yCAAyC;AACvE,SAAK,0CAA0C,OAAO,KAAK,UAAU;AAErE,SAAK,oDAAoD,KAAK,yCAAyC,gBAAgBC,cAAY;AACnI,SAAK,iDAAiD,KAAK,yCAAyC,gBAAgBC,mBAAkB;AACtI,SAAK,+CAA+C,WAAW,KAAK,UAAU;AAC9E,SAAK,+CAA+C,QAAQ,KAAK,KAAK,UAAU;AAChF,SAAK,+CAA+C,UAAU,KAAK,UAAU;AAG7E,SAAK,2BAA2B,KAAK,gBAAgB,gBAAgBF,eAAa;AAClF,SAAK,oBAAoB,KAAK,wBAAwB;AACtD,SAAK,yBAAyB,OAAO;AAErC,SAAK,mCAAmC,KAAK,wBAAwB,gBAAgBC,cAAY;AACjG,SAAK,gCAAgC,KAAK,wBAAwB,gBAAgBC,mBAAkB;AACpG,SAAK,8BAA8B,WAAW,KAAK,UAAU;AAC7D,SAAK,8BAA8B,QAAQ,KAAK,KAAK,UAAU;AAC/D,SAAK,8BAA8B,UAAU,KAAK,UAAU;AAG5D,SAAK,+CAA+C,KAAK,oCAAoC,gBAAgBC,eAAa;AAC1H,SAAK,6CAA6C,OAAO,KAAK;AAC9D,SAAK,6CAA6C,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,SAAK,6CAA6C,SAAS,QAAQ,KAAK,UAAU;AAElF,SAAK,yCAAyC,KAAK,8BAA8B,gBAAgBH,eAAa;AAC9G,SAAK,oBAAoB,KAAK,sCAAsC;AACpE,SAAK,uCAAuC,OAAO,KAAK,UAAU;AAElE,SAAK,iDAAiD,KAAK,sCAAsC,gBAAgBC,cAAY;AAC7H,SAAK,8CAA8C,KAAK,sCAAsC,gBAAgBC,mBAAkB;AAChI,SAAK,4CAA4C,WAAW,KAAK,UAAU;AAC3E,SAAK,4CAA4C,QAAQ,KAAK,KAAK,UAAU;AAC7E,SAAK,4CAA4C,UAAU,KAAK,UAAU;AAE1E,SAAK,+CAA+C,KAAK,oCAAoC,gBAAgBC,eAAa;AAC1H,SAAK,6CAA6C,OAAO,KAAK;AAC9D,SAAK,6CAA6C,WAAW,KAAK,UAAU,gBAAgB,MAAK;AACjG,SAAK,6CAA6C,SAAS,QAAQ,KAAK,UAAU;AAElF,SAAK,yCAAyC,KAAK,8BAA8B,gBAAgBH,eAAa;AAC9G,SAAK,oBAAoB,KAAK,sCAAsC;AACpE,SAAK,uCAAuC,OAAO,KAAK,UAAU;AAElE,SAAK,iDAAiD,KAAK,sCAAsC,gBAAgBC,cAAY;AAC7H,SAAK,8CAA8C,KAAK,sCAAsC,gBAAgBC,mBAAkB;AAChI,SAAK,4CAA4C,WAAW,KAAK,UAAU;AAC3E,SAAK,4CAA4C,QAAQ,KAAK,KAAK,UAAU;AAC7E,SAAK,4CAA4C,UAAU,KAAK,UAAU;EAC9E;;;;AC7wBE,IAAO,0BAAP,cAAuC,mBAAkB;EAE3D,YAAY,QAAQ,SAAS,SAAS,QAAQ,cAAa,GAAE;AACzD,UAAM,MAAM;AAEZ,SAAK,aAAa;AAElB,SAAK,YAAY,IAAI,8BAA6B;AAClD,SAAK,QAAQ,IAAI,0BAA0B,MAAM;AAEjD,SAAK,8BAA8B;AACnC,SAAK,mCAAmC;AACxC,SAAK,6BAA6B;AAClC,SAAK,kCAAkC;AAEvC,SAAK,sBAAsB;AAC3B,SAAK,qBAAqB;AAE1B,SAAK,oBAAoB;AACzB,SAAK,wBAAwB;AAC7B,SAAK,yBAAyB;AAC9B,SAAK,kBAAkB;AAEvB,SAAK,oBAAoB;AACzB,SAAK,oBAAoB;AACzB,SAAK,eAAe;AAEpB,SAAK,wBAAwB,YAAW;AACxC,SAAK,uBAAuB,YAAW;AACvC,SAAK,uBAAuB,YAAW;AACvC,SAAK,oBAAoB,YAAW;EACxC;EAEA,iBAAc;AACV,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,MAAM,yBAAyB,CAAC,EAAE,OAAO,KAAK,YAAY,YAAY,CAAC,EAAE,QAAQ,KAAK,YAAY,gBAAgB;IAC3H;AACA,SAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,wBAAwB;AAE/H,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,MAAM,yBAAyB,CAAC,EAAE,OAAO,KAAK,YAAY,YAAY,CAAC,EAAE,QAAQ,KAAK,YAAY,gBAAgB;IAC3H;AACA,SAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,wBAAwB;AAE/H,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,MAAM,sBAAsB,CAAC,EAAE,OAAO,KAAK,YAAY,SAAS,CAAC,EAAE,QAAQ,KAAK,YAAY,gBAAgB;IACrH;AACA,SAAK,MAAM,yBAAyB,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,qBAAqB;EAC7H;EAEA,WAAW,cAAc,gBAAc;AACnC,SAAK,MAAM,4BAA4B,eAAe,uBAAuB;EACjF;EAEA,2BAAwB;AACpB,QAAI,KAAK,eAAe,MAAM;AAC1B,WAAK,qBAAqB,QAAQ,KAAK,YAAY,WAAW;AAC9D,WAAK,qBAAqB,QAAQ,KAAK,YAAY,WAAW;AAC9D,WAAK,kBAAkB,QAAQ,KAAK,YAAY,QAAQ;IAC5D;EACJ;EAEA,YAAY,IAAE;AACV,SAAK,aAAa,EAAE;EACxB;EAEA,aAAa,IAAE;AACX,QAAI,yBAAyB;AAE7B,QAAI,KAAK,YAAY;AACjB,UAAI,IAAI,KAAK,WAAW,YAAY,cAAc,UAAU,EAAE,OAAO,CAAC;AAEtE,UAAI,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,8BAA8B;AAC3D,YAAI,wBAAwB,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,iCAAiC,IAAI,KAAK,UAAU;AAC7G,iCAAyB,KAAK,KAAK,CAAC,IAAI;MAC5C;IACJ;AAEA,QAAI,iBAAiB;AACrB,QAAI,KAAK,qBAAqB;AAC1B,uBAAiB;IACrB,WAAW,KAAK,+BAA+B,GAAG;AAC9C,UAAI,KAAK,oCAAoC,GAAG;AAC5C,yBAAiB,KAAK;MAC1B,OAAO;AACH,aAAK,oCAAoC;MAC7C;IACJ;AAEA,QAAI,KAAK,qBAAqB,KAAK,KAAK,oBAAoB,GAAG;AAC3D,UAAI,kBAAkB,GAAG;AACrB,aAAK,qBAAqB,QAAQ,KAAK,YAAY,WAAW;AAC9D,aAAK,qBAAqB,QAAQ,KAAK,YAAY,WAAW;AAC9D,aAAK,kBAAkB,QAAQ,KAAK,YAAY,QAAQ;AAExD,YAAI,cAAc,iBAAiB,KAAK,wBAAwB;AAEhE,aAAK,qBAAqB;AAE1B,YAAI,0BAA0B,KAAK,IAAI,IAAI,KAAK,YAAY,gBAAgB;AAE5E,gBAAQ,KAAK,mBAAmB;UAC5B,KAAK;AACD,iBAAK,qBAAqB,KAAK,iBAAiB,IAAI,KAAK,MAAM,KAAK,oBAAoB,0BAA0B,OAAO,OAAO,IAAI;AACpI,iBAAK,MAAM,yBAAyB,KAAK,iBAAiB,EAAE,OAAO,KAAK,qBAAqB,KAAK,iBAAiB,EAAE,QAAQ,KAAK,YAAY,gBAAgB;AAC9J;UACJ,KAAK;AACD,gBAAI,KAAK,oBAAoB,KAAK;AAC9B,qBAAO,KAAK,oBAAoB,KAAK;AACjC,qBAAK,qBAAqB;cAC9B;AACA,mBAAK,oBAAoB,OAAO,KAAK;YACzC;AAEA,gBAAI,KAAK,oBAAoB,MAAM;AAC/B,qBAAO,KAAK,oBAAoB,MAAO;AACnC,qBAAK,qBAAqB;cAC9B;AACA,mBAAK,oBAAoB,MAAM,KAAK;YACxC;AAEA,iBAAK,qBAAqB,KAAK,iBAAiB,IAAI,KAAK,MAAM,KAAK,oBAAoB,0BAA0B,OAAO,OAAO,IAAI;AACpI,iBAAK,MAAM,yBAAyB,KAAK,iBAAiB,EAAE,OAAO,KAAK,qBAAqB,KAAK,iBAAiB,EAAE,QAAQ,KAAK,YAAY,gBAAgB;AAC9J;UACJ,KAAK;AACD,gBAAI,KAAK,qBAAqB,GAAG;AAC7B,mBAAK,oBAAoB,IAAI;YACjC;AAEA,gBAAI,KAAK,YAAY,eAAe;AAChC,kBAAI,WAAW,KAAK,MAAM,KAAK,oBAAoB,0BAA0B,OAAO,OAAO,IAAI;AAC/F,kBAAI,aAAa,WAAW,KAAK,kBAAkB,KAAK,iBAAiB;AAEzE,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,qBAAK,kBAAkB,CAAC,IAAI,KAAK,OAAO,KAAK,kBAAkB,CAAC,IAAI,cAAc,0BAA0B,OAAO,OAAO,IAAI;AAC9H,qBAAK,kBAAkB,CAAC,IAAI,KAAK,IAAI,KAAK,kBAAkB,CAAC,GAAG,IAAI,uBAAuB;AAC3F,qBAAK,MAAM,sBAAsB,CAAC,EAAE,OAAO,KAAK,kBAAkB,CAAC,EAAE,QAAQ,KAAK,YAAY,gBAAgB;cAClH;YACJ,OAAO;AACH,mBAAK,kBAAkB,KAAK,iBAAiB,IAAI,KAAK,MAAM,KAAK,oBAAoB,0BAA0B,OAAO,OAAO,IAAI;AACjI,mBAAK,kBAAkB,KAAK,iBAAiB,IAAI,KAAK,IAAI,KAAK,kBAAkB,KAAK,iBAAiB,GAAG,IAAI,uBAAuB;AACrI,mBAAK,MAAM,sBAAsB,KAAK,iBAAiB,EAAE,OAAO,KAAK,kBAAkB,KAAK,iBAAiB,EAAE,QAAQ,KAAK,YAAY,gBAAgB;YAC5J;AACA;QACR;AAEA,aAAK,sBAAsB,qCAAqC,KAAK,sBAAsB,KAAK,sBAAsB,KAAK,iBAAiB;AAC5I,aAAK,YAAY,SAAS,KAAK,qBAAqB;MACxD,OAAO;AACH,gBAAQ,KAAK,mBAAmB;UAC5B,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,YAAY,KAAK,iBAAiB;AAC5E;UACJ,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,YAAY,KAAK,iBAAiB;AAC5E;UACJ,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,SAAS,KAAK,iBAAiB;AACzE;QACR;MACJ;IACJ;AAEA,QAAI,gBAAgB;AACpB,QAAI,KAAK,oBAAoB;AACzB,sBAAgB;IACpB,WAAW,KAAK,8BAA8B,GAAG;AAC7C,UAAI,KAAK,mCAAmC,GAAG;AAC3C,wBAAgB,KAAK;MACzB,OAAO;AACH,aAAK,mCAAmC;MAC5C;IACJ;AAEA,QAAI,iBAAiB,GAAG;AACpB,UAAI,cAAc;AAClB,UAAI,KAAK,iBAAiB;AACtB,sBAAc,KAAK,KAAK,aAAa,IAAI;AACzC,aAAK,kBAAkB;MAC3B,OAAO;AACH,sBAAc,gBAAgB,KAAK,UAAU,gCAAgC;MACjF;AAEA,WAAK,0BAA0B;AAC/B,UAAI,KAAK,IAAI,KAAK,sBAAsB,KAAK,GAAG;AAC5C,YAAI,YAAY;AAChB,gBAAQ,KAAK,cAAc;UACvB,KAAK;AACD,wBAAY,KAAK,YAAY;AAC7B;UACJ,KAAK;AACD,wBAAY,KAAK,YAAY;AAC7B;UACJ,KAAK;AACD,wBAAY,KAAK,YAAY;AAC7B;UACJ;AACI,wBAAY;QACpB;AACA,YAAI,KAAK,KAAK,KAAK,sBAAsB,IAAI,GAAG;AAC5C,eAAK,0BAA0B;AAC/B,eAAK,YAAY,KAAK,cAAc,YAAY,EAAE;QACtD,OAAO;AACH,eAAK,0BAA0B;AAC/B,eAAK,YAAY,KAAK,cAAc,YAAY,GAAG;QACvD;MACJ;IACJ,OAAO;AACH,WAAK,yBAAyB;AAC9B,WAAK,kBAAkB;IAC3B;EACJ;EAEA,oBAAiB;AACb,QAAI,KAAK,KAAK;AAEd,OAAG,qCAAqC,QAAQ,IAAI,KAAK,gBAAgB,KAAK,IAAI,CAAC;AACnF,OAAG,qCAAqC,QAAQ,IAAI,KAAK,kBAAkB,KAAK,MAAM,GAAG,mBAAmB,CAAC;AAC7G,OAAG,qCAAqC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,qBAAqB,KAAK,UAAU,wBAAwB,CAAC;AAE1J,OAAG,qCAAqC,QAAQ,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AAC5F,OAAG,qCAAqC,QAAQ,IAAI,KAAK,kBAAkB,KAAK,MAAM,GAAG,mBAAmB,CAAC;AAC7G,OAAG,qCAAqC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,qBAAqB,KAAK,UAAU,yBAAyB,CAAC;AAC3J,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,SAAG,+CAA+C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC/G,SAAG,+CAA+C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AACtH,SAAG,+CAA+C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC7G,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAClH,SAAG,+CAA+C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC;AAChH,SAAG,+CAA+C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC;AACvH,SAAG,+CAA+C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC7G,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAElH,SAAG,+CAA+C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAC3J,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAC/J,SAAG,+CAA+C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAC3J,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAE/J,SAAG,iCAAiC,CAAC,EAAE,QAAQ,IAAI,KAAK,YAAY,KAAK,MAAM,GAAG,CAAC,CAAC;AACpF,SAAG,iCAAiC,CAAC,EAAE,QAAQ,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAAC;AAC1H,SAAG,iCAAiC,CAAC,EAAE,UAAU,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,GAAG,KAAK,CAAC;IACjI;AAEA,OAAG,qCAAqC,QAAQ,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AAC5F,OAAG,qCAAqC,QAAQ,IAAI,KAAK,kBAAkB,KAAK,MAAM,GAAG,mBAAmB,CAAC;AAC7G,OAAG,qCAAqC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,qBAAqB,KAAK,UAAU,yBAAyB,CAAC;AAC3J,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,SAAG,+CAA+C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC/G,SAAG,+CAA+C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AACtH,SAAG,+CAA+C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC7G,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAClH,SAAG,+CAA+C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC;AAChH,SAAG,+CAA+C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC;AACvH,SAAG,+CAA+C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC7G,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAElH,SAAG,+CAA+C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAC3J,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAC/J,SAAG,+CAA+C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAC3J,SAAG,+CAA+C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,6CAA6C,CAAC,EAAE,QAAQ,CAAC;AAE/J,SAAG,iCAAiC,CAAC,EAAE,QAAQ,IAAI,KAAK,YAAY,KAAK,MAAM,GAAG,CAAC,CAAC;AACpF,SAAG,iCAAiC,CAAC,EAAE,QAAQ,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAAC;AAC1H,SAAG,iCAAiC,CAAC,EAAE,UAAU,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,GAAG,KAAK,CAAC;IACjI;AAEA,OAAG,kCAAkC,QAAQ,IAAI,KAAK,sBAAsB,KAAK,MAAM,CAAC,CAAC;AACzF,OAAG,kCAAkC,QAAQ,IAAI,KAAK,kBAAkB,KAAK,MAAM,GAAG,gBAAgB,CAAC;AACvG,OAAG,kCAAkC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,kBAAkB,KAAK,UAAU,yBAAyB,CAAC;AACrJ,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,SAAG,4CAA4C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC5G,SAAG,4CAA4C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AACnH,SAAG,4CAA4C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC1G,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC/G,SAAG,4CAA4C,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC;AAC7G,SAAG,4CAA4C,CAAC,EAAE,cAAc,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC;AACpH,SAAG,4CAA4C,CAAC,EAAE,KAAK,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAC1G,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,uBAAuB,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC;AAE/G,SAAG,4CAA4C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACrJ,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACzJ,SAAG,4CAA4C,CAAC,EAAE,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AACrJ,SAAG,4CAA4C,CAAC,EAAE,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,0CAA0C,CAAC,EAAE,QAAQ,CAAC;AAEzJ,SAAG,8BAA8B,CAAC,EAAE,QAAQ,IAAI,KAAK,YAAY,KAAK,MAAM,GAAG,CAAC,CAAC;AACjF,SAAG,8BAA8B,CAAC,EAAE,QAAQ,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC;AACpH,SAAG,8BAA8B,CAAC,EAAE,UAAU,IAAI,KAAK,qBAAqB,KAAK,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,GAAG,KAAK,CAAC;IAC3H;AAEA,OAAG,oCAAoC,QAAQ,IAAI,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC;AAChF,OAAG,oCAAoC,QAAQ,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,GAAG,oBAAoB,IAAI,CAAC;AACtH,OAAG,oCAAoC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,GAAG,oBAAoB,KAAK,CAAC;AAEzH,OAAG,kDAAkD,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC3G,OAAG,kDAAkD,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAClH,OAAG,kDAAkD,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AACzG,OAAG,kDAAkD,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC9G,OAAG,kDAAkD,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,EAAE,CAAC;AAC5G,OAAG,kDAAkD,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,EAAE,CAAC;AACnH,OAAG,kDAAkD,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AACzG,OAAG,kDAAkD,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAE9G,OAAG,kDAAkD,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAC3J,OAAG,kDAAkD,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAC/J,OAAG,kDAAkD,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAC3J,OAAG,kDAAkD,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAE/J,OAAG,oCAAoC,QAAQ,IAAI,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC;AAChF,OAAG,oCAAoC,QAAQ,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,GAAG,oBAAoB,IAAI,CAAC;AACtH,OAAG,oCAAoC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,GAAG,oBAAoB,KAAK,CAAC;AAEzH,OAAG,kDAAkD,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC3G,OAAG,kDAAkD,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAClH,OAAG,kDAAkD,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AACzG,OAAG,kDAAkD,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC9G,OAAG,kDAAkD,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,EAAE,CAAC;AAC5G,OAAG,kDAAkD,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,EAAE,CAAC;AACnH,OAAG,kDAAkD,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AACzG,OAAG,kDAAkD,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAE9G,OAAG,kDAAkD,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAC3J,OAAG,kDAAkD,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAC/J,OAAG,kDAAkD,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAC3J,OAAG,kDAAkD,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,gDAAgD,QAAQ,CAAC;AAE/J,OAAG,iCAAiC,QAAQ,IAAI,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC;AAC7E,OAAG,iCAAiC,QAAQ,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,GAAG,iBAAiB,IAAI,CAAC;AAChH,OAAG,iCAAiC,UAAU,IAAI,KAAK,oBAAoB,KAAK,MAAM,GAAG,GAAG,iBAAiB,KAAK,CAAC;AAEnH,OAAG,+CAA+C,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AACxG,OAAG,+CAA+C,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC/G,OAAG,+CAA+C,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AACtG,OAAG,+CAA+C,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAC3G,OAAG,+CAA+C,OAAO,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,EAAE,CAAC;AACzG,OAAG,+CAA+C,cAAc,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,EAAE,CAAC;AAChH,OAAG,+CAA+C,KAAK,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AACtG,OAAG,+CAA+C,UAAU,IAAI,KAAK,sBAAsB,KAAK,MAAM,GAAG,CAAC,CAAC;AAE3G,OAAG,+CAA+C,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,6CAA6C,QAAQ,CAAC;AACrJ,OAAG,+CAA+C,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,6CAA6C,QAAQ,CAAC;AACzJ,OAAG,+CAA+C,QAAQ,IAAI,KAAK,cAAc,KAAK,MAAM,GAAG,6CAA6C,QAAQ,CAAC;AACrJ,OAAG,+CAA+C,UAAU,IAAI,KAAK,gBAAgB,KAAK,MAAM,GAAG,6CAA6C,QAAQ,CAAC;EAE7J;EAEA,uBAAuB,gBAAgB,OAAO,OAAK;AAC/C,QAAI,KAAK,UAAS,KAAM,SAAS,GAAG;AAChC,UAAI,SAAS,GAAG;AACZ,gBAAQ,gBAAgB;UACpB,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,YAAY,KAAK;AAC3D,iBAAK,wBAAwB,KAAK,YAAY;AAC9C;UACJ,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,YAAY,KAAK;AAC3D,iBAAK,wBAAwB,KAAK,YAAY;AAC9C;UACJ,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,SAAS,KAAK;AACxD,iBAAK,wBAAwB,KAAK,YAAY;AAC9C;QACR;AAEA,aAAK,mCAAmC,KAAK,UAAU;AACvD,aAAK,oBAAoB;AACzB,aAAK,oBAAoB;MAC7B;AAEA,WAAK,8BAA8B;IACvC;EACJ;EAEA,sBAAsB,OAAO,OAAK;AAC9B,QAAI,KAAK,UAAS,KAAM,SAAS,GAAG;AAChC,UAAI,SAAS,GAAG;AACZ,aAAK,kCAAkC,KAAK,UAAU;MAC1D;AAEA,WAAK,6BAA6B;AAElC,WAAK,eAAe;IACxB;EACJ;EAEA,qBAAqB,gBAAgB,OAAO,MAAM,SAAO;AACrD,QAAI,KAAK,UAAS,KAAM,CAAC,SAAS;AAC9B,UAAI,SAAS;AACT,gBAAQ,gBAAgB;UACpB,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,YAAY,KAAK;AAC3D,iBAAK,wBAAwB,KAAK,YAAY;AAC9C;UACJ,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,YAAY,KAAK;AAC3D,iBAAK,wBAAwB,KAAK,YAAY;AAC9C;UACJ,KAAK;AACD,iBAAK,oBAAoB,KAAK,YAAY,SAAS,KAAK;AACxD,iBAAK,wBAAwB,KAAK,YAAY;AAC9C;QACR;AAEA,aAAK,oBAAoB;AACzB,aAAK,oBAAoB;AACzB,aAAK,eAAe,KAAK,UAAU,0BAA0B;MACjE,OAAO;AACH,aAAK,iBAAiB,KAAK,UAAU,gBAAgB;MACzD;AAEA,WAAK,sBAAsB;IAC/B;EACJ;EAEA,oBAAoB,OAAO,MAAM,SAAO;AACpC,QAAI,KAAK,UAAS,KAAM,CAAC,SAAS;AAC9B,UAAI,SAAS;AACT,aAAK,eAAe,KAAK,UAAU,0BAA0B;MACjE,OAAO;AACH,aAAK,iBAAiB,KAAK,UAAU,eAAe;MACxD;AAEA,WAAK,qBAAqB;AAC1B,WAAK,eAAe;IACxB;EACJ;EAEA,YAAY,gBAAgB,OAAK;AAC7B,QAAI,KAAK,UAAS,GAAI;AAClB,WAAK,qBAAqB,QAAQ,KAAK,YAAY,WAAW;AAC9D,WAAK,qBAAqB,QAAQ,KAAK,YAAY,WAAW;AAC9D,WAAK,kBAAkB,QAAQ,KAAK,YAAY,QAAQ;AAExD,cAAQ,gBAAgB;QACpB,KAAK;AACD,eAAK,qBAAqB,KAAK,IAAI,KAAK,YAAY,mBAAmB,KAAK;AAC5E,eAAK,MAAM,yBAAyB,KAAK,EAAE,OAAO,KAAK,qBAAqB,KAAK,EAAE,QAAQ,KAAK,YAAY,gBAAgB;AAC5H;QACJ,KAAK;AACD,eAAK,qBAAqB,KAAK,IAAI,KAAK,YAAY,mBAAmB,KAAK;AAC5E,eAAK,MAAM,yBAAyB,KAAK,EAAE,OAAO,KAAK,qBAAqB,KAAK,EAAE,QAAQ,KAAK,YAAY,gBAAgB;AAC5H;QACJ,KAAK;AACD,eAAK,kBAAkB,KAAK,IAAI,KAAK,YAAY,gBAAgB,KAAK;AACtE,eAAK,MAAM,sBAAsB,KAAK,EAAE,OAAO,KAAK,kBAAkB,KAAK,EAAE,QAAQ,KAAK,YAAY,gBAAgB;AACtH;MAER;AAEA,WAAK,sBAAsB,qCAAqC,KAAK,sBAAsB,KAAK,sBAAsB,KAAK,iBAAiB;AAC5I,WAAK,YAAY,SAAS,KAAK,qBAAqB;IACxD;EACJ;EAEA,kBAAe;AACX,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,sBAAsB,CAAC;IAChC;EACJ;EAEA,sBAAsB,OAAK;AACvB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,WAAK,YAAY,OAAO,CAAC;IAC7B;EACJ;EAEA,WAAW,OAAK;AACZ,QAAI,KAAK,UAAS,GAAI;AAClB,UAAI,eAAe;AACnB,cAAQ,OAAO;QACX,KAAK;AACD,yBAAe,KAAK,YAAY;AAChC;QACJ,KAAK;AACD,yBAAe,KAAK,YAAY;AAChC;QACJ,KAAK;AACD,yBAAe,KAAK,YAAY;AAChC;QACJ;AACI,yBAAe;MACvB;AAEA,WAAK,YAAY,OAAO,YAAY;IACxC;EACJ;EAEA,YAAY,OAAO,MAAI;AACnB,WAAO,KAAK,gBAAgB,MAAM,EAAE;AAEpC,YAAQ,OAAO;MACX,KAAK;AACD,aAAK,YAAY,2BAA2B;AAC5C,aAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,wBAAwB;AAC/H;MACJ,KAAK;AACD,aAAK,YAAY,2BAA2B;AAC5C,aAAK,MAAM,4BAA4B,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,wBAAwB;AAC/H;MACJ,KAAK;AACD,aAAK,YAAY,wBAAwB;AACzC,aAAK,MAAM,yBAAyB,OAAO,KAAK,UAAU,kBAAkB,OAAO,KAAK,YAAY,qBAAqB;AACzH;IACR;EACJ;EAEA,kBAAkB,MAAI;AAClB,SAAK,eAAe,KAAK,UAAU,0BAA0B;EACjE;EAEA,oBAAoB,MAAM,eAAa;AACnC,SAAK,iBAAiB,aAAa;EACvC;;;;AC1fE,IAAO,uBAAP,cAAoC,aAAY;EAElD,cAAA;AACI,UAAK;AAEL,SAAK,gBAAgB;AACrB,SAAK,yBAAyB;AAC9B,SAAK,0BAA0B;AAC/B,SAAK,iCAAiC;AAEtC,SAAK,qCAAqC;AAC1C,SAAK,4BAA4B;AACjC,SAAK,4BAA4B;EACrC;;AAGE,IAAO,iBAAP,MAAqB;EAEvB,YAAY,SAAS,QAAQ,cAAa,GAAE;AACxC,SAAK,aAAa;AAClB,SAAK,mBAAmB;AAExB,SAAK,iBAAiB,IAAI,YAAY,KAAK,GAAG,MAAM;AACpD,SAAK,eAAe,0CAA0C,MAAM,KAAK,sBAAsB,KAAK,IAAI,CAAC;AAEzG,SAAK,YAAY,IAAI,qBAAoB;AACzC,SAAK,YAAY;AAEjB,SAAK,aAAa,CAAA;AAElB,SAAK,uBAAuB;AAC5B,SAAK,sBAAsB;AAC3B,SAAK,mBAAmB;AAExB,SAAK,mBAAmB;AACxB,SAAK,qBAAqB;AAE1B,SAAK,yBAAyB;AAE9B,SAAK,aAAa;AAElB,SAAK,2BAA2B;AAEhC,SAAK,WAAW;AAEhB,SAAK,YAAY;AAEjB,SAAK,eAAe;EACxB;EAEA,mBAAmB,cAAY;AAC3B,QAAI,CAAC,KAAK,YAAY;AAClB,WAAK,mBAAmB;IAC5B,WAAW,KAAK,qBAAqB,IAAI,YAAY,GAAG;AACpD,WAAK,qBAAqB,KAAK,qBAAqB,oBAAoB,YAAY;AACpF,WAAK,qBAAoB;IAC7B,OAAO;AACH,cAAQ,KAAK,mEAAmE,YAAY;IAChG;EACJ;EAEA,UAAO;AACH,QAAI,KAAK,eAAe,UAAS,GAAI;AACjC,WAAK,WAAW;IACpB;EACJ;EAEA,WAAW,SAAO;AACd,SAAK,eAAe,WAAW,OAAO;EAC1C;EAEA,YAAS;AACL,WAAO,KAAK,eAAe,UAAS;EACxC;EAEA,MAAM,cAAc,QAAQ,mBAAiB;AACzC,SAAK,kBAAkB,QAAQ,gBAAgB,KAAK,SAAS;AAC7D,SAAK,iBAAiB,QAAQ,eAAe,KAAK,SAAS;AAC3D,QAAI,KAAK,UAAU,uBAAuB,eAAe,OAAO;AAC5D,WAAK,aAAa,KAAK;IAC3B,WAAW,KAAK,UAAU,uBAAuB,eAAe,MAAM;AAClE,WAAK,aAAa,KAAK;IAC3B;AAEA,SAAK,aAAa;AAElB,SAAK,YAAY;AAEjB,SAAK,eAAe,MAAM,cAAc,MAAM;AAE9C,SAAK,uBAAuB;AAC5B,SAAK,sBAAsB,KAAK,gCAA+B;AAC/D,SAAK,mBAAmB,KAAK,+BAA8B;AAE3D,QAAI,KAAK,gCAA+B,IAAK,GAAG;AAC5C,WAAK,qBAAqB,KAAK,qBAAqB,oBAAoB,KAAK,iBAAiB,CAAC,CAAC;IACpG;AAEA,QAAI,KAAK,oBAAoB,MAAM;AAC/B,UAAI,KAAK,qBAAqB,IAAI,KAAK,gBAAgB,GAAG;AACtD,aAAK,qBAAqB,KAAK,qBAAqB,oBAAoB,KAAK,gBAAgB;MACjG,OAAO;AACH,gBAAQ,KAAK,mEAAmE,KAAK,gBAAgB;MACzG;IACJ;AAEA,SAAK,mBAAkB;EAC3B;EAEA,OAAO,IAAE;AACL,SAAK,eAAe,OAAO,EAAE;AAE7B,QAAI,KAAK,gCAA+B,KAAM,KAAK,uBAAuB,KAAK,UAAU;AACrF,WAAK,0BAAyB;IAClC;AAEA,QAAI,KAAK,eAAe,UAAS,KAAM,KAAK,gCAA+B,IAAK,GAAG;AAC/E,UAAI,KAAK,UAAU,2BAA2B,MAAM;AAChD,aAAK,4BAA4B;AACjC,YAAI,KAAK,2BAA2B,KAAK,UAAU,yBAAyB;AACxE,eAAK,2BAA2B;AAChC,eAAK,0BAAyB;QAClC;MACJ;AAEA,UAAI,KAAK,kBAAkB;AACvB,aAAK,iBAAiB,OAAO,EAAE;MACnC;AAEA,UAAI,KAAK,UAAU,gCAAgC;AAC/C,aAAK,6BAA6B,EAAE;MACxC;IACJ;AAEA,SAAK,+BAA8B;AAEnC,SAAK,6BAA4B;EACrC;EAEA,qBAAkB;AACd,QAAI,eAAe,IAAI,yBAAwB;AAC/C,iBAAa,4BAA4B,KAAK,iBAAiB,KAAK,IAAI;AACxE,iBAAa,4BAA4B,KAAK,iBAAiB,KAAK,IAAI;AAExE,SAAK,WAAW,qBAAqB,IAAI,IAAI,IAAI,mBAAmB,cAAc,KAAK,SAAS;AAChG,SAAK,WAAW,qBAAqB,MAAM,IAAI,IAAI,kCAAkC,cAAc,KAAK,YAAY,KAAK,SAAS;AAClI,SAAK,WAAW,qBAAqB,IAAI,IAAI,IAAI,gCAAgC,cAAc,KAAK,YAAY,KAAK,SAAS;AAC9H,SAAK,WAAW,qBAAqB,SAAS,IAAI,IAAI,wBAAwB,cAAc,KAAK,YAAY,KAAK,SAAS;AAE3H,aAAS,UAAU,KAAK,YAAY;AAChC,UAAI,UAAU,MAAM;AAChB,eAAO,MAAM,KAAK,eAAe,gBAAe,GAAI,KAAK,SAAS;AAClE,eAAO,WAAW,KAAK;AACvB,eAAO,2CAA2C,MAAM,KAAK,gBAAgB,KAAK,IAAI,CAAC;MAC3F;IACJ;AAEA,SAAK,qBAAoB;EAC7B;EAEA,uBAAoB;AAChB,QAAI,KAAK,gCAA+B,KAAM,GAAG;AAC7C;IACJ,WAAW,KAAK,sBAAsB,MAAM;AACxC,WAAK,mBAAmB,KAAK,+BAA8B;AAC3D,WAAK,qBAAqB,KAAK,qBAAqB,oBAAoB,KAAK,iBAAiB,CAAC,CAAC;IACpG;AAEA,QAAI,aAAa;AACjB,QAAI,KAAK,oBAAoB,MAAM;AAC/B,mBAAa,KAAK,iBAAiB,UAAS;IAChD;AAEA,QAAI,KAAK,mBAAmB,QAAO,KAAM,KAAK,YAAY;AACtD,WAAK,mBAAmB,KAAK,WAAW,KAAK,mBAAmB,QAAO,CAAE;IAC7E,OAAO;AACH,WAAK,mBAAmB,KAAK,WAAW,qBAAqB,IAAI;IACrE;AAEA,SAAK,iBAAiB,oBAAoB,KAAK,oBAAoB,KAAK,mBAAkB,CAAE;AAC5F,SAAK,iBAAiB,UAAS,EAAG,WAAW,UAAU;AAEvD,QAAI,cAAc,MAAM;AACpB,iBAAW,WAAW,KAAK;IAC/B;AAEA,SAAK,iBAAiB,WAAW,KAAK,eAAe,UAAS,CAAE;EACpE;EAEA,4BAAyB;AACrB,SAAK,mBAAmB,KAAK,+BAA8B;AAC3D,SAAK,sBAAsB,KAAK,gCAA+B;AAE/D,QAAI,KAAK,gCAA+B,IAAK,GAAG;AAC5C,UAAI,KAAK,sBAAsB,KAAK,iBAAiB,YAAY,KAAK,mBAAmB,QAAO,CAAE,GAAG;AACjG,aAAK,qBAAqB,KAAK,qBAAqB,oBAAoB,KAAK,mBAAmB,QAAO,CAAE;MAC7G,OAAO;AACH,aAAK,qBAAqB,KAAK,qBAAqB,oBAAoB,KAAK,iBAAiB,CAAC,CAAC;MACpG;AAEA,WAAK,qBAAoB;IAC7B,OAAO;AACH,WAAK,qBAAqB;AAC1B,UAAI,KAAK,kBAAkB;AACvB,aAAK,iBAAiB,WAAW,KAAK;AACtC,aAAK,mBAAmB;MAC5B;IACJ;AAEA,SAAK,WAAW;EACpB;EAEA,iCAA8B;AAC1B,QAAI,KAAK,YAAY;AACjB,UAAK,KAAK,WAAW,cAAc,gBAAgB,aAAa,EAAE,aAAY,KAAM,KAAK,WAAW,cAAc,gBAAgB,UAAU,EAAE,UAAS,KAClJ,KAAK,WAAW,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,KAAK,WAAW,cAAc,gBAAgB,aAAa,EAAE,UAAS,GAAK;AACxJ,aAAK,kBAAiB;MAC1B;IACJ;EACJ;EAEA,oBAAiB;AACb,SAAK,eAAe,iBAAgB;EACxC;EAEA,sBAAsB,SAAO;AACzB,aAAS,UAAU,KAAK,YAAY;AAChC,UAAI,UAAU,MAAM;AAChB,eAAO,WAAW,KAAK;MAC3B;IACJ;AAEA,QAAI,KAAK,kBAAkB;AACvB,UAAI,KAAK,gCAA+B,IAAK,GAAG;AAC5C,aAAK,iBAAiB,WAAW,OAAO;MAC5C,OAAO;AACH,aAAK,iBAAiB,WAAW,KAAK;MAC1C;IACJ;AAEA,QAAI,SAAS;AACT,WAAK,0BAAyB;IAClC;EACJ;EAEA,6BAA6B,IAAE;AAC3B,QAAI,KAAK,eAAe,CAAC,KAAK,UAAU,4BAA4B,KAAK,WAAW,cAAc,KAAK,UAAU,wBAAwB,EAAE,UAAS,IAAK;AACrJ,UAAI,IAAI,KAAK,WAAW,YAAY,cAAc,UAAU,EAAE,OAAO,CAAC;AACtE,UAAI,IAAI,KAAK,WAAW,YAAY,cAAc,UAAU,EAAE,OAAO,CAAC;AACtE,UAAI,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,iCAAiC,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,+BAA+B;AAC1H,aAAK,0BAA0B;AAC/B,eAAO,KAAK,yBAAyB,KAAK,UAAU,uBAAuB;AACvE,eAAK,0BAA0B,KAAK,UAAU;AAC9C,eAAK,gBAAgB,KAAK,KAAK,CAAC,CAAC;QACrC;MACJ,OAAO;AACH,aAAK,yBAAyB,KAAK,UAAU;MACjD;IACJ,OAAO;AACH,WAAK,yBAAyB,KAAK,UAAU;IACjD;EACJ;EAEA,gBAAgB,QAAM;AAClB,QAAI,KAAK,gCAA+B,KAAM,GAAG;AAC7C;IACJ;AAEA,QAAI,gBAAgB,KAAK,kBAAkB,KAAK,kBAAkB;AAClE,QAAI,iBAAiB,GAAG;AAEpB,UAAI,aAAc,gBAAgB,UAAU,KAAK,iBAAiB,SAAU,KAAK,iBAAiB,UAAU,KAAK,iBAAiB;AAClI,UAAI,KAAK,qBAAqB,IAAI,KAAK,iBAAiB,QAAQ,CAAC,GAAG;AAChE,aAAK,qBAAqB,KAAK,qBAAqB,oBAAoB,KAAK,iBAAiB,QAAQ,CAAC;AACvG,aAAK,qBAAoB;MAC7B,OAAO;AACH,aAAK,0BAAyB;MAClC;IACJ,OAAO;AACH,WAAK,0BAAyB;IAClC;EACJ;EAEA,qBAAkB;AACd,QAAI,cAAc;AAClB,QAAI,SAAS,KAAK,kBAAkB,KAAK,kBAAkB,IAAI,GAAG,SAAQ;AAC1E,QAAIE,UAAU,KAAK,gCAA+B,EAAI,SAAQ;AAC9D,WAAO,MAAM,SAASA,QAAO,QAAQ;AACjC,cAAQ,IAAI,OAAO,KAAK;IAC5B;AAEA,kBAAc,YAAY,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,OAAOA,OAAM,EAAE,OAAO,GAAG;AAE/E,WAAO;EACX;EAEA,kBAAkB,UAAQ;AACtB,QAAI,gBAAgB,KAAK,iBAAiB,QAAQ,SAAS,QAAO,CAAE;AACpE,WAAO;EACX;EAEA,+BAA4B;AACxB,aAAS,YAAY,KAAK,qBAAqB,yBAAwB,GAAI;AACvE,eAAS,yBAAyB,KAAK;IAC3C;AAEA,QAAI,KAAK,eAAe,UAAS,KAAM,KAAK,oBAAoB;AAC5D,WAAK,mBAAmB,yBAAyB,IAAI;IACzD;EACJ;EAEA,mBAAgB;AACZ,SAAK,UAAU,0BAA0B,KAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK,iBAAiB,KAAK,IAAI,CAAC;EAC/G;EAEA,mBAAgB;AACZ,SAAK,UAAU,0BAA0B,KAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK,iBAAiB,KAAK,IAAI,CAAC;EAC/G;EAEA,mBAAgB;AACZ,QAAI,KAAK,kBAAkB;AACvB,WAAK,iBAAiB,gBAAe;IACzC;EACJ;EAEA,mBAAgB;AACZ,QAAI,KAAK,kBAAkB;AACvB,WAAK,iBAAiB,gBAAe;IACzC;EACJ;EAEA,mBAAgB;AACZ,QAAI,KAAK,kBAAkB;AACvB,WAAK,iBAAiB,gBAAe;IACzC;EACJ;EAEA,mBAAgB;AACZ,QAAI,KAAK,kBAAkB;AACvB,WAAK,iBAAiB,gBAAe;IACzC;EACJ;EAEA,UAAO;AACH,SAAK,eAAe;AAEpB,aAAS,UAAU,KAAK,YAAY;AAChC,aAAO,QAAO;IAClB;AAEA,SAAK,eAAe,QAAO;EAC/B;EAEA,cAAW;AACP,WAAO,KAAK;EAChB;EAGA,kCAA+B;AAC3B,WAAO,KAAK,+BAA8B,EAAG;EACjD;EAEA,iCAA8B;AAC1B,QAAI,QAAQ,KAAK,qBAAqB,0BAAyB;AAE/D,QAAI,aAAa,CAAA;AACjB,aAAS,QAAQ,OAAO;AACpB,UAAI,WAAW,KAAK,qBAAqB,oBAAoB,IAAI;AACjE,UAAI,SAAS,gBAAe,GAAI;AAC5B,mBAAW,KAAK,IAAI;MACxB;IACJ;AAEA,WAAO;EACX;;;;ApB5XE,IAAO,wBAAP,cAAqCC,YAAS;EAChD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,eAAeC,WAAS,KAAK,CAAC,QAAQ,QAAQ,OAAO,GAAG,MAAM;IAC9D,gBAAgBA,WAAS,KAAK,KAAK;IACnC,yBAAyBA,WAAS,KAAK,KAAK;IAC5C,iCAAiCA,WAAS,KAAK,IAAI;IAEnD,qCAAqCA,WAAS,KAAK,KAAK;IACxD,uBAAuBA,WAAS,OAAO,EAAE;;IACzC,uBAAuBA,WAAS,OAAO,EAAE;;IACzC,2BAA2BA,WAAS,KAAK,KAAK;IAC9C,uCAAuCA,WAAS,KAAK,KAAK;;EAG9D,OAAI;AAKA,SAAK,OAAO,gBAAgB,8BAA8B;AAE1D,SAAK,YAAY,IAAI,eAAe,KAAK,MAAM;AAE/C,kBAAc,oCAAoC,MAAM,SAAU,cAAY;AAC1E,WAAK,UAAU,mBAAmB,YAAY;IAClD,EAAE,KAAK,IAAI,GAAG,KAAK,MAAM;AAEzB,kBAAc,yBAAyB,MAAM,WAAA;AACzC,WAAK,UAAU,QAAO;IAC1B,EAAE,KAAK,IAAI,GAAG,KAAK,MAAM;AAEzB,SAAK,aAAa;EACtB;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,SAAS,IAAI,qBAAoB;AACrC,aAAO,eAAe,CAAC,MAAM,QAAQ,OAAO,EAAE,KAAK,aAAa;AAChE,aAAO,gBAAgB,KAAK;AAC5B,aAAO,yBAAyB,KAAK;AACrC,aAAO,0BAA0B;AACjC,aAAO,iCAAiC,KAAK;AAC7C,aAAO,kBAAkB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,aAAa,MAAK;AACpF,aAAO,iBAAiB,QAAQ,oBAAoB,KAAK,MAAM,EAAE,OAAO,MAAK;AAE7E,aAAO,qCAAqC,KAAK;AACjD,aAAO,4BAA4B,SAAU,mBAAmB,mBAAiB;AAC7E,sBAAc,gBAAgB,KAAK,uBAAuB,KAAK,uCAAuC,MAAM,mBAAmB,mBAAmB,KAAK,MAAM;MACjK,EAAE,KAAK,IAAI;AACX,aAAO,4BAA4B,SAAU,mBAAmB,mBAAiB;AAC7E,sBAAc,gBAAgB,KAAK,uBAAuB,mBAAmB,mBAAmB,KAAK,MAAM;MAC/G,EAAE,KAAK,IAAI;AAEX,WAAK,UAAU,MAAM,KAAK,QAAQ,QAAQ,QAAQ,qBAAqB,KAAK,MAAM,CAAC;AAEnF,WAAK,yBAAyB;AAE9B,WAAK,aAAa;AAClB,WAAK,iBAAiB;IAC1B;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,YAAY;AACjB,YAAI,KAAK,gBAAgB;AACrB,eAAK,iBAAiB;AACtB,cAAI,KAAK,2BAA2B;AAChC,0BAAc,gBAAgB,KAAK,uBAAuB,KAAK,uCAAuC,OAAO,QAAW,QAAW,KAAK,MAAM;UAClJ;QACJ;AAEA,YAAI,KAAK,0BAA0B,MAAM;AACrC,eAAK,UAAU,WAAW,KAAK;AAC/B,eAAK,UAAU,WAAW,KAAK,sBAAsB;AAErD,eAAK,yBAAyB;QAClC;AAEA,aAAK,UAAU,OAAO,EAAE;MAC5B;IACJ,WAAW,KAAK,YAAY;AACxB,UAAI,KAAK,0BAA0B,MAAM;AACrC,aAAK,yBAAyB,KAAK,UAAU,UAAS;MAC1D;AAEA,UAAI,KAAK,UAAU,UAAS,GAAI;AAC5B,aAAK,UAAU,WAAW,KAAK;MACnC;IACJ;EACJ;EAEA,eAAY;AACR,QAAI,KAAK,YAAY;AACjB,UAAI,KAAK,0BAA0B,MAAM;AACrC,aAAK,yBAAyB,KAAK,UAAU,UAAS;MAC1D;AAEA,UAAI,KAAK,UAAU,UAAS,GAAI;AAC5B,aAAK,UAAU,WAAW,KAAK;MACnC;IACJ;EACJ;EAEA,YAAS;AACL,SAAK,UAAU,QAAO;AAEtB,kBAAc,uCAAuC,MAAM,KAAK,MAAM;AACtE,kBAAc,4BAA4B,MAAM,KAAK,MAAM;EAC/D;;;;AqBpHJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAG9B,IAAO,mCAAP,cAAgDC,YAAS;EAC3D,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,uBAAuBC,WAAS,OAAO,EAAE;IACzC,uCAAuCA,WAAS,KAAK,IAAI;;EAG7D,QAAK;AACD,SAAK,iBAAiB;EAC1B;EAEA,OAAO,IAAE;AACL,QAAI,KAAK,gBAAgB;AACrB,WAAK,iBAAiB;AACtB,oBAAc,gBAAgB,KAAK,uBAAuB,KAAK,uCAAuC,OAAO,QAAW,QAAW,KAAK,MAAM;IAClJ;EACJ;;;;AChBE,IAAO,kBAAP,MAAsB;EAExB,YAAY,QAAQ,cAAc,4BAA4B,eAAe,SAAS,QAAQ,cAAa,GAAE;AACzG,SAAK,YAAY;AACjB,SAAK,mBAAmB;AACxB,SAAK,gCAAgC;AAErC,SAAK,gBAAgB,KAAK;AAC1B,QAAI,KAAK,kBAAkB;AACvB,WAAK,gBAAgB,QAAQ,kBAAkB,MAAM;IACzD;AACA,SAAK,oBAAoB;AAEzB,QAAI,qBAAqB,KAAK,uBAAsB;AAEpD,QAAI,gBAAgB,IAAI;AACpB,UAAI,aAAa,KAAK,UAAU,WAAU;AAC1C,UAAI,cAAc,IAAI;AAClB,aAAK,0BAA0B,mBAAmB,OAAO,UAAU;MACvE,OAAO;AACH,aAAK,0BAA0B,mBAAmB,OAAO,KAAK,UAAU,SAAQ,CAAE;MACtF;IACJ,OAAO;AACH,WAAK,0BAA0B,mBAAmB,OAAO,YAAY;IACzE;AAEA,SAAK,YAAY;EACrB;EAEA,QAAK;AACD,QAAI,mBAAmB,KAAK,wBAAwB,KAAK,uBAAuB;AAEhF,YAAQ,qBAAqB,KAAK,SAAS,EAAE,IAAI,gBAAgB;AACjE,QAAI,KAAK,+BAA+B;AACpC,oBAAc,yBAAyB,KAAK,yBAAyB,KAAK,SAAS;IACvF;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,qBAAqB,KAAK,SAAS,EAAE,wBAAwB,KAAK,uBAAuB,GAAG;AACpG,UAAI,KAAK,kBAAkB;AACvB,aAAK,gBAAgB,QAAQ,kBAAkB,KAAK,SAAS;MACjE;AAEA,UAAI,KAAK,qBAAqB,KAAK,eAAe;AAC9C,aAAK,oBAAoB,KAAK;AAC9B,YAAI,KAAK,eAAe;AACpB,cAAI,QAAQ,KAAK,gBAAgB,KAAK,aAAa;AACnD,kBAAQ,qBAAqB,KAAK,SAAS,EAAE,IAAI,KAAK,yBAAyB,OAAO,IAAI;QAC9F,OAAO;AACH,cAAI,QAAQ,KAAK,iBAAgB;AACjC,kBAAQ,qBAAqB,KAAK,SAAS,EAAE,IAAI,KAAK,yBAAyB,OAAO,IAAI;QAC9F;MACJ;AAEA,UAAI,KAAK,eAAe;AACpB,aAAK,mBAAmB,KAAK,eAAe,QAAQ,qBAAqB,KAAK,SAAS,EAAE,IAAI,KAAK,uBAAuB,CAAC;MAC9H;IACJ;EACJ;;;;AC9DJ,SAAS,kBAAAC,uBAAsB;AAIzB,IAAO,uBAAP,cAAoC,gBAAe;EAErD,YAAY,QAAQ,cAAc,4BAA4B,eAAa;AACvE,UAAM,QAAQ,cAAc,4BAA4B,aAAa;EACzE;EAEA,yBAAsB;AAClB,QAAI,gBAAgB;AACpB,WAAO;EACX;EAEA,wBAAwB,cAAY;AAChC,WAAO,IAAI,eAAe,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,QAAW,KAAK,SAAS;EACzH;EAEA,gBAAgB,QAAM;AAClB,QAAI,cAAc,KAAK,qBAAqB,MAAM;AAClD,WAAO;EACX;EAEA,mBAAgB;AACZ,WAAO;EACX;EAEA,mBAAmB,QAAQ,OAAK;AAC5B,QAAI,cAAc;AAElB,QAAI,QAAQ,OAAO,gBAAgBC,eAAc;AACjD,QAAI,OAAO;AACP,YAAM,MAAM,CAAC,IAAI;IACrB;EACJ;EAEA,qBAAqB,QAAM;AACvB,QAAI,cAAc,KAAK,iBAAgB;AAEvC,QAAI,QAAQ,OAAO,gBAAgBA,eAAc;AACjD,QAAI,OAAO;AACP,oBAAc,MAAM,MAAM,CAAC;IAC/B;AAEA,WAAO;EACX;;;;AC9CJ,SAAS,kBAAAC,uBAAsB;AAQzB,IAAO,iBAAP,cAA8B,gBAAe;EAE/C,YAAY,YAAY,QAAQ,cAAc,4BAA4B,eAAe,QAAM;AAC3F,UAAM,QAAQ,cAAc,4BAA4B,eAAe,MAAM;AAC7E,SAAK,gBAAgB;EACzB;EAEA,yBAAsB;AAClB,QAAI,gBAAgB;AAEpB,QAAI,KAAK,iBAAiB,GAAG;AACzB,sBAAgB;IACpB,OAAO;AACH,sBAAgB;IACpB;AAEA,WAAO;EACX;EAEA,wBAAwB,cAAY;AAChC,WAAO,IAAI,iBAAiB,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,KAAK,GAAG,KAAK,OAAO,QAAW,KAAK,SAAS;EAChI;EAEA,gBAAgB,QAAM;AAClB,QAAI,QAAQ;AAEZ,QAAI,aAAa,KAAK,eAAe,MAAM;AAC3C,QAAI,YAAY;AACZ,UAAI,KAAK,iBAAiB,GAAG;AACzB,gBAAQ,WAAW,eAAe,UAAU;MAChD,OAAO;AACH,gBAAQ,WAAW,eAAe,WAAW,SAAS,UAAU,CAAC;MACrE;IACJ,OAAO;AACH,cAAQ,KAAK,iBAAgB;IACjC;AAEA,WAAO;EACX;EAEA,mBAAgB;AACZ,WAAO,YAAW;EACtB;EAEA,mBAAmB,QAAQ,OAAK;AAC5B,QAAI,QAAQ;AAEZ,QAAI,KAAK,iBAAiB,GAAG;AACzB,cAAQ,WAAW,eAAe,KAAK;IAC3C,OAAO;AACH,cAAQ,WAAW,SAAS,WAAW,eAAe,KAAK,CAAC;IAChE;AAEA,QAAI,QAAQ,OAAO,gBAAgBC,eAAc;AACjD,QAAI,SAAS,MAAM;AACf,YAAM,MAAM,CAAC,IAAI,MAAM,CAAC;AACxB,YAAM,MAAM,CAAC,IAAI,MAAM,CAAC;AACxB,YAAM,MAAM,CAAC,IAAI,MAAM,CAAC;IAC5B;AAEA,QAAK,QAAQ,gBAAgB,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,QAAQ,eAAe,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,KAC9L,QAAQ,eAAe,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,QAAQ,gBAAgB,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,GAAK;AAEpM,UAAI,WAAW,WAAW,YAAY,WAAW,SAAS,KAAK,CAAC;AAChE,UAAI,WAAW,WAAW,YAAY,KAAK;AAE3C,cAAQ,IAAI,QAAQ,SAAS,aAAa,CAAC,GAAG,UAAU,SAAS,aAAa,CAAC,CAAC;IACpF;EACJ;EAEA,eAAe,QAAM;AACjB,QAAI,QAAQ;AACZ,QAAI,QAAQ,OAAO,gBAAgBA,eAAc;AACjD,QAAI,OAAO;AACP,cAAQ,MAAM,MAAM,MAAM,GAAG,CAAC;IAClC;AAEA,WAAO;EACX;;;;ACtFJ,SAAS,iBAAAC,uBAAqB;AAQxB,IAAO,gBAAP,cAA6B,gBAAe;EAE9C,YAAY,YAAY,WAAW,QAAQ,cAAc,4BAA4B,eAAe,QAAM;AACtG,UAAM,QAAQ,cAAc,4BAA4B,eAAe,MAAM;AAC7E,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,SAAK,wBAAwB,CAAC,SAAS,gBAAgB,gBAAgB,iBAAiB,iBAAiB,YAAY,eAAe;EACxI;EAEA,yBAAsB;AAClB,QAAI,gBAAgB;AAEpB,QAAI,KAAK,iBAAiB,GAAG;AACzB,sBAAgB;IACpB,OAAO;AACH,sBAAgB;IACpB;AAEA,WAAO;EACX;EAEA,wBAAwB,cAAY;AAChC,QAAI,KAAK,gBAAgB,GAAG;AACxB,aAAO,IAAI,oBAAoB,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,GAAG,KAAK,GAAG,GAAG,OAAO,QAAW,KAAK,SAAS;IACpI;AACA,WAAO,IAAI,iBAAiB,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,KAAK,GAAG,KAAK,OAAO,QAAW,KAAK,SAAS;EAChI;EAEA,gBAAgB,QAAM;AAClB,QAAI,QAAQ;AAEZ,QAAI,eAAe,KAAK,iBAAiB,MAAM;AAC/C,QAAI,cAAc;AACd,UAAI,KAAK,gBAAgB,GAAG;AACxB,gBAAQ,aAAa,KAAK,sBAAsB,KAAK,YAAY,CAAC,EAAE,SAAQ;AAE5E,YAAI,KAAK,iBAAiB,GAAG;AACzB,kBAAQ,WAAW,eAAe,KAAK;QAC3C,OAAO;AACH,kBAAQ,WAAW,eAAe,WAAW,SAAS,KAAK,CAAC;QAChE;MACJ,OAAO;AACH,gBAAQ,CAAC,aAAa,KAAK,sBAAsB,KAAK,YAAY,CAAC,CAAC;MACxE;IACJ,OAAO;AACH,cAAQ,KAAK,iBAAgB;IACjC;AAEA,WAAO;EACX;EAEA,mBAAgB;AACZ,QAAI,KAAK,gBAAgB,GAAG;AACxB,aAAO,CAAC,CAAC;IACb;AAEA,WAAO,YAAW;EACtB;EAEA,mBAAmB,QAAQ,OAAK;AAC5B,QAAI,QAAQ;AAEZ,QAAI,KAAK,gBAAgB,GAAG;AACxB,UAAI,KAAK,iBAAiB,GAAG;AACzB,gBAAQ,WAAW,eAAe,KAAK;MAC3C,OAAO;AACH,gBAAQ,WAAW,SAAS,WAAW,eAAe,KAAK,CAAC;MAChE;IACJ;AAEA,QAAI,eAAe,KAAK,iBAAiB,MAAM;AAC/C,QAAI,cAAc;AACd,mBAAa,KAAK,sBAAsB,KAAK,YAAY,CAAC,IAAI;IAClE;AAEA,QAAI,KAAK,gBAAgB,GAAG;AACxB,UAAK,QAAQ,gBAAgB,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,QAAQ,eAAe,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,KAC9L,QAAQ,eAAe,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,QAAQ,gBAAgB,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,GAAK;AAEpM,YAAI,WAAW,WAAW,YAAY,WAAW,SAAS,KAAK,CAAC;AAChE,YAAI,WAAW,WAAW,YAAY,KAAK;AAE3C,gBAAQ,IAAI,QAAQ,SAAS,aAAa,CAAC,GAAG,UAAU,SAAS,aAAa,CAAC,CAAC;MACpF;IACJ;EACJ;EAEA,iBAAiB,QAAM;AACnB,QAAI,WAAW;AACf,QAAI,OAAO,OAAO,gBAAgBC,eAAa;AAC/C,QAAI,MAAM;AACN,iBAAW,KAAK;IACpB;AAEA,WAAO;EACX;;;;ACnGE,IAAO,YAAP,cAAyB,gBAAe;EAE1C,YAAY,OAAO,YAAY,QAAQ,cAAc,4BAA4B,eAAe,QAAM;AAClG,UAAM,QAAQ,cAAc,4BAA4B,eAAe,MAAM;AAC7E,SAAK,WAAW;AAChB,SAAK,gBAAgB;EACzB;EAEA,yBAAsB;AAClB,WAAO;EACX;EAEA,wBAAwB,cAAY;AAChC,WAAO,IAAI,oBAAoB,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,GAAG,GAAG,MAAO,MAAM,KAAK,eAAe,QAAW,KAAK,SAAS;EACtJ;EAEA,gBAAgB,QAAM;AAClB,WAAO,KAAK,WAAW,OAAO,iBAAgB,IAAK,OAAO,YAAW;EACzE;EAEA,mBAAgB;AACZ,WAAO,YAAY,GAAG,GAAG,CAAC;EAC9B;EAEA,mBAAmB,QAAQ,OAAK;AAC5B,QAAI,KAAK,UAAU;AACf,aAAO,iBAAiB,KAAK;IACjC,OAAO;AACH,aAAO,YAAY,KAAK;IAC5B;EACJ;;;;AC9BE,IAAO,gBAAP,cAA6B,gBAAe;EAE9C,YAAY,OAAO,YAAY,QAAQ,cAAc,4BAA4B,eAAe,QAAM;AAClG,UAAM,QAAQ,cAAc,4BAA4B,eAAe,MAAM;AAC7E,SAAK,WAAW;AAChB,SAAK,gBAAgB;EACzB;EAEA,yBAAsB;AAClB,WAAO;EACX;EAEA,wBAAwB,cAAY;AAChC,WAAO,IAAI,kBAAkB,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,KAAK,eAAe,GAAG,QAAW,KAAK,SAAS;EACpI;EAEA,gBAAgB,QAAM;AAClB,WAAO,KAAK,WAAW,OAAO,qBAAoB,IAAK,OAAO,gBAAe;EACjF;EAEA,mBAAgB;AACZ,WAAO,YAAW;EACtB;EAEA,mBAAmB,QAAQ,OAAK;AAC5B,QAAI,KAAK,UAAU;AACf,aAAO,qBAAqB,KAAK;IACrC,OAAO;AACH,aAAO,gBAAgB,KAAK;IAChC;EACJ;;;;AClCJ,SAAS,iBAAAC,uBAAqB;AAIxB,IAAO,wBAAP,cAAqC,gBAAe;EAEtD,YAAY,QAAQ,cAAc,4BAA4B,eAAe,QAAM;AAC/E,UAAM,QAAQ,cAAc,4BAA4B,eAAe,MAAM;EACjF;EAEA,yBAAsB;AAClB,QAAI,gBAAgB;AAEpB,QAAI,KAAK,iBAAiB,GAAG;AACzB,sBAAgB;IACpB,OAAO;AACH,sBAAgB;IACpB;AAEA,WAAO;EACX;EAEA,wBAAwB,cAAY;AAChC,WAAO,IAAI,eAAe,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,GAAG,KAAK,GAAG,GAAG,QAAW,KAAK,SAAS;EACxH;EAEA,gBAAgB,QAAM;AAClB,QAAI,gBAAgB;AAEpB,QAAI,eAAe,KAAK,iBAAiB,MAAM;AAC/C,QAAI,cAAc;AACd,sBAAgB,aAAa;IACjC,OAAO;AACH,sBAAgB,KAAK,iBAAgB;IACzC;AAEA,WAAO;EACX;EAEA,mBAAgB;AACZ,WAAO;EACX;EAEA,mBAAmB,QAAQ,OAAK;AAC5B,QAAI,gBAAgB;AAEpB,QAAI,eAAe,KAAK,iBAAiB,MAAM;AAC/C,QAAI,cAAc;AACd,mBAAa,gBAAgB;IACjC;EACJ;EAEA,iBAAiB,QAAM;AACnB,QAAI,WAAW;AACf,QAAI,OAAO,OAAO,gBAAgBC,eAAa;AAC/C,QAAI,MAAM;AACN,iBAAW,KAAK;IACpB;AAEA,WAAO;EACX;;;;AC5DJ,SAAS,iBAAAC,uBAAqB;AAQxB,IAAO,gBAAP,cAA6B,gBAAe;EAE9C,YAAY,YAAY,WAAW,QAAQ,cAAc,4BAA4B,eAAe,QAAM;AACtG,UAAM,QAAQ,cAAc,4BAA4B,eAAe,MAAM;AAC7E,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,SAAK,wBAAwB,CAAC,SAAS,aAAa;EACxD;EAEA,yBAAsB;AAClB,QAAI,gBAAgB;AAEpB,QAAI,KAAK,iBAAiB,GAAG;AACzB,sBAAgB;IACpB,OAAO;AACH,sBAAgB;IACpB;AAEA,WAAO;EACX;EAEA,wBAAwB,cAAY;AAChC,WAAO,IAAI,iBAAiB,cAAc,KAAK,iBAAgB,GAAI,MAAM,MAAM,KAAK,GAAG,KAAK,OAAO,QAAW,KAAK,SAAS;EAChI;EAEA,gBAAgB,QAAM;AAClB,QAAI,QAAQ;AAEZ,QAAI,eAAe,KAAK,iBAAiB,MAAM;AAC/C,QAAI,cAAc;AACd,cAAQ,aAAa,KAAK,sBAAsB,KAAK,YAAY,CAAC,EAAE,SAAQ;AAE5E,UAAI,KAAK,iBAAiB,GAAG;AACzB,gBAAQ,WAAW,eAAe,KAAK;MAC3C,OAAO;AACH,gBAAQ,WAAW,eAAe,WAAW,SAAS,KAAK,CAAC;MAChE;IACJ,OAAO;AACH,cAAQ,KAAK,iBAAgB;IACjC;AAEA,WAAO;EACX;EAEA,mBAAgB;AACZ,WAAO,YAAW;EACtB;EAEA,mBAAmB,QAAQ,OAAK;AAC5B,QAAI,QAAQ;AAEZ,QAAI,KAAK,iBAAiB,GAAG;AACzB,cAAQ,WAAW,eAAe,KAAK;IAC3C,OAAO;AACH,cAAQ,WAAW,SAAS,WAAW,eAAe,KAAK,CAAC;IAChE;AAEA,QAAI,eAAe,KAAK,iBAAiB,MAAM;AAC/C,QAAI,cAAc;AACd,mBAAa,KAAK,sBAAsB,KAAK,YAAY,CAAC,IAAI;IAClE;AAEA,QAAK,QAAQ,gBAAgB,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,QAAQ,eAAe,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,KAC9L,QAAQ,eAAe,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,aAAY,KAAM,QAAQ,gBAAgB,KAAK,SAAS,EAAE,cAAc,gBAAgB,UAAU,EAAE,UAAS,GAAK;AAEpM,UAAI,WAAW,WAAW,YAAY,WAAW,SAAS,KAAK,CAAC;AAChE,UAAI,WAAW,WAAW,YAAY,KAAK;AAE3C,cAAQ,IAAI,QAAQ,SAAS,aAAa,CAAC,GAAG,UAAU,SAAS,aAAa,CAAC,CAAC;IACpF;EACJ;EAEA,iBAAiB,QAAM;AACnB,QAAI,WAAW;AACf,QAAI,OAAO,OAAO,gBAAgBC,eAAa;AAC/C,QAAI,MAAM;AACN,iBAAW,KAAK;IACpB;AAEA,WAAO;EACX;;;;ACxFJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,gCAAP,cAA6CC,YAAS;EACxD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,+BAA+BA,WAAS,KAAK,KAAK;IAClD,kBAAkBA,WAAS,KAAK,KAAK;;EAGzC,OAAI;AACA,SAAK,qBAAqB;AAE1B,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,qBAAqB,IAAI,qBAAqB,KAAK,QAAQ,KAAK,iBAAiB,KAAK,+BAA+B,KAAK,gBAAgB;IACnJ;EACJ;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,MAAK;MACjC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,OAAO,EAAE;MACrC;IACJ;EACJ;;;;AClCJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,0BAAP,cAAuCC,YAAS;EAClD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,+BAA+BA,WAAS,KAAK,KAAK;IAClD,kBAAkBA,WAAS,KAAK,KAAK;IACrC,eAAeA,WAAS,KAAK,CAAC,OAAO,KAAK,GAAG,KAAK;;EAGtD,OAAI;AACA,SAAK,qBAAqB;AAE1B,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,qBAAqB,IAAI,eAAe,KAAK,eAAe,KAAK,QAAQ,KAAK,iBAAiB,KAAK,+BAA+B,KAAK,gBAAgB;IACjK;EACJ;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,MAAK;MACjC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,OAAO,EAAE;MACrC;IACJ;EACJ;;;;ACnCJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAK9B,IAAO,iCAAP,cAA8CC,YAAS;EACzD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,+BAA+BA,WAAS,KAAK,KAAK;;EAGtD,OAAI;AACA,SAAK,qBAAqB;AAE1B,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,qBAAqB,IAAI,sBAAsB,KAAK,QAAQ,KAAK,iBAAiB,KAAK,+BAA+B,KAAK,gBAAgB;IACpJ;EACJ;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,MAAK;MACjC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,OAAO,EAAE;MACrC;IACJ;EACJ;EAEA,SAAS,cAAY;AACjB,QAAI,kBAAkB,eAAe,aAAa,MAAM,YAAY;AAEpE,WAAO;EACX;;;;ACzCJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAK9B,IAAO,yBAAP,cAAsCC,YAAS;EACjD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,kBAAkBA,WAAS,KAAK,KAAK;IACrC,+BAA+BA,WAAS,KAAK,KAAK;IAClD,eAAeA,WAAS,KAAK,CAAC,OAAO,KAAK,GAAG,KAAK;IAClD,cAAcA,WAAS,KAAK,CAAC,SAAS,iBAAiB,iBAAiB,kBAAkB,kBAAkB,aAAa,gBAAgB,GAAG,OAAO;;EAGvJ,OAAI;AACA,SAAK,qBAAqB;AAE1B,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,qBAAqB,IAAI,cAAc,KAAK,eAAe,KAAK,cAAc,KAAK,QAAQ,KAAK,iBAAiB,KAAK,+BAA+B,KAAK,gBAAgB;IACnL;EACJ;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,MAAK;MACjC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,OAAO,EAAE;MACrC;IACJ;EACJ;EAEA,SAAS,cAAY;AACjB,QAAI,kBAAkB,eAAe,aAAa,MAAM,YAAY;AAEpE,WAAO;EACX;;;;AC3CJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,qBAAP,cAAkCC,YAAS;EAC7C,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,+BAA+BA,WAAS,KAAK,KAAK;IAClD,kBAAkBA,WAAS,KAAK,KAAK;IACrC,UAAUA,WAAS,KAAK,KAAK;IAC7B,eAAeA,WAAS,KAAK,IAAI;;;EAGrC,OAAI;AACA,SAAK,qBAAqB;AAE1B,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,qBAAqB,IAAI,UAAU,KAAK,UAAU,KAAK,eAAe,KAAK,QAAQ,KAAK,iBAAiB,KAAK,+BAA+B,KAAK,gBAAgB;IAC3K;EACJ;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,MAAK;MACjC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,OAAO,EAAE;MACrC;IACJ;EACJ;;;;ACpCJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAK9B,IAAO,wCAAP,cAAqDC,YAAS;EAChE,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,+BAA+BA,WAAS,KAAK,KAAK;;EAGtD,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,0BAA0B;AAE/B,UAAI,KAAK,mBAAmB,IAAI;AAC5B,aAAK,0BAA0B,KAAK,wBAAwB,OAAO,KAAK,OAAO,SAAQ,CAAE;MAC7F,OAAO;AACH,aAAK,0BAA0B,KAAK,wBAAwB,OAAO,KAAK,eAAe;MAC3F;AAEA,UAAI,gBAAgB,KAAK,OAAO,eAAc,EAAG;AACjD,UAAI,MAAM;AACV,UAAI,MAAM;AACV,UAAI,iBAAiB,GAAG;AACpB,cAAM;AACN,cAAM;MACV;AAEA,cAAQ,qBAAqB,KAAK,MAAM,EAAE,IAAI,IAAI,YAAY,KAAK,yBAAyB,GAAG,MAAM,MAAM,IAAI,KAAK,KAAK,QAAW,KAAK,MAAM,CAAC;AAChJ,UAAI,KAAK,+BAA+B;AACpC,sBAAc,yBAAyB,KAAK,yBAAyB,KAAK,MAAM;MACpF;AAEA,WAAK,uBAAuB;AAC5B,WAAK,0BAA0B;AAE/B,WAAK,oBAAoB;IAC7B;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,QAAQ,qBAAqB,KAAK,MAAM,EAAE,wBAAwB,KAAK,uBAAuB,GAAG;AACjG,YAAI,gBAAgB,KAAK,OAAO,eAAc,EAAG;AACjD,YAAI,iBAAiB,KAAK,yBAAyB;AAC/C,eAAK,0BAA0B;AAE/B,cAAI,MAAM;AACV,cAAI,MAAM;AACV,cAAI,iBAAiB,GAAG;AACpB,kBAAM;AACN,kBAAM;UACV;AAEA,cAAI,mBAAmB,QAAQ,qBAAqB,KAAK,MAAM,EAAE,oBAAoB,KAAK,uBAAuB;AACjH,2BAAiB,OAAO,GAAG;AAC3B,2BAAiB,OAAO,GAAG;QAC/B;AAEA,YAAI,aAAa,QAAQ,qBAAqB,KAAK,MAAM,EAAE,IAAI,KAAK,uBAAuB;AAC3F,YAAI,cAAc,KAAK,sBAAsB;AACzC,cAAI,cAAc,KAAK,KAAK,wBAAwB,IAAI;AACpD,gBAAI,QAAQ,kBAAkB,KAAK,MAAM,KAAK,KAAK,mBAAmB;AAClE,sBAAQ,qBAAqB,KAAK,MAAM;YAC5C;AACA,iBAAK,oBAAoB;UAC7B,WAAW,aAAa,GAAG;AACvB,iBAAK,oBAAoB,KAAK,OAAO,eAAc,EAAG,aAAa,CAAC;AACpE,oBAAQ,kBAAkB,KAAK,mBAAmB,KAAK,MAAM;UACjE;AAEA,eAAK,uBAAuB;QAChC;MACJ;IACJ;EACJ;;;;AC7EJ,SAAS,aAAAC,mBAAiB;AAIpB,IAAO,kCAAP,cAA+CC,YAAS;EAC1D,OAAO,WAAW;EAClB,OAAO,aAAa,CAAA;EAEpB,QAAK;AACD,SAAK,aAAa;AAElB,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,aAAa,KAAK,OAAO,gBAAgB,oBAAoB;AAClE,WAAK,oBAAoB;IAC7B;EACJ;EAEA,WAAW,SAAS,WAAS;AACzB,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,oBAAoB,UAAU;AACnC,cAAQ,kBAAkB,KAAK,mBAAmB,KAAK,MAAM;IACjE;EACJ;EAEA,QAAQ,SAAS,WAAS;AACtB,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,QAAQ,kBAAkB,KAAK,MAAM,KAAK,KAAK,mBAAmB;AAClE,gBAAQ,qBAAqB,KAAK,MAAM;MAC5C;AACA,WAAK,oBAAoB;IAC7B;EACJ;EAEA,aAAU;AACN,QAAI,KAAK,cAAc,MAAM;AAEzB,WAAK,WAAW,2BAA2B,MAAM,KAAK,WAAW,KAAK,IAAI,CAAC;IAC/E;EACJ;EAEA,eAAY;AACR,QAAI,KAAK,cAAc,MAAM;AAEzB,WAAK,WAAW,6BAA6B,IAAI;IACrD;EACJ;;;;AC7CJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAI9B,IAAO,yBAAP,cAAsCC,YAAS;EACjD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,+BAA+BA,WAAS,KAAK,KAAK;IAClD,kBAAkBA,WAAS,KAAK,KAAK;IACrC,eAAeA,WAAS,KAAK,CAAC,OAAO,KAAK,GAAG,KAAK;IAClD,cAAcA,WAAS,KAAK,CAAC,SAAS,cAAc,GAAG,OAAO;;EAGlE,OAAI;AACA,SAAK,qBAAqB;AAE1B,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,qBAAqB,IAAI,cAAc,KAAK,eAAe,KAAK,cAAc,KAAK,QAAQ,KAAK,iBAAiB,KAAK,+BAA+B,KAAK,gBAAgB;IACnL;EACJ;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,MAAK;MACjC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,OAAO,EAAE;MACrC;IACJ;EACJ;;;;ACpCJ,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAK9B,IAAO,yBAAP,cAAsCC,YAAS;EACjD,OAAO,WAAW;EAClB,OAAO,aAAa;IAChB,iBAAiBC,WAAS,OAAO,EAAE;IACnC,+BAA+BA,WAAS,KAAK,KAAK;IAClD,kBAAkBA,WAAS,KAAK,KAAK;IACrC,UAAUA,WAAS,KAAK,IAAI;IAC5B,eAAeA,WAAS,KAAK,IAAI;;;EAGrC,OAAI;AACA,SAAK,qBAAqB;AAE1B,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,WAAK,qBAAqB,IAAI,cAAc,KAAK,UAAU,KAAK,eAAe,KAAK,QAAQ,KAAK,iBAAiB,KAAK,+BAA+B,KAAK,gBAAgB;IAC/K;EACJ;EAEA,QAAK;AACD,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,MAAK;MACjC;IACJ;EACJ;EAEA,OAAO,IAAE;AACL,QAAI,QAAQ,cAAc,KAAK,MAAM,GAAG;AACpC,UAAI,KAAK,sBAAsB,MAAM;AACjC,aAAK,mBAAmB,OAAO,EAAE;MACrC;IACJ;EACJ;EAEA,SAAS,cAAY;AACjB,QAAI,kBAAkB,eAAe,aAAa,MAAM,YAAY;AAEpE,WAAO;EACX;;", + "names": ["Component", "Property", "Howler", "Howler", "Component", "Property", "error", "isMobile", "isLocalhost", "error", "Component", "Property", "Component", "Property", "Emitter", "error", "Emitter", "error", "Component", "Property", "Component", "Component", "Component", "gl_mat3", "gl_quat", "sign", "angle", "random", "randomUUID", "distance", "equals", "has", "remove", "clear", "length", "gl_mat4", "create", "copy", "getRotationDegrees", "getRotationRadians", "setPosition", "setRotationDegrees", "setRotationRadians", "setRotationQuat", "setPositionRotationDegrees", "setPositionRotationRadians", "first", "getForward", "getLeft", "getUp", "toLocal", "angle", "rotateAxisRadians", "lerp", "interpolate", "slerp", "_customGLMatrixFromQuat2", "create", "gl_mat4", "set", "copy", "identity", "invert", "mul", "first", "clone", "getPosition", "getRotation", "getRotationDegrees", "getRotationRadians", "getRotationQuat", "setPosition", "setRotation", "setRotationDegrees", "setRotationRadians", "setRotationQuat", "scale", "setScale", "setPositionRotationDegreesScale", "setPositionRotationRadiansScale", "setPositionRotation", "setPositionRotationDegrees", "setPositionRotationRadians", "setPositionRotationQuat", "getAxes", "getForward", "getBackward", "getLeft", "getRight", "getUp", "getDown", "toWorld", "toLocal", "hasUniformScale", "toQuat", "_customGLMatrixGetRotation", "create", "set", "normalize", "copy", "clone", "first", "lengthSquared", "angle", "length", "equals", "mul", "scale", "angleSignedRadians", "anglePivotedRadians", "anglePivotedSignedRadians", "toRadians", "toDegrees", "toQuat", "isNormalized", "valueAlongAxis", "valueAlongPlane", "removeComponentAlongAxis", "copyComponentAlongAxis", "signTo", "projectOnAxisAlongAxis", "projectOnPlaneAlongAxis", "zero", "rotateDegrees", "rotateRadians", "rotateQuat", "rotateAxis", "rotateAxisDegrees", "rotateAxisRadians", "rotateAroundDegrees", "rotateAroundRadians", "rotateAroundAxisRadians", "convertPositionToLocalMatrix", "convertPositionToWorldQuat", "convertPositionToLocalQuat", "convertDirectionToWorldMatrix", "convertDirectionToLocalMatrix", "convertDirectionToWorldQuat", "convertDirectionToLocalQuat", "degreesAddRotationDegrees", "degreesAddRotationRadians", "degreesAddRotationQuat", "radiansAddRotationDegrees", "radiansAddRotationRadians", "radiansAddRotationQuat", "toMatrix", "degreesToMatrix", "radiansToMatrix", "rotationToDegrees", "rotationToRadians", "rotationToQuat", "rotationToPivotedDegrees", "rotationToPivotedRadians", "rotationToPivotedQuat", "lerp", "interpolate", "perpendicularRandom", "create", "set", "normalize", "copy", "clone", "identity", "length", "lengthSquared", "invert", "conjugate", "mul", "first", "zero", "getAxis", "angle", "getAngleRadians", "getAxisScaledRadians", "getAxes", "getForward", "getBackward", "getLeft", "getRight", "getUp", "getDown", "setForward", "setBackward", "setUp", "setDown", "setLeft", "setRight", "toWorld", "toLocal", "fromAxes", "fromRadians", "toRadians", "toDegrees", "isNormalized", "addRotation", "addRotationDegrees", "addRotationRadians", "addRotationQuat", "subRotationDegrees", "subRotationRadians", "subRotationQuat", "rotationTo", "rotationToDegrees", "toQuat", "rotationToRadians", "rotationToQuat", "rotationAroundAxisDegrees", "rotationAroundAxisRadians", "getTwist", "getSwing", "getTwistFromSwing", "toMatrix", "rotate", "rotateDegrees", "rotateRadians", "rotateQuat", "rotateAxis", "rotateAxisDegrees", "rotateAxisRadians", "lerp", "interpolate", "slerp", "sinterpolate", "_setAxes", "gl_mat3", "set", "copy", "clone", "toDegrees", "create", "toRadians", "toQuat", "gl_quat", "fromAxes", "create", "set", "copy", "clone", "length", "normalize", "zero", "isZero", "create", "set", "copy", "clone", "clone", "first", "equals", "MeshComponent", "clone", "copy", "MeshComponent", "clone", "copy", "MeshComponent", "MeshComponent", "clone", "copy", "MeshComponent", "MeshComponent", "clone", "copy", "first", "raycast", "copy", "length", "clone", "copy", "clone", "copy", "clone", "copy", "clone", "scale", "copy", "visualElements", "Component", "Component", "Property", "Component", "Property", "create", "error", "clone", "invert", "makeDoubleSided", "Component", "Property", "Component", "Property", "Handedness", "HandednessIndex", "InputSourceType", "TrackedHandJointID", "TrackedHandJointIDIndex", "Component", "Property", "Component", "Alignment", "Justification", "Alignment", "Justification", "length", "scale", "Component", "Component", "Property", "Component", "Property", "Component", "copy", "reset", "distance", "transformQuat", "transformQuat", "distance", "computeSurfacePerceivedAngle", "distance", "first", "first", "first", "firstHeightPosition", "angleNormalWithMovementThreshold", "zero", "distance", "transformQuat", "angleSigned", "transformQuat", "zero", "transformQuat", "checkMovement", "checkTeleportToTransform", "checkTransform", "updateGroundInfo", "updateCeilingInfo", "convertCollisionRuntimeParamsToCharacterCollisionResults", "convertCharacterColliderSetupToCollisionCheckParams", "Component", "Component", "Property", "Emitter", "Emitter", "Emitter", "info", "emitter", "error", "Emitter", "Emitter", "error", "getPosition", "getRotationDegrees", "getRotationRadians", "getRotationQuat", "transformQuat", "getTransformMatrix", "getTransformQuat", "getRotationQuat", "Emitter", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "clear", "Component", "Property", "Component", "Property", "Component", "Property", "MeshComponent", "TextComponent", "ViewComponent", "ARCamera8thwall", "Cursor", "CursorTarget", "DebugObject", "DeviceOrientationLook", "FingerCursor", "FixedFoveation", "HandTracking", "HitTestLocation", "HowlerAudioListener", "HowlerAudioSource", "ImageTexture", "MouseLookComponent", "PlayerHeight", "TargetFramerate", "TeleportComponent", "Trail", "TwoJointIkSolver", "VideoTexture", "VrModeActiveSwitch", "Vrm", "WasdControlsComponent", "MeshComponent", "TextComponent", "MeshComponent", "TextComponent", "getPosition", "getRotation", "getRotationDegrees", "getRotationRadians", "getRotationQuat", "getRotationWorldRadians", "getRotationWorldMatrix", "getRotationLocalRadians", "getRotationLocalMatrix", "getScale", "transformQuat", "scale", "getTransformWorldMatrix", "getTransformLocalMatrix", "getAxes", "getForward", "getForwardWorld", "getForwardLocal", "getBackward", "getBackwardWorld", "getBackwardLocal", "getUp", "getUpWorld", "getUpLocal", "getDown", "getDownWorld", "getDownLocal", "getLeft", "getLeftWorld", "getLeftLocal", "getRight", "getRightWorld", "getRightLocal", "setPosition", "setRotation", "setRotationDegrees", "setRotationRadians", "setRotationQuat", "setRotationWorldDegrees", "setRotationWorldRadians", "setRotationWorldMatrix", "setRotationLocalDegrees", "setRotationLocalRadians", "setRotationLocalMatrix", "setScale", "setScaleWorld", "setScaleLocal", "setAxes", "setForward", "setForwardWorld", "setForwardLocal", "setBackward", "setBackwardWorld", "setBackwardLocal", "setUp", "setUpWorld", "setUpLocal", "setDown", "setDownWorld", "setDownLocal", "setLeft", "setLeftWorld", "setLeftLocal", "setRight", "setRightWorld", "setRightLocal", "setTransformWorldMatrix", "setTransformLocalMatrix", "zero", "resetPositionWorld", "resetPositionLocal", "identity", "resetRotationWorld", "resetRotationLocal", "resetScaleWorld", "resetScaleLocal", "translateAxisWorld", "translateAxisLocal", "translateAxisObject", "rotate", "rotateDegrees", "rotateRadians", "rotateQuat", "rotateWorldDegrees", "rotateWorldRadians", "rotateWorldMatrix", "rotateWorldQuat", "rotateLocalDegrees", "rotateLocalRadians", "rotateLocalMatrix", "rotateLocalQuat", "rotateObjectDegrees", "rotateObjectRadians", "rotateObjectMatrix", "rotateAxis", "angle", "rotateAxisDegrees", "rotateAxisRadians", "rotateAxisWorldRadians", "rotateAxisLocalRadians", "rotateAxisObjectRadians", "rotateAround", "rotateAroundDegrees", "rotateAroundRadians", "rotateAroundQuat", "rotateAroundWorldDegrees", "rotateAroundWorldRadians", "rotateAroundWorldMatrix", "rotateAroundWorldQuat", "rotateAroundLocalDegrees", "rotateAroundLocalRadians", "rotateAroundLocalMatrix", "rotateAroundLocalQuat", "rotateAroundObjectDegrees", "rotateAroundObjectRadians", "rotateAroundObjectMatrix", "rotateAroundObjectQuat", "rotateAroundAxis", "rotateAroundAxisDegrees", "rotateAroundAxisRadians", "rotateAroundAxisWorldRadians", "rotateAroundAxisLocalRadians", "rotateAroundAxisObjectRadians", "scaleObject", "lookAtWorld", "lookAtLocal", "lookToWorld", "lookToLocal", "convertPositionObjectToWorld", "convertDirectionObjectToWorld", "convertPositionWorldToObject", "convertDirectionWorldToObject", "convertTransformObjectToWorldMatrix", "convertTransformObjectToWorldQuat", "convertTransformWorldToObjectMatrix", "convertTransformWorldToObjectQuat", "setParent", "hasUniformScale", "hasUniformScaleWorld", "hasUniformScaleLocal", "clone", "toStringExtended", "toStringCompact", "equals", "first", "error", "MeshComponent", "TextComponent", "ViewComponent", "isCloneable", "clone", "ARCamera8thwall", "Cursor", "CursorTarget", "DebugObject", "DeviceOrientationLook", "FingerCursor", "FixedFoveation", "HandTracking", "HitTestLocation", "HowlerAudioListener", "HowlerAudioSource", "ImageTexture", "MouseLookComponent", "PlayerHeight", "TargetFramerate", "TeleportComponent", "Trail", "TwoJointIkSolver", "VideoTexture", "VrModeActiveSwitch", "Vrm", "WasdControlsComponent", "error", "property", "isClass", "angle", "scale", "clone", "equals", "zero", "isZero", "scale", "clamp", "toString", "log", "error", "warn", "angle", "scale", "angle", "Emitter", "Emitter", "InputComponent", "ViewComponent", "Cursor", "CursorTarget", "HitTestLocation", "CursorTarget", "InputComponent", "ViewComponent", "HitTestLocation", "session", "Cursor", "Emitter", "CursorTarget", "Emitter", "CursorTarget", "MouseLookComponent", "MouseLookComponent", "Component", "Property", "Component", "Property", "Component", "Property", "Howler", "Component", "Howler", "Component", "Howler", "Component", "Howler", "Component", "PhysXComponent", "Property", "Emitter", "PhysXComponent", "Emitter", "PhysXComponent", "Component", "Property", "distance", "scale", "PhysXComponent", "Alignment", "Component", "Justification", "MeshComponent", "Property", "TextComponent", "Component", "Property", "reset", "MeshComponent", "TextComponent", "Alignment", "Justification", "Component", "PhysXComponent", "Property", "scale", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Alignment", "Component", "Justification", "Property", "Component", "Property", "Alignment", "Justification", "Component", "_ButtonBehaviorWhenNotAvailable", "Component", "Emitter", "clone", "error", "MeshComponent", "setAlpha", "MeshComponent", "TextComponent", "Component", "Property", "Component", "Property", "isClass", "isFunction", "error", "first", "isObject", "property", "isClass", "isFunction", "first", "error", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "AnimationComponent", "CollisionComponent", "Component", "InputComponent", "LightComponent", "MeshComponent", "PhysXComponent", "Property", "TextComponent", "ViewComponent", "Component", "Property", "AnimationComponent", "CollisionComponent", "InputComponent", "LightComponent", "MeshComponent", "PhysXComponent", "TextComponent", "ViewComponent", "fromNumber", "toNumber", "Component", "Emitter", "PhysXComponent", "Property", "Component", "Property", "Emitter", "PhysXComponent", "Component", "Emitter", "PhysXComponent", "Property", "Component", "Property", "Emitter", "PhysXComponent", "first", "error", "result", "Component", "Property", "TextComponent", "Component", "Property", "TextComponent", "copy", "computeSurfacePerceivedAngle", "angle", "transformQuat", "resetPosition", "resetRotation", "distance", "rotateQuat", "setRotationQuat", "Emitter", "PhysXComponent", "distance", "distance", "getPosition", "first", "hit", "distance", "MeshComponent", "MeshComponent", "distance", "angle", "params", "first", "Emitter", "PhysXComponent", "Component", "Property", "Component", "Property", "CollisionComponent", "Component", "Property", "CursorTarget", "Component", "Property", "CollisionComponent", "CursorTarget", "error", "Component", "Property", "Component", "Property", "Component", "MeshComponent", "Property", "Component", "Property", "MeshComponent", "transformQuat", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "transformQuat", "Component", "Property", "Component", "Property", "Alignment", "Component", "Justification", "MeshComponent", "Property", "TextComponent", "Component", "Property", "length", "MeshComponent", "TextComponent", "Alignment", "Justification", "scale", "angle", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Component", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Component", "Component", "Component", "Component", "Component", "Component", "MeshComponent", "Property", "ViewComponent", "Cursor", "CursorTarget", "Component", "Property", "MeshComponent", "Cursor", "ViewComponent", "CursorTarget", "transformQuat", "Alignment", "Collider", "Justification", "Collider", "Alignment", "Justification", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "Emitter", "Alignment", "Collider", "Justification", "Collider", "Alignment", "Justification", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "Emitter", "error", "Component", "Property", "Component", "Property", "Emitter", "response", "_importExportVariablesReplaceFileURLParams", "Emitter", "Component", "Property", "Emitter", "Emitter", "Emitter", "Emitter", "Alignment", "Collider", "Justification", "Collider", "Alignment", "Justification", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "MeshComponent", "TextComponent", "CursorTarget", "CollisionComponent", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "TextComponent", "TextComponent", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "CollisionComponent", "MeshComponent", "TextComponent", "CursorTarget", "TextComponent", "CursorTarget", "CollisionComponent", "MeshComponent", "length", "Component", "Property", "Component", "Property", "Component", "Property", "LightComponent", "LightComponent", "LightComponent", "LightComponent", "MeshComponent", "MeshComponent", "MeshComponent", "MeshComponent", "TextComponent", "TextComponent", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Component", "Component", "Property", "Component", "Property", "Component", "Property", "Component", "Property"] +} diff --git a/wle_pp/wle_pp_bundle/package.json b/wle_pp/wle_pp_bundle/package.json index 18c2d17..ea3154b 100644 --- a/wle_pp/wle_pp_bundle/package.json +++ b/wle_pp/wle_pp_bundle/package.json @@ -23,7 +23,7 @@ "webxr" ], "type": "module", - "main": "./bundle/bundle.js", + "main": "./bundle/pp/bundle.js", "wonderlandengine": {}, "peerDependencies": { "@wonderlandengine/api": "^1.1.3",