@dcl/ecs 7.22.6-25007982108.commit-83012ab → 7.22.6-25321038582.commit-63ddb3f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/extended/MeshCollider.d.ts +0 -8
- package/dist/components/extended/MeshCollider.js +0 -6
- package/dist/components/extended/MeshRenderer.d.ts +0 -8
- package/dist/components/extended/MeshRenderer.js +0 -5
- package/dist/components/extended/ParticleSystem.d.ts +24 -0
- package/dist/components/extended/ParticleSystem.js +23 -0
- package/dist/components/extended/Tween.d.ts +48 -1
- package/dist/components/extended/Tween.js +66 -0
- package/dist/components/generated/component-names.gen.js +0 -11
- package/dist/components/generated/global.gen.d.ts +0 -22
- package/dist/components/generated/global.gen.js +0 -11
- package/dist/components/generated/index.gen.d.ts +0 -44
- package/dist/components/generated/index.gen.js +0 -55
- package/dist/components/generated/pb/decentraland/common/texture.gen.d.ts +0 -20
- package/dist/components/generated/pb/decentraland/common/texture.gen.js +0 -65
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +0 -2
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +1 -10
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +0 -43
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +1 -151
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +0 -2
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +0 -10
- package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +1 -37
- package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +1 -119
- package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +2 -6
- package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +0 -4
- package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +0 -19
- package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +1 -46
- package/dist/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +0 -22
- package/dist/components/generated/pb/decentraland/sdk/components/material.gen.js +1 -57
- package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +0 -20
- package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +0 -56
- package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +3 -21
- package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +0 -56
- package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +14 -1
- package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +42 -4
- package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +2 -8
- package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +0 -3
- package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +0 -13
- package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.js +0 -30
- package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +0 -2
- package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +0 -10
- package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +0 -4
- package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +0 -20
- package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +0 -35
- package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +0 -90
- package/dist/components/generated/types.gen.d.ts +1 -0
- package/dist/components/generated/types.gen.js +1 -0
- package/dist/components/index.d.ts +14 -11
- package/dist/components/index.js +13 -13
- package/dist/components/manual/CreatedBy.d.ts +9 -0
- package/dist/components/manual/CreatedBy.js +8 -0
- package/dist/components/manual/Transform.d.ts +22 -0
- package/dist/components/manual/Transform.js +11 -3
- package/dist/components/types.d.ts +3 -3
- package/dist/engine/component.d.ts +52 -1
- package/dist/engine/entity.js +4 -2
- package/dist/engine/grow-only-value-set-component-definition.js +46 -3
- package/dist/engine/input.d.ts +0 -6
- package/dist/engine/input.js +4 -9
- package/dist/engine/lww-element-set-component-definition.d.ts +5 -3
- package/dist/engine/lww-element-set-component-definition.js +87 -18
- package/dist/index.d.ts +5 -2
- package/dist/index.js +5 -1
- package/dist/runtime/globals.d.ts +1 -2
- package/dist/runtime/globals.js +1 -2
- package/dist/runtime/helpers/index.d.ts +1 -0
- package/dist/runtime/helpers/index.js +1 -0
- package/dist/runtime/helpers/tree.d.ts +6 -0
- package/dist/runtime/helpers/tree.js +2 -2
- package/dist/runtime/helpers/vectors.js +36 -0
- package/dist/runtime/initialization/index.d.ts +7 -0
- package/dist/runtime/initialization/index.js +6 -0
- package/dist/serialization/crdt/authoritativePutComponent.d.ts +15 -0
- package/dist/serialization/crdt/authoritativePutComponent.js +47 -0
- package/dist/serialization/crdt/index.d.ts +1 -0
- package/dist/serialization/crdt/index.js +1 -0
- package/dist/serialization/crdt/types.d.ts +25 -3
- package/dist/serialization/crdt/types.js +3 -1
- package/dist/systems/crdt/index.d.ts +0 -1
- package/dist/systems/crdt/index.js +55 -146
- package/dist/systems/events.d.ts +25 -59
- package/dist/systems/events.js +129 -145
- package/dist/systems/physics-force.js +140 -0
- package/dist/systems/physics-impulse.d.ts +12 -0
- package/dist/systems/physics-impulse.js +85 -0
- package/dist/systems/physics.d.ts +77 -0
- package/dist/systems/physics.js +18 -0
- package/dist/systems/raycast.d.ts +1 -3
- package/dist/systems/raycast.js +0 -2
- package/dist-cjs/components/extended/MeshCollider.d.ts +0 -8
- package/dist-cjs/components/extended/MeshCollider.js +0 -6
- package/dist-cjs/components/extended/MeshRenderer.d.ts +0 -8
- package/dist-cjs/components/extended/MeshRenderer.js +0 -5
- package/dist-cjs/components/extended/ParticleSystem.d.ts +24 -0
- package/dist-cjs/components/extended/ParticleSystem.js +28 -0
- package/dist-cjs/components/extended/Tween.d.ts +48 -1
- package/dist-cjs/components/extended/Tween.js +66 -0
- package/dist-cjs/components/generated/component-names.gen.js +0 -11
- package/dist-cjs/components/generated/global.gen.d.ts +0 -22
- package/dist-cjs/components/generated/global.gen.js +2 -13
- package/dist-cjs/components/generated/index.gen.d.ts +0 -44
- package/dist-cjs/components/generated/index.gen.js +2 -68
- package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +0 -20
- package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +1 -66
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +0 -2
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +1 -10
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +0 -43
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +2 -152
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +0 -2
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +0 -10
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +1 -37
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +2 -120
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +2 -6
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +0 -4
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +0 -19
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +1 -46
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +0 -22
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +2 -58
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +0 -20
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +1 -57
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +3 -21
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +1 -57
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +14 -1
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +43 -5
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +2 -8
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +0 -3
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +0 -13
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.js +1 -31
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +0 -2
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +0 -10
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +0 -4
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +0 -20
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +0 -35
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +1 -91
- package/dist-cjs/components/generated/types.gen.d.ts +1 -0
- package/dist-cjs/components/generated/types.gen.js +3 -0
- package/dist-cjs/components/index.d.ts +14 -11
- package/dist-cjs/components/index.js +17 -17
- package/dist-cjs/components/manual/CreatedBy.d.ts +9 -0
- package/dist-cjs/components/manual/CreatedBy.js +10 -0
- package/dist-cjs/components/manual/Transform.d.ts +22 -0
- package/dist-cjs/components/manual/Transform.js +34 -3
- package/dist-cjs/components/types.d.ts +3 -3
- package/dist-cjs/engine/component.d.ts +52 -1
- package/dist-cjs/engine/entity.js +4 -2
- package/dist-cjs/engine/grow-only-value-set-component-definition.js +45 -2
- package/dist-cjs/engine/input.d.ts +0 -6
- package/dist-cjs/engine/input.js +4 -9
- package/dist-cjs/engine/lww-element-set-component-definition.d.ts +5 -3
- package/dist-cjs/engine/lww-element-set-component-definition.js +90 -19
- package/dist-cjs/index.d.ts +5 -2
- package/dist-cjs/index.js +6 -2
- package/dist-cjs/runtime/globals.d.ts +1 -2
- package/dist-cjs/runtime/globals.js +1 -2
- package/dist-cjs/runtime/helpers/index.d.ts +1 -0
- package/dist-cjs/runtime/helpers/index.js +1 -0
- package/dist-cjs/runtime/helpers/tree.d.ts +6 -0
- package/dist-cjs/runtime/helpers/tree.js +3 -2
- package/dist-cjs/runtime/helpers/vectors.js +39 -0
- package/dist-cjs/runtime/initialization/index.d.ts +7 -0
- package/dist-cjs/runtime/initialization/index.js +7 -1
- package/dist-cjs/serialization/crdt/authoritativePutComponent.d.ts +15 -0
- package/dist-cjs/serialization/crdt/authoritativePutComponent.js +50 -0
- package/dist-cjs/serialization/crdt/index.d.ts +1 -0
- package/dist-cjs/serialization/crdt/index.js +1 -0
- package/dist-cjs/serialization/crdt/types.d.ts +25 -3
- package/dist-cjs/serialization/crdt/types.js +3 -1
- package/dist-cjs/systems/crdt/index.d.ts +0 -1
- package/dist-cjs/systems/crdt/index.js +55 -169
- package/dist-cjs/systems/events.d.ts +25 -59
- package/dist-cjs/systems/events.js +129 -145
- package/dist-cjs/systems/physics-force.js +167 -0
- package/dist-cjs/systems/physics-impulse.d.ts +12 -0
- package/dist-cjs/systems/physics-impulse.js +112 -0
- package/dist-cjs/systems/physics.d.ts +77 -0
- package/dist-cjs/systems/physics.js +23 -0
- package/dist-cjs/systems/raycast.d.ts +1 -3
- package/dist-cjs/systems/raycast.js +0 -2
- package/package.json +3 -2
- package/dist/components/extended/AvatarEquippedData.d.ts +0 -10
- package/dist/components/extended/AvatarEquippedData.js +0 -15
- package/dist/components/extended/AvatarShape.d.ts +0 -10
- package/dist/components/extended/AvatarShape.js +0 -15
- package/dist/components/generated/AvatarLocomotionSettings.gen.d.ts +0 -1
- package/dist/components/generated/AvatarLocomotionSettings.gen.js +0 -25
- package/dist/components/generated/AvatarMovement.gen.d.ts +0 -1
- package/dist/components/generated/AvatarMovement.gen.js +0 -25
- package/dist/components/generated/AvatarMovementInfo.gen.d.ts +0 -1
- package/dist/components/generated/AvatarMovementInfo.gen.js +0 -25
- package/dist/components/generated/CameraLayer.gen.d.ts +0 -1
- package/dist/components/generated/CameraLayer.gen.js +0 -25
- package/dist/components/generated/CameraLayers.gen.d.ts +0 -1
- package/dist/components/generated/CameraLayers.gen.js +0 -25
- package/dist/components/generated/GlobalLight.gen.d.ts +0 -1
- package/dist/components/generated/GlobalLight.gen.js +0 -25
- package/dist/components/generated/GltfNode.gen.d.ts +0 -1
- package/dist/components/generated/GltfNode.gen.js +0 -25
- package/dist/components/generated/GltfNodeState.gen.d.ts +0 -1
- package/dist/components/generated/GltfNodeState.gen.js +0 -25
- package/dist/components/generated/TextureCamera.gen.d.ts +0 -1
- package/dist/components/generated/TextureCamera.gen.js +0 -25
- package/dist/components/generated/UiCanvas.gen.d.ts +0 -1
- package/dist/components/generated/UiCanvas.gen.js +0 -25
- package/dist/components/generated/UiScrollResult.gen.d.ts +0 -1
- package/dist/components/generated/UiScrollResult.gen.js +0 -25
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +0 -29
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +0 -93
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +0 -20
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +0 -69
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +0 -32
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +0 -126
- package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +0 -30
- package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +0 -104
- package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +0 -14
- package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +0 -50
- package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +0 -34
- package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.js +0 -61
- package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +0 -50
- package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +0 -41
- package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +0 -27
- package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +0 -59
- package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +0 -74
- package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +0 -191
- package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +0 -19
- package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +0 -60
- package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +0 -15
- package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +0 -42
- package/dist/serialization/crdt/network/utils.d.ts +0 -9
- package/dist/serialization/crdt/network/utils.js +0 -60
- package/dist-cjs/components/extended/AvatarEquippedData.d.ts +0 -10
- package/dist-cjs/components/extended/AvatarEquippedData.js +0 -19
- package/dist-cjs/components/extended/AvatarShape.d.ts +0 -10
- package/dist-cjs/components/extended/AvatarShape.js +0 -19
- package/dist-cjs/components/generated/AvatarLocomotionSettings.gen.js +0 -28
- package/dist-cjs/components/generated/AvatarMovement.gen.js +0 -28
- package/dist-cjs/components/generated/AvatarMovementInfo.gen.js +0 -28
- package/dist-cjs/components/generated/CameraLayer.gen.js +0 -28
- package/dist-cjs/components/generated/CameraLayers.gen.d.ts +0 -1
- package/dist-cjs/components/generated/CameraLayers.gen.js +0 -28
- package/dist-cjs/components/generated/GlobalLight.gen.d.ts +0 -1
- package/dist-cjs/components/generated/GlobalLight.gen.js +0 -28
- package/dist-cjs/components/generated/GltfNode.gen.d.ts +0 -1
- package/dist-cjs/components/generated/GltfNode.gen.js +0 -28
- package/dist-cjs/components/generated/GltfNodeState.gen.d.ts +0 -1
- package/dist-cjs/components/generated/GltfNodeState.gen.js +0 -28
- package/dist-cjs/components/generated/TextureCamera.gen.d.ts +0 -1
- package/dist-cjs/components/generated/TextureCamera.gen.js +0 -28
- package/dist-cjs/components/generated/UiCanvas.gen.d.ts +0 -1
- package/dist-cjs/components/generated/UiCanvas.gen.js +0 -28
- package/dist-cjs/components/generated/UiScrollResult.gen.d.ts +0 -1
- package/dist-cjs/components/generated/UiScrollResult.gen.js +0 -28
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +0 -29
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +0 -99
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +0 -20
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +0 -75
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +0 -32
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +0 -132
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +0 -30
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +0 -110
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +0 -14
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +0 -56
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +0 -34
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.js +0 -67
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +0 -50
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +0 -47
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +0 -27
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +0 -65
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +0 -74
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +0 -197
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +0 -19
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +0 -66
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +0 -15
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +0 -48
- package/dist-cjs/serialization/crdt/network/utils.d.ts +0 -9
- package/dist-cjs/serialization/crdt/network/utils.js +0 -67
- /package/{dist-cjs/components/generated/AvatarMovementInfo.gen.d.ts → dist/runtime/helpers/vectors.d.ts} +0 -0
- /package/{dist-cjs/components/generated/CameraLayer.gen.d.ts → dist/systems/physics-force.d.ts} +0 -0
- /package/dist-cjs/{components/generated/AvatarLocomotionSettings.gen.d.ts → runtime/helpers/vectors.d.ts} +0 -0
- /package/dist-cjs/{components/generated/AvatarMovement.gen.d.ts → systems/physics-force.d.ts} +0 -0
|
@@ -45,15 +45,14 @@ function createPointerEventsSystem(engine, inputSystem) {
|
|
|
45
45
|
EventType[EventType["Up"] = 2] = "Up";
|
|
46
46
|
EventType[EventType["HoverEnter"] = 3] = "HoverEnter";
|
|
47
47
|
EventType[EventType["HoverLeave"] = 4] = "HoverLeave";
|
|
48
|
-
EventType[EventType["
|
|
49
|
-
EventType[EventType["
|
|
50
|
-
EventType[EventType["DragEnd"] = 7] = "DragEnd";
|
|
48
|
+
EventType[EventType["ProximityEnter"] = 5] = "ProximityEnter";
|
|
49
|
+
EventType[EventType["ProximityLeave"] = 6] = "ProximityLeave";
|
|
51
50
|
})(EventType || (EventType = {}));
|
|
52
51
|
const eventsMap = new Map();
|
|
53
52
|
function getEvent(entity) {
|
|
54
53
|
return eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity);
|
|
55
54
|
}
|
|
56
|
-
function setPointerEvent(entity, type, opts) {
|
|
55
|
+
function setPointerEvent(entity, type, opts, interactionType = 0 /* InteractionType.CURSOR */) {
|
|
57
56
|
const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity);
|
|
58
57
|
pointerEvent.pointerEvents.push({
|
|
59
58
|
eventType: type,
|
|
@@ -63,15 +62,19 @@ function createPointerEventsSystem(engine, inputSystem) {
|
|
|
63
62
|
showHighlight: opts.showHighlight,
|
|
64
63
|
hoverText: opts.hoverText,
|
|
65
64
|
maxDistance: opts.maxDistance,
|
|
66
|
-
maxPlayerDistance: opts.maxPlayerDistance
|
|
67
|
-
|
|
65
|
+
maxPlayerDistance: opts.maxPlayerDistance,
|
|
66
|
+
priority: opts.priority
|
|
67
|
+
},
|
|
68
|
+
interactionType: interactionType ?? 0 /* InteractionType.CURSOR */
|
|
68
69
|
});
|
|
69
70
|
}
|
|
70
|
-
function removePointerEvent(entity, type, button) {
|
|
71
|
+
function removePointerEvent(entity, type, button, interactionType = 0 /* InteractionType.CURSOR */) {
|
|
71
72
|
const pointerEvent = PointerEvents.getMutableOrNull(entity);
|
|
72
73
|
if (!pointerEvent)
|
|
73
74
|
return;
|
|
74
|
-
pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button &&
|
|
75
|
+
pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button &&
|
|
76
|
+
pointer.eventType === type &&
|
|
77
|
+
pointer.interactionType === interactionType));
|
|
75
78
|
}
|
|
76
79
|
function getPointerEvent(eventType) {
|
|
77
80
|
if (eventType === EventType.Up) {
|
|
@@ -83,148 +86,117 @@ function createPointerEventsSystem(engine, inputSystem) {
|
|
|
83
86
|
else if (eventType === EventType.HoverEnter) {
|
|
84
87
|
return 2 /* PointerEventType.PET_HOVER_ENTER */;
|
|
85
88
|
}
|
|
86
|
-
else if (eventType === EventType.
|
|
87
|
-
return
|
|
88
|
-
}
|
|
89
|
-
else if (eventType === EventType.DragLocked) {
|
|
90
|
-
return 6 /* PointerEventType.PET_DRAG_LOCKED */;
|
|
89
|
+
else if (eventType === EventType.ProximityEnter) {
|
|
90
|
+
return 4 /* PointerEventType.PET_PROXIMITY_ENTER */;
|
|
91
91
|
}
|
|
92
|
-
else if (eventType === EventType.
|
|
93
|
-
return
|
|
92
|
+
else if (eventType === EventType.ProximityLeave) {
|
|
93
|
+
return 5 /* PointerEventType.PET_PROXIMITY_LEAVE */;
|
|
94
94
|
}
|
|
95
95
|
return 1 /* PointerEventType.PET_DOWN */;
|
|
96
96
|
}
|
|
97
|
-
function
|
|
98
|
-
if (pet === 0 /* PointerEventType.PET_UP */) {
|
|
99
|
-
return EventType.Up;
|
|
100
|
-
}
|
|
101
|
-
else if (pet === 2 /* PointerEventType.PET_HOVER_ENTER */) {
|
|
102
|
-
return EventType.HoverEnter;
|
|
103
|
-
}
|
|
104
|
-
else if (pet === 3 /* PointerEventType.PET_HOVER_LEAVE */) {
|
|
105
|
-
return EventType.HoverLeave;
|
|
106
|
-
}
|
|
107
|
-
else if (pet === 7 /* PointerEventType.PET_DRAG */) {
|
|
108
|
-
return EventType.Drag;
|
|
109
|
-
}
|
|
110
|
-
else if (pet === 6 /* PointerEventType.PET_DRAG_LOCKED */) {
|
|
111
|
-
return EventType.DragLocked;
|
|
112
|
-
}
|
|
113
|
-
else if (pet === 8 /* PointerEventType.PET_DRAG_END */) {
|
|
114
|
-
return EventType.DragEnd;
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
return EventType.Down;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function removeEvent(entity, type) {
|
|
97
|
+
function removeEvent(entity, type, interactionType = 0 /* InteractionType.CURSOR */) {
|
|
121
98
|
const event = getEvent(entity);
|
|
122
|
-
const
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
for (const button of pointerEventList.keys()) {
|
|
127
|
-
removePointerEvent(entity, getPointerEvent(type), button);
|
|
99
|
+
const pointerEvent = event.get(type);
|
|
100
|
+
if (pointerEvent?.opts.hoverText) {
|
|
101
|
+
removePointerEvent(entity, getPointerEvent(type), pointerEvent.opts.button);
|
|
128
102
|
}
|
|
129
103
|
event.delete(type);
|
|
130
104
|
}
|
|
131
105
|
engine.addSystem(function EventSystem() {
|
|
132
|
-
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
for (const entity of eventsMap.keys()) {
|
|
106
|
+
for (const [entity, event] of eventsMap) {
|
|
136
107
|
if (engine.getEntityState(entity) === entity_1.EntityState.Removed) {
|
|
137
108
|
eventsMap.delete(entity);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
for (const command of inputSystem.getInputCommands()) {
|
|
141
|
-
const entity = command.hit?.entityId;
|
|
142
|
-
if (entity === undefined) {
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
const entityMap = eventsMap.get(entity);
|
|
146
|
-
if (entityMap === undefined) {
|
|
147
109
|
continue;
|
|
148
110
|
}
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
111
|
+
for (const [eventType, { cb, opts }] of event) {
|
|
112
|
+
if (eventType === EventType.Click) {
|
|
113
|
+
const command = inputSystem.getClick(opts.button, entity);
|
|
114
|
+
if (command)
|
|
115
|
+
(0, invariant_1.checkNotThenable)(cb(command.up), 'Click event returned a thenable. Only synchronous functions are allowed');
|
|
154
116
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const data = clickMap.get(command.button);
|
|
165
|
-
if (data && inputSystem.getClick(command.button, entity)) {
|
|
166
|
-
(0, invariant_1.checkNotThenable)(data.cb(command), 'Click event returned a thenable. Only synchronous functions are allowed');
|
|
167
|
-
}
|
|
168
|
-
const anyData = clickMap.get(3 /* InputAction.IA_ANY */);
|
|
169
|
-
if (anyData && inputSystem.getClick(command.button, entity)) {
|
|
170
|
-
(0, invariant_1.checkNotThenable)(anyData.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
|
|
117
|
+
if (eventType === EventType.Down ||
|
|
118
|
+
eventType === EventType.Up ||
|
|
119
|
+
eventType === EventType.HoverEnter ||
|
|
120
|
+
eventType === EventType.HoverLeave ||
|
|
121
|
+
eventType === EventType.ProximityEnter ||
|
|
122
|
+
eventType === EventType.ProximityLeave) {
|
|
123
|
+
const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
|
|
124
|
+
if (command) {
|
|
125
|
+
(0, invariant_1.checkNotThenable)(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
|
|
171
126
|
}
|
|
172
127
|
}
|
|
173
128
|
}
|
|
174
129
|
}
|
|
175
130
|
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
};
|
|
131
|
+
const onPointerDown = (...args) => {
|
|
132
|
+
const [data, cb, maybeOpts] = args;
|
|
133
|
+
if (typeof data === 'number') {
|
|
134
|
+
return onPointerDown({ entity: data, opts: maybeOpts ?? {} }, cb);
|
|
135
|
+
}
|
|
136
|
+
const { entity, opts } = data;
|
|
137
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
138
|
+
removeEvent(entity, EventType.Down);
|
|
139
|
+
getEvent(entity).set(EventType.Down, { cb, opts: options });
|
|
140
|
+
setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
|
|
141
|
+
};
|
|
142
|
+
const onPointerUp = (...args) => {
|
|
143
|
+
const [data, cb, maybeOpts] = args;
|
|
144
|
+
if (typeof data === 'number') {
|
|
145
|
+
return onPointerUp({ entity: data, opts: maybeOpts ?? {} }, cb);
|
|
146
|
+
}
|
|
147
|
+
const { entity, opts } = data;
|
|
148
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
149
|
+
removeEvent(entity, EventType.Up);
|
|
150
|
+
getEvent(entity).set(EventType.Up, { cb, opts: options });
|
|
151
|
+
setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options);
|
|
152
|
+
};
|
|
153
|
+
const onPointerHoverEnter = (...args) => {
|
|
154
|
+
const [data, cb] = args;
|
|
155
|
+
const { entity, opts } = data;
|
|
156
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
157
|
+
removeEvent(entity, EventType.HoverEnter);
|
|
158
|
+
getEvent(entity).set(EventType.HoverEnter, { cb, opts: options });
|
|
159
|
+
setPointerEvent(entity, 2 /* PointerEventType.PET_HOVER_ENTER */, options);
|
|
160
|
+
};
|
|
161
|
+
const onPointerHoverLeave = (...args) => {
|
|
162
|
+
const [data, cb] = args;
|
|
163
|
+
const { entity, opts } = data;
|
|
164
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
165
|
+
removeEvent(entity, EventType.HoverLeave);
|
|
166
|
+
getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
|
|
167
|
+
setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
|
|
168
|
+
};
|
|
169
|
+
const onProximityDown = (...args) => {
|
|
170
|
+
const [data, cb] = args;
|
|
171
|
+
const { entity, opts } = data;
|
|
172
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
173
|
+
removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
|
|
174
|
+
getEvent(entity).set(EventType.Down, { cb, opts: options });
|
|
175
|
+
setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options, 1 /* InteractionType.PROXIMITY */);
|
|
176
|
+
};
|
|
177
|
+
const onProximityUp = (...args) => {
|
|
178
|
+
const [data, cb] = args;
|
|
179
|
+
const { entity, opts } = data;
|
|
180
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
181
|
+
removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
|
|
182
|
+
getEvent(entity).set(EventType.Up, { cb, opts: options });
|
|
183
|
+
setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options, 1 /* InteractionType.PROXIMITY */);
|
|
184
|
+
};
|
|
185
|
+
const onProximityEnter = (...args) => {
|
|
186
|
+
const [data, cb] = args;
|
|
187
|
+
const { entity, opts } = data;
|
|
188
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
189
|
+
removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
|
|
190
|
+
getEvent(entity).set(EventType.ProximityEnter, { cb, opts: options });
|
|
191
|
+
setPointerEvent(entity, 4 /* PointerEventType.PET_PROXIMITY_ENTER */, options, 1 /* InteractionType.PROXIMITY */);
|
|
192
|
+
};
|
|
193
|
+
const onProximityLeave = (...args) => {
|
|
194
|
+
const [data, cb] = args;
|
|
195
|
+
const { entity, opts } = data;
|
|
196
|
+
const options = (0, exports.getDefaultOpts)(opts);
|
|
197
|
+
removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
|
|
198
|
+
getEvent(entity).set(EventType.ProximityLeave, { cb, opts: options });
|
|
199
|
+
setPointerEvent(entity, 5 /* PointerEventType.PET_PROXIMITY_LEAVE */, options, 1 /* InteractionType.PROXIMITY */);
|
|
228
200
|
};
|
|
229
201
|
return {
|
|
230
202
|
removeOnClick(entity) {
|
|
@@ -242,23 +214,35 @@ function createPointerEventsSystem(engine, inputSystem) {
|
|
|
242
214
|
removeOnPointerHoverLeave(entity) {
|
|
243
215
|
removeEvent(entity, EventType.HoverLeave);
|
|
244
216
|
},
|
|
245
|
-
|
|
246
|
-
removeEvent(entity, EventType.
|
|
217
|
+
removeOnProximityDown(entity) {
|
|
218
|
+
removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
|
|
219
|
+
},
|
|
220
|
+
removeOnProximityUp(entity) {
|
|
221
|
+
removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
|
|
247
222
|
},
|
|
248
|
-
|
|
249
|
-
removeEvent(entity, EventType.
|
|
223
|
+
removeOnProximityEnter(entity) {
|
|
224
|
+
removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
|
|
250
225
|
},
|
|
251
|
-
|
|
252
|
-
removeEvent(entity, EventType.
|
|
226
|
+
removeOnProximityLeave(entity) {
|
|
227
|
+
removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
|
|
228
|
+
},
|
|
229
|
+
onClick(value, cb) {
|
|
230
|
+
const { entity } = value;
|
|
231
|
+
const options = (0, exports.getDefaultOpts)(value.opts);
|
|
232
|
+
// Clear previous event with over feedback included
|
|
233
|
+
removeEvent(entity, EventType.Click);
|
|
234
|
+
// Set new event
|
|
235
|
+
getEvent(entity).set(EventType.Click, { cb, opts: options });
|
|
236
|
+
setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
|
|
253
237
|
},
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
238
|
+
onPointerDown,
|
|
239
|
+
onPointerUp,
|
|
240
|
+
onPointerHoverEnter,
|
|
241
|
+
onPointerHoverLeave,
|
|
242
|
+
onProximityDown,
|
|
243
|
+
onProximityUp,
|
|
244
|
+
onProximityEnter,
|
|
245
|
+
onProximityLeave
|
|
262
246
|
};
|
|
263
247
|
}
|
|
264
248
|
exports.createPointerEventsSystem = createPointerEventsSystem;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createPhysicsForceHelper = void 0;
|
|
27
|
+
const components = __importStar(require("../components"));
|
|
28
|
+
const helpers_1 = require("../runtime/helpers");
|
|
29
|
+
const physics_impulse_1 = require("./physics-impulse");
|
|
30
|
+
/** @internal */
|
|
31
|
+
function createPhysicsForceHelper(engine) {
|
|
32
|
+
const PhysicsCombinedForce = components.PhysicsCombinedForce(engine);
|
|
33
|
+
const Transform = components.Transform(engine);
|
|
34
|
+
const timers = (0, helpers_1.createTimers)(engine);
|
|
35
|
+
const durationTimers = new Map();
|
|
36
|
+
// Key = source entity producing the force (not the target); all forces target PlayerEntity.
|
|
37
|
+
const forceSources = new Map();
|
|
38
|
+
const repulsionSources = new Map();
|
|
39
|
+
let lastWrittenForceVector = null;
|
|
40
|
+
function recalcForce() {
|
|
41
|
+
if (forceSources.size === 0) {
|
|
42
|
+
if (PhysicsCombinedForce.has(engine.PlayerEntity)) {
|
|
43
|
+
PhysicsCombinedForce.deleteFrom(engine.PlayerEntity);
|
|
44
|
+
}
|
|
45
|
+
lastWrittenForceVector = null;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const current = PhysicsCombinedForce.getOrNull(engine.PlayerEntity);
|
|
49
|
+
if (current && lastWrittenForceVector && current.vector) {
|
|
50
|
+
if (!helpers_1.Vector3.equals(current.vector, lastWrittenForceVector)) {
|
|
51
|
+
console.error('PBPhysicsCombinedForce was modified externally.', 'Expected:', lastWrittenForceVector, 'Found:', current.vector, '-- overwriting with local state.');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let sum = { x: 0, y: 0, z: 0 };
|
|
55
|
+
for (const v of forceSources.values()) {
|
|
56
|
+
sum = helpers_1.Vector3.add(sum, v);
|
|
57
|
+
}
|
|
58
|
+
PhysicsCombinedForce.createOrReplace(engine.PlayerEntity, { vector: sum });
|
|
59
|
+
lastWrittenForceVector = sum;
|
|
60
|
+
}
|
|
61
|
+
function applyForceToPlayer(source, vector, magnitude) {
|
|
62
|
+
let finalVector;
|
|
63
|
+
if (helpers_1.Vector3.equalsToFloats(vector, 0, 0, 0))
|
|
64
|
+
return;
|
|
65
|
+
if (typeof magnitude === 'number') {
|
|
66
|
+
finalVector = helpers_1.Vector3.scale(helpers_1.Vector3.normalize(vector), magnitude);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
finalVector = vector;
|
|
70
|
+
}
|
|
71
|
+
forceSources.set(source, finalVector);
|
|
72
|
+
recalcForce();
|
|
73
|
+
}
|
|
74
|
+
function removeForceFromPlayer(source) {
|
|
75
|
+
repulsionSources.delete(source);
|
|
76
|
+
const timerId = durationTimers.get(source);
|
|
77
|
+
if (timerId !== undefined) {
|
|
78
|
+
timers.clearTimeout(timerId);
|
|
79
|
+
durationTimers.delete(source);
|
|
80
|
+
}
|
|
81
|
+
if (!forceSources.has(source))
|
|
82
|
+
return;
|
|
83
|
+
forceSources.delete(source);
|
|
84
|
+
recalcForce();
|
|
85
|
+
}
|
|
86
|
+
function scheduleForceDuration(source, seconds) {
|
|
87
|
+
const existing = durationTimers.get(source);
|
|
88
|
+
if (existing !== undefined) {
|
|
89
|
+
timers.clearTimeout(existing);
|
|
90
|
+
}
|
|
91
|
+
const timerId = timers.setTimeout(() => {
|
|
92
|
+
durationTimers.delete(source);
|
|
93
|
+
removeForceFromPlayer(source);
|
|
94
|
+
}, seconds * 1000);
|
|
95
|
+
durationTimers.set(source, timerId);
|
|
96
|
+
}
|
|
97
|
+
function applyForceToPlayerForDuration(source, duration, vector, magnitude) {
|
|
98
|
+
applyForceToPlayer(source, vector, magnitude);
|
|
99
|
+
scheduleForceDuration(source, duration);
|
|
100
|
+
}
|
|
101
|
+
function computeRepulsionVector(fromPosition, magnitude, radius, falloff) {
|
|
102
|
+
const diff = helpers_1.Vector3.subtract(Transform.get(engine.PlayerEntity).position, fromPosition);
|
|
103
|
+
if (helpers_1.Vector3.equalsToFloats(diff, 0, 0, 0))
|
|
104
|
+
return { x: 0, y: magnitude, z: 0 };
|
|
105
|
+
// Fast path: default params — no need to compute distance
|
|
106
|
+
if (radius === Infinity && falloff === physics_impulse_1.KnockbackFalloff.CONSTANT) {
|
|
107
|
+
return helpers_1.Vector3.scale(helpers_1.Vector3.normalize(diff), magnitude);
|
|
108
|
+
}
|
|
109
|
+
const distance = helpers_1.Vector3.length(diff);
|
|
110
|
+
if (distance > radius)
|
|
111
|
+
return null;
|
|
112
|
+
let effectiveMagnitude;
|
|
113
|
+
switch (falloff) {
|
|
114
|
+
case physics_impulse_1.KnockbackFalloff.LINEAR:
|
|
115
|
+
effectiveMagnitude = magnitude * (1 - distance / radius);
|
|
116
|
+
break;
|
|
117
|
+
case physics_impulse_1.KnockbackFalloff.INVERSE_SQUARE:
|
|
118
|
+
effectiveMagnitude = magnitude / (distance * distance + 1);
|
|
119
|
+
break;
|
|
120
|
+
case physics_impulse_1.KnockbackFalloff.CONSTANT:
|
|
121
|
+
default:
|
|
122
|
+
effectiveMagnitude = magnitude;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
if (effectiveMagnitude === 0)
|
|
126
|
+
return null;
|
|
127
|
+
// normalize(diff) * effectiveMagnitude in one step
|
|
128
|
+
return helpers_1.Vector3.scale(diff, effectiveMagnitude / distance);
|
|
129
|
+
}
|
|
130
|
+
function applyRepulsionForceToPlayer(source, fromPosition, magnitude, radius = Infinity, falloff = physics_impulse_1.KnockbackFalloff.CONSTANT) {
|
|
131
|
+
repulsionSources.set(source, { fromPosition, magnitude, radius, falloff });
|
|
132
|
+
const vector = computeRepulsionVector(fromPosition, magnitude, radius, falloff);
|
|
133
|
+
if (vector) {
|
|
134
|
+
forceSources.set(source, vector);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
forceSources.delete(source);
|
|
138
|
+
}
|
|
139
|
+
recalcForce();
|
|
140
|
+
}
|
|
141
|
+
// Background system: recalculate repulsion vectors and clean up stale forces every tick.
|
|
142
|
+
// Stale forces can appear when CRDT sync from another client writes PhysicsCombinedForce
|
|
143
|
+
// externally (entity-1 ambiguity: each client interprets entity 1 as its own player).
|
|
144
|
+
engine.addSystem(() => {
|
|
145
|
+
// Repulsion forces need per-tick direction recalculation as the player moves
|
|
146
|
+
if (repulsionSources.size > 0) {
|
|
147
|
+
for (const [source, { fromPosition, magnitude, radius, falloff }] of repulsionSources) {
|
|
148
|
+
const vector = computeRepulsionVector(fromPosition, magnitude, radius, falloff);
|
|
149
|
+
if (vector) {
|
|
150
|
+
forceSources.set(source, vector);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
forceSources.delete(source);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
recalcForce();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// No local sources — clean up any externally-created component (e.g. from CRDT sync)
|
|
160
|
+
if (forceSources.size === 0 && PhysicsCombinedForce.has(engine.PlayerEntity)) {
|
|
161
|
+
PhysicsCombinedForce.deleteFrom(engine.PlayerEntity);
|
|
162
|
+
lastWrittenForceVector = null;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return { applyForceToPlayer, removeForceFromPlayer, applyForceToPlayerForDuration, applyRepulsionForceToPlayer };
|
|
166
|
+
}
|
|
167
|
+
exports.createPhysicsForceHelper = createPhysicsForceHelper;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @public
|
|
3
|
+
* Falloff mode for knockback force over distance.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum KnockbackFalloff {
|
|
6
|
+
/** Same force at any distance within radius */
|
|
7
|
+
CONSTANT = 0,
|
|
8
|
+
/** Smooth linear decrease to 0 at radius edge: F = magnitude * (1 - distance / radius) */
|
|
9
|
+
LINEAR = 1,
|
|
10
|
+
/** Sharp drop-off, physically realistic: F = magnitude / (distance^2 + 1) */
|
|
11
|
+
INVERSE_SQUARE = 2
|
|
12
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createPhysicsImpulseHelper = exports.KnockbackFalloff = void 0;
|
|
27
|
+
const components = __importStar(require("../components"));
|
|
28
|
+
const helpers_1 = require("../runtime/helpers");
|
|
29
|
+
/**
|
|
30
|
+
* @public
|
|
31
|
+
* Falloff mode for knockback force over distance.
|
|
32
|
+
*/
|
|
33
|
+
var KnockbackFalloff;
|
|
34
|
+
(function (KnockbackFalloff) {
|
|
35
|
+
/** Same force at any distance within radius */
|
|
36
|
+
KnockbackFalloff[KnockbackFalloff["CONSTANT"] = 0] = "CONSTANT";
|
|
37
|
+
/** Smooth linear decrease to 0 at radius edge: F = magnitude * (1 - distance / radius) */
|
|
38
|
+
KnockbackFalloff[KnockbackFalloff["LINEAR"] = 1] = "LINEAR";
|
|
39
|
+
/** Sharp drop-off, physically realistic: F = magnitude / (distance^2 + 1) */
|
|
40
|
+
KnockbackFalloff[KnockbackFalloff["INVERSE_SQUARE"] = 2] = "INVERSE_SQUARE";
|
|
41
|
+
})(KnockbackFalloff = exports.KnockbackFalloff || (exports.KnockbackFalloff = {}));
|
|
42
|
+
/** @internal */
|
|
43
|
+
function createPhysicsImpulseHelper(engine) {
|
|
44
|
+
const PhysicsCombinedImpulse = components.PhysicsCombinedImpulse(engine);
|
|
45
|
+
const Transform = components.Transform(engine);
|
|
46
|
+
const EngineInfo = components.EngineInfo(engine);
|
|
47
|
+
let impulseEventId = 0;
|
|
48
|
+
let lastWrittenEventId = 0;
|
|
49
|
+
let lastWrittenTick = -1;
|
|
50
|
+
function applyImpulseToPlayer(vector, magnitude) {
|
|
51
|
+
let finalVector;
|
|
52
|
+
if (typeof magnitude === 'number') {
|
|
53
|
+
if (helpers_1.Vector3.equalsToFloats(vector, 0, 0, 0))
|
|
54
|
+
return;
|
|
55
|
+
finalVector = helpers_1.Vector3.scale(helpers_1.Vector3.normalize(vector), magnitude);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
if (helpers_1.Vector3.equalsToFloats(vector, 0, 0, 0))
|
|
59
|
+
return;
|
|
60
|
+
finalVector = vector;
|
|
61
|
+
}
|
|
62
|
+
const currentTick = EngineInfo.getOrNull(engine.RootEntity)?.tickNumber ?? 0;
|
|
63
|
+
const existing = PhysicsCombinedImpulse.getOrNull(engine.PlayerEntity);
|
|
64
|
+
if (existing && existing.eventId !== lastWrittenEventId && lastWrittenEventId !== 0) {
|
|
65
|
+
throw new Error('PBPhysicsCombinedImpulse was modified outside Physics helper. ' +
|
|
66
|
+
'Do not mix direct component access with Physics.applyImpulseToPlayer().');
|
|
67
|
+
}
|
|
68
|
+
if (lastWrittenTick === currentTick && existing) {
|
|
69
|
+
finalVector = helpers_1.Vector3.add(existing.vector ?? { x: 0, y: 0, z: 0 }, finalVector);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
lastWrittenEventId = ++impulseEventId;
|
|
73
|
+
}
|
|
74
|
+
lastWrittenTick = currentTick;
|
|
75
|
+
PhysicsCombinedImpulse.createOrReplace(engine.PlayerEntity, {
|
|
76
|
+
vector: finalVector,
|
|
77
|
+
eventId: lastWrittenEventId
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function applyKnockbackToPlayer(fromPosition, magnitude, radius = Infinity, falloff = KnockbackFalloff.CONSTANT) {
|
|
81
|
+
const diff = helpers_1.Vector3.subtract(Transform.get(engine.PlayerEntity).position, fromPosition);
|
|
82
|
+
if (helpers_1.Vector3.equalsToFloats(diff, 0, 0, 0)) {
|
|
83
|
+
applyImpulseToPlayer({ x: 0, y: magnitude, z: 0 });
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Fast path: default params — no need to compute distance
|
|
87
|
+
if (radius === Infinity && falloff === KnockbackFalloff.CONSTANT) {
|
|
88
|
+
applyImpulseToPlayer(helpers_1.Vector3.scale(helpers_1.Vector3.normalize(diff), magnitude));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const distance = helpers_1.Vector3.length(diff);
|
|
92
|
+
if (distance > radius)
|
|
93
|
+
return;
|
|
94
|
+
let effectiveMagnitude;
|
|
95
|
+
switch (falloff) {
|
|
96
|
+
case KnockbackFalloff.LINEAR:
|
|
97
|
+
effectiveMagnitude = magnitude * (1 - distance / radius);
|
|
98
|
+
break;
|
|
99
|
+
case KnockbackFalloff.INVERSE_SQUARE:
|
|
100
|
+
effectiveMagnitude = magnitude / (distance * distance + 1);
|
|
101
|
+
break;
|
|
102
|
+
case KnockbackFalloff.CONSTANT:
|
|
103
|
+
default:
|
|
104
|
+
effectiveMagnitude = magnitude;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
// normalize(diff) * effectiveMagnitude in one step
|
|
108
|
+
applyImpulseToPlayer(helpers_1.Vector3.scale(diff, effectiveMagnitude / distance));
|
|
109
|
+
}
|
|
110
|
+
return { applyImpulseToPlayer, applyKnockbackToPlayer };
|
|
111
|
+
}
|
|
112
|
+
exports.createPhysicsImpulseHelper = createPhysicsImpulseHelper;
|